Компьютерные сети
Проблемы NAT
Вы когда-нибудь задумывались, почему Zoom-звонок работает, хотя оба участника за домашними роутерами? Или почему торрент качает, хотя у вас нет белого IP? За этим стоят STUN, TURN, ICE - механизмы, пробивающие NAT.
- **WebRTC:** видеозвонки в браузере используют ICE
- **Онлайн-игры:** matchmaking через STUN, relay через TURN
- **VoIP:** SIP + ICE для корпоративной телефонии
Предварительные знания
Проблемы NAT
NAT ломает модель интернета «каждое устройство имеет уникальный адрес». Это создаёт проблемы: P2P-соединения невозможны напрямую, некоторые протоколы не работают, приложениям нужны обходные пути. Особенно страдают: VoIP, видеозвонки, онлайн-игры, торренты.
**CGNAT** (100.64.0.0/10) - двойной NAT у провайдера. Вы за NAT, провайдер тоже за NAT. Port forwarding невозможен. Решения: IPv6, VPN с выделенным IP, или платный «белый» IP от провайдера.
Почему Symmetric NAT сложнее всего обойти?
STUN
**STUN** (Session Traversal Utilities for NAT) - протокол для определения публичного адреса и типа NAT. Клиент отправляет запрос STUN-серверу, сервер отвечает с адресом, который видит. Критически важен для WebRTC, VoIP, P2P.
**Бесплатные STUN-серверы:** stun.l.google.com:19302, stun.cloudflare.com:3478, stun.stunprotocol.org:3478. STUN использует мало ресурсов - один запрос-ответ.
Что STUN-сервер НЕ делает?
TURN
**TURN** (Traversal Using Relays around NAT) - протокол ретрансляции трафика. Когда STUN и hole punching не работают (Symmetric NAT, строгий firewall), TURN-сервер передаёт весь трафик между клиентами. Работает всегда, но дорогой - трафик идёт через сервер.
**TURN дорогой!** Весь медиа-трафик (видео!) идёт через сервер. Google Meet, Zoom, Teams имеют огромные TURN-кластеры. Свой TURN-сервер: coturn (open source). Платные: Twilio, Xirsys.
Почему TURN используется как fallback, а не основной способ?
ICE Framework
**ICE** (Interactive Connectivity Establishment) - фреймворк, объединяющий STUN, TURN и hole punching. Собирает все возможные адреса (кандидаты), проверяет их попарно, выбирает лучшее соединение. Используется в WebRTC.
**Trickle ICE:** Кандидаты отправляются по мере обнаружения, не дожидаясь всех. Ускоряет установку соединения - можно начать проверку host-кандидатов пока STUN ещё отвечает.
Какой ICE-кандидат имеет наивысший приоритет?
UPnP и NAT-PMP
**UPnP IGD** (Internet Gateway Device) и **NAT-PMP** - протоколы автоматического проброса портов. Приложение просит роутер: «открой мне порт 51234». Роутер создаёт правило без ручной настройки. Используется торрентами, играми, Skype.
**Безопасность UPnP:** Любое приложение может открыть порты - это риск. Малварь использует UPnP для открытия бэкдоров. Рекомендация: отключать UPnP на роутере если не нужен, или ограничить доступные порты.
STUN решает все проблемы NAT
STUN только определяет адрес; для Symmetric NAT нужен TURN
STUN + hole punching работает в ~85% случаев. Но Symmetric NAT, корпоративные firewall, CGNAT требуют TURN-сервера как fallback. Поэтому ICE использует оба метода.
Какой риск несёт включённый UPnP на роутере?
Итоги
- **STUN** определяет публичный адрес; работает не всегда
- **TURN** ретранслирует трафик; работает всегда, но дорого
- **ICE** объединяет методы и выбирает лучший путь
- **UPnP** автоматически пробрасывает порты (но есть риски)
Связанные темы
NAT Traversal критичен для современных приложений:
Вопросы для размышления
- Почему ~15% WebRTC-соединений всё ещё требуют TURN?
- Как CGNAT усугубляет проблемы NAT?
- Почему hole punching не работает через Symmetric NAT?