8. 实用设置示例

这是一个真实世界的示例,目前在我们的网络中运行。即使这肯定不是一个非常常见的情况,但也可能很有用。

我不得不解决一个小的硬件不兼容问题。HP-VG(语音级)100Mbit 网络与快速以太网不兼容。由于既没有资金也没有意愿更换设备,并且需要扩展系统,我不得不找到一个解决方案,该方案必须是 a) 稳定的,并且 b) 廉价的。

当然,购买 HP 模块化交换机不符合条件 b)。所以我记起我听说过 Linux 网桥,它可以自动满足条件 a) 和 b)。

因此,在很久以前,我成功地在两个不兼容的网络之间设置了一个网桥。它的第一个硬件布局如图 1 所示。

图 1. 旧网桥方案的硬件设置

我之前的 Linux 网桥的旧设置

它被配置为一个透明的网络组件,意味着它不参与网络,而只是桥接它。最初它是在 SuSE 5.3 发行版的 kernel 2.0.35 上设置的。

下一个问题立刻出现。连接大型网段的单个网桥可能是 c) 瓶颈,并且 d) 如果它崩溃,可能成为网络管理员被干掉的原因。所以我试图找到一些解决该问题的方法。

接下来发生的事情是,我发现了一些提示,表明一位新的维护者接管了网桥代码。稍后在网桥邮件列表上收到了一些邮件,如 第 7.1 节 所示,我变得更聪明了。新的模块化网桥代码完全满足了我的需求。

新维护者:Lennert Buytenhek。 他的项目页面可以在 http://www.math.leidenuniv.nl/~buytenh/bridge/ 找到。恕我直言,他做得非常出色。非常感谢。

8.1. 硬件设置

我从邮件列表讨论中获得的思路和提示,如 第 7.1 节 所示,引导出了一个新的硬件设置,如图 2 所示。该设置旨在提供一台默认机器(猜猜是哪一台)。该网桥有 3 张 HP 网卡,每张卡都连接到一个 HP VG15 集线器。3com 网卡连接到一个 3com Superstack 快速以太网交换机。

图 2. 多网桥方案的硬件设置

我的本地 Linux 以太网多网桥的实际工作设置

此设置不仅可以防止任何一个网桥接口发生故障,还可以防止其中一个网桥完全瘫痪。相对于旧设置 图 1 的另一个优点是,单个集线器是交换式的。这意味着从 VG15 集线器上的一个端口发送的数据报最多阻塞 30 个端口,最少阻塞 15 个端口,而不是阻塞所有 45 个端口。此外,连接到旧网桥的集线器的故障会导致整个 HP 网段崩溃。使用新代码,只有连接到故障集线器的机器将无法再接收数据。

8.2. 软件设置

对于两个网桥,设置完全相同(除了稍后将讨论的网桥优先级)。该机器是通过 SuSE 6.4 发行版安装的,并安装了原始的未打补丁的内核源代码。此时只有最小的配置,没有额外的硬件或网络设置。

基本设置根据本文档开头的描述。我额外做的事情是将 SuSE 6.4 发行版的未打补丁的 2.2.14 源代码升级到 2.2.15 版本,如 示例 11 所示。

示例 11. 将内核从 2.2.14 升级到 2.2.15

root@mbb-1:~ # cd /usr/src/linux-2.2.14
root@mbb-1:/usr/src/linux-2.2.14 # patch -p1 \
    /usr/local/download/kernel/patch-2.2.15
patching file ........................
patching file ...................
...
..
root@mbb-1:/usr/src/linux-2.2.14 # cd ..
root@mbb-1:/usr/src # mv linux-2.2.14 linux-2.2.15
root@mbb-1:/usr/src # rm linux
root@mbb-1:/usr/src # ln -s linux-2.2.15 linux
      

下一步是应用网桥补丁,如 示例 12 所示。

示例 12. 应用内核补丁

root@mbb-1:/usr/src # cd /usr/src/linux-2.2.15
root@mbb-1:/usr/src/linux-2.2.15 # patch -p1 < \
    bridge-0.0.5-against-2.2.15.diff
patching file ........................
patching file ...................
...
..
      

之后,我选择了将网桥代码编译为模块,如 示例 13 所示。

示例 13. 配置内核

root@mbb-1:/usr/src/linux-2.2.15 # make config

..

*
* Code maturity level options
*
Prompt for development and/or incomplete code/drivers (CONFIG_EXPERIMENTAL)
[N/y/?] Y

..


802.1d Ethernet Bridging (CONFIG_BRIDGE) [N/y/m/?] (NEW) m

..
      

顺便说一句,我还选择了将我的网卡的驱动程序编译为模块,这导致了3c95x.ohp100.o.

