포트 3000에서 UDP를 통해 통신해야 하는 두 개의 별도 Linux 컴퓨터 A와 B가 있습니다. 이들은 각각 다른 라우터 뒤에 있으며 각 라우터에 포트 전달 규칙이 설정되어 있습니다.
어떤 이유로 B가 A로부터 UDP 패킷을 수신할 수 있는 유일한 방법은 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을 통해 "연결"될 수 없으며 두 끝점 간에 데이터를 보낼 수 없습니다.
또한 A와 B 사이에 UDP 패킷을 보내기 위해 직접 패킷 전송 도구를 사용해 보았습니다. 같은 일이 발생합니다. 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
UDP의 경우 3000에서 192.168.3.2:3000으로의 적절한 전달을 위해 iptables 구성에 뭔가가 누락되어 있습니까?