MSTP多实例配置太烧脑?华为VBST每个VLAN自己长一棵树

接入交换机双归上联做冗余,环就得靠生成树来破。传统方案里 STP 和 RSTP 有个共同缺陷:不能按 VLAN 阻塞冗余链路,全网所有 VLAN 共享一棵生成树,报文全沿一条路走——既做不到 VLAN 间流量负载分担,被阻塞的链路也整条闲着浪费带宽。MSTP 能破这个局,多实例可以把不同 VLAN 的流量分到不同路径,但实例、域、进程一堆概念比较抽象,配置门槛对中小企业运维不算友好。

华为给出了第三条路:VBST(VLAN-Based Spanning Tree)。可以简单理解为在每个 VLAN 上运行一个 STP 或 RSTP,不同 VLAN 之间的生成树完全独立——VLAN 10 走左边链路、VLAN 30 走右边链路,天然实现负载分担,而配置上不需要定义任何实例,维护心智负担小得多。

配置步骤

官方示例的组网:接入交换机 SwitchC 和 SwitchD 分别双归接入汇聚交换机 SwitchA 和 SwitchB,接入层与汇聚层之间形成环形网络。SwitchC 承载 VLAN 10、20 的业务流量,SwitchD 承载 VLAN 20、30。目标是破环之外让不同 VLAN 的流量在链路上负载分担。

第一步,把四台设备的二层转发配通。在 SwitchA、SwitchB、SwitchC、SwitchD 上按各自承载的业务创建 VLAN:

[SwitchA] vlan batch 10 20 30

汇聚交换机 SwitchB 同样创建 VLAN10、20、30,接入交换机 SwitchC 创建 VLAN10、20,SwitchD 创建 VLAN20、30。然后把进环的端口划进对应 VLAN,以 SwitchA 为例,三个口全做 Trunk:

[SwitchA] interface gigabitethernet 1/0/1
[SwitchA-GigabitEthernet1/0/1] port link-type trunk
[SwitchA-GigabitEthernet1/0/1] port trunk allow-pass vlan 10 20 30
[SwitchA-GigabitEthernet1/0/1] quit
[SwitchA] interface gigabitethernet 1/0/2
[SwitchA-GigabitEthernet1/0/2] port link-type trunk
[SwitchA-GigabitEthernet1/0/2] port trunk allow-pass vlan 20 30
[SwitchA-GigabitEthernet1/0/2] quit
[SwitchA] interface gigabitethernet 1/0/3
[SwitchA-GigabitEthernet1/0/3] port link-type trunk
[SwitchA-GigabitEthernet1/0/3] port trunk allow-pass vlan 10 20
[SwitchA-GigabitEthernet1/0/3] quit

SwitchB、SwitchC、SwitchD 的环上端口同样按规划做 Trunk 放行;SwitchC 和 SwitchD 连终端的 GE1/0/4、GE1/0/5 做 Access 口分别加入对应 VLAN。

第二步,四台设备全部把生成树工作模式切到 VBST:

[SwitchA] stp mode vbst
[SwitchB] stp mode vbst
[SwitchC] stp mode vbst
[SwitchD] stp mode vbst

第三步,规划各 VLAN 的根桥和备份根桥。VLAN 10 和 VLAN 20 的根桥设为 SwitchA、备份根桥 SwitchB;VLAN 30 反过来,根桥 SwitchB、备份根桥 SwitchA——这样 VLAN 10/20 的流量自然聚向 SwitchA 一侧,VLAN 30 走 SwitchB 一侧,负载分担的格局就定下来了:

[SwitchA] stp vlan 10 root primary
[SwitchB] stp vlan 10 root secondary
[SwitchA] stp vlan 20 root primary
[SwitchB] stp vlan 20 root secondary
[SwitchB] stp vlan 30 root primary
[SwitchA] stp vlan 30 root secondary

第四步,用端口路径开销值控制阻塞位置。本例使用缺省的 IEEE 802.1t 计算方法,把要阻塞的端口开销配成 2000000。注意同一网络内所有交换机的端口路径开销要使用相同的计算方法:

[SwitchC] interface gigabitethernet 1/0/2
[SwitchC-GigabitEthernet1/0/2] stp vlan 10 cost 2000000
[SwitchC-GigabitEthernet1/0/2] stp vlan 20 cost 2000000
[SwitchC-GigabitEthernet1/0/2] quit
[SwitchD] interface gigabitethernet 1/0/2
[SwitchD-GigabitEthernet1/0/2] stp vlan 20 cost 2000000
[SwitchD-GigabitEthernet1/0/2] stp vlan 30 cost 2000000
[SwitchD-GigabitEthernet1/0/2] quit

