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?