Cumulus Linux 网桥 MAC 地址的派生

Cumulus Linux 为网桥设置 MAC 地址,因此,第 3 层交换机虚拟接口 (SVI) 的设置方式取决于您部署的 Cumulus Linux 版本。3.6.0 及更高版本使用 bridge-ports 列表中第一个端口的 MAC 地址。早期版本使用替代方法来确定 MAC 地址。

本文总结了各种派生方法,并使用示例网桥配置说明了结果。此外,它还提供了为您的网络选择派生方法的指南,以及在需要时修改其默认行为的说明。

Cumulus Linux 使用的默认方法

下表列出了每个 Cumulus Linux 版本默认使用的方法。

版本方法
3.6.0 及更高版本第一个端口接口地址
3.5.3最低端口接口地址
3.5.0 到 3.5.2eth0 接口地址
3.4.3 及更早版本最低端口接口地址

示例网桥配置

以下示例交换机配置显示了确定网桥接口 MAC 地址的方法之间的差异。此示例显示了 VLAN 感知网桥(适用于使用生成树协议 (STP) 单个实例的大规模第 2 层环境),该网桥配置了 eth0 管理端口、四个交换机端口 (swp1-4) 和一个 LACP 绑定接口 (bond1),其中包含两个交换机端口 (swp5-6)。它还包含单个 VLAN 100,该 VLAN 具有第 3 层交换机虚拟接口 (SVI)。

auto eth0
iface eth0 inet dhcp

auto swp1
iface swp1

auto swp2
iface swp2

auto swp3
iface swp3

auto swp4
iface swp4

auto swp5
iface swp5

auto swp6
iface swp6

auto bond1
iface bond1
bond-slaves swp5 swp6

auto bridge
iface bridge
    bridge-ports bond1 swp1 swp2 swp3 swp4
    bridge-vids 100
    bridge-vlan-aware yes

auto vlan100
iface vlan100
    address 10.1.1.1/24
    vlan-id 100
    vlan-raw-device bridge

第一个接口地址方法

此方法将 bridge-ports 列表中第一个接口的 MAC 地址分配给网桥 MAC 地址。在此示例配置中,第一个接口是 bond1

auto bridge
iface bridge
    bridge-ports bond1 swp1 swp2 swp3 swp4

接口 bond1(绑定主接口)从其绑定从接口 (swp5-6) 获取其 MAC 地址。

auto bond1
iface bond1
    bond-slaves swp5 swp6

使用配置示例,您可以通过管道将 ip link show 命令传递到 grep 来查看这些接口中每个接口的地址。请注意,bond1 接口的 MAC 地址与交换机端口 swp5 和 swp6 的地址相同(绑定接口选择第一个从接口的 MAC 地址用于所有成员链路)。然后,网桥具有与 bond1 相同的地址(以紫色突出显示)。

cumulus@cumulus:~$ ip link show | grep -A1 -E "eth0|swp[1-6]:|bridge"
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 00:00:00:11:11:11 brd ff:ff:ff:ff:ff:ff
3: swp1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bridge state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:d9:fc:77 brd ff:ff:ff:ff:ff:ff
4: swp2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bridge state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:b0:c1:a3 brd ff:ff:ff:ff:ff:ff
5: swp3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bridge state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:eb:80:47 brd ff:ff:ff:ff:ff:ff
6: swp4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bridge state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:1a:d4:43 brd ff:ff:ff:ff:ff:ff
7: swp5: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond1 state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:4a:25:6b brd ff:ff:ff:ff:ff:ff
8: swp6: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond1 state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:4a:25:6b brd ff:ff:ff:ff:ff:ff
--
47: bond1: <NO-CARRIER,BROADCAST,MULTICAST,MASTER,UP> mtu 1500 qdisc noqueue master bridge state DOWN mode DEFAULT group default
link/ether 08:00:27:4a:25:6b brd ff:ff:ff:ff:ff:ff
48: bridge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default
link/ether 08:00:27:4a:25:6b brd ff:ff:ff:ff:ff:ff
49: vlan100@bridge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default
link/ether 08:00:27:4a:25:6b brd ff:ff:ff:ff:ff:ff

第一个接口地址使用注意事项

当您更新 bridge-ports 列表时,使用此方法分配网桥的 MAC 地址可能会导致问题。当 bridge-ports 中第一个接口的第一个 MAC 地址更改时(通过绑定新端口或释放当前的第一个端口),网桥的 MAC 地址会更改,从而更改其 STP 网桥地址。这可能会导致 STP 重新收敛和网桥域中断。

