Одна сторона подключена через симметричный NAT, другая сторона может быть доступна напрямую, и есть сервер STUN.
Стороны намерены общаться через WebRTC. Оба настроены на использование этого STUN-сервера.
Это будет работать? Нужен ли мне STUN-сервер только из-за протокола WebRTC или у него есть реальная причина для прохождения через это одно устройство NAT?
Устройства NAT меняют адрес и порты IP-пакетов. Однако сообщения SIP содержат IP-адрес внутри полезная нагрузка IP-пакетов, которые не управляются устройствами NAT. Заголовки SIP как Связаться с нами или Через или SDP Данные содержат IP-адреса и номера портов, которые действительны только в контексте локальной сети. Это потому, что SIP должны помогать другие механизмы, чтобы правильно заполнить заголовки протокола. Другие протоколы VoIP, такие как проприетарный IAX2 от asterisk, могут проходить NAT без этих проблем, но вы можете воспользоваться им, только если у вас есть сервер Asterisk или вы можете установить его в общедоступном месте.
В любом случае, предположим, что вы должны использовать SIP. В этом случае необходимо использовать протоколы обхода NAT. Протокол STUN использует внешний сервер для определения публичного адреса и порта устройства за NAT.
Как вы можете видеть в Протокол STUN и VoIP - Часть 1
Основная цель протокола STUN - дать возможность устройству, работающему за устройством NAT, обнаружить его общедоступный IP-адрес и тип NAT, запущенный на шлюзе, к которому оно подключено. Это также позволяет устройству, подключенному за шлюзом, обнаруживать преобразование порта, выполненное самим шлюзом (NAT); т.е. какой порт другие устройства могут использовать для подключения к нему извне сети. Обратите внимание, что шлюзы и маршрутизаторы не всегда выполняют преобразование портов; это зависит от типа используемого NAT и его настройки. Например. конфигурация NAT с полным конусом не транслирует порты.
Итак, на вопрос о том, необходим ли STUN на публичном сервере, ответ отрицательный. Это помогает клиенту, находящемуся за NAT, узнать свой общедоступный адрес и порт, чтобы поместить правильные данные в заголовки SIP.
Но ... симметричный NAT - это своего рода NAT, в котором устройства преобразуют пару (частный IP, частный порт) в разные пары (публичный IP, публичный порт), в зависимости от внешнего сервера. Устройство (маршрутизатор) может изменять, по крайней мере, публичный порт в каждом соединении, поэтому не стоит получать информацию с сервера STUN, потому что реальное соединение с другой стороной в вызове будет использовать другие порты. Симметричный NAT должен проходить через другие протоколы как TURN