그림과 같이 3개의 Linux 장치가 서로 연결되어 있습니다. 장치 A와 B는 Yocto를 실행하는 내장형 컴퓨터입니다. 장치 C는 Ubuntu PC입니다. 네트워크는 완전히 독립적입니다(인터넷이나 다른 어떤 외부 연결도 없음).
장치 A의 애플리케이션은 포트 14550에서 UDP 패킷을 보내고 있으며 장치 C가 패킷을 수신하길 원합니다. 이 애플리케이션의 약간의 차이로 인해 A가 UDP 패킷을 192.168.22.102(10.1.1.10 대신)로 보내도록 했습니다. 문제 없습니다. 장치 A에 경로를 추가했습니다.
#Device A
ip route add 192.168.0.0/16 via 10.1.1.10 dev wlan0-ap
A에서 B의 eth0 인터페이스를 ping할 수 있기 때문에 경로가 작동하는지 확인했습니다.
다음으로 B가 동일한 포트 14550에서 UDP 패킷을 C로 전달할 수 있도록 포트 전달을 설정했습니다.
#Device B
echo '1' > /proc/sys/net/ipv4/conf/wlan0/forwarding
echo '1' > /proc/sys/net/ipv4/conf/eth0/forwarding
echo '1' > /proc/sys/net/ipv4/ip_forward
iptables -A PREROUTING -t nat -p udp -i wlan0 --dport 14550 -j DNAT --to-destination 192.168.22.7:14550
iptables -A FORWARD -p udp -d 192.168.22.7 --dport 14550 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
그리고 들어오고 나가는 포트 14550을 엽니다.
#Device B
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p udp --dport 14550 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p udp --sport 14550 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -S
다음은 장치 B의 출력입니다.
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p udp -m udp --dport 14550 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -d 192.168.22.7/32 -p udp -m udp --dport 14550 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p udp -m udp --sport 14550 -m conntrack --ctstate ESTABLISHED -j ACCEPT
마지막으로 gufw를 사용하여 장치 C의 포트 14550에서 들어오는 UDP 패킷을 허용했습니다.
아쉽게도 장치 C에는 UDP 패킷이 표시되지 않습니다. 기본 단계가 누락되었나요? 어떤 문제 해결 단계를 시도해야 합니까? 장치 A와 B는 많은 기본 웹 애플리케이션의 BusyBox 버전을 실행하고 있으므로 내가 할 수 있는 것과 할 수 없는 것에 몇 가지 제한이 있다는 점을 명심하십시오.