root@mbb-1:/usr/src/linux-2.2.15 # make dep clean zImage \
  modules modules_install zlilo

..

root@mbb-1:/usr/src/linux-2.2.15 # init 6
      

在重启之后,我从运行级别 1 开始,将所有网络都排除在运行系统之外。这让我有机会逐步检查设置。

命令 modprobe -v bridge 工作正常,没有任何警告,所以这部分没问题。接下来我编辑了我的/etc/modules.conf通过别名我的网卡驱动程序,如 示例 14示例 15 所示。我不需要使用选项,所有卡都正确识别,正如我通过 cat /proc/modulescat /proc/interruptscat /proc/ioports 检查的那样。

示例 14./etc/modules.confmbb-1

# Aliases - specify your hardware
alias eth0             3c59x
alias eth1             hp100
alias eth2             hp100
alias eth3             hp100
      

示例 15./etc/modules.confmbb-2

# Aliases - specify your hardware
alias eth0             3c509
alias eth1             hp100
alias eth2             hp100
alias eth3             hp100
      

所以接下来应该是逐步设置网桥及其接口。因为我比较懒,所以我直接展示我为设置准备的 init 脚本。

重要提示: 当然,如果您想使用它,您需要根据您的系统调整脚本。请记住,我正在为 SuSE 发行版的设置编写此文档。

示例 16. 网桥 Init 脚本

#! /bin/bash
# Copyright (c) 2000 Uwe B�hme.  All rights reserved.
#
# Author: Uwe B�hme <uwe@bnhof.de>, 2000
#
#
# /sbin/init.d/bridge
#

. /etc/rc.config

return=$rc_done
case "$1" in

    start)
        echo "Starting service bridge mueb"
        brctl addbr mueb  ||  return=$rc_failed                             (1)
        brctl setbridgeprio mueb 0 || return=$rc_failed                     (2)
        brctl addif mueb eth0  ||  return=$rc_failed                        (3)
        brctl addif mueb eth1  ||  return=$rc_failed                        (4)
        brctl addif mueb eth2  ||  return=$rc_failed                        (5)
        brctl addif mueb eth3  ||  return=$rc_failed                        (6)
        ifconfig eth0 0.0.0.0  ||  return=$rc_failed                        (7)
        ifconfig eth1 0.0.0.0  ||  return=$rc_failed                        (8)
        ifconfig eth2 0.0.0.0  ||  return=$rc_failed                        (9)
        ifconfig eth3 0.0.0.0  ||  return=$rc_failed                        (10)
        brctl sethello mueb 1  ||  return=$rc_failed                        (11)
        brctl setmaxage mueb 4  ||  return=$rc_failed                       (12)
        brctl setfd mueb 4  ||  return=$rc_failed                           (13)

        echo -e "$return"
        ;;

    stop)
        echo "Shutting down service bridge mueb"
        brctl delif mueb eth3  ||  return=$rc_failed                        (14)
        brctl delif mueb eth2  ||  return=$rc_failed                        (15)
        brctl delif mueb eth1  ||  return=$rc_failed                        (16)
        brctl delif mueb eth0  ||  return=$rc_failed                        (17)
        brctl delbr mueb  ||  return=$rc_failed                             (18)
        rmmod bridge || return=$rc_failed                                   (19)

        echo -e "$return"
        ;;

    status)
        ifconfig mueb
        brctl showbr mueb
	;;

    restart)
        $0 stop && $0 start || return=$rc_failed
        ;;

    *)
        echo "Usage: $0 {start|stop|status|restart}"
        exit 1
esac

test "$return" = "$rc_done" || exit 1
exit 0
        

(1)
此命令创建一个名为mueb的新虚拟接口(网桥实例),并启动网桥模块。

注意: 至少在我的系统中是这样。也许您需要启用内核模块加载器。

(2)
在这里,脚本将网桥的优先级(相对于网络中的其他网桥)设置为 0。这表明只要没有其他优先级级别更低的网桥可用,此网桥将成为根桥。

重要提示: 在备份网桥的 init 脚本中,缺少此行,使其保留默认优先级 100。

(3)(4)(5)(6)
将以太网接口绑定为网桥中的一个端口。
(7)(8)(9)(10)
移除任何可能干扰的 IP 地址,并启动接口。
(11)
将网桥的 hello 时间设置为一秒,可以缩短网络内部网桥的最大生存时间值。
(12)
设置网桥在开始接管过程之前等待的时间为一个较短的周期。
(13)
强制网桥比默认时间更早地转发。
(14)(15)(16)(17)
将以太网从网桥实例中移除。
(18)
销毁网桥实例。
(19)
移除网桥模块。

