资讯动态

VRRP+MSTP联动接口检测实验:解决网关冗余与二层环路

发布时间:2026/10/19 4:24:29 来源:尧图企业网站定制
做网关冗余和二层环路避免VRRPMSTP联动接口检测实验案例是我这几年组网里最常被追问的组合。很多人会配VRRP也会配MSTP但两台核心交换机一旦真的出现上行链路故障业务照样断原因就是两者没有联动也没有把接口检测加进去。这篇文章把整套实验拆开讲清楚拓扑怎么规划、MSTP实例怎么对应VRRP备份组、track接口和BFD会话怎么跟VRRP优先级绑定、故障时切换过程到底发生了什么以及我踩过的几个典型坑。适合正在学数通进阶的伙伴也适合准备园区网割接或排障的一线网工参考。1. 这个实验到底在解决什么问题1.1 网关有了备份流量为什么还绕路先想一个最简单的场景。两台核心交换机下挂一台接入交换机接入交换机又下挂一堆PC。PC的网关写在核心交换机上。如果只写一个网关地址核心A挂了所有PC断网。于是很自然地想到VRRP把两台核心放同一个备份组虚拟出一个网关IP主交换机转发备用交换机随时准备顶班。这是最基础的网关冗余。但问题来了。PC之间的二层流量也就是数据帧在广播域里怎么走不归VRRP管归生成树协议管。如果二层链路有环交换机会用STP把某些端口Block掉避免广播风暴。问题是STP把哪个端口Block掉跟VRRP把谁选成主网关完全是两套逻辑。VRRP选A为主STP却可能把A设备到接入交换机的链路Block掉这时候PC访问网关要先绕到B再从B绕回A流量白白跨了一次核心间链路时延增加带宽也被浪费。这个现象叫次优路径也叫“流量绕路”。把VRRP和MSTP联动起来核心思想就是让“网关主设备”和“生成树根桥”落在同一台交换机上。A做主网关的VLANA同时是这些VLAN的根桥B做主网关的VLANB同时是这些VLAN的根桥。这样PC的流量走到接入交换机后直接就能通过根端口进入正确的主设备不需要绕远路。这就是为什么生产环境里几乎不会单独配VRRP总要搭配MSTP做实例划分和根桥规划。1.2 接口没坏却丢包三层冗余的隐藏坑还有一类故障更隐蔽。主交换机到上行路由器的物理链路断了但我用shutdown把端口关掉或者中间传输设备中断。此时主交换机本身的VLANIF接口还是UP的VRRP压根感知不到故障。它继续以Master身份对外应答网关ARP继续接收PC发来的流量然后发现上行出口没了数据发不出去。备用交换机这时候还老老实实待在Backup状态它以为主网关活得好好的自然也不会主动接管。用户看到的现象就是网关能ping通但上网丢包甚至全断。这就是典型的三层冗余失效网关冗余做了但“故障检测”没做。要解决这个问题必须有额外的检测机制把上行链路的健康状态告诉VRRP。检测到故障后立刻降低主交换机的VRRP优先级让备用交换机抢占成为新的Master同时STP重新收敛流量从备用交换机上行出去。这套机制就是接口检测联动也是这个实验名称里最核心的那个词。2. 拓扑规划与实例划分思路2.1 实验拓扑与地址规划我这次的实验环境沿用最经典的“双核心单接入”结构。两台核心交换机分别叫SW1和SW2接入交换机叫SW3。SW1和SW2之间用一条trunk链路互联SW3分别上行到SW1和SW2形成二层环路。SW1和SW2各自通过一个三层接口上联到上端路由器R1和R2模拟去往外网的出口。用户侧划分了两个业务VLAN。VLAN 10给办公网段VLAN 30给服务器网段。PC1接在SW3的接口上属于VLAN 10IP是192.168.10.10/24网关写在核心交换机上的VLANIF接口。VLAN 10的网关由SW1和SW2共同承担虚拟IP是192.168.10.254。VLAN 30的网关同样由两台核心共同承担虚拟IP是192.168.30.254。两个VLAN分别建立不同的VRRP备份组VLAN 10用VRID 1VLAN 30用VRID 2这样两个业务网段可以做到主备负载分担。上行接口规划上SW1的G0/0/1接R1地址段用10.0.1.0/30SW1侧是10.0.1.1。SW2的G0/0/1接R2地址段用10.0.2.0/30SW2侧是10.0.2.1。这两条上联链路就是后续接口检测要盯住的对象。R1和R2之间再跑一条互联链路保证其中一台核心完全宕机时流量还能从另一台核心出去。2.2 MSTP实例和VRRP备份组如何对应MSTP的核心作用是把不同的VLAN映射到不同的生成树实例里每个实例独立计算阻塞端口从而实现负载分担。我把VLAN 10放进实例1把VLAN 30放进实例2。SW1在实例1里做根桥SW2在实例2里做根桥。VRRP侧VLAN 10的备份组1主设备是SW1VLAN 30的备份组2主设备是SW2。这样对应关系就非常整齐实例1的根桥是SW1VRID 1的Master也是SW1实例2的根桥是SW2VRID 2的Master也是SW2。对SW3来说在实例1里它的上联口到SW1是根端口到SW2的端口被阻塞在实例2里恰好相反到SW2是根端口到SW1被阻塞。这个规划带来的好处是双向的。VLAN 10的PC访问网关时流量从SW3直接进入SW1在本地终结不需要经过SW1-SW2互联链路。VLAN 30的PC访问网关时流量从SW3直接进入SW2。没有绕路没有跨核心的额外开销两条核心的上行带宽也被分担利用了。STP根桥和VRRP主设备如果不对齐最直观的后果就是接入交换机上到主网关的链路被STP阻塞。你从PC上ping网关可能也通但抓包会看到流量绕行延迟变大核心间链路流量暴涨。如果核心间链路带宽不够或者那台设备上还承载着别的关键业务这种绕路会直接变成故障。3. 基础配置先把MSTP和VRRP跑起来3.1 MSTP域配置与根桥设置华为交换机默认可能跑的是STP或RSTP要先切换到MSTP模式并且把域配置做齐。MSTP的域配置有三个关键参数域名、修订级别、VLAN与实例的映射关系。三台交换机上这三个参数必须完全一致否则它们不认为自己在同一个MST域里生成树的计算结果会完全不一样甚至导致环路。SW1上的配置如下sysname SW1 stp mode mstp stp region-configuration region-name LAB revision-level 1 instance 1 vlan 10 instance 2 vlan 30 active region-configuration这里的active region-configuration特别重要。改完域配置后必须执行这条命令配置才会真正生效并参与BPDU交互。很多初学者改了region-name和instance映射忘了激活结果后续display stp region-configuration看是对的但实际报文里携带的还是旧配置设备之间协商不到一起。然后设置根桥。SW1作为实例1的根桥同时作为实例2的备份根桥stp instance 1 root primary stp instance 2 root secondarySW2上正好反过来stp instance 2 root primary stp instance 1 root secondary这里root primary会自动把桥优先级设为0root secondary会设为4096。优先级相同时STP会比较MAC地址为了避免系统自动选出来一个不符合预期的根桥建议显式用这两种命令固定主备关系。优先级数值一旦确定后续无论设备怎么重启主备角色都稳定。SW3上的MSTP域配置和实例映射与两台核心保持一致但不配根桥。SW3只负责把用户终端接入根桥角色完全由核心层控制sysname SW3 stp mode mstp stp region-configuration region-name LAB revision-level 1 instance 1 vlan 10 instance 2 vlan 30 active region-configuration互联接口上SW1和SW2相连的接口、SW3上联到两台核心的接口都要配置为trunk并放行VLAN 10和30。注意SW1-SW2互联口放行这两个业务VLAN就够了不要毫无必要地放行所有VLAN。3.2 VRRP配置与优先级策略VRRP的配置核心在VLANIF接口上。SW1的VLANIF10配置如下interface Vlanif10 ip address 192.168.10.1 255.255.255.252 vrrp vrid 1 virtual-ip 192.168.10.254 vrrp vrid 1 priority 120 vrrp vrid 1 preempt-mode timer delay 30这里有几个细节要展开。priority缺省是100我给SW1的VRID 1设置120让它在正常情况下稳定成为Master。SW2的VRID 1保持缺省100作为Backup。VRID 2那边反过来SW2配priority 120SW1不提高优先级。preempt-mode timer delay 30意思是如果SW1故障恢复后不会立刻抢回Master角色而是等30秒再说。这个延迟非常必要。否则接口闪断一次VRRP主备切一轮主设备恢复后又切回来来回切换期间业务会连续抖动。加一个延迟让网络先稳定下来再考虑角色回切。SW1的VLANIF30则作为备份组2的Backup保持默认优先级即可interface Vlanif30 ip address 192.168.30.2 255.255.255.252 vrrp vrid 2 virtual-ip 192.168.30.254SW2上对应地配置VLANIF10为BackupVLANIF30为priority 120的Master。这样两个VLAN的网关主备正好交叉形成负载均衡。VRRP通告报文默认1秒发一次这个参数一般不用改。如果链路质量差可以把通告间隔调大减少带宽占用但主备感知故障的时间会变长。反之调小能加快切换对设备CPU和链路质量要求更高。实验环境用默认值就行生产环境如果要求快速切换通常搭配BFD来做毫秒级检测。3.3 验证主备角色和STP端口角色配置完成后先做基础验证。在SW1上执行display vrrp brief可以看到VRID 1的状态是MasterVRID 2的状态是Backup。SW2上正好相反。再执行display vrrp看细节Master设备上能看到虚拟IP对应的虚拟MACBackup设备上能看到Master IP。STP这边在SW3上执行display stp brief会看到实例1中连到SW1的端口角色是Root、状态Forwarding连到SW2的端口角色是Alternate、状态Discarding。实例2则相反。如果看到两个端口都是Forwarding说明有环路风险要么实例映射配错了要么根桥设置没生效。如果看到端口角色异常先检查MSTP域配置三要素是否完全一致。这个时候从PC1去ping网关192.168.10.254应该是通的。用display arp能看到PC1的MAC地址学习到了VRRP虚拟MAC对应的端口上。也可以打开抓包软件看到VRRP报文周期性从SW1发出目的MAC是01:00:5E:00:00:01组播地址源MAC是虚拟MAC。备份组1的虚拟MAC是00-00-5E-00-01-01备份组2是00-00-5E-00-01-02这个规律可以用来快速判断当前谁是Master。4. 接口检测联动故障感知的关键一步4.1 为什么必须要做接口检测基础配置做完后网关冗余已经有了STP负载分担也有了但还差最后一块拼图故障感知能力。想象一下SW1的上联口G0/0/1突然断开。SW1的VLANIF10接口没有downVRRP协议依然正常收发报文它不会认为自己出了问题。可是PC访问外网的流量到了SW1之后根本没有出口所有包被黑洞掉。做接口检测的核心就是给VRRP增加一个“外部健康信号”。华为VRRP原生支持联动track接口、track BFD会话、track IP路由等检测对象。检测对象一旦变成down状态VRRP的优先级立即按设定值下调。优先级一降备用交换机就会发现自己的优先级已经高于主用设备于是抢占成为Master然后立即发送VRRP通告报文通知所有下游设备网关角色已经切换。整个过程不需要人工干预。优先级下调的数值很有讲究。正常情况下主设备优先级120备用100。如果把下调值设成30故障后主设备变成90低于备用的100切换就能发生。但如果我把主设备优先级调到150下调30后变成120依然高于备用的100切换永远不发生这个联动配置等于白做了。所以调整优先级时一定要算清楚故障后的数值必须低于所有备用设备的当前优先级。4.2 直连场景track interface联动如果上行链路就是本设备的物理接口最直接的检测方式是用track interface。SW1的G0/0/1直连R1可以这样配置interface Vlanif10 vrrp vrid 1 track interface GigabitEthernet0/0/1 reduced 30这条命令的意思是VRID 1在正常情况下优先级是120当检测到G0/0/1这个接口down掉时优先级降到90。SW2的VRID 1优先级是100于是SW2立刻抢占成为Master。同样在SW2的VLANIF30里也要做对应的联动interface Vlanif30 vrrp vrid 2 track interface GigabitEthernet0/0/1 reduced 30这里有个容易忽略的点track检测的是物理接口状态包括物理层和链路层状态。如果上联口本身没有配置IP只是二层trunktrack也能检测。但如果故障发生在对端设备或中间传输设备上本端物理接口依然UPtrack就失效了。还有一种情况是上联口配置在Eth-Trunk里track接口需要写成Eth-Trunk1而不是成员口。Eth-Trunk的逻辑口状态取决于成员口状态只要成员口中还有一条链路存活逻辑口就是UP不会触发切换。这种设计本身就是为了增加上行链路可靠性所以是否触发切换要看逻辑口的状态而不是单个成员口的状态。track interface的优点是配置简单、依赖少缺点是只能检测本地接口物理状态检测不到远端故障。上联链路中间隔了一台传输设备传输设备坏了但本端接口还UP这种场景就得用BFD。4.3 非直连场景BFD联动与配置要点BFD的全称是双向转发检测它通过在两端设备之间快速收发检测报文来判断链路是否可用。BFD的最小检测间隔可以做到几十毫秒甚至更低远快于VRRP默认的3秒Master_Down定时器所以生产环境追求快速切换时BFD几乎是标准选择。BFD联动VRRP的配置分两步。第一步先在系统视图下创建BFD会话bfd test bind peer-ip 10.0.1.2 interface GigabitEthernet0/0/1 discriminator local 1 discriminator remote 2 min-tx-interval 100 min-rx-interval 100 commit这里bind peer-ip 10.0.1.2是R1侧的互联IP接口是对端直连的G0/0/1。discriminator local和discriminator remote是BFD会话的本端标识和对端标识两端必须配对。commit是让配置生效的关键命令。R1上需要建立对端的BFD会话bfd test bind peer-ip 10.0.1.1 interface GigabitEthernet0/0/1 discriminator local 2 discriminator remote 1 min-tx-interval 100 min-rx-interval 100 commit第二步在VRRP视图里引用BFD会话interface Vlanif10 vrrp vrid 1 track bfd-session test reduced 30这里test就是前面创建的BFD会话名。BFD会话状态变成down后VRRP优先级同样降30。配置BFD有几个容易踩的坑。第一BFD会话两端参数必须匹配local和remote要互换检测间隔要能协商成功。第二BFD依赖三层连通性所以被检测的接口上必须配好IP对端IP必须能ping通。第三有的华为版本中命令格式有差异老的交换机可能需要在BFD视图里配置新版本支持系统视图直接创建会话名。在实际设备上做实验时先查看版本手册不要生搬硬套命令。华为设备还支持单调臂BFD和BFD for default-ip单向检测省去对端配置适合对端设备不方便开启BFD的场景。但生产环境里对端可控的话还是建议双边建立BFD检测更准确也能同时检测双向路径。5. 故障模拟与切换验证实录5.1 方案一上行接口直接shutdown配置全部完成后开始故障模拟。我在SW1的G0/0/1接口上执行shutdown模拟上联链路断开。这个操作比拔线更可控故障恢复时也方便。关闭瞬间SW1的VRRP模块立刻收到接口状态变化通知。在SW1上执行display vrrp brief可以看到VRID 1的优先级已经从120降为90状态也变成了Backup。再切到SW2上看VRID 1的状态已经变为Master优先级保持100。对应STP侧发生变化。实例1原来的根桥是SW1根桥的上行接口故障不影响生成树根桥本身但因为VRRP主备已经切换流量出口不在原根桥上了。实际生产环境建议根据路径变化检查STP端口角色。在这个实验里SW3到SW1的根端口依然保持转发因为根桥优先级没有变但网关流量已经不走这条路径到上行出口了而是在SW2上直接终结。用PC1持续ping外网地址可以看到shutdown瞬间会丢几个包之后网络自动恢复。整个过程不用人工干预丢包数取决于STP收敛速度和ARP刷新速度。5.2 方案二模拟跨设备链路中断track interface只能检测本端物理接口状态所以我还要模拟一个更贴近生产环境的故障SW1到R1之间的链路中间断了但SW1的G0/0/1物理状态还是UP。此时直接用track interface的设备不会切换配合BFD才能感知。我在R1的G0/0/1接口上执行shutdown模拟远端故障。R1接口down掉后SW1侧物理层虽然还UP但BFD快速检测报文收不到回包约几百毫秒后BFD会话变成down。SW1的VRRP优先级立即降低主备切换发生。对比两种故障场景的切换速度直观感受很明显。单纯track interface切换大约在1秒到3秒之间BFD联动可以做到百毫秒级。对普通办公网络来说丢几个包可能还能接受对接入层有语音视频业务或者视频会议系统的网络来说秒级中断已经能感知到了BFD的优势在这种情况下非常明显。5.3 切换时间与丢包观察主备切换不是只有一个VRRP状态翻转就结束了后面还跟着一连串连锁反应。Master切换后新的Master会以虚拟MAC地址发送免费ARP通知网络里所有设备网关MAC已经变更。下游交换机需要更新MAC地址表PC需要更新ARP缓存。如果PC的ARP表项还指向旧的虚拟MAC但交换机已经把这个虚拟MAC的出口指向新Master流量其实也能通只是要等交换机MAC表刷新。所以实际的业务中断时间一般比VRRP切换本身更长。我这次反复测试了几轮单纯VRRP状态翻转大约几十毫秒到几百毫秒但PC重新恢复通信通常需要1到2秒高峰期丢3到5个包是常态。如果核心设备上还跑着OSPF、BGP这样的动态路由协议路由收敛时间也要加进来。生产环境割接前最好实际打流测试一下切换丢包情况不要只看协议状态。切换完成后再用display vrrp在SW2上查看能看到Master设备的虚拟IP下出现了一个重要属性Master_IP变成了本机地址。display arp也能看到虚拟MAC地址对应的出接口变成了当前Master设备的端口。6. 常见问题与排错速查6.1 常见坑位汇总这个实验里最容易出的问题我按出现频率整理一遍。第一MSTP域配置不一致。三台交换机只要有一台的域名、revision-level或实例映射跟别人不同生成树计算就完全乱套。排查时在每台设备上执行display stp region-configuration逐项比对别只看域名一样就放心。第二VRRP主备角色和配置预期相反。通常是因为优先级没生效。检查是否有vrrp vrid 1 priority配置错误或者设备默认配置有抢占延时导致切换观察不到。还有的版本里preempt-mode默认是关闭的主设备故障恢复后不会自动抢回看着像配置没生效实际是抢占模式没开。第三track配置了但不切换。这种情况最常见的是reduced之后优先级依然高于备份设备。比如主设备优先级130reduced设20故障后110备份设备还是100永远不会切换。还有一种可能是track对象类型不对比如track的是Eth-Trunk逻辑口但上联口只是其中一个成员口成员口down时逻辑口还是UP不触发降级。第四BFD会话一直down。先确认对端有没有建立对应会话再确认local和remote discriminator是否配对最后确认互联IP能不能互相ping通。注意BFD的登记信息华为设备有时候改完配置需要重新commit或者在接口下敲一条undo bfd后再配置配置次序和提交是关键。第五切换后业务还是不通。很可能是STP收敛慢或没有收敛。实例1的根桥虽然还是SW1但流量被VRRP引到SW2后如果SW3连SW2的端口在实例1里是Discarding状态PC的流量根本无法到达SW2。这种场景说明你的实例映射规划和VRRP主备设计没有真正对齐。要么调整VRRP主备让主网关落在STP根桥设备上要么调整MSTP的根桥规划让网关主设备和根桥落在同一台设备。6.2 关于优先级的数值设计建议优先级和reduced值的设计我建议按照“冗余余量”的思路来规划。主设备优先级至少比备份设备高20reduced值至少比这个差值大10到20。比如主120、备100reduced取30比较合理。这样故障后主设备优先级降到90比备用的100低切换干净利落也不容易出现因为优先级太接近导致两台设备都抢主的情况。如果网络里有三台以上设备参与同一个备份组优先级设计更要拉开差距。A是主B是备1C是备2建议A配130B配110C配100。A故障后B升主A恢复时因为抢占延时先把角色让给B稳定运行一段时间。如果B也故障C再顶上。每一层都要有明确的优先级落差否则可能出现原本的备1和备2同时抢主甚至主设备故障恢复后跟当前Master抢来抢去。再有就是回切策略。生产环境强烈建议保留preempt-mode timer delay回切延时设置在30秒到120秒之间都可以。延时太长会导致故障恢复后很长一段时间流量都走在备份设备上上联带宽被浪费延时太短又容易造成频繁切换。我自己一般配30到60秒既能等STP和路由收敛又不至于让备份设备长时间承担主网关流量。切换完成后记得把配置保存到设备配置文件里save一下。实验环境无所谓生产环境如果忘了保存设备一重启所有联动配置全丢故障时很可能恢复成单体网关场面会很难看。另外把VRRP和MSTP的关键状态做成监控项是有必要的主备角色翻转、BFD会话down这类事件至少应该有日志告警这样网络发生切换时你能第一时间知道而不是等用户投诉才反应过来。我自己调完这套东西之后养成一个习惯每次改完VRRP或MSTP配置都会做一次双向故障演练。上行接口断一次核心设备整机重启一次观察切换是不是正常回切有没有问题。演练虽然占时间但比半夜被叫起来处理故障强太多。实验环境里顺手把这两条链路都断一遍你会对整个联动机制有非常直观的理解。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