6. 设置网桥

确保您的所有网卡工作正常且可访问。如果正常,ifconfig 将显示您的网络接口硬件布局。如果您在使网卡工作时遇到问题,请阅读 Ethernet-HOWTO,链接为 http://www.linuxdoc.org/HOWTO/Ethernet-HOWTO.html。不要修改 IP 地址或网络掩码。在您的网桥完全运行并启动之前,您不需要这样做。

在您完成上述步骤后,modprobe -v bridge 应该不会显示任何错误。您可以通过执行 cat /proc/modules 来检查是否成功。此外,对于您想在网桥中使用的每张网卡,ifconfig 您的接口名称 应该会提供有关该接口的一些信息。

如果您的 bridge-utilities 已正确构建,并且您的内核和网桥模块正常,那么执行 brctl 应该会显示一个简短的命令概要。

6.1. brctl 命令概要

root@mbb-1:~ # brctl
commands:
    addbr           <bridge>                add bridge                      (1)
    addif           <bridge> <device>       add interface to bridge         (2)
    delbr           <bridge>                delete bridge                   (3)
    delif           <bridge> <device>       delete interface from bridge    (4)
    show                                    show a list of bridges          (5)
    showbr          <bridge>                show bridge info                (6)
    showmacs        <bridge>                show a list of mac addrs        (7)

    setageing       <bridge> <time>         set ageing time                 (8)
    setbridgeprio   <bridge> <prio>         set bridge priority             (9)
    setfd           <bridge> <time>         set bridge forward delay        (10)
    setgcint        <bridge> <time>         set garbage collection interval (11)
    sethello        <bridge> <time>         set hello time                  (12)
    setmaxage       <bridge> <time>         set max message age             (13)
    setpathcost     <bridge> <port> <cost>  set path cost                   (14)
    setportprio     <bridge> <port> <prio>  set port priority               (15)
    stp             <bridge> <state>        {dis,en}able stp                (16)
      

(1)(3)
brctl addbr 网桥名称 命令创建一个名为网桥名称的逻辑网桥实例。您至少需要一个逻辑实例才能进行任何桥接。您可以将逻辑网桥理解为参与桥接的接口的容器。每个桥接实例都由一个新的网络接口表示。

示例 6. 创建一个实例

root@mbb-1:~ # brctl addbr mybridge1
         

对应的 “关闭” 命令是 brctl delbr 网桥名称

注意

只有在您要删除的实例中没有添加更多接口时,brctl delbr 网桥名称 才会起作用。

(2)(4)
brctl addif 网桥名称 设备 命令将网络设备设备加入到网桥网桥名称。简单来说,每个加入到实例中的接口都与该实例的其他接口桥接。

将接口从网桥中移除的对应命令是 brctl delif 网桥名称 设备

(5)
brctl show 命令为您提供有关总体网桥状态和正在运行的实例的摘要,如 示例 7 所示。如果您对有关实例及其接口的详细信息感兴趣,则需要查看 (6)

示例 7. brctl show 的输出

root@mbb-1:~ # brctl show
bridge name     bridge id               stp enabled
mybridge1       0000.0800062815f6       yes
          
(6)
brctl showbr 网桥名称 命令为您提供有关网桥实例及其加入的接口的摘要。

示例 8. brctl showbr 网桥名称 的输出

root@mbb-1:~ # brctl showbr mybridge1
mybridge1
 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.84                 tcn timer                  0.00
 topology change timer     0.00                 gc timer                   1.84
 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.84
 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.84
 flags
          
(7)
brctl showmacs 网桥名称 命令为您提供加入到网桥名称.

示例 9. brctl showmacs 网桥名称 的输出