为了完善您的设置并能够从远程访问网桥,您现在可以将您的网桥实例配置为好像它是一个物理存在的网络接口。您可以为其分配一个合适的网络掩码的 IP 地址。从您网络中的哪个网段访问都无关紧要,您都可以使用此 IP 地址访问网桥。

8.3. 查看其工作

在这里,我想展示和解释正在运行的网桥是如何显示的。示例 17bridge@mbb-1 的输出是主网桥的输出,而在 示例 18 中您可以看到等待接管的备份网桥的输出。

示例 17. mbb-1 完全启动后的状态输出

mueb
 bridge id		0000.0800062815f6
 designated root	0000.0800062815f6
 root port		   0			path cost		   0
 max age		   4.00			bridge max age		   4.00
 hello time		   1.00			bridge hello time	   1.00
 forward delay		   4.00			bridge forward delay	   4.00
 ageing time		 300.00			gc interval		   4.00
 hello timer		   0.80			tcn timer		   0.00
 topology change timer	   0.00			gc timer		   3.80
 flags			


eth0 (1)
 port id		8001			state			forwarding
 designated root	0000.0800062815f6	path cost		 100
 designated bridge	0000.0800062815f6	message age timer	   0.00
 designated port	8001			forward delay timer	   0.00
 designated cost	   0			hold timer		   0.80
 flags			

eth1 (2)
 port id		8002			state			forwarding
 designated root	0000.0800062815f6	path cost		 100
 designated bridge	0000.0800062815f6	message age timer	   0.00
 designated port	8002			forward delay timer	   0.00
 designated cost	   0			hold timer		   0.80
 flags			

eth2 (3)
 port id		8003			state			forwarding
 designated root	0000.0800062815f6	path cost		 100
 designated bridge	0000.0800062815f6	message age timer	   0.00
 designated port	8003			forward delay timer	   0.00
 designated cost	   0			hold timer		   0.80
 flags			

eth3 (4)
 port id		8004			state			forwarding
 designated root	0000.0800062815f6	path cost		 100
 designated bridge	0000.0800062815f6	message age timer	   0.00
 designated port	8004			forward delay timer	   0.00
 designated cost	   0			hold timer		   0.80
 flags			
      

示例 18. mbb-2 完全启动后的状态输出

mueb
 bridge id		0064.00a024d04cd6
 designated root	0000.0800062815f6
 root port		   1			path cost		 100
 max age		   4.00			bridge max age		   4.00
 hello time		   1.00			bridge hello time	   1.00
 forward delay		   4.00			bridge forward delay	   4.00
 ageing time		 300.00			gc interval		   4.00
 hello timer		   0.00			tcn timer		   0.00
 topology change timer	   0.00			gc timer		   2.39
 flags			


eth0 (1)
 port id		8001			state			forwarding
 designated root	0000.0800062815f6	path cost		 100
 designated bridge	0000.0800062815f6	message age timer	   0.42
 designated port	8001			forward delay timer	   0.00
 designated cost	   0			hold timer		   0.00
 flags			

eth1 (2)
 port id		8002			state			blocking
 designated root	0000.0800062815f6	path cost		 100
 designated bridge	0000.0800062815f6	message age timer	   0.42
 designated port	8002			forward delay timer	   0.00
 designated cost	   0			hold timer		   0.00
 flags			

eth2 (3)
 port id		8003			state			blocking
 designated root	0000.0800062815f6	path cost		 100
 designated bridge	0000.0800062815f6	message age timer	   0.42
 designated port	8003			forward delay timer	   0.00
 designated cost	   0			hold timer		   0.00
 flags			

eth3 (4)
 port id		8004			state			blocking
 designated root	0000.0800062815f6	path cost		 100
 designated bridge	0000.0800062815f6	message age timer	   0.42
 designated port	8004			forward delay timer	   0.00
 designated cost	   0			hold timer		   0.00
 flags			
      

如果您浏览一下/var/log/messages示例 19示例 20 所示,您可以看到网桥是如何启动并决定如何履行其职责的。mbb-1 的网桥优先级值较低(参见 (9)),告诉它尝试成为根桥。正如您所看到的,mbb-1 转发所有端口,而 mbb-2 阻塞所有端口,除了 eth0。

示例 19. 来自 init 2mbb-1 消息

