UDP между A и B работает только если B первым отправляет пакет

UDP между A и B работает только если B первым отправляет пакет

У меня есть два отдельных компьютера Linux, A и B, которым нужно обмениваться данными через UDP через порт 3000. Каждый из них находится за отдельным маршрутизатором, и на каждом маршрутизаторе настроены правила переадресации портов.

По какой-то причине единственный способ, которым B может получить UDP-пакеты от A, — это если B сначала отправит пакет в A.

Рабочий случай:

# Computer A Listens (IP 1.2.3.4)
netcat -ul 3000

# Computer B Initiates
netcat -u 1.2.3.4 3000

В приведенном выше случае два "подключаются" через netcat, и я могу отправлять и получать данные в обоих направлениях. Это наводит меня на мысль, что это не проблема переадресации портов или маршрутизации.

Сломанный корпус:

# Computer B Listens (IP 5.6.7.8)
netcat -ul 3000

# Computer A Initiates
netcat -u 5.6.7.8 3000

В этом неисправном случае они не могут «соединиться» через netcat, и я не могу отправлять какие-либо данные между конечными точками.

Я также пробовал использовать инструменты прямой отправки пакетов для отправки UDP-пакетов между A и B. Происходит то же самое: B не может ничего получить от A, пока B не отправит пакет в A.

Я понятия не имею, почему что-то подобное может произойти, особенно с UDP. Есть идеи, что может быть причиной проблемы?

РЕДАКТИРОВАТЬ

Проверил переадресацию портов на B. Вот текущая конфигурация iptables:

$iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       udp  --  anywhere             anywhere            udp dpt:3000 to:192.168.3.2:3000 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  0    --  anywhere             anywhere 



$iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     0    --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     0    --  anywhere             anywhere                     
ACCEPT     udp  --  anywhere             192.168.3.2         udp dpt:3000 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

Может быть, я что-то упускаю в конфигурации iptables для правильной переадресации anywhere:3000 на 192.168.3.2:3000 для UDP?

Связанный контент