UDP zwischen A und B funktioniert nur, wenn B zuerst ein Paket sendet

UDP zwischen A und B funktioniert nur, wenn B zuerst ein Paket sendet

Ich habe zwei separate Linux-Computer, A und B, die über UDP auf Port 3000 kommunizieren müssen. Sie befinden sich jeweils hinter einem anderen Router und ich habe auf jedem Router Regeln zur Portweiterleitung eingerichtet.

Aus irgendeinem Grund kann B nur dann UDP-Pakete von A empfangen, wenn B zuerst ein Paket an A sendet.

Arbeitsfall:

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

# Computer B Initiates
netcat -u 1.2.3.4 3000

Im obigen Fall „verbinden“ sich die beiden über Netcat, und ich kann in beide Richtungen Daten senden und empfangen. Dies lässt mich annehmen, dass es sich hier nicht um ein Portweiterleitungs- oder Routingproblem handelt.

Defekter Fall:

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

# Computer A Initiates
netcat -u 5.6.7.8 3000

In diesem fehlerhaften Fall können die beiden keine „Verbindung“ über Netcat herstellen und ich kann keine Daten zwischen den Endpunkten senden.

Ich habe auch versucht, mit einfachen Paketsendetools UDP-Pakete zwischen A und B zu senden. Dasselbe passiert: B kann nichts von A empfangen, bis B ein Paket an A sendet.

Ich habe keine Ahnung, warum so etwas passieren könnte, insbesondere bei UDP. Irgendwelche Ideen, was das Problem verursachen könnte?

BEARBEITEN

Habe die Portweiterleitung auf B überprüft. Hier ist die aktuelle iptables-Konfiguration:

$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 

Übersehe ich in meiner iptables-Konfiguration etwas für die ordnungsgemäße Weiterleitung von anywhere:3000 an 192.168.3.2:3000 für UDP?

verwandte Informationen