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
. - Для автоматической генерации можно использовать скрипт:
ipv4="1.2.3.4"; printf "2002:%02x%02x:%02x%02x::1" `echo $ipv4 | tr "." " "`
3.2 Настройка командой ip
- Создайте новое туннельное устройство:
/sbin/ip tunnel add tun6to4 mode sit ttl <ttldefault> remote any local <localipv4address>
- Необходимо указать TTL, поскольку значение по умолчанию равно 0.
- Поднимите интерфейс:
/sbin/ip link set dev tun6to4 up
- Добавьте в интерфейс локальный адрес 6to4 (префикс обязательно равен 16):
/sbin/ip -6 addr add <local6to4address>/16 dev tun6to4
- Добавить маршрут по умолчанию в глобальную сеть IPv6, используя заданный адрес IPv4:
/sbin/ip -6 route add default via ::192.88.99.1 dev tun6to4 metric 1
- Некоторые версии команды
ip
не поддерживают совместимые с IPv4 IPv6-адреса для шлюзов, в этом случае необходимо использовать соответствующий IPv6-адрес:/sbin/ip -6 route add default via 2002:c058:6301::1 dev tun6to4 metric 1
3.3 Скрипт
- Соберём в один скрипт
6to4
:#!/bin/sh IF=$1 STATE=$2 if [ -z "$IF" ] then echo "$0: called with no interface" 1>&2 exit 1 fi if [ "$STATE" = "up" ] then IPV4=`/sbin/ip -4 addr show dev $IF|grep "^ *inet"|sed -r -e 's:.*inet ([0-9\.]+)/.*:\1:'` IPV4STRIP=`echo $IPV4 | tr "." " "` IPV6=`printf "2002:%02x%02x:%02x%02x::1" $IPV4STRIP` echo $IPV4 >> /tmp/IPV6DEBUG echo $IPV4STRIP >> /tmp/IPV6DEBUG echo $IPV6 >> /tmp/IPV6DEBUG /sbin/ip tunnel add tun6to4 mode sit ttl 64 remote any local $IPV4 2>&1 >> /tmp/IPV6DEBUG /sbin/ip link set dev tun6to4 up 2>&1 >> /tmp/IPV6DEBUG /sbin/ip -6 addr add $IPV6/16 dev tun6to4 2>&1 >> /tmp/IPV6DEBUG /sbin/ip -6 route add 2000::/3 via ::192.88.99.1 dev tun6to4 metric 1 2>&1 >> /tmp/IPV6DEBUG else /sbin/ip -6 route del 2000::/3 via ::192.88.99.1 dev tun6to4 2>&1 >> /tmp/IPV6DEBUG /sbin/ip link set dev tun6to4 down 2>&1 >> /tmp/IPV6DEBUG /sbin/ip tunnel del tun6to4 fi
- Запуск:
./6to4 eth0 up
- Останов:
./6to4 eth0 down
- Для автоматического запуска добавьте скрипт в каталог
/etc/NetworkManager/dispatcher.d
.
4 Раздача 6to4 IPv6 в локальную сеть
- Пусть ваша сеть:
2002:aabb:ccdd::/48
. - Для подсети выделим
2002:aabb:ccdd:e::/64
. - Локальный интерфейс —
eth0
.
4.1 Назначение адреса внутреннему интерфейсу
- Для роутеров часто используется адрес с
::1
:
ip addr add 2002:aabb:ccdd:e::1/64 dev eth0
4.2 Настройка radvd
- Изменяем файл
/etc/radvd.conf
:
interface eth0
{
AdvSendAdvert on;
prefix 2002:aabb:ccdd:e::/64
{
AdvOnLink on;
AdvAutonomous on;
};
};
- Включаем маршрутизацию IPv6.
- Для этого, нужно добавить в
/etc/sysctl.conf
следующие строки:net.ipv6.conf.all.forwarding=1 net.ipv6.conf.default.forwarding=1
- Загрузим эти значения:
sysctl -p
- Запустите
radvd
:
systemctl enable --now radvd.service