Cumulus Linux 3.6.0 及更高版本默认使用第一个接口地址方法。从早期版本升级到 3.6.0 或更高版本时,网桥和 SVI MAC 地址很可能会在版本之间发生更改。如果 SVI 期望从 DHCP 获得静态租约,以便在带外网络中常用的带内管理中使用,则可能会导致问题。

最低接口地址方法

此方法检查 bridge-ports 列表中的每个接口,并为网桥地址分配最低的 MAC 地址。在示例配置中,bridge-ports 列表包含五个接口

auto bridge
iface bridge
    bridge-ports bond1 swp1 swp2 swp3 swp4

使用配置示例,您可以通过管道将 ip link show 命令传递到 grep 来查看这些接口中每个接口的地址。比较这些地址,您可以看到 swp2 接口具有最低的地址。请注意,此地址随后将用作网桥的地址(以紫色突出显示)。

cumulus@cumulus:~$ ip link show | grep -A1 -E "swp[1-6]:|bridge"
3: swp1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bridge state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:d9:fc:77 brd ff:ff:ff:ff:ff:ff
4: swp2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bridge state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:b0:c1:a3 brd ff:ff:ff:ff:ff:ff
5: swp3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bridge state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:eb:80:47 brd ff:ff:ff:ff:ff:ff
6: swp4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bridge state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:1a:d4:43 brd ff:ff:ff:ff:ff:ff
7: swp5: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond1 state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:4a:25:6b brd ff:ff:ff:ff:ff:ff
8: swp6: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond1 state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:4a:25:6b brd ff:ff:ff:ff:ff:ff
--
47: bond1: <NO-CARRIER,BROADCAST,MULTICAST,MASTER,UP> mtu 1500 qdisc noqueue master bridge state DOWN mode DEFAULT group default
link/ether 08:00:27:4a:25:6b brd ff:ff:ff:ff:ff:ff
48: bridge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default
link/ether 08:00:27:b0:c1:a3 brd ff:ff:ff:ff:ff:ff

上面显示的输出来自 Cumulus VX 部署,其中接口 MAC 是从 hypervisor 提供的范围中随机分配的。相比之下,Cumulus Linux 交换机根据硬件供应商在 EEPROM 中提供的系统 MAC,以线性方式为接口分配 MAC 地址。因此,这通常会导致交换机上编号最低的接口具有最低的 MAC 地址。

最低接口地址使用注意事项

当您更新 bridge-ports 列表时,使用此方法分配网桥的 MAC 地址可能会导致问题。如果最低 MAC 地址更改,无论是通过绑定新端口还是释放当前最低接口,网桥的 MAC 地址都将更改,从而更改其 STP 网桥地址。这可能会导致 STP 重新收敛和网桥域中断。

Cumulus Linux 3.5.3 和 3.4.3 及更早版本默认使用最低接口地址方法。

eth0 接口地址方法

此方法将 eth0 接口的地址分配给网桥 MAC 地址。使用配置示例,您可以通过管道将 ip link show 命令传递到 grep 来查看这些接口中每个接口的地址。请注意网桥和 eth0 的匹配地址(此处突出显示)。

cumulus@cumulus:~$ ip link show | grep -A1 -E "eth0|bridge"
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 00:00:00:11:11:11 brd ff:ff:ff:ff:ff:ff
28: bridge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default
link/ether 00:00:00:11:11:11 brd ff:ff:ff:ff:ff:ff
29: vlan100@bridge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default
link/ether 00:00:00:11:11:11 brd ff:ff:ff:ff:ff:ff

eth0 使用注意事项

当交换机的 eth0 接口成为交换机正在桥接的 VLAN 的一部分时,使用此方法分配网桥的 MAC 地址可能会导致问题。如果交换机看到源 MAC 为其自身网桥地址(与其 eth0 地址相同)的数据包,则会丢弃该数据包,而不是对其进行桥接。

Cumulus Linux 3.5.0 到 3.5.2 默认使用 eth0 接口地址方法。

静态地址方法

此方法要求管理员手动为网桥分配静态地址,而不是像其他方法那样使用动态分配的地址。

静态地址使用注意事项

您必须分配一个在整个网络中唯一的地址。

没有任何 Cumulus Linux 版本默认使用此方法。

更改默认 MAC 地址派生方法

您可以重新配置 Cumulus Linux 3.6.0 及更高版本以使用任何 MAC 地址派生方法。要重新配置 Cumulus Linux 3.5.3 及更早版本,您必须使用静态 MAC 地址方法。

选择派生方法

