在一个运行olsr的路由器上,有四个端口/接口,连接的设备在其中相互通信olsr。
现在我不想为每个接口使用一个IP地址,而是将它们全部桥接起来,在桥接器上只设置一个IP地址。
现在的问题是,这些设备不应该在第2层看到彼此,否则olsr路由会改变错误的方式(因为网桥)。这些设备只能由OLSR在第3层路由。好的,有一个选项可以使用ebtables…
我已经读过了,但这并不是我想要的。
因此,我试图找出如何允许每个连接的设备与路由器进行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规则以使其正确工作?

最佳答案

当一台设备想要与另一台设备通话时,发送设备会查看第三层目标地址。然后:
如果目标层3地址与发送设备位于同一网络中,则
设备将在arp缓存中查找(发送一个arp,它是第二层的
广播(如果不在缓存中)以确定第2层(Mac)
目标设备的地址,以便第3层数据包可以
封装在第二层框架中。然后,第2层帧被发送到接口。
如果目标第3层地址位于不同的网络中,则
发送设备将使用网关的第2层(MAC)地址作为
目标层2地址。网关(路由器)丢弃
从第3层数据包中的第2层帧,将其路由到另一个
接口,并重复该过程以获取新的第2层地址和
在发送前将第3层包封装在新的第2层帧中
从界面出来。
根据您在接口之间阻止第2层的要求,同一网络中的一个接口上的设备与另一个接口上的设备永远无法联系到另一个设备,因为它无法通过第2层与它联系。
如果需要使用给定的公共地址范围,可以将该范围分为4/31个子网。这给每个链路两个IP地址,每个链路在不同的网络中。第三层边界(路由器)将阻塞其接口之间的第二层。剩下的都由路由来处理。
你真的需要理解这一点,它是非常基本的网络。不要误入歧途,但似乎你应该雇一个有适当技能的人,花一个小时或一天建立你的人际网络。

10-07 18:22