Наши партнеры

UnixForum





Библиотека сайта 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 веб-сайтами являются веб-сайты:

test-ipv6.com

ipv6-test.com

При переходе по адресу 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.

Утилита ping6 и DNS

21.16. Протокол IPv6 и стек протоколов TCP/IP

Ниже приведен снимок окна сниффера, который был использован для перехвата трафика, сгенерированного в процессе осуществления рукопожатия протокола TCP и установления соединения по протоколу HTTP с использованием протокола IPv6.

Протокол IPv6 и стек протоколов TCP/IP

21.17. Протокол IPv6 и ресурсная запись PTR

Как было сказано в разделе, посвященном серверу DNS, ресурсные записи PTR домена ip6.net содержат дочерние домены, разделенные на 32 уровня.

Протокол IPv6 и ресурсная запись PTR

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. Клонирование файловой системы сервера