May 25 16:46:04 mbb-1 init: Switching to runlevel: 2
May 25 16:46:04 mbb-1 kernel: NET4: Ethernet Bridge 008 for NET4.0
May 25 16:46:04 mbb-1 kernel: device eth0 entered promiscuous mode
May 25 16:46:04 mbb-1 kernel: device eth1 entered promiscuous mode
May 25 16:46:04 mbb-1 kernel: device eth2 entered promiscuous mode
May 25 16:46:04 mbb-1 kernel: device eth3 entered promiscuous mode
May 25 16:46:04 mbb-1 kernel: mueb: port 4(eth3) entering listening state
May 25 16:46:04 mbb-1 kernel: mueb: port 3(eth2) entering listening state
May 25 16:46:04 mbb-1 kernel: mueb: port 2(eth1) entering listening state
May 25 16:46:04 mbb-1 kernel: mueb: port 1(eth0) entering listening state
May 25 16:46:08 mbb-1 kernel: mueb: port 4(eth3) entering learning state
May 25 16:46:08 mbb-1 kernel: mueb: port 3(eth2) entering learning state
May 25 16:46:08 mbb-1 kernel: mueb: port 2(eth1) entering learning state
May 25 16:46:08 mbb-1 kernel: mueb: port 1(eth0) entering learning state
May 25 16:46:12 mbb-1 kernel: mueb: port 4(eth3) entering forwarding state
May 25 16:46:12 mbb-1 kernel: mueb: topology change detected, propagating
May 25 16:46:12 mbb-1 kernel: mueb: port 3(eth2) entering forwarding state
May 25 16:46:12 mbb-1 kernel: mueb: topology change detected, propagating
May 25 16:46:12 mbb-1 kernel: mueb: port 2(eth1) entering forwarding state
May 25 16:46:12 mbb-1 kernel: mueb: topology change detected, propagating
May 25 16:46:12 mbb-1 kernel: mueb: port 1(eth0) entering forwarding state
May 25 16:46:12 mbb-1 kernel: mueb: topology change detected, propagating
      

示例 20. 来自 init 2mbb-2 消息

Jun  8 06:06:16 mbb-2 init: Switching to runlevel: 2
Jun  8 06:06:17 mbb-2 kernel: NET4: Ethernet Bridge 008 for NET4.0
Jun  8 06:06:17 mbb-2 kernel: device eth0 entered promiscuous mode
Jun  8 06:06:17 mbb-2 kernel: device eth1 entered promiscuous mode
Jun  8 06:06:17 mbb-2 kernel: device eth2 entered promiscuous mode
Jun  8 06:06:17 mbb-2 kernel: device eth3 entered promiscuous mode
Jun  8 06:06:17 mbb-2 kernel: mueb: port 4(eth3) entering listening state
Jun  8 06:06:17 mbb-2 kernel: mueb: port 3(eth2) entering listening state
Jun  8 06:06:17 mbb-2 kernel: mueb: port 2(eth1) entering listening state
Jun  8 06:06:17 mbb-2 kernel: mueb: port 1(eth0) entering listening state
Jun  8 06:06:17 mbb-2 kernel: mueb: port 2(eth1) entering blocking state
Jun  8 06:06:17 mbb-2 kernel: mueb: port 3(eth2) entering blocking state
Jun  8 06:06:17 mbb-2 kernel: mueb: port 4(eth3) entering blocking state
Jun  8 06:06:21 mbb-2 kernel: mueb: port 1(eth0) entering learning state
Jun  8 06:06:25 mbb-2 kernel: mueb: port 1(eth0) entering forwarding state
      

8.4. 网桥测试

为了检查所有承诺的功能是否真的在工作,我做了一些粗略的测试。消息日志在此处显示。

8.4.1. 撕裂跳线测试

我认为从网桥端口拔出跳线是一个非常好的真实生存测试。所以我一个接一个地拔出插座上的插头,看看发生了什么。为了不让您太紧张,让我先总结一下:它真的在工作。所有接管都在不到 12 秒内发生。

真正有趣的消息可以在 mbb-2 中找到。为了了解一切是如何启动的,我首先停止了网络服务。在 示例 21 中,您将看到由 init 2 引起的以及 “拔出插头,等待发生什么,然后放回” 的消息,顺序为 eth3、eth2、eth1、eth0。

注意: 我所做的是进行测试,并发布转储。编写精彩解释的人又是 Lennert。

示例 21. 网桥测试的 mbb-2 消息输出

