Библиотека сайта rus-linux.net
Серверы Linux. Часть IX. Протокол IPv6
Оригинал: Introduction to ipv6Автор: Paul Cobbaut
Дата публикации: 24 мая 2015 г.
Перевод: A.Панин
Дата перевода: 15 июля 2015 г.
Глава 21. Знакомство с протоколом IPv6
21.1. Информация о протоколе IPv6
Протокол IPv6
был спроектирован для замены протокола IPv4
. В то время, как протокол IP версии 4
позволяет использовать максимум четыре миллиарда уникальных адресов, протокол IP версии 6
расширяет это количество до четырех миллиардов в четвертой степени
уникальных адресов. Таким образом, протокол IPv6 позволяет использовать более чем 100.000.000.000.000.000.000 адресов на каждом квадратном сантиметре нашей планеты. Этого должно быть достаточно даже в том случае, если отдельный адрес будет выделен для для каждого мобильного телефона, каждой машины для приготовления кофе и каждой пары носков.
Если говорить техническим языком, можно отметить, что протокол IPv6 использует 128-битные адреса (вместо 32-битных адресов, используемых протоколом IPv4). 128-битные адреса представляются с помощью больших чисел
. В случае использования десятичного представления для записи адреса данного типа потребуется до 39 чисел, а в случае использования шестнадцатеричного представления адрес будет выглядеть следующим образом:
fe80:0000:0000:0000:0a00:27ff:fe8e:8aa8
К счастью, протокол IPv6 позволяет нам сократить ведущие нулевые значения. Исходя из этого, приведенный выше адрес будет выглядеть следующим образом:
fe80:0:0:0:a00:27ff:fe8e:8aa8
В том случае, если в 16-битный блок представлен нулевым значением, он может быть записан в формате ::
. Последующие 16-битные нулевые блоки также могут заменяться уже записанной последовательностью символов ::
. Таким образом, наш приведенный выше адрес может быть сокращен до следующего вида:
fe80::a00:27ff:fe8e:8aa8
Данная последовательность символов ::
должна использоваться не более одного раза! Например, следующий адрес не является корректным адресом IPv6:
fe80::20:2e4f::39ac
Адресом IPv6 локального узла
является адрес 0000:0000:0000:0000:0000:0000:0000:0001
, который может быть сокращен до ::1
.
paul@debian5:~/github/lt/images$ /sbin/ifconfig lo | grep inet6 inet6 addr: ::1/128 Scope:Host
21.2. Идентификаторы сети и узла
Одно из немногих сходств между протоколами IPv4 и IPv6 заключается в том, что адреса имеют часть относящуюся к узлу и часть, относящуюся к сети и определяемую маской подсети. При использовании нотации CIDR
последняя выглядит следующим образом:
fe80::a00:27ff:fe8e:8aa8/64
В приведенном выше адресе 64 бита используются в качестве идентификатора узла, что в теории позволяет использовать четыре миллиарда во второй степени различных узлов.
При использовании нотации CIDR адрес локального узла выглядит следующим образом:
::1/128
21.3. Генерация части адреса, относящейся к узлу
Часть автоматически генерируемого адреса IPv6
(stateless address
), которая относится к узлу, включает часть, предназначенную для хранения MAC-адреса узла.
paul@debian5:~$ /sbin/ifconfig | head -3 eth3 Link encap:Ethernet HWaddr 08:00:27:ab:67:30 inet addr:192.168.1.29 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:feab:6730/64 Scope:Link
Некоторые люди предъявляют претензии по поводу безопасности данного подхода...
21.4. Запись адреса IPv4 в рамках адреса IPv6
Некоторые приложения используют адреса IPv4, записанные в рамках адресов IPv6. (Да, в течение некоторого времени будет длиться эра миграции, в ходе которой будут использоваться как адреса IPv4, так и адреса IPv6). Подобный адрес IPv6 выгладит аналогичным образом:
::ffff:192.168.1.42/96
При формировании подобных адресов шестнадцатеричные и десятичные числа смешиваются...
21.5. Адреса link local
При работе с протоколом IPv6
адреса, начинающиеся с fe8.
, могут использоваться лишь в рамках локального сегмента сети (точка заменяется на десятичное число). По этой причине вы можете видеть строку Scope:Link
после адреса в данном примере. Приведенный адрес используется лишь узлами из локального сегмента сети
.
paul@deb503:~$ /sbin/ifconfig | grep inet6 inet6 addr: fe80::a00:27ff:fe8e:8aa8/64 Scope:Link inet6 addr: ::1/128 Scope:Host
Все адреса узлов, которые могут использоваться лишь в рамках локального сегмента сети
(link local
), начинаются с fe8.
.
Каждый Интернет-провайдер, поддерживающий протокол IPv6, получает адрес из описанного диапазона.
21.6. Уникальные локальные адреса
На данный момент признанная устаревшей система адресов внутренних сетей
(site local addresses
) аналогична по своей сути частным диапазонам адресов IPv4 и заменена на глобальную систему уникальных локальных адресов IPv6. Это сделано для предотвращения появления дубликатов адресов при объединении двух сетей в рамках диапазонов адресов внутренних сетей
.
Все уникальные локальные адреса начинаются с fd..
.
21.7. Глобальная система уникальных адресов для одноадресной передачи
Ввиду того, что протокол IPv6
проектировался с учетом поддержки множества IP-адресов для каждого сетевого интерфейса, глобальная система уникальных адресов IPv6
может использоваться вместе с системой адресов link local
.
Эти глобально-уникальные IP-адреса
начинаются с 16-битного значения 2...
или 3...
.
21.8. Механизм 6to4
Механизм 6to4
описан в стандартах RFC 2893 и RFC 3056 как единственный возможный способ передачи пакетов IPv6 через сеть IPv4 без создания специализированного туннеля IPv6.
Данный механизм позволяет закодировать адрес IPv4 с помощью адреса IPv6, который начинается с 2002
. К примеру, адрес 192.168.1.42/24 будет закодирован как:
2002:c0a8:12a:18::1
Вы можете использовать приведенную ниже команду для преобразования любого адреса IPv4 в адрес описанного формата.
paul@ubu1010:~$ printf "2002:%02x%02x:%02x%02x:%04x::1\n" `echo 192.168.1.42/24 \ |tr "./" " "` 2002:c0a8:012a:0018::1
21.9. Интернет-провайдеры
Если вам посчастливится получить адрес IPv6 от вашего интернет-провайдера, он будет начинаться с 2001:
.
21.10. Частные адреса
По аналогии с адресом example.com
в случае сервера DNS, следующие диапазоны адресов IPv6 зарезервированы для примеров и не доступны из сети Интернет.
3fff:ffff::/32 2001:0db8::/32
21.11. Утилита ping6
Используйте утилиту ping6
для тестирования работоспособности соединения, которое установлено между узлами, поддерживающими протокол IPv6. Вам придется указать интерфейс (таблица маршрутизации не используется для 'произвольным образом' сгенерированных адресов IPv6 сегмента локальной сети).
[root@fedora14 ~]# ping6 -I eth0 fe80::a00:27ff:fecd:7ffc PING fe80::a00:27ff:fecd:7ffc(fe80::a00:27ff:fecd:7ffc) from fe80::a00:27ff:fe3c:4346 eth0: 56 data bytes 64 bytes from fe80::a00:27ff:fecd:7ffc: icmp_seq=1 ttl=64 time=0.586 ms 64 bytes from fe80::a00:27ff:fecd:7ffc: icmp_seq=2 ttl=64 time=3.95 ms 64 bytes from fe80::a00:27ff:fecd:7ffc: icmp_seq=3 ttl=64 time=1.53 ms
В примере ниже утилита ping6 работает в широковещательном режиме и принимает ответы от трех поддерживающих протокол IPv6 узлов из одной и той же сети.
[root@fedora14 ~]# ping6 -I eth0 ff02::1 PING ff02::1(ff02::1) from fe80::a00:27ff:fe3c:4346 eth0: 56 data bytes 64 bytes from fe80::a00:27ff:fe3c:4346: icmp_seq=1 ttl=64 time=0.598 ms 64 bytes from fe80::a00:27ff:fecd:7ffc: icmp_seq=1 ttl=64 time=1.87 ms (DUP!) 64 bytes from fe80::8e7b:9dff:fed6:dff2: icmp_seq=1 ttl=64 time=535 ms (DUP!) 64 bytes from fe80::a00:27ff:fe3c:4346: icmp_seq=2 ttl=64 time=0.106 ms 64 bytes from fe80::8e7b:9dff:fed6:dff2: icmp_seq=2 ttl=64 time=1.79 ms (DUP!) 64 bytes from fe80::a00:27ff:fecd:7ffc: icmp_seq=2 ttl=64 time=2.48 ms (DUP!)
21.12. Использование протокола IPv6 в Бельгии
Большой объем информации об использовании протокола IPv6 в Бельгии приведен на веб-сайте www.ipv6council.be.
Такие веб-сайты, как ipv6.belgium.be, www.bipt.be и www.bricozone.be уже поддерживают протокол IPv6. Также данный протокол поддерживается сайтами некоторых университетов: fundp.ac.be (Namur) и ulg.ac.be (Liege).
21.13. Другие веб-сайты
Другими полезными для тестирования протокола IPv6 веб-сайтами являются веб-сайты:
При переходе по адресу ipv6-test.com веб-сайт определит, используется ли вами корректный доступный адрес IPv6.
При переходе по адресу test-ipv6.com веб-сайт также займется определением того, используется ли вами корректный доступный адрес IPv6.
21.14. Шлюзы, использующие механизм 6to4
Для получения доступа к веб-сайтам, работающим исключительно по протоколу IPv4, в случае использования протокола IPv6 вы можете задействовать ресурс sixxs.net (а точнее, http://www.sixxs.net/tools) в качестве шлюза.
К примеру, вы можете использовать адрес http://www.slashdot.org.sixxs.org/ вместо http://slashdot.org.
21.15. Утилита ping6 и DNS
Ниже приведен снимок окна сниффера, который был использован для перехвата трафика утилиты ping6
, работающей с соединением, на уровне которого задействован механизм 6to4.
21.16. Протокол IPv6 и стек протоколов TCP/IP
Ниже приведен снимок окна сниффера, который был использован для перехвата трафика, сгенерированного в процессе осуществления рукопожатия протокола TCP и установления соединения по протоколу HTTP с использованием протокола IPv6.
21.17. Протокол IPv6 и ресурсная запись PTR
Как было сказано в разделе, посвященном серверу DNS, ресурсные записи PTR домена ip6.net содержат дочерние домены, разделенные на 32 уровня.
21.18. Настройка механизма 6to4 в Linux
Ниже приведена последовательность команд, позволяющая настроить механизм 6to4 в системе Linux.
Благодарю авторов руководств http://www.anyweb.co.nz/tutorial/v6Linux6to4, http://mirrors.bieringer.de/Linux+IPv6-HOWTO/ и материалов ресурса tldp.org!
root@mac:~# ifconfig eth0 Link encap:Ethernet HWaddr 00:26:bb:5d:2e:52 inet addr:81.165.101.125 Bcast:255.255.255.255 Mask:255.255.248.0 inet6 addr: fe80::226:bbff:fe5d:2e52/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:5926044 errors:0 dropped:0 overruns:0 frame:0 TX packets:2985892 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:4274849823 (4.2 GB) TX bytes:237002019 (237.0 MB) Interrupt:43 Base address:0x8000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:598 errors:0 dropped:0 overruns:0 frame:0 TX packets:598 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:61737 (61.7 KB) TX bytes:61737 (61.7 KB) root@mac:~# sysctl -w net.ipv6.conf.default.forwarding=1 net.ipv6.conf.default.forwarding = 1 root@mac:~# ip tunnel add tun6to4 mode sit remote any local 81.165.101.125 root@mac:~# ip link set dev tun6to4 mtu 1472 up root@mac:~# ip link show dev tun6to4 10: tun6to4: <NOARP,UP,LOWER_UP> mtu 1472 qdisc noqueue state UNKNOWN link/sit 81.165.101.125 brd 0.0.0.0 root@mac:~# ip -6 addr add dev tun6to4 2002:51a5:657d:0::1/64 root@mac:~# ip -6 addr add dev eth0 2002:51a5:657d:1::1/64 root@mac:~# ip -6 addr add dev eth0 fdcb:43c1:9c18:1::1/64 root@mac:~# ifconfig eth0 Link encap:Ethernet HWaddr 00:26:bb:5d:2e:52 inet addr:81.165.101.125 Bcast:255.255.255.255 Mask:255.255.248.0 inet6 addr: fe80::226:bbff:fe5d:2e52/64 Scope:Link inet6 addr: fdcb:43c1:9c18:1::1/64 Scope:Global inet6 addr: 2002:51a5:657d:1::1/64 Scope:Global UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:5927436 errors:0 dropped:0 overruns:0 frame:0 TX packets:2986025 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:4274948430 (4.2 GB) TX bytes:237014619 (237.0 MB) Interrupt:43 Base address:0x8000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:598 errors:0 dropped:0 overruns:0 frame:0 TX packets:598 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:61737 (61.7 KB) TX bytes:61737 (61.7 KB) tun6to4 Link encap:IPv6-in-IPv4 inet6 addr: ::81.165.101.125/128 Scope:Compat inet6 addr: 2002:51a5:657d::1/64 Scope:Global UP RUNNING NOARP MTU:1472 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) root@mac:~# ip -6 route add 2002::/16 dev tun6to4 root@mac:~# ip -6 route add ::/0 via ::192.88.99.1 dev tun6to4 metric 1 root@mac:~# ip -6 route show ::/96 via :: dev tun6to4 metric 256 mtu 1472 advmss 1412 hoplimit 0 2002:51a5:657d::/64 dev tun6to4 proto kernel metric 256 mtu 1472 advmss 1412 hoplimit 0 2002:51a5:657d:1::/64 dev eth0 proto kernel metric 256 mtu 1500 advmss 1440 hoplimit 0 2002::/16 dev tun6to4 metric 1024 mtu 1472 advmss 1412 hoplimit 0 fdcb:43c1:9c18:1::/64 dev eth0 proto kernel metric 256 mtu 1500 advmss 1440 hoplimit 0 fe80::/64 dev eth0 proto kernel metric 256 mtu 1500 advmss 1440 hoplimit 0 fe80::/64 dev tun6to4 proto kernel metric 256 mtu 1472 advmss 1412 hoplimit 0 default via ::192.88.99.1 dev tun6to4 metric 1 mtu 1472 advmss 1412 hoplimit 0 root@mac:~# ping6 ipv6-test.com PING ipv6-test.com(ipv6-test.com) 56 data bytes 64 bytes from ipv6-test.com: icmp_seq=1 ttl=57 time=42.4 ms 64 bytes from ipv6-test.com: icmp_seq=2 ttl=57 time=43.0 ms 64 bytes from ipv6-test.com: icmp_seq=3 ttl=57 time=43.5 ms 64 bytes from ipv6-test.com: icmp_seq=4 ttl=57 time=43.9 ms 64 bytes from ipv6-test.com: icmp_seq=5 ttl=57 time=45.6 ms ^C --- ipv6-test.com ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4006ms rtt min/avg/max/mdev = 42.485/43.717/45.632/1.091 ms
Предыдущий раздел: | Оглавление | Следующий раздел: |
Глава 20. Система контроля версий git | Приложение A. Клонирование файловой системы сервера |