1

在运行 OLSR 的路由器上,有四个端口/接口,连接的设备在这些端口/接口之间相互通信 OLSR。现在我不喜欢为每个接口使用一个 IP 地址,而是将它们全部桥接并在桥上只设置一个 IP 地址。

现在的问题是,这些设备不应该在 layer2 上看到彼此,否则 olsr 路由会改变错误的方式(因为网桥)。这些设备应仅由 OLSR 在第 3 层路由。好的,所以有一个使用 ebtables 的选项......

我已经阅读了这篇文章,但这并不是我想要的。所以我试图弄清楚如何允许每个连接的设备与路由器交谈 OLSR,同时拒绝所有连接的设备在 layer2 上看到对方。

# 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 规则以使这项工作以正确的方式工作?

4

2 回答 2

1

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

  • 如果目标第 3 层地址与发送设备在同一网络中,则设备将在 ARP 缓存中查找(如果不在缓存中,则发送 ARP,即第 2 层广播)以确定层- 2 (MAC) 目的设备的地址,以便将第 3 层数据包封装到第 2 层帧中。然后将第 2 层帧从接口发送出去。
  • 如果目的三层地址在不同的网络中,发送设备将使用网关的二层(MAC)地址作为目的二层地址。网关(路由器)丢弃三层数据包中的二层帧,将其路由到不同的接口,并重复该过程以获得新的二层地址并将三层数据包封装在新的二层中帧在将其发送出接口之前。

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

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

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

于 2015-09-17T00:01:32.560 回答
0

它就像将所有端口放入网桥 br0 一样简单,然后:

ebtables -P FORWARD DROP
ip link set br0 promisc on

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

于 2015-09-21T21:34:53.290 回答