Как работает IPv6-туннелирование через IPv4: архитектура и ограничения
Содержание
- Архитектура IPv6-туннелирования: когда IPv4 не пускает
- Ограничения протокола: что болит
- Реальный кейс: настройка 6in4 на Linux
- Поднимаем туннель
- Проверяем
- Установка Miredo
- Конфиг /etc/miredo/miredo.conf
- Запуск
- Провайдерские решения: DS-Lite и MAP-E
- Когда туннелирование — зло
- Альтернативы: NAT64 и прокси
- Практические грабли: что ломается чаще всего
- Будущее: когда туннели станут не нужны
Архитектура IPv6-туннелирования: когда IPv4 не пускает
IPv6-туннелирование через IPv4 — это костыль. Но костыль необходимый. Пока провайдеры не переключились на IPv6, а ресурсы уже требуют новый протокол, приходится протаскивать IPv6-пакеты внутри IPv4-инфраструктуры. Механизм простой: берём IPv6-пакет, заворачиваем его в IPv4-конверт, отправляем через IPv4-сеть, на выходе распаковываем.
Архитектура строится на инкапсуляции. IPv6-пакет становится полезной нагрузкой для IPv4. Внешний заголовок — IPv4 с адресами туннельных узлов. Внутренний — оригинальный IPv6. Тип протокола в IPv4-заголовке — 41 (IPv6 encapsulation). Никакой магии, чистая обёртка.
Туннели бывают разные. Самые популярные: 6in4 (статический туннель), 6to4 (автоматический), Teredo (за NAT), ISATAP (внутри сети). У каждого свой зоопарк проблем. 6in4 требует выделенного IPv4-адреса с обеих сторон. 6to4 работает через anycast, но упирается в ограничения MTU. Teredo — вообще ад, использует UDP и пробивается через NAT, но скорость хромает.
Ограничения протокола: что болит
Первое и главное — MTU. IPv6 требует MTU 1280 байт минимум. IPv4-туннель добавляет 20-40 байт заголовка. Если MTU сети меньше 1500, начинаются фрагментации, потери пакетов, пересборки. Типичная проблема: SSH зависает, веб-страницы грузятся через раз.
Второе — NAT. IPv4 с NAT — зло для туннелей. 6in4 не работает за NAT, нужен публичный IP. Teredo решает проблему, но ценой производительности. UDP-инкапсуляция, дополнительные заголовки, пинг 200+ мс.
Третье — маршрутизация. IPv6-трафик идёт через туннельный endpoint. Если endpoint в другой стране, задержки растут. Нет прямой маршрутизации, как у нативного IPv6. Для критичных приложений — проблема.
Четвёртое — безопасность. Туннель — чёрный ящик. IPv4-сеть не видит внутреннего трафика. Firewall не может фильтровать IPv6-пакеты внутри. Дополнительная нагрузка на CPU — инкапсуляция/деинкапсуляция жрёт ресурсы.
Реальный кейс: настройка 6in4 на Linux
```bash
Поднимаем туннель
ip tunnel add sit1 mode sit remote 203.0.113.1 local 198.51.100.1 ttl 255
ip link set dev sit1 up
ip addr add 2001:db8:1::2/64 dev sit1
ip route add ::/0 via 2001:db8:1::1 dev sit1
Проверяем
ping6 2001:4860:4860::8888
```
Чисто, прозрачно. Но если remote адрес за NAT — всё сломается. Выход — Teredo:
```bash
Установка Miredo
apt-get install miredo
Конфиг /etc/miredo/miredo.conf
InterfaceName = teredo
ServerAddress = teredo.iks-jena.de
Запуск
systemctl start miredo
```
Teredo даёт IPv6-адрес, но пинг до Google — 250 мс против 30 мс у нативного. Для веб-сёрфинга сойдёт, для игр — нет.
Провайдерские решения: DS-Lite и MAP-E
Провайдеры не хотят менять оборудование. Они внедряют DS-Lite (Dual-Stack Lite) и MAP-E (Mapping of Address and Port). DS-Lite — это CGNAT + IPv4-туннель к провайдерскому AFTR. Клиент получает нативное IPv6, а IPv4 уходит в туннель. Минус — IPv4-трафик идёт через провайдерский NAT, порты ограничены.
MAP-E — хитрее. Он маппит IPv4-адреса и порты на IPv6-префиксы. Клиент получает публичный IPv4 через IPv6-транспорт. Без NAT, без туннелей. Но требует поддержки на CPE и провайдерском оборудовании. В России MAP-E почти не используют, DS-Lite популярнее.
Когда туннелирование — зло
IPv6-туннели не для всего. P2P-трафик через Teredo — песня. BitTorrent падает, DHT не работает, UDP-трафик теряется. Для торрентов нужен нативный IPv6 или 6in4 с публичным IP.
VoIP и видеозвонки — тоже проблема. Jitter растёт, пакеты теряются. WebRTC на Teredo — грабли. Google Meet может работать, но с перебоями.
Для обычного веб-сёрфинга — норм. YouTube, GitHub, Cloudflare — все поддерживают IPv6. Но если сайт сидит на IPv4-only, туннель не поможет. Нужен NAT64/DNS64.
Альтернативы: NAT64 и прокси
NAT64 — мост между IPv6 и IPv4. Клиент отправляет IPv6-пакет, NAT64-шлюз конвертирует его в IPv4. DNS64 подменяет A-записи на AAAA. Работает прозрачно, но шлюз — единая точка отказа.
Прокси — другой путь. IPv6-клиент идёт на прокси-сервер, тот делает запрос к IPv4-ресурсу. Пример: lexic.ml — IPv6 прокси с 2015 года. Оборачивает IPv4-трафик в IPv6, даёт доступ к сайтам без нативного IPv6. Работает на уровне HTTP/HTTPS, не требует туннелей на клиенте.
Сравним:
| Метод | Скорость | NAT | MTU | Сложность |
|-------|----------|-----|-----|-----------|
| 6in4 | Высокая | Не работает | Проблемы | Средняя |
| Teredo | Низкая | Работает | Проблемы | Низкая |
| DS-Lite | Средняя | CGNAT | Нормально | Высокая |
| NAT64 | Средняя | Работает | Нормально | Высокая |
| Прокси | Зависит | Работает | Нормально | Низкая |
Практические грабли: что ломается чаще всего
1. **MTU mismatch**. Клиент шлёт пакет 1500 байт, туннель добавляет 40, сеть не пропускает. Решение — `ip link set dev sit1 mtu 1480`. Или настройка MSS clamping.
2. **Firewall блокирует протокол 41**. Некоторые провайдеры режут IPIP-туннели. Приходится использовать UDP-инкапсуляцию (Teredo, OpenVPN).
3. **IPv6-маршруты не обновляются**. Динамические IP — проблема. Нужен DDNS для туннеля.
4. **Симметричный NAT**. Teredo не пробивает. Только релейный сервер, который добавляет задержку.
Будущее: когда туннели станут не нужны
IPv6-пенетрация растёт. Google отчитывается о 40% трафика через IPv6. Провайдеры в Европе и США переходят на нативный Dual-Stack. В России — медленнее, но тенденция есть.
Туннели — временная мера. Для энтузиастов — 6in4 через Hurricane Electric. Для обычных пользователей — прокси или DS-Lite. Но пока IPv4 живёт, туннели остаются.
Главное — понимать ограничения. Не пихать туннель туда, где нужна стабильность. Для экспериментов — норм. Для продакшена — только если нет альтернатив.
И помните: IPv6-туннелирование не лечит IPv4-проблемы. Оно просто переносит их в другую плоскость.