Очевидно, что переход на Internet-протокол нового поколения IPv6 сопряжен с различными проблемами. И такой переход не может произойти в один день и даже в один год. Естественно предположить, что потребуется некоторый переходный период, сроки которого в настоящее время определить наверное невозможно. Кроме того, весь мир Internet работает по "старому" протоколу IPv4, и опутан огромным количеством приложений, которых в основном вполне удовлетворяет IPv4. Поэтому введение IPv6 будет постепенным и потребует некоторые механизмы взаимодействия узлов и сетей, поддерживающих новый IPv6 протокол (которых вначале будет немного) и существующим миром IPv4. В дальнейшем, по мере доминирования IPv6 в Internet (если такое доминирование в конечном итоге произойдет), с большой вероятностью остануться узлы и сети, реализующие только IPv4 протокол и по каким-либо причинам не в состоянии поддерживать IPv6. В этом случае потребуются механизмы для взаимодествия остатков IPv4 c IPv6 миром. Разработкой таких инструментов и механизмов перехода занимается рабочая группа организации IETF Next Generation Transition (http://www.ietf.org/html.charters/ngtrans-charter.html). Этой рабочей группой разработано несколько механизмов, предназначенных для различных сценариев введения IPv6 в Internet. Руководство для введения IPv6 в IPv4 сети, а также краткое описание инструментов и механизмов перехода на IPv6 изложены в Internet-Draft "An overview of the Introduction of IPv6 in the Internet" ( draft-ietf-ngtrans-introduction-to-ipv6-transition-07.txt).
При вводе IPv6 в Internet появляются две основные проблемы. Первая связана с обеспечением взаимодествия по IPv6 между двумя или большим числом островков IPv6, изолированных в мире IPv4. Вторая проблема связана с взаимодействием между существующим IPv4 миром и новым миром IPv6. Одним из механизмов, решаюших проблему взаимодействия IPv6 узлов с IPv4 узлами является механизм бесконтекстной трансляции заголовков IP/ICMP протоколов SIIT (Stateless IP/ICMP Translation Algorithm)(RFC2765). Протокол SIIT предназначен для взаимодействия узлов, которые могут работать только по IPv6 протоколу (IPv6-only), с узлами существующей IPv4 сети Internet.
IPv6-only узел - это узел, который имеет IPv4 реализацию (кроме IPv6), но не назначает IPv4 адресов, либо хост вообще не имеющий IPv4 реализации и осуществляющий сетевое взаимодействие только по протоколу IPv6. Соответственно, IPv6-only сеть - это сеть, узлы которой работают только по протоколу IPv6 и не поддерживают IPv4 маршрутизацию.
Документ [RFC2765] "Stateless IP/ICMP Translation Algorithm" описывают только сам алгоритм трансляции и не рассмотривает другой необходимый компонент для обеспечения взаимодействия IPv6-only узлов с IPv4-only узлами. Это механизм получения и назначения IPv6-only узлами временных IPv4 адресов. Такие временный IPv4 адреса будут использоваться IPv6-only узлами в виде IPv4-translated IPv6 адресов в качестве адреса источника при посылке пакетов IPv4-only узлам. Адрес IPv4-only узла (адрес назначения), в таких пакетах, будет представляться в виде IPv4-mapped IPv6 адреса. Такие пакеты должны будут направляться на бесконтекстной IP/ICMP транслятор, который будет траслировать заголовоки IPv6 в заголовоки IPv4 и преобразовывать IPv4-mapped IPv6 адреса и IPv4-translated IPv6 адреса в IPv4 адреса. При получении пакетов от IPv4 узлов с адресом назначения, который является временно назначенным IPv4 адресом IPv6-only узлу, траслятор будет транслировать заголовоки IPv4 в заголовоки IPv6 и преобразовывать IPv4 адрес назначения в IPv4-translated IPv6 адрес, а IPv4 адрес источника в IPv4-mapped IPv6 адрес в заголовке IPv6 транслированного пакета.
IPv4-mapped IPv6 адрес представляется в форме 0::ffff:a.b.c.d (где a.b.c.d - это IPv4 адрес) и используется в IPv6 пакете для указания на то, что удаленная сторона является IPv4 узлом. IPv4-translated IPv6 адрес представляется в форме 0::ffff:0:a.b.c.d (где a.b.c.d - это IPv4 адрес) и используется для идентификации IPv6 узла.
Кроме того, использование IPv4-mapped и IPv4-translated IPv6 адресов позволяют избежать пересчет контрольной суммы псевдо-заголовка в TCP и UDP пакетах, с одним исключением - нефрагментированые UDP пакеты, у которых контрольная сумма отсутствует (в IPv4 для UDP контрольная сумма необязательна). Так же, необходимо считать pseudo-header checksum для ICMPv6, в ICMPv4 контрольная сумма отсутствует. И в ICMP error сообщениях необходимо модифицировать включенные в них IP заголовки, так чтобы получатель мог понимать включенный IP заголовок.
Все операции транслятора выполняются независимо над каждым пакетом, не учитывая никаких состояний одного пакета в зависимости от другого. Что позволяет иметь одно и тоже TCP соединеие, пакеты которого могут проходить через два и более независимых транслятора (без какого-либо взаимодействия этих трансляторов).
Транслятор НЕ ТРАНСЛИРУЕТ:
- какие-либо IPv4 опции (any IPv4 options),
- IPv6 routing headers,
- IPv6 hop-by-hop extension headers,
- IPv6 destination options headers,
- ESP и AH headers,
- фрагментированные IPv4 UDP пакеты, не имеющие UDP контрольной суммы,
- пакеты с IPv4 multicast адресами
(IPv4 multicast адреса не могут быть оттображены в IPv6 multicast).
С детальным описанием алгоритма бесконтекстной трансляции SIIT можно ознакомиться в [RFC2765] и статье В.З.Шнитмана и А.А.Ломака "Обеспечение совместимости протоколов IPv4 и IPv6: бесконтекстный IP/ICMP транслятор в среде Linux".
В 1999 году по гранту РФФИ 99-90220 нашей группой был реализован бесконтекстной транслятор SIIT для операционной системы Linux. Так как на тот момент еще не было окончательного стандарта для SIIT, работа была произведена по Internet-Draft "Stateless IP/ICMP Translation Algorithm (SIIT)" (draft-ietf-ngtrans-siit-08.txt). Кроме того, еще не было достаточно стабильной реализации IPv6 стека в ядре Linux и поддержка этой реализации оставляла желать лучшего. С течением времени ситуация изменилась. В феврале 2000 года вышел стандарт на SIIT [RFC2765], а так же появился проект USAGI (http://www.linux-ipv6.org), целью которого является реализация и поддержка IPv6 стека для ОС Linux для ядра версий 2.2.х и 2.4.х. Естественно, появилась необходимость исправить "старую" реализацию SIIT для Linux. Учитавая большое количество изменений, которые необходимо было внести в существующий код, мы решели переписать реализацию транслятора заново. Мы тестировали нашу реализацию на Debian Linux 2.2 с версией ядра 2.2.20 (usagi-20011112-linux22).
Как транслятор встраивается в ядро Linux?
Транслятор выполнен в виде сетевого модуля ядра. Это позволяет избежать выполнение различнах действий над приходящими пакетами непосредственно в трансляторе (например, проверка котрольных сумм), так как такую работу будут выполняют стеки IPv4/IPv6. После загрузки модуля в ядро транслятор выглядит как обычный Ethernet интерфейс с именем siit0. И над ним можно выполнять все операции, доступные для обычных сетвых интерфейсов. Узел, на котором выполняется транслятор, должен быть пограничным маршрутизатором между IPv6-only сетью и IPv4 внешним миром, т.е. он должен иметь как минимум два раельных сетевых интерфейсов, к одному из которых подключена IPv6-only сеть, а к другому IPv4. Рис.1 поясняет местоположение транслятора в ядре операционной системы.
В таком варианте исполнения код транслятора будет выполнять только операции связанные непосредственно с трансляцией, полагаясь в остальном на IP стек ядра. Чтобы заставить транслятор работь по схеме представленной на рис.1 необходимо, используя стандартные средства механизма маршрутизации и специальные адреса (использующиеся для трансляции) направлять на интерфейс транслятора:
* все IPv6 пакеты с IPv4-mapped IPv6 адресами назначения (пришедшие
с интерфейса IPv6-only сети) (такие IPv6 пакеты будут преобразовываться в
IPv4 пакеты);
* все IPv4 пакеты, предназначенные для временно назначенных IPv4 адресов
IPv6-only узлов (расположенных в IPv6-only сети) (такие IPv4 пакеты будут
преобразовываться в IPv6 пакеты).
Для этого необходимо добавить соответствующие записи в таблицу маршрутизации и присвоить нужные адреса интерфейсу транслятора и интерфейсу IPv6-only сети.
Таким образом пакет, пришедший из IPv4 сети, будет попадать в IP стек (IPv4) и стандартно на нем обрабатываться. Если этот пакет предназначен для адреса из пула временных IPv4 адресов IPv6-only узлов, то такой пакет будет направляться в интерфейс транслятора и преобразовываться на нем в IPv6 пакет. Этот IPv6 пакет затем будет передан транслятором обратно в IP стек (но уже IPv6), который направит его в соответствующий сетевой интерфейс. Пришедший из IPv6 сети пакет, также попадет в IP стек (IPv6), и, если адрес назначения является IPv4-mapped IPv6 адрес, данный пакет будет отправлен на интерфейс транслятора и будет преобразован в IPv4 пакет. И этот пакет снова вернется в IP стек (IPv4) и далее будет направлен в нужный интерфейс для отправки.
Теперь попытаемся пояснить вышесказанное на реальном примере нашего рабочего лабораторного стенда. На рис.2 показана схема этого стенда.
Узел, на котором выполняется транслятор, является маршрутизатором и имеет три
сетевых интерфейса (помимо loopback интерфейса):
* eth0 - для подключения IPv4 сети,
* eth1 - для подключения IPv6-only сети,
* siit0 - непосредственно SIIT транслятор.
Для временных IPv4 адресов IPv6-only узлов выделена подсеть 194.186.94.8/29 (маска 255.255.255.248). Адреса назначаются вручную, поэтому за каждым IPv6-only узлом закрепляется фиксированный IPv4 адрес. Этот адрес представляется в виде IPv4-translated IPv6 адреса и назначается сетевому интерфейсу. Как можно увидеть на рис.2 IPv6-only узел имеет IPv4-translated IPv6 адрес ::ffff:0:c2ba:5e0a/96, последнии 32 бита содержат IPv4 адрес 194.186.94.10. На узле с транслятором сетевому интерфейсу IPv6 eth1 также назначается фиксированный IPv4-translated IPv6 адрес ::ffff:0:c2ba:5e09/96 (194.186.94.9), а интерфейсу транслятора siit0 назначается реальный IPv4 адрес 194.186.94.9/29. Кроме того добавляются необходимые записи в таблицу маршрутизации, как показано на рис.2. На IPv6-only узлах необходима запись в таблице маршрутизации для направления на узел с транслятором пакетов с IPv4-mapped адресами назначения, а на IPv4 узлах необходима запись для направления на узел с транслятором пакетов c адресами назначения из диапазона 194.186.94.8/29.
Таким образом, приходящии на eth0 IPv4 пакеты с адресом назначения из диапазона 194.186.94.8/29 будут напрвляться на siit0, на нем транслироваться, и далее направляться на eth1, так как адресом назначения отранслированного IPv6 пакета будет являться IPv4-translated IPv6 адрес, а все пакеты с префиксом ::ffff:0:0:0/96 должен доставлять интерфейс eth1 (как видно из таблицы маршрутизации на рис.2). А приходящии на eth1 IPv6 пакеты, у которых адрес назначения имеет префис ::ffff:0:0/96 (IPv4-mapped), будут также напрвляться на интерфейс siit0, преобразовываться на нем в IPv4 пакет и переправляться на eth0 для отправки.
# Проблема 1 #
В вышеописанной конфигурации мы сталкнулись с проблемой использования IPv4-mapped
IPv6 адресов в IPv6 пакетах. Дело в том, что не все операционные системы корректно обрабатывают
IPv6 пакеты с IPv4-mapped IPv6 адресами. Например, реализация IPv6 для BSD систем
KAME просто отбрасывает такие
IPv6 пакеты, что отмечено в описании реализации (файл IMPLEMENTATION дистрибутива
KAME.
Более детально с описанием проблемы можно ознакомиться в следующих документах:
* v6test/conf/transition-abuse.conf (included in kame kit);
* http://playground.iijlab.net/i-d/draft-itojun-ipv6-transition-abuse-01.txt.
Поэтому вместо IPv4-mapped IPv6 адресов мы используем новый префикс
::ffff:ffff:0:0/96. Т.е. там, где по спецификации SIIT должны использоваться
IPv4-mapped IPv6 адреса, мы используем этот префикс. В остальном логика работы
транслятора не изменяется. В нашем примере необходимо заменить записи в
таблице маршрутизации для IPv4-mapped префикса (::ffff:0:0/96) на префикс
::ffff:ffff:0:0/96 на узле с транслятором и на всех IPv6-only узлах.
И, естественно, указать транслятору на замену префикса.
Настройка стенда
Итак, перейдем к конфигурации узлов стенда:
* Узел с транслятором: Имя: crow, ОС: Debian Linux 2.2, Версия ядра: 2.2.20 (usagi-20011112-linux22) * IPv6-only узел: Имя: findus, ОС: FreeBSD 4.4-RELEASE Версия ядра: kame-20011122 (from cvs repository) * IPv4 узел: Имя: rabbit, ОС: FreeBSD 4.4-RELEASE Версия ядра: kame-20011122 (from cvs repository)Начнем с узла, где будет работать транслятор. Первым делом разрешаем на нем прохождение IPv4 и IPv6 пакетов (ip forwarding):
[grn@crow siit]$ sysctl -w net/ipv4/conf/all/forwarding=1 net/ipv4/conf/all/forwarding = 1 [grn@crow siit]$ sysctl -w net/ipv6/conf/all/forwarding=1 net/ipv6/conf/all/forwarding = 1
Далее загружаем модуль транслятора в ядро командой:
[grn@crow siit]$ insmod siit.oи присваиваем адреса интерфесам:
[grn@crow siit]$ ifconfig eth1 add ::ffff:0:c2ba:5e09/96 [grn@crow siit]$ ifconfig siit0 inet 194.186.94.9 netmask 255.255.255.248а так же добавляем запись в таблицу маршрутизации:
[grn@crow siit]$ route add -A inet6 ::ffff:ffff:0:0/96 dev siit0
Теперь можно посмотреть результат. Ниже приведен вывод команды ifconfig и netstat -rn :
[grn@crow siit]$ ifconfig
eth0 Link encap:Ethernet HWaddr 00:D0:B7:0C:42:42
inet addr:194.67.37.213 Bcast:194.67.37.255 Mask:255.255.255.0
inet6 addr: fe80::2d0:b7ff:fe0c:4242/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:309039 errors:0 dropped:0 overruns:0 frame:0
TX packets:1946 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
Interrupt:9 Base address:0x2000
eth1 Link encap:Ethernet HWaddr 00:20:AF:38:DA:2F
inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::220:afff:fe38:da2f/64 Scope:Link
inet6 addr: ::ffff:0:c2ba:5e09/96 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:9 errors:0 dropped:0 overruns:0 frame:0
TX packets:11 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
Interrupt:5 Base address:0x320
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:3924 Metric:1
RX packets:6 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
siit0 Link encap:Ethernet HWaddr 00:53:49:49:54:30
inet addr:194.186.94.9 Bcast:194.186.94.255 Mask:255.255.255.248
inet6 addr: fe80::253:49ff:fe49:5430/64 Scope:Link
UP BROADCAST RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:1 errors:0 dropped:1 overruns:0 carrier:0
collisions:0 txqueuelen:100
[grn@crow siit]$ netstat -rnA inet
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
194.186.94.8 0.0.0.0 255.255.255.248 U 0 0 0 siit0
194.67.37.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 194.67.37.193 0.0.0.0 UG 0 0 0 eth0
[grn@crow siit]$ netstat -rnA inet6
Kernel IPv6 routing table
Destination Next Hop Flags Metric Ref Use Iface
::1/128 :: U 0 0 0 lo
::ffff:0:c2ba:5e09/128 :: U 0 0 0 lo
::ffff:0:0:0/96 :: UA 256 0 0 eth1
::ffff:ffff:0:0/96 :: U 1 0 0 siit0
fe80::220:afff:fe38:da2f/128 :: U 0 0 0 lo
fe80::253:49ff:fe49:5430/128 :: U 0 0 0 lo
fe80::2d0:b7ff:fe0c:4242/128 :: U 0 0 0 lo
fe80::/64 :: UA 256 0 0 eth0
fe80::/64 :: UA 256 0 0 eth1
fe80::/64 :: UA 256 0 0 siit0
ff00::/8 :: UA 256 0 0 eth0
ff00::/8 :: UA 256 0 0 eth1
ff00::/8 :: UA 256 0 0 siit0
::/0 :: UDA 256 0 0 eth0
::/0 :: UDA 256 0 0 eth1
::/0 :: UDA 256 0 0 siit0
На IPv6-only узеле нужно присвоить IPv4-translated IPv6 адрес сетевому интерфейсу:
[grn@findus grn]$ ifconfig fxp0 inet6 ::ffff:0:c2ba:5e0a prefixlen 96 [grn@findus grn]$ ifconfig fxp0: flags=8843и добавить запись в таблицу маршрутизации:mtu 1500 inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255 inet6 fe80::260:94ff:fe23:f5bd prefixlen 64 scopeid 0x1 inet6 ::ffff:0:c2ba:5e0a prefixlen 96 ether 00:60:94:23:f5:bd media: Ethernet autoselect (10baseT/UTP) status: active lo0: flags=8049 mtu 16384 inet6 ::1 prefixlen 128 inet6 fe80::1 prefixlen 64 scopeid 0x2 inet 127.0.0.1 netmask 0xff000000
[grn@findus grn]$ sudo route add -inet6 ::ffff:ffff:0:0 -prefixlen 96 ::ffff:0:c2ba:5e09 add net ::ffff:ffff:0:0: gateway ::ffff:0:c2ba:5e09 [grn@findus grn]$ netstat -rnf inet6 Routing tables Internet6: Destination Gateway Flags Netif Expire ::/96 ::1 UGRSc lo0 ::1 ::1 UH lo0 ::ffff:0.0.0.0/96 ::1 UGRSc lo0 ::ffff:0:0:0/96 link#1 UC fxp0 ::ffff:0:c2ba:5e09 link#1 UHLW fxp0 ::ffff:0:c2ba:5e0a 0:60:94:23:f5:bd UHL lo0 ::ffff:ffff:0:0/96 ::ffff:0:c2ba:5e09 UGSc fxp0 fe80::/10 ::1 UGRSc lo0 fe80::%fxp0/64 link#1 UC fxp0 fe80::260:94ff:fe23:f5bd%fxp0 0:60:94:23:f5:bd UHL lo0 fe80::%lo0/64 fe80::1%lo0 Uc lo0 fe80::1%lo0 link#2 UHL lo0 ff01::%fxp0/32 link#1 UC fxp0 ff01::%lo0/32 ::1 UC lo0 ff02::/16 ::1 UGRS lo0 ff02::%fxp0/32 link#1 UC fxp0 ff02::%lo0/32 ::1 UC lo0На IPv4 узеле нужно добавить запись в таблицу маршрутизации:
[grn@rabbit grn]$ route add 194.186.94.8 -netmask 255.255.255.248 194.67.37.213 [grn@rabbit grn]$ netstat -rnf inet Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire default 194.67.37.193 UGSc 4 11 fxp0 127.0.0.1 127.0.0.1 UH 1 4497 lo0 194.67.37 link#1 UC 11 0 fxp0 194.186.94.8/29 194.67.37.213 UGSc 1 198 fxp0# Проблема 2 #
[grn@findus grn]$ ndp -s ::ffff:0:c2ba:5e09 0:20:af:38:da:2f [grn@findus grn]$ ndp -a Neighbor Linklayer Address Netif Expire S Flgs ::ffff:0:c2ba:5e09 0:20:af:38:da:2f fxp0 permanent R ::ffff:0:c2ba:5e0a 0:60:94:23:f5:bd fxp0 permanent R fe80::260:94ff:fe23:f5bd%fxp0 0:60:94:23:f5:bd fxp0 permanent RКроме того в USAGI команда ndp работает только на просмотр, добавление на данный момент не реализовано.
Проверим работу стенда самым простым способом, используя стандартные команды ping, ping6, telnet, ftp . И посмотрим прохождение пакетов через интерфес транслятора siit0 командой tcpdump .
1) ping: rabbit (194.67.37.215) -> findus (194.186.94.10)
[grn@rabbit public_html]$ ping 194.186.94.10 PING 194.186.94.10 (194.186.94.10): 56 data bytes 64 bytes from 194.186.94.10: icmp_seq=0 ttl=62 time=1.473 ms 64 bytes from 194.186.94.10: icmp_seq=1 ttl=62 time=1.224 ms 64 bytes from 194.186.94.10: icmp_seq=2 ttl=62 time=1.220 ms 64 bytes from 194.186.94.10: icmp_seq=3 ttl=62 time=1.206 ms 64 bytes from 194.186.94.10: icmp_seq=4 ttl=62 time=1.221 ms ^C --- 194.186.94.10 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max/stddev = 1.206/1.269/1.473/0.102 ms [grn@crow siit]$ sudo tcpdump -n -i siit0 tcpdump: listening on siit0 14:40:56.626646 194.67.37.215 > 194.186.94.10: icmp: echo request 14:40:56.626691 ::ffff:ffff:c243:25d7 > ::ffff:0:c2ba:5e0a: frag (0|64) icmp6: echo request 14:40:56.627556 ::ffff:0:c2ba:5e0a > ::ffff:ffff:c243:25d7: icmp6: echo reply 14:40:56.627582 194.186.94.10 > 194.67.37.215: icmp: echo reply 14:40:57.634563 194.67.37.215 > 194.186.94.10: icmp: echo request 14:40:57.634606 ::ffff:ffff:c243:25d7 > ::ffff:0:c2ba:5e0a: frag (0|64) icmp6: echo request 14:40:57.635298 ::ffff:0:c2ba:5e0a > ::ffff:ffff:c243:25d7: icmp6: echo reply 14:40:57.635326 194.186.94.10 > 194.67.37.215: icmp: echo reply 14:40:58.644740 194.67.37.215 > 194.186.94.10: icmp: echo request 14:40:58.644785 ::ffff:ffff:c243:25d7 > ::ffff:0:c2ba:5e0a: frag (0|64) icmp6: echo request 14:40:58.645476 ::ffff:0:c2ba:5e0a > ::ffff:ffff:c243:25d7: icmp6: echo reply 14:40:58.645502 194.186.94.10 > 194.67.37.215: icmp: echo reply 14:40:59.654916 194.67.37.215 > 194.186.94.10: icmp: echo request 14:40:59.654958 ::ffff:ffff:c243:25d7 > ::ffff:0:c2ba:5e0a: frag (0|64) icmp6: echo request 14:40:59.655645 ::ffff:0:c2ba:5e0a > ::ffff:ffff:c243:25d7: icmp6: echo reply 14:40:59.655672 194.186.94.10 > 194.67.37.215: icmp: echo reply 14:41:00.665100 194.67.37.215 > 194.186.94.10: icmp: echo request 14:41:00.665143 ::ffff:ffff:c243:25d7 > ::ffff:0:c2ba:5e0a: frag (0|64) icmp6: echo request 14:41:00.665831 ::ffff:0:c2ba:5e0a > ::ffff:ffff:c243:25d7: icmp6: echo reply 14:41:00.665874 194.186.94.10 > 194.67.37.215: icmp: echo reply2) ping6: findus (::ffff:0:c2ba:5e0a) -> rabbit (::ffff:ffff:c243:25d7)
[grn@findus grn]$ ping6 ::ffff:ffff:c243:25d7 PING6(56=40+8+8 bytes) ::ffff:0:c2ba:5e0a --> ::ffff:ffff:c243:25d7 16 bytes from ::ffff:ffff:c243:25d7, icmp_seq=0 hlim=63 time=1.474 ms 16 bytes from ::ffff:ffff:c243:25d7, icmp_seq=1 hlim=63 time=1.218 ms 16 bytes from ::ffff:ffff:c243:25d7, icmp_seq=2 hlim=63 time=1.217 ms 16 bytes from ::ffff:ffff:c243:25d7, icmp_seq=3 hlim=63 time=1.216 ms ^C --- ::ffff:ffff:c243:25d7 ping6 statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 1.216/1.281/1.474 ms [grn@crow siit]$ sudo tcpdump -n -i siit0 tcpdump: listening on siit0 14:45:22.464251 ::ffff:0:c2ba:5e0a > ::ffff:ffff:c243:25d7: icmp6: echo request 14:45:22.464286 194.186.94.10 > 194.67.37.215: icmp: echo request 14:45:22.464606 194.67.37.215 > 194.186.94.10: icmp: echo reply 14:45:22.464634 ::ffff:ffff:c243:25d7 > ::ffff:0:c2ba:5e0a: frag (0|16) icmp6: echo reply 14:45:23.472398 ::ffff:0:c2ba:5e0a > ::ffff:ffff:c243:25d7: icmp6: echo request 14:45:23.472438 194.186.94.10 > 194.67.37.215: icmp: echo request 14:45:23.472776 194.67.37.215 > 194.186.94.10: icmp: echo reply 14:45:23.472806 ::ffff:ffff:c243:25d7 > ::ffff:0:c2ba:5e0a: frag (0|16) icmp6: echo reply 14:45:24.462482 ::ffff:0:c2ba:5e0a > ::ffff:ffff:c243:25d7: icmp6: echo request 14:45:24.462523 194.186.94.10 > 194.67.37.215: icmp: echo request 14:45:24.462860 194.67.37.215 > 194.186.94.10: icmp: echo reply 14:45:24.462889 ::ffff:ffff:c243:25d7 > ::ffff:0:c2ba:5e0a: frag (0|16) icmp6: echo reply 14:45:25.462569 ::ffff:0:c2ba:5e0a > ::ffff:ffff:c243:25d7: icmp6: echo request 14:45:25.462610 194.186.94.10 > 194.67.37.215: icmp: echo request 14:45:25.462951 194.67.37.215 > 194.186.94.10: icmp: echo reply 14:45:25.462977 ::ffff:ffff:c243:25d7 > ::ffff:0:c2ba:5e0a: frag (0|16) icmp6: echo reply3) telnet: rabbit (194.67.37.215) -> findus (194.186.94.10)
[grn@rabbit grn]$ telnet 194.186.94.10
Trying 194.186.94.10...
Connected to 194.186.94.10.
Escape character is '^]'.
FreeBSD/i386 (findus.ispras.ru) (ttyp1)
login: grn
Password:
Last login: Thu Jan 17 13:55:48 from 192.168.0.1
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD 4.4-RELEASE (KAME.GRN.20011122) #0: Fri Nov 23 17:43:41 MSK 2001
Welcome to FreeBSD!
[grn@findus grn]$
4) ftp: findus (::ffff:0:c2ba:5e0a) -> rabbit (::ffff:ffff:c243:25d7)
[grn@findus grn]$ ftp ::ffff:ffff:c243:25d7 Connected to ::ffff:ffff:c243:25d7. 220 rabbit.ispras.ru FTP server (Version 6.00LS) ready. Name (::ffff:ffff:c243:25d7:grn): grn 331 Password required for grn. Password: 230 User grn logged in. Remote system type is UNIX. Using binary mode to transfer files. ftp> pwd 257 "/home/grn" is current directory. ftp> cd src ftp> get cvs-1.11.1p.tar.gz local: cvs-1.11.1p.tar.gz remote: cvs-1.11.1p.tar.gz 229 Entering Extended Passive Mode (|||49182|) 150 Opening BINARY mode data connection for 'cvs-1.11.1p.tar.gz' (2143435 bytes). 100% |******************************************************************| 2093 KB 00:00 ETA 226 Transfer complete. 2143435 bytes received in 2.76 seconds (757.18 KB/s) ftp>
Детальные тесты будут опубликованы позже.
Реализация механизма бесконтекстной IP/ICMP трансляции SIIT является практической работой, позволяющей начать ввод в эксплуатацию сетей IPv6. Использование механизма SIIT позволит без больших затрат начать изучать и использовать новые возможности протокола IPv6, продолжая работать в основном в существующей инфраструктуре IPv4.
[RFC2765]
Stateless IP/ICMP Translation Algorithm (SIIT) (RFC 2765), E. Nordmark,
February 2000
[RFC791]
Internet Protocol (RFC 791), J. Postel, Sep-01-1981
[RFC792]
Internet Control Message Protocol (RFC 791), J. Postel, Sep-01-1981.
[RFC950]
Internet Standard Subnetting Procedure (RFC 950), J.C. Mogul, J. Postel, Aug-01-1985
[RFC1191]
Path MTU discovery (RFC 1191), J.C. Mogul, S.E. Deering, Nov-01-1990
[RFC2460]
Internet Protocol, Version 6 (IPv6) Specification (RFC 2460), S. Deering,
R. Hinden, December 1998
[RFC2373]
IP Version 6 Addressing Architecture (RFC 2373), R. Hinden, S. Deering, July 1998
[RFC2463]
Internet Control Message Protocol (ICMPv6) for the Internet Protocol
Version 6 (IPv6) Specification (RFC 2463), A. Conta, S. Deering, December 1998
[RFC1981]
Path MTU Discovery for IP version 6 (RFC 1981), J. McCann, S. Deering,
J. Mogul, August 1996
[INTR-TRAN]
An overview of the Introduction of IPv6 in the Internet
(draft-ietf-ngtrans-introduction-to-ipv6-transition-07.txt), July 2001
[ТРАНСЛ]
Обеспечение совместимости протоколов IPv4 и IPv6: бесконтекстный IP/ICMP
транслятор в среде Linux, В.З.Шнитман, А.А.Ломака, 1999
[COMER]
Internetworking with TCP/IP, Vol I, D.E.Comer, Prentice-Hall, 1995
[LINUX-IP]
Linux IP Stacks в комментариях, С.Сэтчелл, Х.Клиффорд, DiaSoft, 2001
[LINUX-DRV]
Linux device drivers, A.Rubini, O'REILLY, 1998
USAGI Project (http://www.linux-ipv6.org)
USAGI Project: IPv6 for Linux
KAME Project (http://www.kame.net)
KAME Project is a free IPv6 and IPsec (for both IPv4 and IPv6)
stack for BSD variants to the world
IETF Ngtrans WG (http://www.ietf.org/html.charters/ngtrans-charter.html)
IETF Next Generation Transition Working Group
6bone (http://www.6bone.net)
Information related to the 6bone pilot network