root@mbb-1:~ # brctl showmacs mybridge1
port no mac addr                is local?       ageing timer
  1     00:10:4b:b6:c6:e4       no               119.25
  1     00:50:04:43:82:85       no                 0.00
  1     00:50:da:45:45:b1       no                76.75
  1     00:a0:24:d0:4c:d6       yes                0.00
  1     00:a0:24:f0:22:71       no                 5.81
  1     08:00:09:b5:dc:41       no                22.22
  1     08:00:09:fb:39:a1       no                27.24
  1     08:00:09:fc:92:2c       no                53.13
  4     08:00:09:fc:d2:11       yes                0.00
  1     08:00:09:fd:23:88       no               230.42
  1     08:00:09:fe:0d:6f       no               144.55
          
(8)
设置老化时间。老化时间是指从 MAC 地址接收到数据包后,该 MAC 地址在转发数据库中保留的秒数。转发数据库中的条目会定期超时,以确保它们不会永远存在。通常情况下,无需修改此参数。
(9)
设置网桥的相对优先级。优先级最低的网桥将被选为根网桥。根网桥是生成树中的 “中心” 网桥。有关 STP 的更多信息,请参见 第 7.1 节
(10)
设置转发延迟时间。转发延迟时间是在进入转发状态之前,在侦听和学习状态中花费的时间。
(11)
设置垃圾回收间隔。每隔(此数字)秒,都会检查整个转发数据库中超时的条目。超时的条目将被删除。
(12)
设置 Hello 时间。每隔(此数字)秒,根网桥和指定网桥会发送一个 Hello 数据包。Hello 数据包用于在整个桥接局域网中传递有关拓扑的信息。有关 STP 的更多信息,请参见 第 7.1 节
(13)
设置最大消息生存时间。如果上次看到(接收到)的 Hello 数据包的时间超过此秒数,则有问题的网桥将启动接管程序,尝试成为根网桥本身。有关 STP 的更多信息,请参见 第 7.1 节
(14)
设置在此接口上接收(或发送,我不确定)数据包的成本。速度更快的接口应具有更低的路径成本。这些值用于计算最小生成树。有关 STP 的更多信息,请参见 第 7.1 节。与高成本路径相比,生成树中更可能使用低成本路径(例如,将千兆线路与 100Mbit 或 10Mbit 线路作为备份线路。您不希望 10/100Mbit 线路成为那里的主线路。)

Linux 实现当前将所有 eth* 接口的路径成本设置为 100,这是 10Mbit 连接的标称成本。遗憾的是,没有简单的方法可以区分 10Mbit、100Mbit 和 1Gbit 以太网卡,因此网桥无法使用实际的接口速度。

(16)
使用此参数,您可以启用或禁用生成树协议。
(9)(12)(14)(16)
如果您在 LAN 中有多个网桥并且启用了 stp,则这些参数才有用。在修改它们之前,您应该阅读 第 7.1 节

6.2. 基本设置

标准配置应包括:

  1. 创建网桥接口。
    root@mbb-1:~ # brctl addbr mybridge
              

  2. 将接口添加到网桥。
    root@mbb-1:~ # brctl addif mybridge eth0
    root@mbb-1:~ # brctl addif mybridge eth1
              

  3. 将接口 IP 地址设为零。
    root@mbb-1:~ # ifconfig eth0 0.0.0.0
    root@mbb-1:~ # ifconfig eth1 0.0.0.0
              

  4. 启动网桥。
    root@mbb-1:~ # ifconfig mybridge up
              

  5. 可选地,您可以配置虚拟接口mybridge以参与您的网络。它的行为类似于一个接口(就像普通的网卡)。您可以使用相同的方式配置它,将之前的命令替换为类似如下的内容:
    root@mbb-1:~ # ifconfig mybridge 192.168.100.5 netmask 255.255.255.0 up
              

您可以在 示例 16 中找到更复杂的设置脚本。

重要提示:如果您在以下情况下遇到系统冻结或 Linux 机器出现某些不良行为的糟糕体验
root@mbb-1:~ # ifconfig ethn 0 0.0.0.0
        
请尝试(如果需要,在系统重启后)在开始任何网桥操作之前执行
root@mbb-1:~ # ifconfig ethn promisc up
        
如果您的系统再次冻结,则应归咎于您的网卡驱动程序,而不是桥接代码。