
实验室里搭VLAN冗余加负载分担的场景最烦的就是“网关切了但二层没切”这种半吊子状态。单独跑VRRP网关主备控制住了可下面交换机通过STP选出来的路径未必和VRRP的主备一致单独跑MSTP环路是破了但两条上行链路很可能一条忙死、一条闲死。真正把VRRP和MSTP一起用起来让不同业务走不同链路同时又在故障时互相接管才是这个综合实验要解决的问题。这篇文章适合正在备考网络认证、或者刚接手企业网维护的同学。我会把拓扑规划、MSTP多实例配置、VRRP主备绑定、故障演练和常见的坑一次讲清楚配置命令基于华为VRP平台模拟器和真机都能用。1. 实验场景还原为什么VRRP和MSTP必须同时登场先说我搭这个实验的动机。某公司的接入层有两台核心交换机底下接了二十多台接入设备跑着办公和语音两套业务。老板的要求很直接任何一台核心挂了业务不能断两条到核心的链路不能浪费得让它们都跑起来。只上VRRP的话网关冗余解决了——VRRP组里Master挂了Backup顶上来。但二层呢接入交换机上联两台核心物理上就是环路不破环的话广播风暴分分钟教做人。这时候必然要上生成树。问题是单STP只会选一个根桥然后把另一条冗余链路Block掉。假设VRRP的Master在核心ASTP的根桥也在核心A那接入交换机到核心B的链路等于是摆设所有流量都压在上面一条线第二条线空闲。这不叫负载分担这叫买了两条路只走一条。只上MSTP呢可以通过多实例让不同VLAN走不同链路可是网关地址只有一个。如果VLAN 10的网关在核心AMSTP却让VLAN 10的二层流量从核心B绕一圈再回A路径多了几跳不说万一A和B之间的互联链路也被某个实例Block了数据直接丢在你眼皮底下。VRRP管的是“谁是网关”MSTP管的是“二层的路哪条通”它俩必须对齐VRRP的Master设备必须同时是该业务VLAN所在实例的根桥。这就是综合实验的核心逻辑我在后面会用实际配置把这个关系坐实。2. 拓扑与实例规划一张表和三条铁律实验拓扑并不复杂但规划这一步千万别省。我用了四台设备核心A、核心B加上两台接入交换机SW1、SW2。核心之间用两条链路做Eth-Trunk聚合既增加带宽又避免额外环路每台接入交换机分别用一条上联到核心A、一条上联到核心B。PC1挂在SW1下属于VLAN 10PC2挂在SW2下属于VLAN 20。业务划分就两段VLAN 10办公网段10.1.10.0/24VLAN 20语音网段10.1.20.0/24。网关分别做在两台核心上VLAN 10的VRRP主设备是核心AVLAN 20的VRRP主设备是核心B。两个业务互为主备哪台核心都不闲着。MSTP实例映射也按这个思路来instance 1放VLAN 10instance 2放VLAN 20。根桥设置和VRRP主备对齐——核心A是instance 1的根同时是VLAN 10的VRRP Master核心B是instance 2的根同时是VLAN 20的VRRP Master。项目VLAN 10 办公VLAN 20 语音网段10.1.10.0/2410.1.20.0/24MSTP实例instance 1instance 2VRRP组编号vrid 1vrid 2虚拟网关10.1.10.25410.1.20.254VRRP主设备核心A优先级120核心B优先级120主设备角色instance 1根桥、VLAN10网关instance 2根桥、VLAN20网关备用设备核心B优先级100核心A优先级100规划阶段有三条铁律我踩过坑之后才总结出来第一region-name必须四台设备完全一致。MSTP是域内交互域名字段不一致交换机直接认为不属于同一个域多实例配置全部作废退化成各算各的CST负载分担想都别想。第二实例和VLAN的映射关系必须在所有交换机上保持一致。SW1上如果只写了instance 1映射VLAN 10而SW2上忘写两边对同一实例的理解就错位了生成树计算结果必然不对。第三根桥优先级要有意设计不能靠MAC地址碰运气。华为设备上可以用stp instance 1 root primary这种命令直接指定也可以手动调实例优先级推荐前者简洁不容易错。拓扑确定之后先在所有设备上把VLAN、Trunk、接口IP这些基础信息配好。这部分不展开但有个细节提醒连接交换机的接口Trunk要放行VLAN 10和20连接PC的接口Access到对应VLAN互联VLAN建议单独用一个管理VLAN比如VLAN 99别和业务混在一起。3. MSTP配置先把二层收敛这台机器跑起来MSTP是整个实验的地基地基不稳后面全白搭。我在核心A上先做全局配置stp mode mstp stp region-name LAB stp instance 1 root primary stp instance 2 root secondary stp instance 1 vlan 10 stp instance 2 vlan 20核心B上则完全反过来stp mode mstp stp region-name LAB stp instance 1 root secondary stp instance 2 root primary stp instance 1 vlan 10 stp instance 2 vlan 20接入交换机SW1和SW2上不需要root primary或secondary保留默认优先级即可重点是region-name和实例映射必须和核心一致stp mode mstp stp region-name LAB stp instance 1 vlan 10 stp instance 2 vlan 20接入交换机下接PC的端口建议配置成边缘端口interface GigabitEthernet0/0/1 port link-type access port default vlan 10 stp edged-port enable stp disable这里顺手解释一个初学者容易困惑的点stp instance 1 root primary这条命令干了什么它把本设备在instance 1中的优先级强制改成0同时priority值有一个增量保护机制防止多台设备都配primary时优先级相同起冲突。你需要的是“核心A成为instance 1的根”用这一条就够不要再去手动stp priority两条叠加反而容易乱。四台设备全部配好后在核心A上验证display stp instance 1 root正常情况下能看到Bridge ID里的优先级是0MAC地址是核心A的桥MAC证明它确实是instance 1的根。再看一下端口状态display stp instance 1 briefMSTP会为每个实例维护端口状态。在SW1上假设它到核心A的端口是根的指定端口状态Forwarding到核心B的端口因为根桥选举不是最优大概率Discarding。而在instance 2中正好反过来SW1到核心B的端口Forwarding到核心A的端口被堵住。这就在二层层面实现了“VLAN 10走A、VLAN 20走B”的负载分担。如果这里发现两边端口都是Forwarding第一反应不是高兴而是害怕——可能存在环路。先用display stp instance 0 topology-change看看有没有拓扑变化记录再用display arp看是否有重复的异常表项。MSTP下环路失效通常是因为域配置不一致回到铁律一排查。4. VRRP配置让网关角色和根桥站到同一边二层路径理顺了接下来是网关冗余。核心A上配VLAN 10的VRRP组让它当Masterinterface Vlanif10 ip address 10.1.10.1 255.255.255.0 vrrp vrid 1 virtual-ip 10.1.10.254 vrrp vrid 1 priority 120 vrrp vrid 1 preempt-mode timer delay 60核心B上的VLAN 10接口则保持默认优先级100interface Vlanif10 ip address 10.1.10.2 255.255.255.0 vrrp vrid 1 virtual-ip 10.1.10.254VLAN 20反过来核心B优先级120当Master核心A优先级100当Backupinterface Vlanif20 ip address 10.1.20.1 255.255.255.0 vrrp vrid 2 virtual-ip 10.1.20.254 vrrp vrid 2 priority 120 vrrp vrid 2 preempt-mode timer delay 60interface Vlanif20 ip address 10.1.20.2 255.255.255.0 vrrp vrid 2 virtual-ip 10.1.20.254几个关键点展开说一下。第一priority决定Master归属。120对100高优先级设备抢占后成为Master这是最直接的“让某台设备当网关”的手段。在有着严格主备要求的场景下可以用150甚至200去拉大差距避免后面各种因素把优先级干扰到模糊地带。本实验两台设备分别dominant不同实例通过120和100已经足够明显区分。第二preempt-mode timer delay 60一定要配。默认情况下抢占是立即生效的不加延时会有个很恶心的场景核心A重启恢复后它立刻重新成为VLAN 10的Master但此时MSTP可能还没收敛完——根桥角色重新选举、端口状态从Discarding转Forwarding要时间。结果就是VRRP已经切回A了二层路径还没就绪业务在切换窗口内丢包。加上60秒延迟让生成树先把该转的端口转完VRRP再接管损失降到一个很小的窗口。生产环境我建议根据设备性能调整30到120秒别拿默认值直接上。第三VRRP虚拟IP一定要和两端接口IP同网段而且虚拟IP不能和任一物理接口IP重复。我见过有同学把vrid 1的virtual-ip配成10.1.10.1而核心A的Vlanif10本来就占着10.1.10.1结果设备直接拒绝配置或者起组失败。虚拟IP要用额外的地址比如.254。配置完成后在核心A上看状态display vrrp verbose重点看几项State是不是MasterPriority是不是120Virtual IP是否正常。核心B上对应vrid 1应该显示Backup。VLAN 20的vrid 2则相反。5. 联动生效的本质根桥、阻塞口和虚拟网关的三角关系很多人在配置都敲对的情况下依然对“为什么这样就能负载分担”似懂非懂。我把数据面实际走的路径拆开讲一遍。VLAN 10的PC1要把数据发往网关10.1.10.254先要ARP解析。VRRP特点是什么Master设备用虚拟MAC地址响应ARP比如00-00-5E-00-01-01。所以PC1的ARP表里10.1.10.254对应的MAC是核心A发布的虚拟MAC而不是核心B的物理MAC也不是核心A的物理MAC。二层帧的目的MAC就是这个虚拟MAC。接下来看MSTP。instance 1的根桥是核心ASW1上到核心A的端口是Forwarding到核心B的端口被Block。二层帧从PC1发到SW1SW1查MAC表虚拟MAC的MAC地址表项是在哪个端口学到的由于VRRP响应ARP的是核心A核心A发出ARP应答时SW1收到这个帧的入接口是上联到核心A的那个口所以MAC表把虚拟MAC关联到核心A方向。帧从SW1出上联口到核心A核心A收到后终结二层、查三层路由并转发。这条路径单跳、直接、没有绕路。VLAN 20的PC2呢instance 2的根桥是核心BSW2上到核心B的端口Forwarding虚拟MAC由核心B响应所以路径同样是单跳直达核心B。如果把VRRP主备和根桥反着配会怎么样比如VLAN 10的VRRP主是核心A但instance 1的根桥却是核心B。SW1上任选一个口转发到核心B因为根在B可ARP响应却来自核心A——如果SW1是从核心B方向收到某条源的帧学MAC同时虚拟MAC又从核心A方向学MAC表会产生漂移或者只能二选一。运气好点帧绕到核心B后核心B查MAC一看虚拟MAC其实属于VRRP组又要通过核心间链路转发给核心A多一跳延迟高一点。运气差点如果核心A和B之间的链路恰好也被MSTP阻塞在instance 1里数据直接到不了核心A表现为PC能ping通同网段但死活ping不通网关。所以联动生效的本质就是让“VRRP的Master设备”和“MSTP该实例的根桥”指向同一台物理设备。这不是命令配置出来的功能而是拓扑设计和角色分配的结果。配置情况VLAN 10 数据路径结果VRRP主A实例1根APC → SW1 → A直接终结最优单跳VRRP主A实例1根BPC → SW1 → B → 核心链路 → A绕路链路被阻塞则断流VRRP主B实例1根APC → SW1 → A → 核心链路 → B同样绕路根因一致6. 验证与故障演练让display命令告诉你真相配置完成不代表实验结束故障演练才是检验方案好坏的唯一标准。我在这套拓扑上做了三轮验证每一步都有对应命令和预期结果。第一轮静态验证。在核心A执行display vrrp verbose确认Vlanif10的vrid 1状态为MasterVlanif20的vrid 2状态为Backup核心B反之。在SW1上执行display stp instance 1 brief确认到核心A的口Forwarding、到核心B的口Discarding再看display stp instance 2 brief方向反过来。四台设备display stp region-name确认域一致。第二轮连通性验证。PC1和PC2分别 ping 自己的网关ping通是基础。然后再做一次故意绕路的验证——在核心A上查看ARP表确认已经学到SW1下挂PC的MAC地址在SW1上查看MAC表确认虚拟MAC是从上联到核心A的端口学到的。这一步能直接看到“二层表项和路径选择是否对齐”。如果发现虚拟MAC表项学在了去核心B的端口那一定哪里配置反了回第五节的三角关系里排查。第三轮故障切换。模拟实例1根桥和VRRP Master一起挂掉。在核心A上直接shutdown Vlanif10对应的物理上联口或者干脆把核心A的接口全shutdown。interface 10GE1/0/1 shutdown此时观察核心B上的VRRP状态应该很快变为Master然后在SW1上执行display stp instance 1 brief原先是Discarding的到B端口应转为Forwarding。PC1的网关ping会出现几个丢包取决于VRRP检测和STP收敛速度然后恢复这就是RTO。如果shutdown后发现VRRP切换了但业务还是不通优先查核心B的Vlanif10上有没有配置VRRP vrid 1且虚拟IP一致、SW1到B的Trunk是否放行了VLAN 10、B的STP端口是否收敛完毕。三层没通八成是VRRP没同步二层没通八成是放行或STP问题。恢复演练也一样重要恢复核心A的端口由于配置了preempt-mode timer delay 60核心A不会瞬间抢回Master而是等60秒延迟后重新主导。这个过程要在PC端持续ping观察看到短暂丢包后流量重新回到核心A说明抢占延迟生效了没有在切换窗口里反复震荡。7. 综合实验中最容易踩的坑与规避方案最后把这套实验里最常见的坑集中列一下后面你独立做的时候照着避。坑一MSTP域配置不一致。四台设备只要有一台region-name不同整个MSTP域就分裂。症状是明明配了instance映射端口状态却莫名其妙地全部Forwarding或者全部Discarding流量要么环路风暴要么全断。排查从display stp region-name开始逐台比对。坑二VRRP和MSTP的角色分配对不上。VLAN 10的主网关和instance 1的根桥必须是同一台设备。如果发现MAC表项乱漂、网关ping通但往返延迟异常第一反应就看这两个角色是否错位。坑三接口放行VLAN的遗漏。Trunk口默认不放行任何VLAN必须在核心和接入的上联口上用port trunk allow-pass vlan 10 20显式指定。我见过忘放行VLAN 20导致语音业务全断排查了好久才发现是Trunk收窄了。坑四核心互联链路被MSTP误阻塞。核心A和B之间的Eth-Trunk如果不放行相应实例的VLAN或者实例映射没把互联VLAN纳入考虑切换时核心间通信会断。我的做法是互联Trunk放行所有业务VLAN和管理VLAN并且在MSTP规划时明确这些VLAN所在的实例路径。坑五边缘端口没配PC接入卡顿。下联PC的接口如果不配边缘端口MSTP协商会让端口先进入Listening和Learning状态PC拿不到DHCP地址响应明显变慢。实验里可能只是慢几秒生产环境有人报“新电脑插上网线几分钟才能上网”大概率就是这个原因。坑六VRRP抢占延迟不配。不配默认立即抢占结果就是设备重启后生成树还没收敛完网关先抢回去了业务丢包窗口被放得很大。这个问题我在第四节强调过这里再提一次——preempt-mode timer delay不是锦上添花是保障切换平滑的必要配置。坑七只在部分设备上建VLANIF。VRRP的Backup设备如果没建对应VLANIF或者建了但没配VRRP虚拟IP整个组就只剩Master单点Backup没有switchover能力。这个实验里核心B必须有Vlanif10并配vrid 1核心A必须有Vlanif20并配vrid 2一个都不能少。整个实验做下来的感觉是VRRP和MSTP单独看都不难难点在于把二层路径和三层网关的角色分配统在一个规划里。你先把拓扑图画出来标清楚哪个实例的根在哪、哪个VLAN的主网关在哪再动手敲命令比反复删了配、配了删高效得多。我后面自己在模拟器里又跑了几遍基本半小时能从头到尾验证一轮用来理解冗余网络的行为已经非常够用了。