为您的网络选择正确的派生方法取决于您的接口配置。使用下表帮助您确定最适合您网络的方法

派生方法何时使用何时不使用Cumulus Linux 默认值

第一个接口地址

  • 当使用的特定 MAC 地址无关紧要时
  • 当 STP 重新收敛事件对网络中的功能至关重要时

3.6.0 及更高版本

最低接口地址

  • 当使用的特定 MAC 地址无关紧要时
  • 当 STP 重新收敛事件对网络中的功能至关重要时

3.5.3、3.4.3 及更早版本

eth0 地址

  • 当您需要预先知道网桥和 SVI 使用的 MAC 地址时,可能是为了支持 DHCP 基础设施的预配置
  • 当分配唯一的静态 MAC 地址过于繁琐时
  • 当 eth0 正在使用并且是交换机上 VLAN 的一部分时

3.5.0 - 3.5.2

静态 MAC 地址

  • eth0 是交换机上 VLAN 的一部分
  • 当使用的特定 MAC 地址对于 DHCP 或其他服务很重要时
  • 当额外的管理开销不可接受时

从不

修改派生方法

如果您希望修改默认派生方法,请按照您的配置选择的说明进行操作

使用最低接口地址方法

要更改为此方法

  1. 安装 ifupdown2 策略文件。

  2. 重新加载接口。

  3. 更新网桥端口以强制地址更改。

    cumulus@cumulus:~$ cat /etc/network/ifupdown2/policy.d/bridgemac.json
    {
        "bridge": {
     "module_globals": {
         "bridge_set_static_mac_from_port": "no"
    }
        }
    }
    cumulus@cumulus:~$ sudo ifreload -a
    cumulus@cumulus:~$ ip link set dev bridge address 00:11:22:33:44:55
    

    这可能会导致 STP 重新收敛事件。

您可以使用通过 grep 管道传输的 ip link show 命令来验证配置更改以查看地址

cumulus@cumulus:~$ ip link show | grep -A1 -E "swp[1-6]:|bridge"
3: swp1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bridge state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:d9:fc:77 brd ff:ff:ff:ff:ff:ff
4: swp2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bridge state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:b0:c1:a3 brd ff:ff:ff:ff:ff:ff
5: swp3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bridge state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:eb:80:47 brd ff:ff:ff:ff:ff:ff
6: swp4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bridge state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:1a:d4:43 brd ff:ff:ff:ff:ff:ff
7: swp5: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond1 state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:4a:25:6b brd ff:ff:ff:ff:ff:ff
8: swp6: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond1 state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:4a:25:6b brd ff:ff:ff:ff:ff:ff
--
47: bond1: <NO-CARRIER,BROADCAST,MULTICAST,MASTER,UP> mtu 1500 qdisc noqueue master bridge state DOWN mode DEFAULT group default
link/ether 08:00:27:4a:25:6b brd ff:ff:ff:ff:ff:ff
48: bridge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default
link/ether 08:00:27:b0:c1:a3 brd ff:ff:ff:ff:ff:ff

使用 eth0 地址方法

要更改为此方法

  1. 安装 ifupdown2 策略文件。

  2. 重新加载接口。

    在这种情况下,MAC 地址会立即更改。

    cumulus@cumulus:~$ cat /etc/network/ifupdown2/policy.d/bridgemac.json
    {
        "bridge": {
     "module_globals": {
         "bridge_mac_iface": ["eth0", "eth1"]
     }
         }
    }
    cumulus@cumulus:~$ sudo ifreload -a
    

您可以使用通过 grep 管道传输的 ip link show 命令来验证配置更改以查看地址

cumulus@cumulus:~$ ip link show | grep -A1 -E "eth0|bridge"
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 00:11:22:33:44:55 brd ff:ff:ff:ff:ff:ff
42: bridge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default
    link/ether 00:11:22:33:44:55 brd ff:ff:ff:ff:ff:ff

使用静态 MAC 地址

要更改为此方法,您需要在配置文件中网桥的节下指定地址。

分配给网桥的 MAC 地址必须在整个网络中是唯一的。

cumulus@cumulus:~$ cd /etc/network/
cumulus@cumulus:~$ vi interfaces

...

auto bridge
iface bridge
 bridge-ports swp1 swp2 swp3 swp4 bond1
 bridge-vids 100
 bridge-vlan-aware yes
 hwaddress 00:11:22:33:44:55
...

您可以使用 ip link show 命令验证配置更改。

cumulus@cumulus:~$ ip link show bridge
42: bridge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default
    link/ether 00:11:22:33:44:55 brd ff:ff:ff:ff:ff:ff