IPv6. Туннелирование. 6to4

Технология туннелирования 6to4.

Содержание

1 Общая информация

  • Автоматическое туннелирование посредством механизма 6to4 было признано устаревшим (deprecated) и не рекомендованным к использованию.
  • Публичному адресу IPv4 сопоставляется IPv6-подсеть с префиксом 48.
  • Фиксированный anycast IPv4 адресом: 192.88.99.1.
  • Протокол полностью автоконфигурируемый, ручная настройка невозможна.
  • Использует префикс 2002::/16.
  • Не работает через NAT.
  • Связь между двумя пользователями 6to4 осуществляется не через туннельный сервер, а напрямую, с нулевой дополнительной задержкой.
  • Не требуется регистрации.
  • Оптимальный (самый близкий) шлюз выбирается автоматически.
  • Даёт IPv6-подсеть с префиксом 48.
  • Ближайший шлюз, через который пакеты будут направляться другим пользователям IPv6, выбирается полностью автоматически.
  • Если сайт использует статический глобальный IPv4-адрес, то возможно делегировать обратную DNS зону для 48-битного блока адресов полученного через 6to4.
    • Регистрация обратной DNS-зоны производится Number Resource Organization в зоне 2.0.0.2.ip6.arpa на сайте 6to4.nro.net. Процесс полностью автоматизирован.

2 Как работает 6to4

  • Основные функции 6to4:
    • Выделение блока /48 адресного пространства IPv6 каждому узлу, у которого есть глобальный IPv4-адрес.
    • Инкапсуляция IPv6-пакеты в IPv4-пакеты для передачи по сети IPv4.
    • Передача пакеты между 6to4-узлами и узлами с прямым подключением к IPv6-Интернету.

2.1 Выделение блока адресов

  • Для каждого глобального адреса IPv4 выделена 48-битный префикс IPv6-адреса.
  • Он может быть создана на основе IPv4-адреса.
  • При этом адрес IPv4 ставится после префикса 2002::/16 в шестнадцатеричном виде.
    • Например, IPv6-префикс для IPv4-адреса 192.0.2.4 равен 2002:C000:0204::/48.

2.2 Инкапсуляция

  • 6to4-узел вкладывает пакет IPv6 в пакет IPv4.
  • Тип протокола 41 («IPv6 (encapsulation)»).
  • Перед тем, как отправить 6to4-пакет, узел проверяет адрес назначения на принадлежность к 6to4-сети и, если этот адрес соответствует 6to4, то он извлекает IPv4-адрес из 6to4-адреса и отправляет пакет по полученному адресу.

2.3 Маршрутизация между 6to4 и другими IPv6 сетями

  • Для отправлки пакета в другие IPv6-сети используются 6to4-ретрансляторы, которые подключены как к IPv4-сети, так и к IPv6-сети.
  • Когда 6to4-узлу нужно отправить IPv6-пакет, он отправляет его по anycast адресу 192.88.99.1.
  • Ретранслятор, получив 6to4-пакет, извлекает IPv6-пакет и отправляет его по IPv6-сети.
  • Для IPv6-узлов 6to4-узлы выглядят как обычные IPv6-узлы и IPv6-пакет будет передан на ближайший 6to4-ретранслятор, анонсирующий префикс сети 2002::/16.

3 Настройка

3.1 Вычисление префикса 6to4

  • Пусть адрес IPv4: 1.2.3.4.
  • Сгенерированный префикс 6to4: 2002:0102:0304::.
  • Локальным шлюзам 6to4 следует (но не обязательно) назначать суффикс ::1, поэтому ваш локальный адрес 6to4 будет: 2002:0102:0304::1.
  • Для автоматической генерации можно использовать скрипт:
    1ipv4="1.2.3.4"; printf "2002:%02x%02x:%02x%02x::1" `echo $ipv4 | tr "." " "`
    

