У меня есть два отдельных компьютера 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?