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

标签 linux networking ebtables

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

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

我已经读过 this post ,但这并不是我要找的东西。 所以我想弄清楚如何允许每个连接的设备与路由器通信 OLSR,同时拒绝所有连接的设备在第 2 层上相互看到。

# deny talking to each other
ebtables -P FORWARD DROP
ebtables -F FORWARD

运行良好,但路由器本身看不到任何连接的设备,所以我想我需要允许接口(interface)与路由器本身通信。

# allow port eth1
ebtables -F FORWARD -i eth1 -j ACCEPT
ebtables -F FORWARD -o eth1 -j ACCEPT

但是这样允许的太多了,效果和把policy设置回accept一样。

我应该如何设置 ebtables 规则以使其以正确的方式工作?

最佳答案

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

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

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

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

你真的需要明白这一点;它非常基本的网络。不要误解这一点,但您似乎应该雇用具备适当技能的人来设置您的网络一小时或一天。

关于Linux:桥上的端口隔离以正确使用 OLSR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32619904/

相关文章:

c - SOCK_RAW 套接字中缺少 ARP 数据包

networking - 社交网络的设计提要

python - "Python"通过mroutes解析的方式是什么

linux - linux 调度程序中上下文切换的基准

linux - Unix - 如何打印文件的最后几行并且每次都忽略第一个相同的字符?

c# - 识别占用空间小的属性名称

linux - 如何在 Linux 虚拟网桥中创建 DHCP 监听规则

docker - 如何在 Docker 中使用 ebtables?

mysql - Ubuntu 和 Windows 上相同的 mysql 数据库