Как работает IPv6-туннелирование через IPv4: архитектура и ограничения
Содержание
- Как работает IPv6-туннелирование через IPv4: архитектура и ограничения
- Базовая схема: инкапсуляция и декапсуляция
- Типы туннелей: от ручных до автоматических
- 6in4 (ручные туннели)
- 6to4 (автоматические туннели)
- Teredo
- ISATAP (Intra-Site Automatic Tunnel Addressing Protocol)
- Проблемы производительности: MTU, фрагментация, задержки
- MTU — главная боль
- Задержки
- Фрагментация
- Безопасность: дыры, которые никто не штопает
- Атаки на протокол 41
- Сканирование через 6to4
- Teredo — дыра в NAT
- Реальные кейсы и цифры
- Кейс 1: Провайдер с IPv6-транзитом через 6in4
- Кейс 2: 6to4 на домашнем роутере
- Кейс 3: Корпоративная сеть с ISATAP
- Сравнение методов туннелирования
- Когда туннели — зло, а когда — необходимость
- Альтернативы: NAT64, DNS64, прокси
- Итог: жить с туннелями или без?
Как работает 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, фильтрация.
Альтернатива — прокси-сервисы, которые избавляют от головной боли с туннелями.
Выбор за тобой.