我在使用 iptables 更改广播数据包的目标地址时遇到了麻烦。我读到过好几处文章说 iptables/Linux 不会转发广播数据包,所以我正在寻找替代方案。
我的网络设置为 /30,因此广播流量在 xxx3 处发送给我。我尝试在本地计算机上打开子网,这样 xxx3 就不再我的广播地址,但数据包的目标 MAC 地址是 ff:ff:ff:ff:ff:ff:xx:xx:xx:xx:xx:xx:xx:xx,所以我认为它仍然被解释为广播数据包。
有没有办法改变数据包的目标 MAC 地址?
除了 iptables 之外,还有其他工具可以执行此操作吗?
如果我无法解决这个问题,我想我会在本地接受这个数据包,并编写一个程序将数据包数据发送给所需的接收者。有什么理由不可以吗?
谢谢!
答案1
您希望连接两个相同的网络。您需要执行 SNAT 和 DNAT,以便网络 A 认为网络 B 具有不同的地址。但是,您为什么要转发广播数据包?如果是为了让 SMB 和自动发现协议等协议正常工作,那么当它们从广播网络外部收到回复时,它们可能无论如何都无法正常工作。
如果您想要拥有唯一的地址,而不是 NAT,那么您需要的就是桥接。15 年前,我使用 OpenBSD 实现了这一点。我想在位于同一子网的两组计算机之间插入防火墙。这很容易,而且效果很好。Linux 当时无法做到这一点(可以桥接,但不能使用防火墙),今天我认为这应该是可能的。
答案2
如果我想将所有流量从一个接口传输到另一个接口,使用网桥是可行的,但是,我需要将部分流量保留在本地。
据我所知,使用 iptables 转发广播数据包是不可能的。最后我只能编写一个程序,在不同的接口上重新传输收到的数据包。