DNAT 从广播转为单播后,数据包被丢弃

DNAT 从广播转为单播后,数据包被丢弃

我的普通网络 (192.168.1.0/24) 和 IoT 网络 (192.168.2.0/24) 位于不同的 VLAN(分别为设备 switch0 和 switch0.30)。我的防火墙设置为普通网络的客户端可以访问 IoT 网络上的设备,但反过来不行。所有这些都是在 Ubiquity edgerouter X 上设置的。

现在我有了一个新的 IoT 设备,它有一个配套的 Android 应用程序。当我将 Android 设备连接到 IoT 网络时,该应用程序运行良好。

为了进行发现,应用程序会将一个空的 UDP 包发送到端口 9987 上的 255.255.255.255。然后,设备会向源 IP 发送一个空的单播包。这样,应用程序就知道了设备的 IP,并可以通过另一个端口直接进行通信。

当我的 Android 设备连接到我的普通网络时,我也想使用此应用程序。这种发现机制显然在此设置中不起作用,因为这两个网络是不同的广播域。路由器永远不会将广播路由到另一个网络。

我通过 iptables 添加了以下规则:

iptables -t nat -I PREROUTING -i switch0 -p udp --dport 9987 -j DNAT --to-destination 192.168.2.183:9987

当我启动应用程序时,我可以看到符合规则的包:

iptables -t nat -L PREROUTING -v

当我使用 监控传入流量时,tcpdump -i switch0 port 9987我可以看到传入的数据包。但我永远看不到通过 switch0.30 传出的数据包tcpdump -i switch0.30 port 9987

正如cat /proc/sys/net/ipv4/conf/*/rp_filter所有显示的那样0,我认为包(经过 NAT 后)接下来将进入表FORWARD中的链filter。因此我在那里添加了一个 LOG:

iptables -t filter -I FORWARD -p UDP --dport 9987 -j LOG

但该规则下的包裹计数仍为 0。

有人能告诉我我错过了什么吗?

相关内容