Jun  8 06:06:16 mbb-2 init: Switching to runlevel: 2
Jun  8 06:06:17 mbb-2 kernel: NET4: Ethernet Bridge 008 for NET4.0
Jun  8 06:06:17 mbb-2 kernel: device eth0 entered promiscuous mode
Jun  8 06:06:17 mbb-2 kernel: device eth1 entered promiscuous mode
Jun  8 06:06:17 mbb-2 kernel: device eth2 entered promiscuous mode
Jun  8 06:06:17 mbb-2 kernel: device eth3 entered promiscuous mode
Jun  8 06:06:17 mbb-2 kernel: mueb: port 4(eth3) entering listening state
Jun  8 06:06:17 mbb-2 kernel: mueb: port 3(eth2) entering listening state
Jun  8 06:06:17 mbb-2 kernel: mueb: port 2(eth1) entering listening state
Jun  8 06:06:17 mbb-2 kernel: mueb: port 1(eth0) entering listening state                 (1)
Jun  8 06:06:17 mbb-2 kernel: mueb: port 2(eth1) entering blocking state
Jun  8 06:06:17 mbb-2 kernel: mueb: port 3(eth2) entering blocking state
Jun  8 06:06:17 mbb-2 kernel: mueb: port 4(eth3) entering blocking state
Jun  8 06:06:21 mbb-2 kernel: mueb: port 1(eth0) entering learning state
Jun  8 06:06:25 mbb-2 kernel: mueb: port 1(eth0) entering forwarding state                (2)
Jun  8 06:07:15 mbb-2 kernel: mueb: neighbour 0000.08:00:06:28:15:f6 lost on port 4(eth3) (3)
Jun  8 06:07:15 mbb-2 kernel: mueb: port 4(eth3) entering listening state                 (4)
Jun  8 06:07:19 mbb-2 kernel: mueb: port 4(eth3) entering learning state                  (5)
Jun  8 06:07:23 mbb-2 kernel: mueb: port 4(eth3) entering forwarding state                (6)
Jun  8 06:07:23 mbb-2 kernel: mueb: topology change detected, sending tcn bpdu            (7)
Jun  8 06:08:51 mbb-2 kernel: mueb: topology change detected, sending tcn bpdu            (8)
Jun  8 06:08:51 mbb-2 kernel: mueb: port 4(eth3) entering blocking state                  (9)
Jun  8 06:09:22 mbb-2 kernel: mueb: neighbour 0000.08:00:06:28:15:f6 lost on port 3(eth2) (10)
Jun  8 06:09:22 mbb-2 kernel: mueb: port 3(eth2) entering listening state
Jun  8 06:09:26 mbb-2 kernel: mueb: port 3(eth2) entering learning state
Jun  8 06:09:30 mbb-2 kernel: mueb: port 3(eth2) entering forwarding state
Jun  8 06:09:30 mbb-2 kernel: mueb: topology change detected, sending tcn bpdu
Jun  8 06:10:09 mbb-2 kernel: mueb: topology change detected, sending tcn bpdu
Jun  8 06:10:09 mbb-2 kernel: mueb: port 3(eth2) entering blocking state
Jun  8 06:10:10 mbb-2 kernel: mueb: retransmitting tcn bpdu                               (11)
Jun  8 06:10:41 mbb-2 kernel: mueb: neighbour 0000.08:00:06:28:15:f6 lost on port 2(eth1) (12)
Jun  8 06:10:41 mbb-2 kernel: mueb: port 2(eth1) entering listening state
Jun  8 06:10:45 mbb-2 kernel: mueb: port 2(eth1) entering learning state
Jun  8 06:10:49 mbb-2 kernel: mueb: port 2(eth1) entering forwarding state
Jun  8 06:10:49 mbb-2 kernel: mueb: topology change detected, sending tcn bpdu
Jun  8 06:11:06 mbb-2 kernel: mueb: topology change detected, sending tcn bpdu
Jun  8 06:11:06 mbb-2 kernel: mueb: port 2(eth1) entering blocking state
Jun  8 06:11:33 mbb-2 kernel: mueb: neighbour 0000.08:00:06:28:15:f6 lost on port 1(eth0) (13)
Jun  8 06:11:33 mbb-2 kernel: mueb: port 2(eth1) entering listening state
Jun  8 06:11:37 mbb-2 kernel: mueb: port 2(eth1) entering learning state
Jun  8 06:11:41 mbb-2 kernel: mueb: port 2(eth1) entering forwarding state
Jun  8 06:11:41 mbb-2 kernel: mueb: topology change detected, sending tcn bpdu
Jun  8 06:14:18 mbb-2 kernel: mueb: topology change detected, sending tcn bpdu
Jun  8 06:14:18 mbb-2 kernel: mueb: port 2(eth1) entering blocking state
Jun  8 06:14:19 mbb-2 kernel: mueb: retransmitting tcn bpdu
        
