快速生成树协议(Rapid Spanning Tree Protocol ,RSTP) 用于在局域网中消除 L2 物理环路,RSTP 由 STP 改进而来,除了和传统的 STP 协议一样具有避免环路、动态管理冗余链路的功能外,RSTP 极大的缩短了拓扑收敛时间

配置 RSTP 需要先安装 Open vSwitch (openvswitch, OvS) ,这是 Linux Bridge、Linux Bond 和 Linux vlan 的替代方案。Open vSwitch 支持物理交换机上的大多数功能,提供一些高级功能,如 RSTP、VXLAN、OpenFlow,并支持单个网桥上的多个 vlan。如果您需要这些功能,切换到 Open vSwitch 是有意义的。如果您没有安装 OvS,您需要先设置 OvS


安装 Open vSwitch

  • 首先启用 Proxmox VE 的非订阅源
  • 安装 OvS(下文提到 Open vSwitch 将全部使用 OvS 简称)(需要大约 6 MB 磁盘空间)
1
apt install -y openvswitch-switch

配置 RSTP

将 Linux Bridge 转换为 OvS Bridge
[scode type=”yellow” size=””]OvS Bridge 的桥接成员必须是 OvS 端口、OvS Bond 或 OvS vlan;Linux Bridge 的桥接成员不得是 OvS 端口、OvS Bond 或 OvS vlan,如果您有多个桥接,您需要为所有使用到 OvS 设备的 Linux Bridge 转换为 OvS Bridge(即使这个桥接不需要 RSTP)[/scode]

修改 /etc/network/interfaces

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
auto enp2s0 // 为网桥成员添加 auto 标记
iface enp2s0 inet manual
ovs_type OVSPort // 设置为 OvS 端口
ovs_bridge vmbr0 // 该接口属于 vmbr0 桥接

auto vmbr0
iface vmbr0 inet static // 静态 IPv4
address 10.20.6.12/11 // IP/CIDR
gateway 10.10.10.10 // 网关
ovs_type OVSBridge // 设置为 OvS 网桥
ovs_ports enp2s0 // 该桥接包含 enp2s0 接口
ovs_mtu 1500 // MTU,大于 1500 必须设置
ovs_options other_config:rstp-port-mcheck=true // 见下方 ovs_options 选项
up ovs-vsctl set Bridge ${IFACE} rstp-enable=true other_config:rstp-priority=57344 // 见下方桥接选项
post-up sleep 10 // 在启动继续之前休眠 10 秒左右等待 RSTP 收敛

ovs_options 选项:

  • other_config:rstp-path-cost=
    10GbE 的默认值为 2000,1GbE 的默认值为 20000
  • other_config:rstp-port-admin-edge=
    如果已知它连接到运行 RSTP 的交换机,则设置为 False,以防止在未检测到 BDPU 时进入转发状态
  • other_config:rstp-port-auto-edge=
    如果已知它连接到运行 RSTP 的交换机,则设置为 False,以防止在未检测到 BDPU 时进入转发状态
  • other_config:rstp-port-mcheck=
    如果知道另一端使用 RSTP 而不是 STP,则设置为 True,将在链路检测时立即广播 BDPU

桥接选项:

  • up ovs-vsctl set Bridge ${IFACE} rstp_enable=true
    开启 RSTP
  • other_config:rstp-priority=
    接受十六进制和十进制值。
    配置根桥优先级,值越低越有可能成为根桥。建议将此设置为最大值 0xFFFF(65536),以防止 Open vSwitch 成为根桥。默认值为 0x8000(32768),值必须是 4096 的倍数
  • other_config:rstp-forward-delay=
    网桥在进入转发状态之前处于学习模式的时间量。范围是 4-30,默认 15
  • other_config:rstp-max-age=
    范围是 6-40,默认 20

配置好之后保存,新配置将在重启设备之后应用

[scode type=”yellow” size=””]请不要在重启设备前重启网络服务,这会让您的服务器失去网络连接[/scode]