Реализация межпротокольного шлюза (IPv4<->IPv6)

в открытой операционной среде FreeBSD.

В.З.Шнитман, Д.С.Мишин, Д.В.Москалев

Институт Системного Программирования Российской Академии Наук



    Описание бесконтекстного IPv4/IPv6 транслятора можно найти здесь.
    Транслятор реализован в виде сетевого псевдоинтерфейса, который необходимо настроить. После загрузки модуля транслятора командой kldload st.ko надо присвоить ему реальный IPv4 адрес (из набора адресов для преобразования в IPv6-translated) и специального вида IPv6 адрес путём добавления к нему префикса ::ffff:ffff:0:0/96. Кроме этого на машинах IPv6 сети необходимо прописать маршрут для адресов с префиксом ::ffff:ffff:0:0/96 на маршрутизатор с установленным транслятором. Данный префикс является единственным расхождением в данной работе с RFC 2765 , вызванным особенностями реализации IPv6 стека в данной операционной системе. Дело в том что в соответствии с RFC 2133 IPv4-mapped адреса должны интерпретироваться сокетом как адреса хостов, имеющих только IPv4 протокол, и потому сокет должен формировать IPv4 пакет. Естесственно, это конфликтует со стандартом на бесконтекстный транслятор. Так как разработчики IPv6 для FreeBSD приняли за основу RFC 2133, то для реализации на этой ОС транслятора в соответствии со стандартом пришлось бы переделать их стек, создав таким образом уникальное ядро, поддерживающее транслятор, в то время как достигнуть необходимого результата можно гораздо проще - используя предложенные выше специального вида IPv6 адреса.


 Исходники SIIT для ОС FreeBSD 4.1

Текущие особенности реализации протокола IPv6.

         Исторически сложилось так, что большинство производителей операционных систем стали включать в свои релизы экспериментальный IPv6 стек, используя в качестве основного сетевого протокола IPv4 и создав таким образом прецендент двойного стека. Непопулярный некогда из-за больших накладных расходов метод взаимодействия IPv4 и IPv6 (количество оперативной и физической памяти, используемой для сетевого протокола, увеличивается в два раза на каждой машине) применяется теперь повсеместно. Это стало возможным из-за многократно возросшей мощности современных компьютеров, и как следствие, существенного снижения относительных расходов на поддержание двух стеков на каждом из них.
         Такая реализация IPv6 протокола даёт возможность связываться с IPv4 хостами, используя расширения сокетов, описанные в RFC 2133. Однако этот метод также требует значительных затрат, правда на этапе разработки протокола, что делает его практически равносильным с применением механизмов трансляции. Очевидно, разработчики протокола пошли на это в целях популяризации нового протокола и конкурентной борьбы за рынок операционных систем. Другим вариантом остаётся поддержка только одного протокола и использование механизмов трансляции. Например, по такому пути пошли в Microsoft. Их MS Translator реализует как бесконтекстный, так и контекстный механизмы трансляции. Другие реализации авторам не известны.