VLAN 感知桥接模式
Cumulus Linux 中的 VLAN 感知桥接模式为大型第 2 层环境实现了一种配置模型,其中 只有一个实例 的 生成树协议。每个物理桥成员端口都包含允许的 VLAN 列表以及端口 VLAN ID,即主 VLAN 标识符 (PVID) 或本机 VLAN。MAC 地址学习、过滤和转发是 VLAN 感知的。这减少了配置大小,并消除了将端口和 VLAN 实例作为子接口进行管理的大量开销,而是用轻量级 VLAN 位图和状态更新来替换它们。
Cumulus Linux 支持多个 VLAN 感知桥,但有以下限制
- 您不能将 MLAG 与多个 VLAN 感知桥一起使用。
- 您不能将同一端口与多个 VLAN 感知桥一起使用。
- 您不能在多个 VLAN 感知桥中使用相同的 VNI。
- 您不能将 VLAN 转换与多个 VLAN 感知桥一起使用。
- 您不能将双标记 VLAN 接口与多个 VLAN 感知桥一起使用。
- 您不能将多个单 VXLAN 设备 (SVD) 与单个 VLAN 感知桥关联
配置 VLAN 感知桥
以下示例命令为包含两个交换机端口并包含 3 个 VLAN 的 STP 创建一个 VLAN 感知桥;标记 VLAN 10 和 20,以及未标记(本机)VLAN 1。

使用 NVUE,有一个名为 br_default
的默认桥,它没有分配任何端口。以下示例配置此默认桥。
cumulus@switch:~$ nv set interface swp1-2 bridge domain br_default
cumulus@switch:~$ nv set bridge domain br_default vlan 10,20
cumulus@switch:~$ nv set bridge domain br_default untagged 1
cumulus@switch:~$ nv config apply
编辑 /etc/network/interfaces
文件并添加桥
cumulus@switch:~$ sudo nano /etc/network/interfaces
...
auto br_default
iface br_default
bridge-ports swp1 swp2
bridge-vids 10 20
bridge-pvid 1
bridge-vlan-aware yes
...
运行 ifreload -a
命令以加载新配置
cumulus@switch:~$ ifreload -a
桥的主 VLAN 标识符 (PVID) 默认为 1。您不必为桥或端口指定 bridge-pvid
。但是,即使这不影响配置,它也有助于其他用户提高可读性。以下配置彼此相同,并且与上述配置相同
auto br_default
iface br_default
bridge-ports swp1 swp2
bridge-vids 1 10 20
bridge-vlan-aware yes
auto br_default
iface br_default
bridge-ports swp1 swp2
bridge-pvid 1
bridge-vids 1 10 20
bridge-vlan-aware yes
auto br_default
iface br_default
bridge-ports swp1 swp2
bridge-vids 10 20
bridge-vlan-aware yes
- 如果您在桥级别指定
bridge-vids
或bridge-pvid
,则桥中的所有端口都将继承这些配置。但是,为特定端口指定任何这些设置都会覆盖桥中的设置。 - 请勿将管理端口 eth0 与任何交换机端口桥接。例如,如果您创建了一个包含 eth0 和 swp1 的桥,则该桥无法正常工作,并且会中断对管理接口的访问。
配置多个 VLAN 感知桥
此示例显示了在交换机上创建两个 VLAN 感知桥所需的命令。