3.2 Настройка командой ip

  • Создайте новое туннельное устройство:
    1/sbin/ip tunnel add tun6to4 mode sit ttl <ttldefault> remote any local <localipv4address>
    
  • Необходимо указать TTL, поскольку значение по умолчанию равно 0.
  • Поднимите интерфейс:
    1/sbin/ip link set dev tun6to4 up
    
  • Добавьте в интерфейс локальный адрес 6to4 (префикс обязательно равен 16):
    1/sbin/ip -6 addr add <local6to4address>/16 dev tun6to4
    
  • Добавить маршрут по умолчанию в глобальную сеть IPv6, используя заданный адрес IPv4:
    1/sbin/ip -6 route add default via ::192.88.99.1 dev tun6to4 metric 1
    
  • Некоторые версии команды ip не поддерживают совместимые с IPv4 IPv6-адреса для шлюзов, в этом случае необходимо использовать соответствующий IPv6-адрес:
    1/sbin/ip -6 route add default via 2002:c058:6301::1 dev tun6to4 metric 1
    

3.3 Скрипт

  • Соберём в один скрипт 6to4:
     1#!/bin/sh
     2
     3IF=$1
     4STATE=$2
     5
     6if [ -z "$IF" ]
     7then
     8    echo "$0: called with no interface" 1>&2
     9    exit 1
    10fi
    11
    12if [ "$STATE" = "up" ]
    13then
    14    IPV4=`/sbin/ip -4 addr show dev $IF|grep "^ *inet"|sed -r -e 's:.*inet ([0-9\.]+)/.*:\1:'`
    15    IPV4STRIP=`echo $IPV4 | tr "." " "`
    16    IPV6=`printf "2002:%02x%02x:%02x%02x::1" $IPV4STRIP`
    17
    18    echo $IPV4 >> /tmp/IPV6DEBUG
    19    echo $IPV4STRIP >> /tmp/IPV6DEBUG
    20    echo $IPV6 >> /tmp/IPV6DEBUG
    21
    22    /sbin/ip tunnel add tun6to4 mode sit ttl 64 remote any local $IPV4 2>&1 >> /tmp/IPV6DEBUG
    23    /sbin/ip link set dev tun6to4 up 2>&1 >> /tmp/IPV6DEBUG
    24    /sbin/ip -6 addr add $IPV6/16 dev tun6to4 2>&1 >> /tmp/IPV6DEBUG
    25    /sbin/ip -6 route add 2000::/3 via ::192.88.99.1 dev tun6to4 metric 1 2>&1 >> /tmp/IPV6DEBUG
    26
    27else
    28
    29    /sbin/ip -6 route del 2000::/3 via ::192.88.99.1 dev tun6to4 2>&1 >> /tmp/IPV6DEBUG
    30    /sbin/ip link set dev tun6to4 down 2>&1 >> /tmp/IPV6DEBUG
    31    /sbin/ip tunnel del tun6to4
    32
    33fi
    
  • Запуск:
    1./6to4 eth0 up
    
  • Останов:
    1./6to4 eth0 down
    
  • Для автоматического запуска добавьте скрипт в каталог /etc/NetworkManager/dispatcher.d.

4 Раздача 6to4 IPv6 в локальную сеть

  • Пусть ваша сеть: 2002:aabb:ccdd::/48.
  • Для подсети выделим 2002:aabb:ccdd:e::/64.
  • Локальный интерфейс — eth0.

4.1 Назначение адреса внутреннему интерфейсу

  • Для роутеров часто используется адрес с ::1 :
1ip addr add 2002:aabb:ccdd:e::1/64 dev eth0

4.2 Настройка radvd

  • Изменяем файл /etc/radvd.conf:
1interface eth0
2{
3   AdvSendAdvert on;
4   prefix 2002:aabb:ccdd:e::/64
5   {
6       AdvOnLink on;
7       AdvAutonomous on;
8   };
9};
  • Включаем маршрутизацию IPv6.
  • Для этого, нужно добавить в /etc/sysctl.conf следующие строки:
    1net.ipv6.conf.all.forwarding=1
    2net.ipv6.conf.default.forwarding=1
    
  • Загрузим эти значения:
    1sysctl -p
    
  • Запустите radvd:
1systemctl enable --now radvd.service

Дмитрий Сергеевич Кулябов
Дмитрий Сергеевич Кулябов
Профессор кафедры теории вероятностей и кибербезопасности

Мои научные интересы включают физику, администрирование Unix и сетей.

Похожие