O UDP entre A e B só funciona se B enviar o pacote primeiro

O UDP entre A e B só funciona se B enviar o pacote primeiro

Eu tenho dois computadores Linux separados, A e B, que precisam se comunicar via UDP na porta 3000. Cada um deles está atrás de um roteador diferente e tenho regras de encaminhamento de porta configuradas em cada roteador.

Por alguma razão, a única maneira de B receber pacotes UDP de A é se B enviar um pacote para A primeiro.

Caso de trabalho:

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

# Computer B Initiates
netcat -u 1.2.3.4 3000

No caso acima, os dois se “conectam” via netcat, e posso enviar e receber dados nos dois sentidos. Isso me leva a acreditar que não se trata de um problema de encaminhamento ou roteamento de porta.

Caso quebrado:

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

# Computer A Initiates
netcat -u 5.6.7.8 3000

Neste caso quebrado, os dois não conseguem "conectar-se" via netcat e não consigo enviar nenhum dado entre os terminais.

Também tentei usar ferramentas diretas de envio de pacotes para enviar pacotes UDP entre A e B. A mesma coisa acontece: B não consegue receber nada de A até que B envie um pacote para A.

Não tenho ideia de por que algo assim aconteceria, especialmente com o UDP. Alguma idéia do que poderia estar causando o problema?

EDITAR

Verificado o encaminhamento de porta em B. Aqui está a configuração atual do 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 

Estou faltando alguma coisa na minha configuração do iptables para o encaminhamento adequado de qualquer lugar: 3000 para 192.168.3.2:3000 para UDP?

informação relacionada