A와 B 사이의 UDP는 B가 먼저 패킷을 보내는 경우에만 작동합니다.

A와 B 사이의 UDP는 B가 먼저 패킷을 보내는 경우에만 작동합니다.

포트 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 구성에 뭔가가 누락되어 있습니까?

관련 정보