Компьютерные сети

Проблемы NAT

Вы когда-нибудь задумывались, почему Zoom-звонок работает, хотя оба участника за домашними роутерами? Или почему торрент качает, хотя у вас нет белого IP? За этим стоят STUN, TURN, ICE - механизмы, пробивающие NAT.

  • **WebRTC:** видеозвонки в браузере используют ICE
  • **Онлайн-игры:** matchmaking через STUN, relay через TURN
  • **VoIP:** SIP + ICE для корпоративной телефонии

Предварительные знания

  • NAT: One IP for Everyone

Проблемы 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 критичен для современных приложений:

  • WebSocket — WebSocket не требует NAT Traversal - работает через HTTP
  • VPN — VPN туннелирует через NAT, решая проблему иначе
  • IPv6 — IPv6 устраняет NAT - каждое устройство имеет публичный IP

Вопросы для размышления

  • Почему ~15% WebRTC-соединений всё ещё требуют TURN?
  • Как CGNAT усугубляет проблемы NAT?
  • Почему hole punching не работает через Symmetric NAT?

Связанные уроки

  • rt-01-what-is-realtime
Проблемы NAT

0

1

Войти