← Назад в базу знаний

Как работает IPv6-туннелирование через IPv4: архитектура и ограничения

Как работает IPv6-туннелирование через IPv4: архитектура и ограничения

Как работает IPv6-туннелирование через IPv4: архитектура и ограничения

IPv4-адреса кончились. Но железо, софт и провайдеры на нём сидят плотно.

IPv6 разворачивается медленно, как бетон в мороз.

Туннелирование — костыль, который позволяет IPv6-пакетам путешествовать через старые IPv4-магистрали.

Без него многие сети просто не взлетят.

Базовая схема: инкапсуляция и декапсуляция

IPv6-пакет заворачивается в IPv4-конверт.

Всё просто: берём целый IPv6-пакет (заголовок + данные), добавляем спереди IPv4-заголовок.

Протокол в IPv4-заголовке выставляется в 41 — это `IPv6 encapsulation`.

На выходе получаем обычный IPv4-пакет, который маршрутизируется как обычно.

На принимающей стороне — обратный процесс.

IPv4-заголовок сдирается, извлекается IPv6-пакет.

Дальше он обрабатывается как родной IPv6-трафик.

Схема работает на любом уровне: хост, маршрутизатор, даже на уровне приложений.

Но есть нюансы.

Типы туннелей: от ручных до автоматических

6in4 (ручные туннели)

Самый прямой метод.

Настраиваешь вручную IPv4-адреса точек туннеля.

Провайдер даёт тебе публичный IPv4, ты поднимаешь туннель до его сервера.

Пример конфига на Linux:

```

ip tunnel add sit1 mode sit remote 203.0.113.1 local 198.51.100.1

ip link set sit1 up

ip addr add 2001:db8:1::2/64 dev sit1

ip route add ::/0 via 2001:db8:1::1

```

Работает стабильно.

Но требует публичного IPv4 с обеих сторон.

Если у тебя NAT — начинаются пляски с бубном.

6to4 (автоматические туннели)

Использует префикс `2002::/16`.

Твой IPv4-адрес кодируется прямо в IPv6-префикс.

Например, для адреса 192.0.2.1 префикс будет `2002:c000:0201::/48`.

Туннель строится автоматически к любому 6to4-релею.

Проблема: релеи — общие, перегруженные, их качество хреновое.

Плюс многие провайдеры блокируют протокол 41 на входе.

Teredo

Клёвый, но сложный костыль.

Позволяет работать через NAT.

Использует UDP-инкапсуляцию, чтобы обойти блокировки протокола 41.

Схема: Teredo-клиент шлёт UDP-пакеты на Teredo-сервер, тот пересылает их в IPv6-мир.

Минусы: высокая задержка, проблемы с симметричным NAT, многие системы его выпилили за ненадобностью.

Windows до сих пор поддерживает, Linux — через `miredo`.

ISATAP (Intra-Site Automatic Tunnel Addressing Protocol)

Внутрисетевой туннель.

Используется для связи IPv6-хостов внутри одной IPv4-сети.

Адрес формируется как `2001:db8::5efe:192.168.1.1`.

Работает только в пределах одной подсети, за NAT не вылезает.

Проблемы производительности: MTU, фрагментация, задержки

MTU — главная боль

IPv6 требует MTU не меньше 1280 байт.

IPv4-туннель добавляет 20-40 байт заголовка.

Если твой IPv4-линк имеет MTU 1500, то эффективный MTU туннеля — 1460-1480.

Падение производительности — 2-3% на каждом пакете.

Хуже: если промежуточный маршрутизатор имеет MTU меньше, пакет фрагментируется.

IPv6 фрагментацию не любит, она делается только на хосте.

В туннеле фрагментация происходит на уровне IPv4, что порождает дикие тормоза.

Решение: настроить `ip tunnel ttl 64` и `ip link set mtu 1280`.

Или использовать Path MTU Discovery, но он часто ломается из-за блокировки ICMP.

Задержки

Каждый туннель добавляет 1-5 мс на дополнительную обработку.

Если туннелей несколько (каскад), задержка растёт линейно.

Для обычного сёрфинга незаметно, для VoIP — критично.