(1)
内核看到在 eth[0123] 上已经有网桥(实际上,只有一个,但是 Hello 包从所有 4 个端口传入)。
(2)
为了保持与网络其余部分的连接,网桥决定保持端口 1 (eth0) 活动(即处于 “转发” 状态),并暂时禁用端口 2-4。
(3)
eth3 上的插头被拔出。在这里您可以看到消息生存时间定时器已过期 ((13))。上一个 Hello 包是在 X 秒前看到的。网桥得出结论,与那里的网桥的连接已经断开。因此,它将尝试启用此端口,以便为现在断开的网段提供网络连接。
(4)
它进入监听状态。它等待查看旧网桥是否可能恢复,或者是否另一个网桥将声明接管。
(5)
好的,没有看到其他网桥。我们将尝试为这个网段提供网络连接。这意味着:我们将尝试成为这个网段的 “指定网桥”。我们现在进入学习状态。在这种状态下,我们只学习 MAC 地址,并且我们还不转发。这是因为如果我们看到一个未知的目标地址,我们会将数据报发送到所有端口,并且如果我们有一个空的 MAC 表,这种 “洪泛” 将不必要地频繁发生。因此,我们将首先用有用的条目填充我们的 MAC 表,这就是在学习状态下发生的事情。
(6)
好的,我们开始吧。为我们祈祷。
(7)
因为我们接管了这个网段,所以现在所有与这个网段的通信都通过这个网桥进行。这意味着拓扑结构已经改变。如果拓扑结构发生变化,我们必须通知所有网桥,以便它们可以快速超时陈旧的 MAC 地址位置数据。这就是我们发送拓扑变更通知网桥协议数据单元 (tcn bpdu) 的原因。

显然,根桥在它发送的下一个 Hello 消息中立即确认了这个 tcn bpdu(协议要求根桥确认它),因为这是我们看到的唯一这样的消息。

注意: 在您看到大量此类消息的情况下,这意味着根桥无法确认它们,这可能意味着您的根桥有一个扭曲的 STP 实现。

(8)
嘿,又发生了什么!
(9)
是的... eth3 重新上线了。根桥将再次为此网段提供连接,以便我们可以禁用此端口。
(10)(12)(13)
eth2、eth1 和 eth0 的情况相同。
(11)
这意味着 tcn bpdu 没有被足够快地确认。这就是它被重新传输的原因。

根桥 mbb-1 不是那么健谈。它只报告了一些拓扑变化并传播了它们,正如您在 示例 22 中看到的那样。如果有人可以解释为什么根桥在消息传递中如此安静,请 告诉我

示例 22. 网桥测试的 mbb-2 消息输出

Jun  8 06:06:52 mbb-1 kernel: mueb: received tcn bpdu on port 1(eth0)
Jun  8 06:06:52 mbb-1 kernel: mueb: topology change detected, propagating
Jun  8 06:07:31 mbb-1 kernel: mueb: received tcn bpdu on port 1(eth0)
Jun  8 06:07:31 mbb-1 kernel: mueb: topology change detected, propagating
Jun  8 06:07:32 mbb-1 kernel: mueb: received tcn bpdu on port 1(eth0)
Jun  8 06:07:32 mbb-1 kernel: mueb: topology change detected, propagating
Jun  8 06:08:11 mbb-1 kernel: mueb: received tcn bpdu on port 1(eth0)
Jun  8 06:08:11 mbb-1 kernel: mueb: topology change detected, propagating
Jun  8 06:08:29 mbb-1 kernel: mueb: received tcn bpdu on port 1(eth0)
Jun  8 06:08:29 mbb-1 kernel: mueb: topology change detected, propagating
Jun  8 06:09:03 mbb-1 kernel: mueb: received tcn bpdu on port 2(eth1)
Jun  8 06:09:03 mbb-1 kernel: mueb: topology change detected, propagating
Jun  8 06:11:40 mbb-1 kernel: mueb: received tcn bpdu on port 1(eth0)
Jun  8 06:11:40 mbb-1 kernel: mueb: topology change detected, propagating
Jun  8 06:11:41 mbb-1 kernel: mueb: received tcn bpdu on port 1(eth0)
Jun  8 06:11:41 mbb-1 kernel: mueb: topology change detected, propagating
        

其中一个其他网桥告诉我们 LAN 的拓扑结构已更改(参见 示例 21)。好吧,好的。我们将在短时间内为我们的 MAC 表设置较低的超时时间,并且我们将把这个拓扑变更传播到整个网络。

8.4.2. 杀死根桥测试

最终的测试当然是对根桥进行完全阻塞、崩溃或类似操作。我通过 init 1 关闭根桥来做到这一点。接下来,我使用 init 2 再次启动它。最后,我拔出了根桥的所有插头,并等待了一段时间,然后再次插上它们。在 示例 23 中,您将看到来自主网桥 mbb-1 的消息,在 示例 24 中,您将看到同一时间在备份网桥 mbb-2 上发生的事情。

