UDP Hole-punching: невозможно отправить с сервера клиенту

Начиная с server-A (глобально доступного через статический IP-адрес), я привязываю сокет UDP к 0.0.0.0:25000.

Затем с клиентом A за (жилым) NAT я привязываю сокет UDP к 0.0.0.0:25000. Затем клиент-A отправляет пакет серверу-A.

Сервер-A получает пакет. Сервер-A записывает удаленный сокет K, откуда пакет был преобразован через NAT. Сервер-A отправляет пакет K с намерением, чтобы NAT переадресовал пакет клиенту-A.

Однако клиент-A не получает пакет. На NAT, когда я включаю запуск порта на порту 25000 для UDP, он работает. Однако при создании приложения p2p я бы предпочел не требовать, чтобы клиенты заходили в настройки маршрутизатора, чтобы программа работала. Как я могу пробить брандмауэр, чтобы связь была двунаправленной?


person Thomas Braun    schedule 23.07.2020    source источник


Ответы (1)


Если ваш маршрутизатор / устройство NAT поддерживает NAT-PMP или UPNP, это действительно просто. Вам просто нужно реализовать протокол и открыть конкретный порт для использования. В противном случае вам может потребоваться ICE.

person tyChen    schedule 24.07.2020