Фрагментация

Если пакет больше MTU туннеля — он фрагментируется на IPv4-уровне.

Приёмник собирает фрагменты, потом декапсулирует.

Процесс жрёт CPU, пакеты могут потеряться.

На высоких скоростях (1 Гбит/с и выше) фрагментация убивает производительность.

Безопасность: дыры, которые никто не штопает

Туннели — идеальный вектор для атак.

IPv4-фаервол не видит, что внутри IPv6.

IPv6-фаервол не контролирует внешнюю обёртку.

Атаки на протокол 41

Злоумышленник может подделать IPv4-заголовок и вставить свой IPv6-пакет.

Если туннель не аутентифицирован — привет, инъекция трафика.

Решение: IPsec поверх туннеля или фильтрация по source-адресу.

Сканирование через 6to4

Любой может отправить пакет на релей и узнать твой IPv6-адрес.

Это используется для обхода фаерволов.

Многие провайдеры блокируют 6to4 именно из-за этого.

Teredo — дыра в NAT

UDP-дыры, которые пробивает Teredo, могут быть использованы для доступа к внутренним ресурсам.

В Windows Teredo включён по умолчанию до 10-й версии.

Отключать обязательно.

Реальные кейсы и цифры

Кейс 1: Провайдер с IPv6-транзитом через 6in4

Провайдер из Екатеринбурга, 2018 год.

IPv6-трафик шёл через туннель до сервера в Москве.

Задержка: 12 мс до Москвы по IPv4, 18 мс по IPv6 через туннель.

Потери: 0.1% на IPv4, 0.5% на IPv6.

Причина: фрагментация из-за MTU 1480 на одном из участков.

Кейс 2: 6to4 на домашнем роутере

Опыт пользователя: скорость упала с 100 до 20 Мбит/с.

Причина: релей был перегружен, плюс NAT роутера резал производительность.

Решение: переход на ручной туннель от Hurricane Electric.

Кейс 3: Корпоративная сеть с ISATAP

Компания с 500 хостами.

ISATAP использовался для миграции на IPv6 без замены оборудования.

После отключения ISATAP и перехода на родной IPv6 задержка упала на 30%.

Причина: убрали двойную обработку пакетов.

Сравнение методов туннелирования

МетодСложностьNATЗадержкаMTUБезопасность
6in4СредняяНетНизкая1480Средняя
6to4НизкаяНетВысокая1280Низкая
TeredoВысокаяДаВысокая1280Низкая
ISATAPСредняяНетСредняя1480Средняя

Когда туннели — зло, а когда — необходимость

Туннели — зло, когда:

- У тебя есть родной IPv6 от провайдера.

- Ты работаешь с реальным временем (VoIP, игры).

- Тебе нужна безопасность без головной боли.

Туннели — необходимость, когда:

- Провайдер не даёт IPv6, но ты тестируешь свои сервисы.

- Нужно соединить две IPv6-сети через IPv4-транзит.

- Мигрируешь корпоративную сеть поэтапно.

Альтернативы: NAT64, DNS64, прокси

Туннели — не единственный способ.

NAT64 + DNS64 позволяют IPv6-клиентам ходить на IPv4-серверы.

Это работает на уровне трансляции адресов, без дополнительных заголовков.

Минус: нужно разворачивать сервер трансляции, не все приложения поддерживают.

Прокси — ещё один вариант.

Например, lexic.ml даёт IPv6-выход через прокси.

Ты не поднимаешь туннель, а просто шлёшь трафик через прокси-сервер.

Работает быстрее, проще в настройке, не требует публичного IPv4.

Но не подходит для всех протоколов — только для TCP/UDP.

Итог: жить с туннелями или без?

Туннели — временное решение.

Они работают, пока IPv4 не умрёт окончательно.

Но с каждым годом их актуальность падает.

IPv6-провайдеров становится больше, оборудование дешевеет.

Если есть возможность — используй родной IPv6.

Если нет — туннель, но с умом: ручной 6in4, правильный MTU, фильтрация.

Альтернатива — прокси-сервисы, которые избавляют от головной боли с туннелями.

Выбор за тобой.

✔️Купить прокси