- bridge1 桥接 swp1 和 swp2,并包含 2 个 VLAN;
vlan 10
和vlan 20
- bridge2 桥接 swp3 并包含一个 VLAN;
vlan 10
桥是独立的,因此您可以在桥之间重用 VLAN。每个 VLAN 感知桥都维护自己的 MAC 地址和 VLAN 标记表;一个桥中的 MAC 和 VLAN 标记对另一个表不可见。
cumulus@switch:~$ nv set interface swp1-2 bridge domain bridge1
cumulus@switch:~$ nv set bridge domain bridge1 vlan 10,20
cumulus@switch:~$ nv set bridge domain bridge1 untagged 1
cumulus@switch:~$ nv set interface swp3 bridge domain bridge2
cumulus@switch:~$ nv set bridge domain bridge2 vlan 10
cumulus@switch:~$ nv set bridge domain bridge2 untagged 1
cumulus@switch:~$ nv config apply
编辑 /etc/network/interfaces
文件并添加桥
cumulus@switch:~$ sudo nano /etc/network/interfaces
...
auto bridge1
iface bridge1
bridge-ports swp1 swp2
bridge-vlan-aware yes
bridge-vids 10 20
bridge-pvid 1
auto bridge2
iface bridge2
bridge-ports swp3
bridge-vlan-aware yes
bridge-vids 10
bridge-pvid 1
...
运行 ifreload -a
命令以加载新配置
cumulus@switch:~$ ifreload -a
NVIDIA Spectrum 1 交换机最多支持 10000 个 VLAN 元素。当 热重启模式 为 off
时,NVIDIA Spectrum-2 交换机及更高版本最多支持 15996 个 VLAN 元素,当热重启模式为 on
时,最多支持 7934 个 VLAN 元素。Cumulus Linux 计算 VLAN 元素总数的方法是 VLAN 的数量乘以配置的桥的数量。例如,6 个桥,每个桥包含 2600 个 VLAN,总共 15600 个 VLAN 元素。
在 NVIDIA Spectrum-2 交换机及更高版本上,如果您启用多个 VLAN 感知桥并想要使用比默认值更多的 VLAN 元素,则必须更新 /etc/mlx/datapath/broadcast_domains.conf
文件中的 VLAN 元素数量。
- 要指定要使用的桥域总数,请取消注释并编辑
broadcast_domain.max_vlans
参数。当热重启模式为off
时,默认值为 6143,当热重启模式为on
时,默认值为 4096。 - 要指定要使用的子接口总数,请取消注释并编辑
broadcast_domain.max_subinterfaces
参数。当热重启模式为off
时,默认值为 3872,当热重启模式为on
时,默认值为 1872。
您必须使用 systemctl restart switchd
命令重启 switchd
才能应用配置。
broadcast_domain.max_vlans
加 broadcast_domain.max_subinterfaces
的数量不能超过 15996。
增加 broadcast_domain.max_vlans
参数可能会影响第 2 层组播规模支持。
保留 VLAN 范围
对于硬件数据平面内部操作,交换芯片需要为每个物理端口、Linux 桥和第 3 层子接口预留 VLAN。Cumulus Linux 默认保留一系列 VLAN;保留范围是 3725-3999。
如果保留的 VLAN 范围与任何用户定义的 VLAN 冲突,您可以修改该范围。新范围必须是 ID 在 2 到 4094 之间的连续 VLAN 集。对于单个 VLAN 感知桥,范围的最小大小为 2 个 VLAN。对于多个 VLAN 感知桥,范围的最小大小是系统上 VLAN 感知桥的数量加 1。
以下示例将保留的 VLAN 范围更改为 4064 到 4094 之间
cumulus@switch:~$ nv set system global reserved vlan internal range 4064-4094
cumulus@switch:~$ nv config apply
编辑
/etc/cumulus/switchd.conf
文件以取消注释resv_vlan_range
行并指定新范围。cumulus@switch:~$ sudo nano /etc/cumulus/switchd.conf ... # global reserved vlan internal range resv_vlan_range = 4064-4094
保存文件后,您必须重启
switchd
cumulus@switch:~$ sudo systemctl restart switchd.service
保留的第 3 层 VNI VLAN
除了内部保留的 VLAN 范围外,Cumulus Linux 还为 EVPN 对称路由部署中的第 3 层 VNI 分配了保留的 VLAN 范围。当您在带有 NVUE 命令的 MLAG 环境中配置第 3 层 VNI 时,请使用此保留的 VLAN 范围。默认范围为 4000-4064。您可以使用 nv show system global reserved vlan l3-vni-vlan
命令显示范围
cumulus@switch:~$ nv show system global reserved vlan l3-vni-vlan
operational applied
----- ----------- -------
begin 4000 4000
end 4064 4064
请勿在与 MLAG 接口和第 3 层 VNI 相同的桥中使用此 VLAN 范围。您可以使用 nv set system global reserved vlan l3-vni-vlan begin <vlan>
和 nv set system global reserved vlan l3-vni-vlan end <vlan>
命令配置范围。有关更多信息,请参阅对称路由。
全局保留的第 3 层 VNI VLAN 范围不适用于您使用 Linux 命令手动配置而不是 NVUE 的交换机,也不适用于没有 MLAG 的对称路由部署。
VLAN 修剪
默认情况下,桥端口继承桥 VID,但是,您可以配置端口以覆盖桥 VID。