开销拉大后,SwitchC 的 GE1/0/2 会在 VLAN 10、20 的生成树中被阻塞,SwitchD 的 GE1/0/2 在 VLAN 20、30 的生成树中被阻塞——注意是"各自 VLAN 的树里各自阻塞",这正是 VBST 与单棵树的本质区别。

第五步,处理 VLAN 1 再启用。缺省情况下所有接口都在 VLAN 1 且 VLAN 1 的 VBST 已使能,为减少无谓的生成树计算,四台设备统一去使能 VLAN 1 的 VBST,并将环上接口退出 VLAN 1,防止去使能后 VLAN 1 成环:

[SwitchA] stp vlan 1 disable
[SwitchB] stp vlan 1 disable
[SwitchC] stp vlan 1 disable
[SwitchD] stp vlan 1 disable
[SwitchA] interface gigabitethernet 1/0/1
[SwitchA-GigabitEthernet1/0/1] undo port trunk allow-pass vlan 1
[SwitchA-GigabitEthernet1/0/1] quit
[SwitchA] interface gigabitethernet 1/0/2
[SwitchA-GigabitEthernet1/0/2] undo port trunk allow-pass vlan 1
[SwitchA-GigabitEthernet1/0/2] quit
[SwitchA] interface gigabitethernet 1/0/3
[SwitchA-GigabitEthernet1/0/3] undo port trunk allow-pass vlan 1
[SwitchA-GigabitEthernet1/0/3] quit

SwitchB、SwitchC、SwitchD 的环上接口同样执行 undo port trunk allow-pass vlan 1。最后四台设备全局使能生成树,破环计算开始:

[SwitchA] stp enable
[SwitchB] stp enable
[SwitchC] stp enable
[SwitchD] stp enable

第六步,把 SwitchC 和 SwitchD 连终端的接口配成边缘端口,减少拓扑计算、提高收敛速率:

[SwitchC] interface gigabitethernet 1/0/4
[SwitchC-GigabitEthernet1/0/4] stp edged-port enable
[SwitchC-GigabitEthernet1/0/4] quit
[SwitchC] interface gigabitethernet 1/0/5
[SwitchC-GigabitEthernet1/0/5] stp edged-port enable
[SwitchC-GigabitEthernet1/0/5] quit

SwitchD 的 GE1/0/4、GE1/0/5 配置相同。

验证

网络计算稳定后,在 SwitchA 上看生成树模式,三个 VLAN 各自的桥都运行在 VBST:

[SwitchA] display stp bridge local
VLAN-ID          Bridge ID Hello Max Forward Protocol
                            Time Age   Delay
----- -------------------- ----- --- ------- ---------------------------
   10    10.0200-0000-6703     2  20      15 VBST
   20    20.0200-0000-6703     2  20      15 VBST
   30  4126.0200-0000-6703     2  20      15 VBST

再看端口状态,SwitchA 上 VLAN 30 的 GE1/0/1 角色是 ROOT——VLAN 30 里它成了非根桥,流量改走 SwitchB 方向,与 VLAN 10/20 的 DESI 形成对照,负载分担已经生效:

[SwitchA] display stp brief
 VLAN-ID   Port                        Role  STP State     Protection
      10   GigabitEthernet1/0/1        DESI  FORWARDING    NONE
      10   GigabitEthernet1/0/3        DESI  FORWARDING    NONE
      20   GigabitEthernet1/0/1        DESI  FORWARDING    NONE
      20   GigabitEthernet1/0/2        DESI  FORWARDING    NONE
      20   GigabitEthernet1/0/3        DESI  FORWARDING    NONE
      30   GigabitEthernet1/0/1        ROOT  FORWARDING    NONE
      30   GigabitEthernet1/0/2        DESI  FORWARDING    NONE

SwitchB、SwitchC、SwitchD 上分别执行 display stp brief,可看到 SwitchC 的 GE1/0/2 在 VLAN 10、20 中、SwitchD 的 GE1/0/2 在 VLAN 20、30 中处于 DISCARD 阻塞状态。贵州诚鑫致达科技在园区网汇聚接入双归改造中验证过这套流程,VLAN 级防环加分担一步到位。

几个官方强调的坑:环形网络里一旦启用 VBST 就立即开始计算,设备优先级、端口开销这些影响计算的参数要在启用前配好,中途改动容易引发网络震荡;框式交换机已使能 HVRP 时禁止把 STP 模式改成 VBST;已指定根桥或备份根桥的设备要改优先级,需先执行 undo stp vlan root 去使能根桥功能再配新值;端口收敛方式建议选 normal,选 fast 的话频繁的 ARP 表项删除可能把主控板和接口板 CPU 推到 100%。