如图所示,我有 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 ping B 的 eth0 接口。
接下来,我在 B 上设置端口转发,以便它可以将 UDP 数据包传递到同一端口 14550 上的 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 版本,因此我能做和不能做的事情会受到一些限制。