此示例命令配置 swp3 以覆盖桥 VID
cumulus@switch:~$ nv set interface swp1-3 bridge domain br_default
cumulus@switch:~$ nv set bridge domain br_default vlan 10,20
cumulus@switch:~$ nv set bridge domain br_default untagged 1
cumulus@switch:~$ nv set interface swp3 bridge domain br_default vlan 20
cumulus@switch:~$ nv config apply
编辑 /etc/network/interfaces
文件,然后运行 ifreload -a
命令。以下示例命令配置 swp3 以覆盖桥 VID
cumulus@switch:~$ sudo nano /etc/network/interfaces
...
auto br_default
iface br_default
bridge-ports swp1 swp2 swp3
bridge-pvid 1
bridge-vids 10 20
bridge-vlan-aware yes
auto swp3
iface swp3
bridge-vids 20
...
cumulus@switch:~$ ifreload -a
访问端口和标记数据包
访问端口忽略所有标记数据包。在以下配置中,swp1 和 swp2 是访问端口,而所有未标记的流量都转到 VLAN 10

cumulus@switch:~$ nv set interface swp1-2 bridge domain br_default
cumulus@switch:~$ nv set bridge domain br_default vlan 10,20
cumulus@switch:~$ nv set bridge domain br_default untagged 1
cumulus@switch:~$ nv set interface swp1 bridge domain br_default access 10
cumulus@switch:~$ nv set interface swp2 bridge domain br_default access 10
cumulus@switch:~$ nv config apply
编辑 /etc/network/interfaces
文件,然后运行 ifreload -a
命令。
cumulus@switch:~$ sudo nano /etc/network/interfaces
...
auto br_default
iface br_default
bridge-ports swp1 swp2
bridge-pvid 1
bridge-vids 10 20
bridge-vlan-aware yes
auto swp1
iface swp1
bridge-access 10
auto swp2
iface swp2
bridge-access 10
...
cumulus@switch:~$ ifreload -a
丢弃未标记的帧
使用 VLAN 感知桥接模式,您可以将交换机端口配置为丢弃任何未标记的帧。为此,请将 bridge-allow-untagged no
添加到交换机端口(而不是桥)。桥端口没有 PVID,并丢弃未标记的数据包。
以下示例命令配置 swp2 以丢弃未标记的帧
cumulus@switch:~$ nv set interface swp2 bridge domain br_default untagged none
cumulus@switch:~$ nv config apply
编辑 /etc/network/interfaces
文件以在交换机端口接口节下添加 bridge-allow-untagged no
行,然后运行 ifreload -a
命令。
cumulus@switch:~$ sudo nano /etc/network/interfaces
...
auto swp1
iface swp1
auto swp2
iface swp2
bridge-allow-untagged no
auto br_default
iface br_default
bridge-ports swp1 swp2
bridge-pvid 1
bridge-vids 10 20
bridge-vlan-aware yes
...
cumulus@switch:~$ sudo ifreload -a
当您检查该端口的 VLAN 成员身份时,它显示没有未标记的 VLAN。
cumulus@switch:~$ bridge -c vlan show
portvlan ids
swp1 1 PVID Egress Untagged
10 20
swp2 10 20
bridge 1
VLAN 第 3 层寻址
在配置桥的 VLAN 属性时,请为每个 VLAN 接口指定属性。如果您要为本机 VLAN 配置交换机虚拟接口 (SVI),则必须声明本机 VLAN 并指定其 IP 地址。在桥节本身中指定 IP 地址会返回错误。
以下示例命令声明本机 VLAN 10,其 IPv4 地址为 10.1.10.2/24,IPv6 地址为 2001:db8::1/32。
NVUE 和 Linux 命令还显示了具有多个 VLAN 感知桥的示例。
cumulus@switch:~$ nv set interface vlan10 ip address 10.1.10.2/24
cumulus@switch:~$ nv set interface vlan10 ip address 2001:db8::1/32
cumulus@switch:~$ nv config apply
cumulus@switch:~$ nv set interface bridge2_vlan10 type svi
cumulus@switch:~$ nv set interface bridge2_vlan10 vlan 10
cumulus@switch:~$ nv set interface bridge2_vlan10 base-interface bridge2
cumulus@switch:~$ nv set interface bridge2_vlan10 ip address 10.1.10.2/24
cumulus@switch:~$ nv set interface bridge1_vlan10 type svi
cumulus@switch:~$ nv set interface bridge1_vlan10 vlan 10
cumulus@switch:~$ nv set interface bridge1_vlan10 base-interface bridge1
cumulus@switch:~$ nv set interface bridge1_vlan10 ip address 12.1.10.2/24
cumulus@switch:~$ nv config apply
编辑 /etc/network/interfaces
文件,然后运行 ifreload -a
命令。
cumulus@switch:~$ sudo nano /etc/network/interfaces
...
auto bridge
iface bridge
bridge-ports swp1 swp2
bridge-pvid 1
bridge-vids 10 20
bridge-vlan-aware yes
auto vlan10
iface vlan10
address 10.1.10.2/24
address 2001:db8::1/32
vlan-id 10
vlan-raw-device br_default
cumulus@switch:~$ ifreload -a
cumulus@switch:~$ sudo nano /etc/network/interfaces ... auto bridge2_vlan10 iface bridge2_vlan10 address 10.1.10.2/24 hwaddress 1c:34:da:1d:e6:fd vlan-raw-device bridge2 vlan-id 10
auto bridge1_vlan10 iface bridge1_vlan10 address 12.1.10.2/24 hwaddress 1c:34:da:1d:e6:fd vlan-raw-device bridge1 vlan-id 10
永久保持 SVI 处于 UP 状态
首次配置交换机时,所有南向桥端口都处于关闭状态;因此,默认情况下,SVI 也处于关闭状态。您可以强制 SVI 始终处于启动状态,方法是禁用接口状态跟踪,以便即使所有成员端口都处于关闭状态,SVI 也始终处于 UP 状态。其他实现将此功能描述为no autostate。如果您想执行连接测试,这将很有用。
要将交换机上的所有 SVI 配置为永久处于 UP 状态,请运行 nv set system global svi-force-up enable on
命令。
cumulus@switch:~$ nv set system global svi-force-up enable on
cumulus@switch:~$ nv config apply
要将特定桥中的 SVI 配置为永久处于 UP 状态,请运行 nv set bridge domain <bridge> svi-force-up enable on
命令
cumulus@switch:~$ nv set bridge domain br_default svi-force-up enable on
cumulus@switch:~$ nv config apply
- 要将交换机上的所有 SVI 配置为永久处于 DOWN 状态,请运行
nv set system global svi-force-up enable off
命令。 - 要将特定桥中的 SVI 配置为永久处于 DOWN 状态,请运行
nv set bridge domain <bridge> svi-force-up enable off
命令。
要将桥中的 SVI 配置为永久处于 UP 状态,请编辑 /etc/network/interfaces
文件并将 bridge-always-up on
选项添加到桥节,然后使用 sudo ifreload -a
命令重新加载配置
cumulus@switch:~$ sudo nano /etc/network/interfaces
auto br_default
iface br_default
bridge-ports bond1 bond2 bond3 peerlink
hwaddress 48:b0:2d:4e:ad:89
bridge-vlan-aware yes
bridge-vids 10 20 30
bridge-pvid 1
bridge-stp yes
bridge-mcsnoop no
bridge-always-up on
mstpctl-forcevers rstp
cumulus@switch:~$ sudo ifreload -a
要将交换机上的所有 SVI 配置为永久处于 UP 状态,请将 bridge-always-up on
选项添加到所有带有 SVI 的桥节。
- 要将桥中的 SVI 配置为永久处于 DOWN 状态,请从桥节中删除
bridge-always-up on
选项,然后使用sudo ifreload -a
命令重新加载配置。 - 要将交换机上的所有 SVI 配置为永久处于 DOWN 状态,请从所有桥节中删除
bridge-always-up on
选项,然后使用sudo ifreload -a
命令重新加载配置。
当 svi-force-up
(bridge-always-up
) 选项设置为 on
时,即使接口处于关闭状态,桥也保持 UP 状态
cumulus@switch:~$ ip link show bond1
7: bond1: <BROADCAST,MULTICAST,MASTER> mtu 9216 qdisc noqueue master br_default state DOWN mode DEFAULT group default qlen 1000
link/ether 48:b0:2d:cf:e4:3e brd ff:ff:ff:ff:ff:ff
cumulus@switch:~$ ip link show br_default
18: br_default: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether 8:b0:2d:4e:ad:89 brd ff:ff:ff:ff:ff:ff
要显示交换机上所有 SVI 的 svi-force-up
选项是否设置为 on
,请运行 nv show system global svi-force-up
命令
cumulus@switch:~$ nv show system global svi-force-up
operational applied
------ ----------- -------
enable on on
要显示特定桥中 SVI 的 svi-force-up
选项是否设置为 on
,请运行 nv show bridge domain <domain-id> svi-force-up
命令
cumulus@switch:~$ nv show bridge domain br_default svi-force-up
applied
------ -------
enable on
IPv6 链路本地地址生成
默认情况下,Cumulus Linux 在 VLAN 接口上自动生成 IPv6链路本地地址。如果您想使用不同的机制来分配链路本地地址,则可以禁用此功能。您可以为常规 IPv6 地址和地址虚拟 (macvlan) 地址禁用链路本地自动地址生成。
要禁用 VLAN 上常规 IPv6 地址的自动地址生成,请运行以下命令。以下示例命令禁用 VLAN 10 上常规 IPv6 地址的自动地址生成。
编辑 /etc/network/interfaces
文件以将 ipv6-addrgen off
行添加到 VLAN 节,然后运行 ifreload -a
命令。
cumulus@switch:~$ sudo nano /etc/network/interfaces
...
auto vlan10
iface vlan 10
ipv6-addrgen off
vlan-id 10
vlan-raw-device br_default
...
cumulus@switch:~$ ifreload -a
要重新启用 VLAN 的自动链路本地地址生成
/etc/network/interfaces
文件以从 VLAN 节中删除 ipv6-addrgen off
行,然后运行 ifreload -a
命令。桥的 MAC 地址
要配置桥的 MAC 地址,请运行 nv set bridge domain <bridge> mac-address <mac-address>
命令。
以下示例将 MAC 地址 00:00:5E:00:53:00
配置给桥 br_default
cumulus@switch:~$ nv set bridge domain br_default mac-address 00:00:5E:00:53:00
cumulus@switch:~$ nv config apply
要取消设置桥的 MAC 地址,请运行 nv unset bridge domain <bridge> mac-address <mac-address>
命令。
cumulus@switch:~$ nv unset bridge domain br_default mac-address
cumulus@switch:~$ nv config apply
编辑 /etc/network/interfaces
文件以将 MAC 地址 (hwaddress
) 添加到桥节,然后运行 sudo ifreload -a
命令。
cumulus@switch:~$ sudo nano /etc/network/interfaces
...
auto br_default
iface br_default
bridge-ports bond1 bond2 bond3 peerlink vxlan48
hwaddress 00:00:5E:00:53:00
bridge-vlan-aware yes
bridge-vids 10 20 30
cumulus@switch:~$ sudo ifreload -a
要取消设置桥的 MAC 地址,请从桥节中删除 MAC 地址并运行 sudo ifreload -a
命令。
MAC 地址老化
默认情况下,Cumulus Linux 在以太网交换表中存储 MAC 地址 1800 秒(30 分钟)。您可以将此设置更改为介于 0 到 65535 之间的值。值为 0 将禁用 MAC 学习,帧会泛洪出 VLAN 中的所有端口。
以下命令示例将 MAC 老化设置更改为 600 秒
cumulus@switch:~$ nv set bridge domain br_default ageing 600
cumulus@switch:~$ nv config apply
编辑 /etc/network/interfaces
文件以将 bridge-ageing
参数添加到桥接口
cumulus@switch:~$ sudo nano /etc/network/interfaces
...
auto br_default
iface br_default
bridge-ageing 600
...
要显示桥老化配置设置,请运行 nv show bridge domain <domain>
命令或 Linux sudo ip -d link show <bridge-domain>
命令。
cumulus@switch:~$ nv show bridge domain br_default
operational applied
--------------- ----------- ----------
ageing 600
encap 802.1Q
mac-address auto
type vlan-aware
untagged 1
vlan-vni-offset 0
...
要将桥老化重置为默认值(1800 秒),请运行 nv unset bridge domain <domain> ageing
命令。
清除动态 MAC 地址条目
您可以从转发表数据库中清除以下条目,而不是等待它们老化
- 所有动态 MAC 地址。
- 特定接口、VLAN 或接口和 VLAN 的所有动态 MAC 地址。
- VLAN、接口或 VLAN 和接口的特定动态 MAC 地址。
- 清除动态 MAC 地址命令不会清除粘性条目、永久条目和 EVPN MAC 条目。
- 如果条目在桥转发表数据库中不存在,NVUE 不会显示任何错误或警告。
- 在 MLAG 配置中,您必须从两个 MLAG 对等方清除 MAC 地址。
清除所有动态 MAC 地址
要从转发表数据库中清除所有动态 MAC 地址,请运行 nv action clear bridge domain <bridge-id> mac-table dynamic
命令
cumulus@switch:~$ nv action clear bridge domain br_default mac-table dynamic
Action executing ...
The matching FDB entries were deleted successfully.
nv action clear bridge domain <bridge-id> mac-table dynamic
命令清除在 ES 绑定上学习的静态条目,这些条目作为静态条目安装在 EVPN 多宿主中,包括桥驱动程序和 VXLAN 驱动程序中的静态 VXLAN 条目。
清除接口、VLAN 或接口和 VLAN 的所有动态 MAC 地址
要清除特定接口的所有动态 MAC 地址,请运行 nv action clear bridge domain <bridge-id> mac-table dynamic interface <interface-id
命令
cumulus@switch:~$ nv action clear bridge domain br_default mac-table dynamic interface swp1
Action executing ...
The matching FDB entries were deleted successfully.
要清除特定 VLAN 的所有动态 MAC 地址,请运行 nv action clear bridge domain <bridge-id> mac-table dynamic vlan <vlan-id
命令
cumulus@switch:~$ nv action clear bridge domain br_default mac-table dynamic vlan 10
Action executing ...
The matching FDB entries were deleted successfully.
nv action clear bridge domain <bridge-id> mac-table dynamic vlan <vlan-id>
命令清除桥和 VXLAN 驱动程序中对应 VLAN 或 VNI 的静态 VXLAN 条目。
要清除特定接口和 VLAN 的所有动态 MAC 地址,请运行 nv action clear bridge domain <bridge-id> mac-table dynamic interface <interface-id> vlan <vlan-id>
命令
cumulus@switch:~$ nv action clear bridge domain br_default mac-table dynamic interface swp1 vlan 10
Action executing ...
The matching FDB entries were deleted successfully.
清除接口、VLAN 或接口和 VLAN 的特定动态 MAC 地址
要清除 VLAN 的特定动态 MAC 地址,请运行 nv action clear bridge domain <domain-id> mac-table dynamic mac <mac-address> vlan <vlan-id>
命令
cumulus@switch:~$ nv action clear bridge domain br_default mac-table dynamic mac 00:00:0A:BB:28:FC vlan 10
Action executing ...
The matching FDB entries were deleted successfully.
要清除接口的特定动态 MAC 地址,请运行 nv action clear bridge domain <domain-id> mac-table dynamic mac <mac-address> interface <interface-id>
命令
cumulus@switch:~$ nv action clear bridge domain br_default mac-table dynamic mac 00:00:0A:BB:28:FC interface swp1
Action executing ...
The matching FDB entries were deleted successfully.
要清除 VLAN 和接口的特定动态 MAC 地址,请运行 nv action clear bridge domain <domain-id> mac-table dynamic mac <mac-address> vlan <vlan-id interface <interface-id>
命令
cumulus@switch:~$ nv action clear bridge domain br_default mac-table dynamic mac 00:00:0A:BB:28:FC vlan 10 interface swp1
Action executing ...
The matching FDB entries were deleted successfully.
您可以指定接口和 VLAN 的范围。例如
cumulus@switch:~$ nv action clear bridge domain br_default mac-table dynamic mac 48:b0:2d:ab:fd:1f vlan 10,20,30 interface bond1-3
静态 MAC 地址条目
您可以通过运行类似于以下命令的命令,将静态 MAC 地址条目添加到 VLAN 感知桥内接口的第 2 层表
cumulus@switch:~$ sudo bridge fdb add 12:34:56:12:34:56 dev swp1 vlan 150 master static sticky
cumulus@switch:~$ sudo bridge fdb show
44:38:39:00:00:7c dev swp1 master bridge permanent
12:34:56:12:34:56 dev swp1 vlan 150 sticky master bridge static
44:38:39:00:00:7c dev swp1 self permanent
12:12:12:12:12:12 dev swp1 self permanent
12:34:12:34:12:34 dev swp1 self permanent
12:34:56:12:34:56 dev swp1 self permanent
12:34:12:34:12:34 dev bridge master bridge permanent
44:38:39:00:00:7c dev bridge vlan 500 master bridge permanent
12:12:12:12:12:12 dev bridge master bridge permanent
故障排除
要显示映射到每个桥的端口,请运行 NVUE nv show bridge port
命令或 Linux bridge link show
命令
cumulus@switch:~$ nv show bridge port
domain port
-------- ------------------------------
br_default swp1,swp2,swp3
要显示特定桥的端口信息,请运行 NVUE nv show bridge domain <domain-name> port
命令
cumulus@switch:~$ nv show bridge domain br_default port
port flags state
---- -------------------------- ----------
swp1 flood,learning,mcast_flood forwarding
swp2 flood,learning,mcast_flood forwarding
swp3 flood,learning,mcast_flood forwarding
要显示映射到每个桥端口的 VLAN,请运行 NVUE nv show bridge port-vlan
命令或 Linux bridge vlan show
命令
cumulus@switch:~$ nv show bridge port-vlan
domain port vlan tag-state
------- --------- --------- ---------
br_default swp1 10 untagged
swp2 1 untagged
10 tagged
20 tagged
30 tagged
swp3 1 untagged
10 tagged
20 tagged
30 tagged
要显示特定桥的 VLAN 信息,请运行 NVUE nv show bridge domain <domain-name> port vlan
命令或 Linux bridge -d vlan show
命令
cumulus@switch:~$ nv show bridge domain br_default port vlan
port vlan tag-state fwd-state
---- ---- --------- ----------
swp1 10 untagged forwarding
swp2 1 untagged forwarding
10 tagged forwarding
20 tagged forwarding
30 tagged forwarding
swp3 1 untagged forwarding
10 tagged forwarding
20 tagged forwarding
30 tagged forwarding
配置示例
以下示例配置包含一个访问端口 (swp51)、一个承载所有 VLAN 的 trunk (swp3 到 swp48) 和一个从交换机端口 (swp2) 修剪某些 VLAN 的 trunk。
cumulus@switch:mgmt:~$ nv set interface swp3-48 bridge domain br_default
cumulus@switch:mgmt:~$ nv set bridge domain br_default vlan 310,700,707,712,850,910
cumulus@switch:mgmt:~$ nv set interface swp1 bridge domain br_default access 310
cumulus@switch:mgmt:~$ nv set interface swp1 bridge domain br_default stp bpdu-guard on
cumulus@switch:mgmt:~$ nv set interface swp1 bridge domain br_default stp admin-edge on
cumulus@switch:mgmt:~$ nv set interface swp2 bridge domain br_default vlan 707,712,850
cumulus@switch:mgmt:~$ nv set interface swp2 bridge domain br_default stp admin-edge on
cumulus@switch:mgmt:~$ nv set interface swp2 bridge domain br_default stp bpdu-guard on
cumulus@switch:mgmt:~$ nv set interface swp49 bridge domain br_default stp network on
cumulus@switch:mgmt:~$ nv set interface swp50 bridge domain br_default stp network on
cumulus@switch:mgmt:~$ nv config apply
cumulus@switch:mgmt:~$ sudo cat /etc/nvue.d/startup.yaml
- set:
bridge:
domain:
br_default:
vlan:
'310': {}
'700': {}
'707': {}
'712': {}
'850': {}
'910': {}
interface:
swp1:
bridge:
domain:
br_default:
access: 310
stp:
admin-edge: on
bpdu-guard: on
type: swp
swp2:
bridge:
domain:
br_default:
stp:
admin-edge: on
bpdu-guard: on
vlan:
'707': {}
'712': {}
'850': {}
type: swp
...
swp49:
bridge:
domain:
br_default:
stp:
network: on
type: swp
swp50:
bridge:
domain:
br_default:
stp:
network: on
type: swp
system:
hostname: switch
cumulus@switch:mgmt:~$ sudo cat /etc/network/interfaces
...
auto lo
iface lo inet loopback
auto mgmt
iface mgmt
address 127.0.0.1/8
address ::1/128
vrf-table auto
auto eth0
iface eth0 inet dhcp
ip-forward off
ip6-forward off
vrf mgmt
# the following is an access port
auto swp1
iface swp1
bridge-access 310
mstpctl-bpduguard yes
mstpctl-portadminedge yes
# the following is a trunk port that is pruned
# only .1q tags of 707, 712, 850 are sent and received
auto swp2
iface swp2
bridge-vids 707 712 850
mstpctl-bpduguard yes
mstpctl-portadminedge yes
...
# the following port is the trunk uplink and inherits all vlans
# from br_default; bridge assurance is enabled using portnetwork
auto swp49
iface swp49
mstpctl-portnetwork yes
# the following port is the trunk uplink and inherits all vlans
# from 'br_default'; bridge assurance is enabled using portnetwork
auto swp50
iface swp50
mstpctl-portnetwork yes
# ports swp3-swp48 are trunk ports that inherit vlans
# 310,700,707,712,850,910 from the bridge br_default
auto br_default
iface br_default
bridge-ports swp1 swp2 swp3... swp49 swp50
hwaddress 44:38:39:22:01:af
bridge-vlan-aware yes
bridge-vids 310 700 707 712 850 910
bridge-pvid 1
注意事项
生成树协议 (STP)
- 默认情况下,STP 在每个桥的基础上以 RSTP 模式运行。要将 STP 配置为以 PVRST 模式运行,其中每个 VLAN 运行自己的 STP 实例,请参阅VLAN 感知桥的 PVRST 模式。
mstpd
仍然是用户空间协议守护程序。
VLAN 转换
您不能在 VLAN 感知模式下在桥上启用 VLAN 转换。只有传统模式桥支持 VLAN 转换。
桥转换
您不能自动将传统模式桥转换为 VLAN 感知桥,也不能从 VLAN 感知桥转换回传统模式桥。您必须删除原始配置并关闭所有成员交换机端口,然后才能创建新桥。
VLAN 内存资源限制
在 Spectrum-2 及更高版本上,Cumulus Linux 为每个 VLAN 使用内部调试流计数器,这些计数器需要 KVD 和 ATCAM 内存空间。当您配置超过 1000 个 VLAN 接口时,如果流计数器资源耗尽 ACL 资源空间,您可能无法应用 ACL。此外,您可能会在 /var/log/switchd.log
文件中看到类似于以下的错误消息
error: hw sync failed (sync_acl hardware installation failed) Rolling back .. failed.
error: hw sync failed (Bulk counter init failed with No More Resources). Rolling back ..
要解决此问题并使用高 VLAN 和 ACL 规模管理 Netfilter 资源,请参阅ACL 规则安装失败故障排除。