☰
VRRP与MSTP联合实验:双网关冗余与二层负载均衡配置指南
2026/10/19 5:25:59 网站建设 项目流程

最近在做一套综合实验,把VRRP和MSTP放到同一个网络里跑,折腾了两天,踩了不少坑。这个实验用到的设备是某厂商的VRP命令行交换机,拓扑不算复杂,但把双网关冗余和二层环路消除揉在一起后,很多隐藏问题就冒出来了。这套实验非常适合刚学完STP和VRRP的人做进阶练习,也适合准备数通面试前拿来梳理思路。

我尽量把完整规划和配置过程写清楚,尤其是那些文档里不会写的坑,比如根桥选错导致流量绕路、VRRP双主、MSTP实例映射不一致等等。只要跟着这个思路做一遍,你对"网关冗余"和"二层拓扑"的关系会有非常直观的理解。

1. 实验整体设计与思路拆解

1.1 为什么要把VRRP和MSTP放在一起

很多初学者习惯把两个技术分开做实验:要么只玩STP,看阻塞端口;要么只配VRRP,主备切换。但真实网络中这两个东西是同时存在的:接入交换机负责二层转发,需要MSTP防止环路;核心交换机负责网关,需要VRRP保证网关冗余。如果两者各玩各的,会出现一个尴尬局面——VRRP的Master在A设备上,但STP的根桥在B设备上,数据从接入层上来后,明明A是网关,却需要绕到B再转发,路径莫名其妙变长。

这个实验的核心价值,就是让你学会让MSTP的实例根桥和VRRP的Master位置对齐,实现"流量就近转发、故障自动切换"。同时通过多实例设计,让两条上行链路都能干活,而不是一条链路闲着,一台设备在睡大觉。

1.2 拓扑规划与地址分配

我用的拓扑是两台核心加两台接入的双归结构。核心交换机分别是SW1和SW2,接入交换机是SW3和SW4。SW3和SW4分别双上行连接到SW1和SW2,SW1和SW2之间再拉一条互联链路。这个互联链路非常关键,后面会讲为什么。

业务上划分两个VLAN:VLAN10作为办公网段,VLAN20作为服务器网段。网关虚拟IP分别规划成192.168.10.1和192.168.20.1。核心交换机的三层接口和VRRP配置都建在VLANIF接口上,这样一台核心挂了,另一台能立刻顶上,终端无感知。

MSTP这边规划两个实例:实例1只映射VLAN10,实例2只映射VLAN20。SW1作为实例1的根桥,SW2作为实例2的根桥。这样VLAN10的流量在接入层会优先走向SW1,VLAN20的流量优先走向SW2。VRRP那边对应着来:VLAN10的Master是SW1,VLAN20的Master是SW2。根桥和Master一一配对,就实现了真正的负载分担。

2. 关键原理梳理

2.1 MSTP是怎么做到"多实例"的

传统STP整个交换网络只有一个生成树实例,所有VLAN共用一颗树,必然导致大量端口被阻塞,链路利用率很低。MSTP能创建多个生成树实例,每个实例独立计算拓扑,再把不同的VLAN映射到不同实例上。这样VLAN10走实例1的树,VLAN20走实例2的树,两条上行链路都能转发,天然做了负载均衡。

不过MSTP有个前提:同一个MST域内的交换机必须配置相同的域名、修订级别、实例与VLAN映射关系。只要有一台设备映射不对,MSTP就会认为它不在同一个域,退化成普通的STP甚至产生次优路径,这是个很隐蔽的坑。

2.2 VRRP的主备本质

VRRP把两台核心交换机抽象成一个虚拟路由器,对外只暴露一个虚拟IP。设备之间通过组播报文互相通报状态,优先级高的成为Master,低的成为Backup。Master负责转发终端发往网关的流量,Backup在Master故障时立即接管。

这里有个细节:VRRP抢占模式默认是开启的,但如果没有做延迟,优先级的抖动会让主备频繁切换。生产环境一般会设置抢占延迟,比如20秒,让故障恢复后有足够时间稳定拓扑,避免网络震荡。

2.3 MSTP和VRRP的联动逻辑

两者单独看都不复杂,但放在一起就要对齐角色。MSTP决定的是"二层报文从接入交换机走哪条物理链路上来",VRRP决定的是"三层网关的Master在哪台设备"。如果两者不对齐,比如某个VLAN的STP根桥在SW2,但VRRP Master在SW1,那么接入交换机从根端口发出的数据会先到达SW2,SW2查路由发现网关在SW1,又从互联链路把报文送过去,来回绕一圈。

所以实验的核心设计原则是:每一个VLAN的MSTP根桥,必须和该VLAN的VRRP Master在同一台设备上。这句话是整套实验的灵魂。

3. 实验配置实操

3.1 基础配置:VLAN、Trunk和接口

先把VLAN建好,所有设备统一规划。

# SW1/SW2/SW3/SW4均执行 system-view vlan batch 10 20

接入交换机连接核心的两条链路配置为Trunk,放行所有业务VLAN。核心连接接入的接口也是Trunk。

