7. 高级网桥功能

在这里,我们将介绍新的网桥代码的一些高级功能。

7.1. 生成树协议

告诉我...

  • 您是网络管理员吗...?

  • 您的以太网树顶部有一个交换机吗...?

  • 您是否做过交换机冒烟的噩梦...?

  • 您的公司不是很富有,无法提供另一个冗余交换机来等待您插入跳线...?

  • 您不想把床放在主网络节点附近来插线...?

不要等到您变成另一个神经衰弱的人。加入 Linux 网桥社区,享受启用 STP 的室内场景为您带来的放松。

好了,让我们结束商业广告,回到 Linux 和网桥。看看 Linux-bridge 邮件列表中的这个小帖子。

来自 bridge@openrock.net 的 STP 帖子(不再有效)

您能给我一些关于多网桥场景的提示吗?
STP “心跳” 机制是否也适用于具有两个以上网卡的网桥?
它启动有多快,我能做些什么?

您能给我一些关于多网桥场景的提示吗?

您可以简单地设置两个 “镜像” 网桥。您的网桥中有两个网络接口?设置镜像网桥,使其也具有两个网络接口,并将每个接口连接到一个子网。这将无需配置即可工作。

注意:请确保您已启用生成树协议。如果您没有使用 brctl,这应该没问题,因为在 Linux 中,默认情况下它是启用的。要检查,您可以检查网桥是否每 2 秒向以下地址发送一个数据包0180c2000000如果发送,则 STP 已开启。STP 是必需的,以便在任何给定时间只有一个网桥处于活动状态。

注意:为了能够在您的网络中看到格式良好的 stp 数据包,请查看网桥主页上的 tcpdump 补丁。

“主” 网桥默认每 2 秒发送一次 STP 数据包。“从” 网桥将接收这些数据包,并注意到主网桥仍然启动。如果从网桥在 20 秒内(最大消息生存时间参数)没有收到数据包,它将启动接管程序。从接管程序启动的那一刻起,网桥完全运行大约需要 30 秒(两倍的转发延迟参数)。

STP “心跳” 机制是否也适用于具有两个以上网卡的网桥?

是的,它适用于任意数量的接口。您可以根据自己的意愿发明奇异的拓扑结构。您可以使用多个(冗余)网桥-网桥连接,您可以插入环路,等等。STP 代码将始终找到最小生成树。网桥代码甚至可以处理任何数量的接口丢失。如果有两个具有相同连接的冗余网桥,则其中一个网桥上的接口丢失将导致另一个网桥接管到该特定接口的转发。现在这不是很棒吗?:)

它启动有多快,我能做些什么?

如果您认为 50 秒太长了——我想您应该这么认为;唉,IEEE 规范给了我们这些默认值——您可以调整这些参数。如果您将 hello 时间(STP 数据包间隔)从 2 秒设置为 1 秒,您可以安全地将消息生存时间参数设置为 4 秒。然后您可以将转发延迟设置为 4 秒,这将总共给您大约 12 秒的接管时间。

通过 STP 实现的伟大之处在于冗余并行桥接场景,具有自动接管功能。在基于 stp 的网络中,网桥始终尝试通过(按路径成本)最短路径发送数据报。只有在该路径上,网桥才进行转发,此最短路径之间的所有其他路径都被阻止。如果路径中断,网桥会协商下一个最短路径。因此,重复路径不会破坏网络,而是带来更高的安全性……有关故障安全连接的示例设置,请参阅第 8 节

7.2. 网桥和 IP 链

关于网桥的通常想法是不允许任何类似防火墙的功能,但是由于一些人向 Lennert 询问了关于网桥转发的 ipchains 防火墙,他实现了它。

重要提示:如果您想这样做,您将需要应用特殊的 ip-chain-bridge-patch(也可在网桥主页上找到)。

一旦您正确设置好一切,桥接代码将检查每个要转发的数据包,并对照与网桥同名的 ipchains 链进行检查。

因此...如果 eth0 上的数据包要转发到 eth1,并且这些接口都是网桥组 br0 的一部分,则桥接代码将对照名为“br0”的链检查数据包。

警告

如果该链不存在,则数据包将被转发。因此,如果您想进行防火墙设置,则必须自己创建链。

示例 10. 简单的网桥防火墙设置

Example:
# brctl addbr br0                                   (1)
# brctl addif br0 eth0                              (2)
# brctl addif br0 eth1                              (3)
# ifconfig br0 10.0.0.254                           (4)
# ipchains -N br0                                   (5)
# ipchains -A br0 -s 10.0.0.1/8 -i eth0 -j DENY     (6)
      
(1)
创建一个名为br0
(2)(3)
的网桥接口。
(4)
将 eth0 和 eth1 放入网桥中。
(5)
为网桥分配一个常规 IP 地址。IP 地址取自专用网络 10.X.X.X(A 类)。br0
(1)(5)

创建一个名为

注意br0这里必须具有相同的名称(

(6)
拒绝 eth0 上来自 10.X.X.X 的所有流量。