示例 23. 主网桥 mbb-1 的测试消息

Jun 12 13:35:15 mbb-1 init: Switching to runlevel: 1
Jun 12 13:35:20 mbb-1 kernel: mueb: port 4(eth3) entering disabled state
Jun 12 13:35:20 mbb-1 kernel: mueb: port 3(eth2) entering disabled state
Jun 12 13:35:20 mbb-1 kernel: mueb: port 2(eth1) entering disabled state
Jun 12 13:35:20 mbb-1 kernel: mueb: port 1(eth0) entering disabled state
Jun 12 13:35:20 mbb-1 kernel: mueb: port 2(eth1) entering disabled state
Jun 12 13:35:20 mbb-1 kernel: device eth1 left promiscuous mode
Jun 12 13:35:20 mbb-1 kernel: mueb: port 1(eth0) entering disabled state
Jun 12 13:35:20 mbb-1 kernel: device eth0 left promiscuous mode
Jun 12 13:35:20 mbb-1 kernel: mueb: port 4(eth3) entering disabled state
Jun 12 13:35:20 mbb-1 kernel: device eth3 left promiscuous mode
Jun 12 13:35:20 mbb-1 kernel: mueb: port 3(eth2) entering disabled state
Jun 12 13:35:20 mbb-1 kernel: device eth2 left promiscuous mode
Jun 12 13:35:50 mbb-1 init: Switching to runlevel: 2
Jun 12 13:35:50 mbb-1 kernel: NET4: Ethernet Bridge 008 for NET4.0
Jun 12 13:35:51 mbb-1 kernel: device eth0 entered promiscuous mode
Jun 12 13:35:51 mbb-1 kernel: device eth1 entered promiscuous mode
Jun 12 13:35:51 mbb-1 kernel: device eth2 entered promiscuous mode
Jun 12 13:35:51 mbb-1 kernel: device eth3 entered promiscuous mode
Jun 12 13:35:51 mbb-1 kernel: mueb: port 4(eth3) entering listening state
Jun 12 13:35:51 mbb-1 kernel: mueb: port 3(eth2) entering listening state
Jun 12 13:35:51 mbb-1 kernel: mueb: port 2(eth1) entering listening state
Jun 12 13:35:51 mbb-1 kernel: mueb: port 1(eth0) entering listening state
Jun 12 13:35:51 mbb-1 kernel: mueb: received tcn bpdu on port 2(eth1)
Jun 12 13:35:51 mbb-1 kernel: mueb: topology change detected, propagating
Jun 12 13:35:52 mbb-1 kernel: mueb: received tcn bpdu on port 1(eth0)
Jun 12 13:35:52 mbb-1 kernel: mueb: topology change detected, propagating
Jun 12 13:35:55 mbb-1 kernel: mueb: port 4(eth3) entering learning state
Jun 12 13:35:55 mbb-1 kernel: mueb: port 3(eth2) entering learning state
Jun 12 13:35:55 mbb-1 kernel: mueb: port 2(eth1) entering learning state
Jun 12 13:35:55 mbb-1 kernel: mueb: port 1(eth0) entering learning state
Jun 12 13:35:59 mbb-1 kernel: mueb: port 4(eth3) entering forwarding state
Jun 12 13:35:59 mbb-1 kernel: mueb: topology change detected, propagating
Jun 12 13:35:59 mbb-1 kernel: mueb: port 3(eth2) entering forwarding state
Jun 12 13:35:59 mbb-1 kernel: mueb: topology change detected, propagating
Jun 12 13:35:59 mbb-1 kernel: mueb: port 2(eth1) entering forwarding state
Jun 12 13:35:59 mbb-1 kernel: mueb: topology change detected, propagating
Jun 12 13:35:59 mbb-1 kernel: mueb: port 1(eth0) entering forwarding state
Jun 12 13:35:59 mbb-1 kernel: mueb: topology change detected, propagating
Jun 12 13:39:03 mbb-1 kernel: mueb: received tcn bpdu on port 1(eth0)
Jun 12 13:39:03 mbb-1 kernel: mueb: topology change detected, propagating
Jun 12 13:39:05 mbb-1 kernel: mueb: received tcn bpdu on port 1(eth0)
Jun 12 13:39:05 mbb-1 kernel: mueb: topology change detected, propagating
        

示例 24. 备份网桥 mbb-2 的测试消息

