Linux:网桥上的端口隔离以正确使用OLSR

时间:2015-09-16 22:37:30

标签: linux networking ebtables

在运行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规则以使这项工作成为正确的方法?

2 个答案:

答案 0 :(得分:1)

当一个设备想要与另一个设备通话时,发送设备会查看第3层目标地址。然后:

  • 如果目标第3层地址与发送设备在同一网络中,则为 设备将查看ARP缓存(发送ARP为第2层 广播,如果它不在缓存中)来确定第2层(MAC) 目标设备的地址,以便第3层数据包可以 封装在第2层框架中。然后将第2层帧发送出接口。
  • 如果目标第3层地址位于不同的网络中,则为 发送设备将使用网关的第2层(MAC)地址作为 目标第2层地址。网关(路由器)丢弃 来自第3层数据包的第2层帧,将其路由到不同的帧 接口,并重复该过程以获得新的第2层地址和 在发送之前将第3层数据包封装在新的第2层帧中 它出了界面。

根据您要求阻止接口之间的第2层,同一网络中一个接口上的设备与另一个接口上的设备之间的设备将永远无法联系其他设备,因为它无法通过层与其联系 - 2。

如果您需要使用您提供的公共地址范围,则可以将该范围划分为四个/ 31个子网。这为每个链路提供了两个IP地址,每个链路位于不同的网络中。第3层边界(路由器)将阻止其接口之间的第2层。路由将负责其余部分。

你真的需要理解这一点;它非常基本的网络。不要采取错误的方式,但似乎你应该雇用具有适当技能的人一小时或一天来建立你的网络。

答案 1 :(得分:0)

简单到将所有端口放入桥接器br0然后:

ebtables -P FORWARD DROP
ip link set br0 promisc on

(在ubnt edgerouter上按预期工作,但之前也在linux盒子上测试过,所以也应该在那里工作)