# SW3连接SW1的接口,假设是GE0/0/1 interface GigabitEthernet0/0/1 port link-type trunk port trunk allow-pass vlan 10 20 # SW3连接SW2的接口,假设是GE0/0/2 interface GigabitEthernet0/0/2 port link-type trunk port trunk allow-pass vlan 10 20

SW4同样配置。SW1和SW2之间的互联接口,我用的是Trunk,放行VLAN10和20,同时还要确保这个互连链路在MSTP的两个实例里都是转发状态,这一点后面验证时会专门讲。核心设备互联接口建议放到一个专门的管理VLAN,但这里为了简化就直接放行业务VLAN。

3.2 MSTP域配置与实例映射

MSTP配置的重点是域参数一致。先在三台参与二层转发的设备上统一配置域:

# SW1/SW2/SW3/SW4均执行 stp mode mstp stp region-configuration region-name CORE_LAB revision-level 1 instance 1 vlan 10 instance 2 vlan 20 active region-configuration

这里要注意:active region-configuration这条命令必须敲,否则前面的配置不生效。而且四台设备的region-name、revision-level和实例映射必须一字不差,大小写都不能错,否则MSTP域就分裂了。

3.3 配置MSTP根桥和优先级

根桥配置分主备。SW1是实例1的主根,实例2的备根;SW2反过来。

# SW1 stp instance 1 root primary stp instance 2 root secondary # SW2 stp instance 1 root secondary stp instance 2 root primary

用root primary命令会让设备自动把实例优先级设置为4096,root secondary设置为8192,比自己手工改优先级省事。但有一点要注意:如果网络中已经有其他优先级更低的设备,root primary会强制抢占根桥位置,可能引起短暂的拓扑震荡。所以生产环境一般提前规划好优先级,实验环境倒无所谓。

配置完成后,可以查看根桥信息确认结果:

display stp instance 1 brief display stp instance 2 brief

如果看到SW1在实例1中的端口角色有Root(根端口)或Designated(指定端口),并且该实例的根桥MAC指向SW1,说明配置正确。

3.4 VRRP配置与优先级调优

VRRP配置在核心交换机的VLANIF接口上。先看SW1。

# SW1 interface Vlanif10 ip address 192.168.10.2 255.255.255.0 vrrp vrid 10 virtual-ip 192.168.10.1 vrrp vrid 10 priority 120 vrrp vrid 10 preempt-mode timer delay 20 interface Vlanif20 ip address 192.168.20.2 255.255.255.0 vrrp vrid 20 virtual-ip 192.168.20.1 vrrp vrid 20 priority 100 vrrp vrid 20 preempt-mode timer delay 20

再看SW2。

# SW2 interface Vlanif10 ip address 192.168.10.3 255.255.255.0 vrrp vrid 10 virtual-ip 192.168.10.1 vrrp vrid 10 priority 100 vrrp vrid 10 preempt-mode timer delay 20 interface Vlanif20 ip address 192.168.20.3 255.255.255.0 vrrp vrid 20 virtual-ip 192.168.20.1 vrrp vrid 20 priority 120 vrrp vrid 20 preempt-mode timer delay 20

这样VLAN10的Master是SW1,VLAN20的Master是SW2,和MSTP实例根桥完全对齐。preempt-mode timer delay 20表示抢占前等待20秒,避免因端口震荡导致来回切换。接口上配置的IP必须和虚拟IP不在同一地址,否则接口IP和虚拟IP冲突。

3.5 上行链路联动:VRRP追踪接入接口

现实中最怕一种情况:SW1是VLAN10的Master,但SW1连接SW3的上行接口挂了。此时SW1仍然认为自己是Master,继续通告,可实际上VLAN10的终端从SW3无法访问SW1了。解决办法是让VRRP追踪上行接口状态,一旦接口down,自动降低优先级,让对端抢占。

# SW1追踪连接SW3的上行接口 interface Vlanif10 vrrp vrid 10 track interface GigabitEthernet0/0/1 reduced 30

reduced 30表示接口down时优先级降低30,原来120变成90,SW2的100就比它高了,会立即抢占成为Master。SW2的VLAN20也要做同样的追踪,追踪到它连接SW3或SW4的接口。注意,这里追踪的是二层物理接口,不是VLANIF,因为物理接口才能反映链路状态。

接入交换机不需要配VRRP,但需要把连接终端的接口配置为边缘端口,避免终端反复上下线触发STP重新计算。

# SW3/SW4 interface GigabitEthernet0/0/10 stp edged-port enable

4. 验证与测试过程

4.1 验证MSTP生成树状态

配置完成后,先在接入交换机SW3上查看MSTP端口角色:

display stp instance 1 brief display stp instance 2 brief

我实验中的输出摘要类似这样:

MSTID Port Role State 1 GE0/0/1 ROOT FORWARDING 1 GE0/0/2 ALTE DISCARDING 2 GE0/0/1 ALTE DISCARDING 2 GE0/0/2 ROOT FORWARDING

