在运行OLSR的路由器上,有四个端口/接口,其中连接的设备互相通信OLSR。 现在我不想为每个接口使用IP地址,而是将它们全部桥接,并在网桥上只设置一个IP地址。
现在的问题是,这些设备不应该在layer2上看到对方,否则olsr路由会改变错误的方式(因为桥接)。这些设备应仅由OLSR在第3层路由。好的,所以可以选择使用ebtables ......
我已经阅读了this post,但它并不是我想要的。 因此,我试图弄清楚如何允许每个连接的设备将OLSR与路由器通信,同时拒绝所有连接的设备在第2层上看到彼此。
# deny talking to each other
ebtables -P FORWARD DROP
ebtables -F FORWARD
运行良好,但是路由器本身没有看到任何连接的设备,所以我想我需要允许接口与路由器本身通信。
# allow port eth1
ebtables -F FORWARD -i eth1 -j ACCEPT
ebtables -F FORWARD -o eth1 -j ACCEPT
但是这样做太多了,效果就像将策略设置为接受一样。
我应该如何设置ebtables规则以使这项工作成为正确的方法?
答案 0 :(得分:1)
当一个设备想要与另一个设备通话时,发送设备会查看第3层目标地址。然后:
根据您要求阻止接口之间的第2层,同一网络中一个接口上的设备与另一个接口上的设备之间的设备将永远无法联系其他设备,因为它无法通过层与其联系 - 2。
如果您需要使用您提供的公共地址范围,则可以将该范围划分为四个/ 31个子网。这为每个链路提供了两个IP地址,每个链路位于不同的网络中。第3层边界(路由器)将阻止其接口之间的第2层。路由将负责其余部分。
你真的需要理解这一点;它非常基本的网络。不要采取错误的方式,但似乎你应该雇用具有适当技能的人一小时或一天来建立你的网络。
答案 1 :(得分:0)
简单到将所有端口放入桥接器br0然后:
ebtables -P FORWARD DROP
ip link set br0 promisc on
(在ubnt edgerouter上按预期工作,但之前也在linux盒子上测试过,所以也应该在那里工作)