Jun 12 13:35:21 mbb-2 kernel: mueb: neighbour 0000.08:00:06:28:15:f6 lost on port 4(eth3)
Jun 12 13:35:21 mbb-2 kernel: mueb: port 4(eth3) entering listening state
Jun 12 13:35:21 mbb-2 kernel: mueb: neighbour 0000.08:00:06:28:15:f6 lost on port 3(eth2)
Jun 12 13:35:21 mbb-2 kernel: mueb: port 3(eth2) entering listening state
Jun 12 13:35:21 mbb-2 kernel: mueb: neighbour 0000.08:00:06:28:15:f6 lost on port 2(eth1)
Jun 12 13:35:21 mbb-2 kernel: mueb: port 2(eth1) entering listening state
Jun 12 13:35:21 mbb-2 kernel: mueb: neighbour 0000.08:00:06:28:15:f6 lost on port 1(eth0)
Jun 12 13:35:21 mbb-2 kernel: mueb: topology change detected, propagating
Jun 12 13:35:25 mbb-2 kernel: mueb: port 4(eth3) entering learning state
Jun 12 13:35:25 mbb-2 kernel: mueb: port 3(eth2) entering learning state
Jun 12 13:35:25 mbb-2 kernel: mueb: port 2(eth1) entering learning state
Jun 12 13:35:29 mbb-2 kernel: mueb: port 4(eth3) entering forwarding state
Jun 12 13:35:29 mbb-2 kernel: mueb: topology change detected, propagating
Jun 12 13:35:29 mbb-2 kernel: mueb: port 3(eth2) entering forwarding state
Jun 12 13:35:29 mbb-2 kernel: mueb: topology change detected, propagating
Jun 12 13:35:29 mbb-2 kernel: mueb: port 2(eth1) entering forwarding state
Jun 12 13:35:29 mbb-2 kernel: mueb: topology change detected, propagating
Jun 12 13:35:49 mbb-2 kernel: mueb: topology change detected, sending tcn bpdu
Jun 12 13:35:49 mbb-2 kernel: mueb: port 3(eth2) entering blocking state
Jun 12 13:35:49 mbb-2 kernel: mueb: topology change detected, \
                              <6>mueb: port 4(eth3) entering blocking state
Jun 12 13:35:49 mbb-2 kernel: mueb: topology change detected, \
                              <6>mueb: port 2(eth1) entering blocking state
Jun 12 13:35:50 mbb-2 kernel: mueb: retransmitting tcn bpdu
Jun 12 13:38:26 mbb-2 kernel: mueb: neighbour 0000.08:00:06:28:15:f6 lost on port 2(eth1)
Jun 12 13:38:26 mbb-2 kernel: mueb: port 2(eth1) entering listening state
Jun 12 13:38:27 mbb-2 kernel: mueb: neighbour 0000.08:00:06:28:15:f6 lost on port 3(eth2)
Jun 12 13:38:27 mbb-2 kernel: mueb: port 3(eth2) entering listening state
Jun 12 13:38:28 mbb-2 kernel: mueb: neighbour 0000.08:00:06:28:15:f6 lost on port 4(eth3)
Jun 12 13:38:28 mbb-2 kernel: mueb: port 4(eth3) entering listening state
Jun 12 13:38:30 mbb-2 kernel: mueb: port 2(eth1) entering learning state
Jun 12 13:38:30 mbb-2 kernel: mueb: neighbour 0000.08:00:06:28:15:f6 lost on port 1(eth0)
Jun 12 13:38:30 mbb-2 kernel: mueb: topology change detected, propagating
Jun 12 13:38:31 mbb-2 kernel: mueb: port 3(eth2) entering learning state
Jun 12 13:38:32 mbb-2 kernel: mueb: port 4(eth3) entering learning state
Jun 12 13:38:34 mbb-2 kernel: mueb: port 2(eth1) entering forwarding state
Jun 12 13:38:34 mbb-2 kernel: mueb: topology change detected, propagating
Jun 12 13:38:35 mbb-2 kernel: mueb: port 3(eth2) entering forwarding state
Jun 12 13:38:35 mbb-2 kernel: mueb: topology change detected, propagating
Jun 12 13:38:36 mbb-2 kernel: mueb: port 4(eth3) entering forwarding state
Jun 12 13:38:36 mbb-2 kernel: mueb: topology change detected, propagating
Jun 12 13:39:01 mbb-2 kernel: mueb: topology change detected, sending tcn bpdu
Jun 12 13:39:01 mbb-2 kernel: mueb: port 3(eth2) entering blocking state
Jun 12 13:39:01 mbb-2 kernel: mueb: topology change detected, \
                              <6>mueb: port 4(eth3) entering blocking state
Jun 12 13:39:02 mbb-2 kernel: mueb: topology change detected, sending tcn bpdu
Jun 12 13:39:02 mbb-2 kernel: mueb: port 2(eth1) entering blocking state