这就对了:实例1中,SW3到SW1的接口是根端口,转发;到SW2的接口是Alternate端口,阻塞。实例2完全反过来。两个实例各用一条链路,谁都没闲着。

SW4上的输出也应该类似,确保两条接入交换机的事件独立。如果SW3和SW4相同,说明拓扑正常。

4.2 验证VRRP主备状态

在核心交换机上执行:

display vrrp

输出里能看到VLAN10的Master是SW1(IP地址192.168.10.2那台),VLAN20的Master是SW2。虚拟IP都是192.168.10.1和192.168.20.1。如果看到两台设备同时显示Master,那就是出现了双主,后面排查部分会讲。

还要验证VRRP和MSTP是否对齐。一种快速检查方法:在SW1上用display vrrp看Master,再到SW3上用display stp instance 1看根桥MAC,两者指向同一台设备,就是对齐的。如果不对齐,就要检查是不是实例映射反了,或者优先级配错了。

4.3 业务连通性测试与主备切换

拿一台测试PC,网关配成192.168.10.1,ping服务器地址192.168.20.10(在VLAN20网段)。然后模拟故障。

第一种故障:把SW1上连接SW3的接口shutdown。正常情况下,VLAN10的VRRP应该检测到上行口down,优先级降到90,SW2抢占成为Master。终端ping网关会有短暂丢包,但20秒抢占延迟内能恢复。如果没恢复,检查track配置。

第二种故障:直接把SW1整机关机。此时SW2必须接管VLAN10和VLAN20两个网关。由于SW1的VRRP报文消失,SW2在3倍hello时间(大概3秒)后就会成为Master,业务中断时间非常短。

这里补充一个小技巧:用display vrrp brief可以快速看每个VRID的Master状态,比display vrrp输出更精简,适合在切换测试时反复刷新。

5. 常见问题与排查实录

5.1 MSTP域不一致导致端口异常

我第一次做这个实验时,SW3上的region-name多了个空格,结果四台设备看起来配置一样,但SW3的MSTP端口全部变成了Forwarding,环路直接在接入层出现。查看边界端口信息:

display stp region-configuration

四台设备的域名、修订级别、实例映射必须完全一致。这个命令只要有一台输出不同,就把配置复制粘贴吧,别手动敲了。

5.2 VRRP双主:核心互联链路被阻塞

实验中我故意把SW1和SW2之间的互联链路设为Access,只放行VLAN1,结果VLAN10和VLAN20的VRRP报文无法通过互联链路互通,两台核心都认为自己应该当Master。检查display vrrp看到两个Master。

解决办法:核心互联Trunk要放行所有承载VRRP的VLAN。同时要确认这条互联链路在MSTP的实例1和实例2中都是Designated端口。当SW1是实例1的根桥、SW2是实例2的根桥时,互联链路在两边各自是指定端口,不会阻塞。如果你发现互联链路在某个实例中被阻塞,八成是根桥选择出了问题,回到3.3节检查根优先级。

5.3 流量路径绕路:MSTP根桥和VRRP Master不对齐

这是一种比较隐蔽的问题。SW1是VLAN10的Master,但SW3在实例1中的根端口在SW2一侧,所有VLAN10的流量先从SW3到SW2,再经SW2从互联链路送到SW1的网关,路径多了一跳。虽然业务能通,但延迟和带宽都有浪费。

排查方法很直接:在接入交换机上用display stp instance 1 brief看根端口连到哪台设备,再用display vrrp看VLAN10的Master是哪台。两者不一致就调整MSTP实例的根桥优先级,让根桥和Master统一。

5.4 抢占延迟引发的"切换回来了但业务还是断"

排查过一个问题:主链路恢复后,VRRP抢占延迟20秒到了,Master抢回来了,但终端还是无法上网。后来发现是接入交换机上的STP还在收敛,根端口虽然切换到恢复的那条链路,但MAC地址表没老化,还在往阻塞端口发流量。解决办法是配置STP拓扑变化触发MAC地址表刷新,或者把连接终端的接口配置为边缘端口,减少拓扑变化次数。

5.5 常用排查命令速查表

目的命令
查看MSTP实例端口角色display stp instance 1 brief
查看MSTP域配置display stp region-configuration
查看VRRP摘要display vrrp brief
查看VRRP详情display vrrp
查看MAC地址表display mac-address
查看接口状态display interface brief
查看STP根桥display stp root

这套实验做完,最重要的收获不是背会命令,而是建立一种"角色对齐"思维。MSTP和VRRP是两个层面的协议,一个管链路,一个管网关,但最终服务的是同一条流量路径。配置前先画一张表,把VLAN、MSTP实例、根桥、VRRP主备、物理链路全列出来,对着表配,基本不会乱。

最后再分享一个小技巧:实验里所有MSTP实例的映射尽量控制在少数几个,不要一个VLAN一个实例。实例太多会加大CPU和内存开销,而且根桥计算复杂。像我这样两个VLAN、两个实例,既能演示负载分担,又不会把排错复杂度拉满。如果你打算扩展到多VLAN场景,建议把网段、VLAN、实例、VRRP备份组做成一张映射表,后续维护会轻松很多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询