我目前正在尝试开发一个路由器应用程序,该应用程序将安全包装器应用于两个接口之间的数据包。该协议是 BACnet,基于 UDP 运行。布局可以在此处的图像中看到:
在大多数情况下,一切都运转良好。路由器应用程序可以与控制器和设备模拟器正常通信。当路由器传输广播数据包时(这些是 BACnet 规范所要求的),我的问题就出现了。发送到 192.168.56.255 的任何数据包都会被 192.168.39.4 接收,所有发送到 192.168.39.255 的数据包都会被 192.168.56.101 接收。
这不是我怀疑的行为,因为它们位于不同的子网中,所以我假设 linux 内核正在我的鼻子底下做一些秘密路由,因为我在接口 enp0s8、enp0s9 或 lo 上看不到wireshark中的任何内容 - 我只需查看数据包到达路由器应用程序的应用程序层即可。
我已经禁用了 ipv4 转发(sysctl 中的 net.ipv4.ip_forward = 0),并且尝试了 iptables 转发,但这没有任何作用。我还运行了“ip route show table local”并删除了与我的两个接口相关的本地路由 - 这阻止了另一个接口上接收广播数据包,但阻止了与我的主机的所有通信。
有没有一种简单的方法来阻止两个接口之间的所有网络流量?