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-vidsbridge-pvid,则桥中的所有端口都将继承这些配置。但是,为特定端口指定任何这些设置都会覆盖桥中的设置。
  • 请勿将管理端口 eth0 与任何交换机端口桥接。例如,如果您创建了一个包含 eth0 和 swp1 的桥,则该桥无法正常工作,并且会中断对管理接口的访问。

配置多个 VLAN 感知桥

此示例显示了在交换机上创建两个 VLAN 感知桥所需的命令。

  • bridge1 桥接 swp1 和 swp2,并包含 2 个 VLAN;vlan 10vlan 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_vlansbroadcast_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
  1. 编辑 /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
    
  2. 保存文件后,您必须重启 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

默认情况下,Cumulus Linux 在 VLAN 接口上自动生成 IPv6链路本地地址。如果您想使用不同的机制来分配链路本地地址,则可以禁用此功能。您可以为常规 IPv6 地址和地址虚拟 (macvlan) 地址禁用链路本地自动地址生成。

要禁用 VLAN 上常规 IPv6 地址的自动地址生成,请运行以下命令。以下示例命令禁用 VLAN 10 上常规 IPv6 地址的自动地址生成。

Cumulus Linux 不为此设置提供 NVUE 命令。

编辑 /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 的自动链路本地地址生成

Cumulus Linux 不为此设置提供 NVUE 命令。
编辑 /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 使用内部调试流计数器,这些计数器需要 KVDATCAM 内存空间。当您配置超过 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 规则安装失败故障排除