Так как в этом случае клиент пытается достичь своего «внешнего»
(общедоступный) IP-адрес из-за NAT, NAT не делает порт
переадресации и не может направить пакет IP.
Это известно как состояние шпильки. Не все маршрутизаторы / NAT решают это правильно. Решения:
a) Проверьте, можно ли настроить роутер / NAT для включения «заколки волос». Это решение работает, если вы контролируете все маршрутизаторы / NAT в своем развертывании.
б) Купите другой маршрутизатор / узел, разрешающий это. Как и а), он работает, если вы контролируете все маршрутизаторы / NAT в вашем развертывании.
в) Если вы можете получить информацию о порте для UPnP, это тоже решение, но не все маршрутизаторы / NAT знают или поддерживают UPnP. Он не распространяется на все случаи большого развертывания.
d) Использование многоадресной рассылки для «обнаружения» других узлов в локальной сети и даже для связи с ними является распространенным решением этой проблемы. Вам нужно согласовать IP-адрес и попросить его прослушать его.
e) Хранение частного IP-адреса на сервере также является решением, но для него требуется больше места на сервере, чем для решения d. Существует также тайм-аут (то есть истечение срока действия данных) для обработки.
f) Использовать TURN-подобную связь между одноранговыми узлами (т.е. связь между узлами проходит через центральный сервер). Это решение является надежным, но не самым эффективным с точки зрения потребления полосы пропускания.
Надеюсь, это поможет.