UDP entre A y B solo funciona si B envía el paquete primero

UDP entre A y B solo funciona si B envía el paquete primero

Tengo dos computadoras Linux separadas, A y B, que necesitan comunicarse a través de UDP en el puerto 3000. Cada una está detrás de un enrutador diferente y tengo reglas de reenvío de puertos configuradas en cada enrutador.

Por alguna razón, la única forma en que B puede recibir paquetes UDP de A es si B envía un paquete a A primero.

Caso de trabajo:

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

# Computer B Initiates
netcat -u 1.2.3.4 3000

En el caso anterior, los dos se "conectan" a través de netcat y puedo enviar y recibir datos en ambos sentidos. Esto me lleva a creer que no se trata de un problema de enrutamiento o reenvío de puertos.

Caso roto:

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

# Computer A Initiates
netcat -u 5.6.7.8 3000

En este caso roto, los dos no pueden "conectarse" a través de netcat y no puedo enviar ningún dato entre ninguno de los puntos finales.

También intenté usar herramientas de envío de paquetes directo para enviar paquetes UDP entre A y B. Sucede lo mismo, B no puede recibir nada de A hasta que B envíe un paquete a A.

No tengo idea de por qué sucedería algo como esto, especialmente con UDP. ¿Alguna idea de qué podría estar causando el problema?

EDITAR

Verificó el reenvío de puertos en B. Aquí está la configuración actual de 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 

¿Me falta algo en mi configuración de iptables para el reenvío adecuado de cualquier lugar: 3000 a 192.168.3.2:3000 para UDP?

información relacionada