☰
eNSP实战:VRRP与STP协同配置双核心冗余网络
2026/10/22 21:15:43 网站建设 项目流程

前两天有人问我,eNSP里VRRP和STP该怎么放在一张拓扑里练,网上的教程要么单讲VRRP,要么单讲STP,合在一起就不知道怎么搭。这个问题我太有感触了。练协议就像练武功,单个招式都会,一上实战就乱。VRRP是网关冗余,STP是二层防环,真实园区网里几乎永远同时出现。这篇就按一个完整的双核心冗余场景从头到尾走一遍,包含拓扑规划、原理回顾、完整配置、故障演练、排错速查,所有命令都在eNSP里实测可跑。适合刚学数通、准备网工认证、或者协议忘得差不多想捡回来的人。

1. 实验需求与拓扑规划:先把设备摆明白

1.1 为什么VRRP和STP要放到同一张拓扑里练

先说需求来源。很多教程在讲VRRP时,只有两台交换机加一台PC,看起来很简单;讲STP的时候,又是另一套拓扑。但真实项目里,这两个协议是同时起作用的:网络要有网关冗余,就必然有两台核心设备同时接在二层网络上;既然两台核心都要接接入交换机,物理链路就一定会出现环路,而出现环路就必须让STP挡掉多余的路径。

把两个协议拆开练的问题在于,你永远看不到它们之间的互相影响。比如VRRP的心跳报文走的是二层组播,如果中间路径被STP阻塞了,主备状态会不会出问题?再比如STP的根桥和VRRP的Master要不要选在同一台设备上?这些只有在完整拓扑里才会暴露出来。所以这次实验的核心不是“会敲命令”,而是让读者明白两个协议是怎么在同一个网络里协作的。

1.2 拓扑结构与VLAN/网关规划表

我设计的拓扑是这样的:两台核心交换机SW1、SW2,两台接入交换机SW3、SW4。SW1和SW2之间有一条互联链路,SW3、SW4各自双上联到SW1和SW2,物理上形成两个环路。PC1接在SW3下,PC2接在SW4下,分属VLAN 10和VLAN 20。为了演示负载分担,VLAN 10的VRRP主设备选SW1,VLAN 20的VRRP主设备选SW2;STP根桥选SW1。

设备角色互联接口备注
SW1核心AGE0/0/1连SW2,GE0/0/2连SW3,GE0/0/3连SW4STP根桥,VLAN10的VRRP Master
SW2核心BGE0/0/1连SW1,GE0/0/2连SW3,GE0/0/3连SW4VRRP优先级更高的是VLAN20
SW3接入一GE0/0/1连SW1,GE0/0/2连SW2,GE0/0/3接PC1PC1划入VLAN10
SW4接入二GE0/0/1连SW1,GE0/0/2连SW2,GE0/0/3接PC2PC2划入VLAN20

地址规划直接抄这张表:

VLAN网段虚拟网关SW1 VLANIFSW2 VLANIF终端
VLAN 10192.168.10.0/24192.168.10.254192.168.10.251192.168.10.252PC1: 192.168.10.10
VLAN 20192.168.20.0/24192.168.20.254192.168.20.251192.168.20.252PC2: 192.168.20.10

这里特别注意:两台核心的VLANIF真实地址不能配成虚拟IP,否则就成了虚拟IP拥有者,VRRP的优先级逻辑会变成255,负载分担效果就不对了。

1.3 eNSP环境准备与设备选型建议

eNSP版本不用太纠结,近几年的版本都行。设备选型建议:核心交换机选S5700,接入交换机也用S5700,没有额外差别;两台接入如果型号不同也没关系,不影响二层功能。所有PC用基础PC型号,配置静态IP。

有一点必须提醒:eNSP里S5700默认工作模式是MSTP,不是经典STP,也不是RSTP。如果你在配置时不主动把模式改成RSTP,后续查看STP端口角色时容易和自己脑子里的模型对不上。所以实验第一步建议先把所有设备统一改成RSTP。另外,eNSP启动四个交换机后需要一点时间,不要刚启动就急着敲配置,等接口状态稳定再操作,否则容易出现端口还没UP导致VRRP初始化的假象。

2. 核心原理解读:VRRP和STP各自管什么

2.1 VRRP的虚拟IP、状态机与主备切换

VRRP全称虚拟路由冗余协议,核心思想是一组设备共享同一个虚拟IP,终端把这个虚拟IP当网关。正常时只有Master响应终端的ARP请求,Backup只默默收Master周期发送的VRRP通告报文。通告报文目的组播地址是224.0.0.18,IP协议号112,默认1秒发一次。

判断主备切换的机制很简单:Backup连续3个通告周期没收到Master的报文,也就是3秒,它就会认为Master挂了,自己升为Master。升级之后,虚拟IP对应的虚拟MAC也一起接管,终端不需要任何感知。比如虚拟MAC是0000-5e00-01xx,xx就是VRID,VRID 10对应0a,这样终端ARP缓存的网关MAC会自动通过新报文刷新。

优先级范围是0到255,默认100。两台设备优先级相同时,接口IP地址大的设备优先成为Master,但这个细节不建议依赖,练习时明确配置优先级更直观。抢占模式默认开启,优先级高的设备恢复后会重新夺回Master;为了防止主备反复横跳,可以给抢占加一个延迟时间。

在华为设备上写VRRP,必须把VRID和虚拟IP配置到VLANIF接口下,同一个VRID内的虚拟IP在所有设备上必须一致,否则两台设备各说各话,根本组不成一个虚拟路由器。这个点很多人第一次做容易踩,后面排错部分还会提到。

2.2 STP的BPDU、根桥选举与端口角色

STP解决的是二层环路问题。没有STP时,交换网络出现物理环路会引发广播风暴、MAC地址抖动,交换机CPU被打满,整个网络瘫痪。STP的解决思路是让交换机之间交换BPDU报文,也就是桥协议数据单元,通过比较选举出一棵无环的树。

BPDU里有几个关键字段:根桥ID、根路径开销、发送者桥ID、发送者端口ID。选举过程分三层。第一层,全网络优先级最小的桥成为根桥,优先级一样时MAC地址小的胜出。第二层,每个非根桥挑一条到根桥开销最小的路径,对应的本地端口叫根端口。第三层,每条链路上再比较发送者,离根更近的那台交换机的端口成为指定端口;剩下既不是根端口也不是指定端口的端口,就进入阻塞状态。

现代网络一般不用经典STP,而是RSTP。RSTP把端口角色细分为根端口、指定端口、Alternate端口和Backup端口,状态收敛从几十秒缩短到秒级。阻塞端口在RSTP里叫Discarding状态,术语上要能区分。配置层面只是一个stp mode rstp的差别,但理解RSTP的快速收敛机制,对排障很有帮助。

2.3 两个协议配合时的协同点与常见误区

一个很常见的误区是担心STP把核心交换机之间的互联链路阻塞掉,导致VRRP心跳不通。实际上STP选路有严格逻辑,根桥上的所有端口都是指定端口,如果核心A选了STP根桥,核心A到核心B的互联端口一定是指定端口,不会被阻塞;真正被阻塞的是接入交换机到核心B的上联口。所以VRRP通告报文能正常走核心间链路。

另一个协同点是根桥位置。如果VRRP的Master和STP的根桥不在同一台设备,终端流量到达网关后,还要再从根桥路径绕一圈,转发效率变差。比如VLAN 10的Master在SW1,根桥却是SW2,PC的流量先上到SW1网关,访问外网或跨VLAN时还要经过SW2,路径浪费。所以练习规划时就让SW1既是STP根桥又是VLAN10的Master,SW2承担VLAN20的Master,两台都不闲着。

还有一个容易忽视的点:VRRP心跳报文属于二层组播,它依赖的是VLAN广播域的通畅性。两台核心之间的Trunk必须放通VRRP所在的所有VLAN,如果只放通了业务VLAN忘了放通VLAN10,结果就是VRRP组10的两个设备互不可见,全部认为自己应该当Master,出现双主脑裂。

3. 完整配置过程:从VLAN到VRRP一次打通

3.1 基础二层配置:VLAN与Trunk链路

配置顺序建议从底层到上层。先创建VLAN,再放通Trunk,再配STP,最后配VRRP,这样后面出问题时排查层次清晰。

SW1上的基础配置:

system-view sysname SW1 vlan batch 10 20 interface GigabitEthernet0/0/1 port link-type trunk port trunk allow-pass vlan 10 20 interface GigabitEthernet0/0/2 port link-type trunk port trunk allow-pass vlan 10 20 interface GigabitEthernet0/0/3 port link-type trunk port trunk allow-pass vlan 10 20

SW2、SW3、SW4的Trunk配置几乎一样,区别只是接口编号。这里提醒一个细节:核心与接入之间的Trunk,仅放行需要的VLAN就够了,不要图方便写成port trunk allow-pass vlan all。练习里没问题,但真实环境中Trunk上意外放行VLAN会扩大广播域,甚至把环路延伸到不该有环的地方。

SW3和SW4上连接PC的接口配置为Access并划入对应VLAN。以SW3为例:

vlan batch 10 20 interface GigabitEthernet0/0/3 port link-type access port default vlan 10 stp edged-port enable

我特意在这里把stp edged-port enable一起配了。这个命令的意思是把接入PC的端口声明为边缘端口,交换机一UP就直接进入转发状态,不用等STP收敛。PC终端不会发BPDU,所以这样配置安全且高效。SW4的GE0/0/3对应VLAN 20,命令格式完全一样。

3.2 STP配置:切换RSTP、指定根桥、开启保护

四台设备都进入系统视图,执行:

stp mode rstp

然后分别在SW1和SW2上设置根桥优先级:

stp priority 4096
stp priority 8192

优先级越小越容易成为根桥,所以SW1是根桥,SW2是备份根桥。SW3、SW4维持默认优先级32768即可。如果不想记优先级数值,也可以在SW1上直接用stp root primary,在SW2上用stp root secondary,效果等价,但练习里建议用优先级,方便理解选举逻辑。

在接入交换机上全局开启BPDU保护:

stp bpdu-protection

有了这个保护,如果边缘端口意外收到BPDU报文,交换机会把端口关闭而不是让该端口参与STP计算,防止有人私接交换机导致环路。注意这句话的意思是一旦触发,端口状态会变成Down,需要手动restart或重新undo shutdown恢复,不是自动恢复。

3.3 VRRP配置:虚拟网关与负载分担

核心交换机上先给VLANIF配真实IP,再创建VRRP组。SW1这样配置:

interface Vlanif10 ip address 192.168.10.251 255.255.255.0 vrrp vrid 10 virtual-ip 192.168.10.254 vrrp vrid 10 priority 120 vrrp vrid 10 preempt-mode timer delay 5 interface Vlanif20 ip address 192.168.20.251 255.255.255.0 vrrp vrid 20 virtual-ip 192.168.20.254

SW2配置要反过来,让VLAN 20成为它的强项:

interface Vlanif10 ip address 192.168.10.252 255.255.255.0 vrrp vrid 10 virtual-ip 192.168.10.254 interface Vlanif20 ip address 192.168.20.252 255.255.255.0 vrrp vrid 20 virtual-ip 192.168.20.254 vrrp vrid 20 priority 120 vrrp vrid 20 preempt-mode timer delay 5

解释一下为什么加preempt-mode timer delay 5。抢占默认是立即生效的,如果SW1从故障中恢复,它会立刻把VLAN10的Master抢回来,而抢回来的瞬间会造成一次短时切换。加上5秒延迟,可以让网络先稳定一小段,避免主备来回抖动。在真实环境里,这个延迟时间根据业务重要性调整,一般3到10秒。

另外,如果实验拓扑有连接外网的出口链路,通常还会配合vrrp vrid 10 track interface监控上行口,上行口掉线时降低自身优先级主动让位。本实验没有配置出口,就不做这步,但要知道有这个机制。

3.4 终端PC配置与基础连通性验证

PC1和PC2在eNSP里直接双击配置:

PC1:IP 192.168.10.10,掩码255.255.255.0,网关192.168.10.254

PC2:IP 192.168.20.10,掩码255.255.255.0,网关192.168.20.254

配置完成后,先做一次基础验证。PC1 ping 网关192.168.10.254应该通,PC2 ping 网关192.168.20.254应该通。PC1再ping PC2的192.168.20.10,应该也通。因为PC1把报文发给虚拟网关,SW1作为VLAN10的Master查路由表,VLAN20是直连网段,直接转发。

如果PC1能ping通网关但ping不通PC2,优先检查两台核心的VLANIF是否都配了IP,以及两个VLAN是否都存在于所有Trunk的放行列表里。

4. 故障演练与验证方法:协议不是配完就完事

4.1 静态验证:看懂display vrrp和display stp输出

配置完成后先看静态状态。在SW1上执行:

display vrrp

正常输出里,VRID 10的状态是Master,VRID 20的状态是Backup。在SW2上看,结果应该反过来。这个输出第一屏就够判断主备关系了,不需要看全量。如果显示Initialize,说明VLANIF没有UP,优先检查接口状态和IP配置。

再在SW3上执行:

display stp brief

会看到两个上联口一个角色是ROOT、状态FORWARDING,另一个角色是ALTERNATE、状态DISCARDING。ALTERNATE端口就是被阻塞的备用路径,这是正常现象,不是故障。在SW4上看应该是同样的结果,因为根桥是SW1,两个接入交换机到根桥的最近路径都走SW1。

SW2上执行display stp可以看到自己的桥优先级是8192,根桥是SW1的桥ID。这四个命令组合起来,就能把“根桥在哪里、备份端口在哪里、主备状态对不对”全部确认。

4.2 故障模拟一:核心设备宕机后的VRRP切换

静态验证只是开头,真正的关键是让故障发生一次。我在实验里常用的办法是模拟SW1整台设备宕机:在SW1上把GE0/0/1、GE0/0/2、GE0/0/3全部shutdown,同时保持VLANIF10还在但底层接口全断,相当于核心设备从网络中消失。

操作前先在PC1上连续ping网关192.168.10.254,观察输出。然后执行shutdown操作,你会看到ping丢几个包,随后恢复。丢包数量取决于切换速度和ping间隔,通常不超过3到5个。因为SW2在连续3个通告周期没收到SW1的报文后,会升为Master并开始响应虚拟IP,整个过程3秒左右。

此时再到SW2上执行display vrrp,VRID 10已经变成Master。这就是VRRP的价值:终端只是短暂丢包,不需要改任何配置,网关自动由另一台设备接管。

恢复SW1的接口后,由于配置了5秒抢占延迟,需要等约5秒,SW1会重新抢回VLAN10的Master。如果没有延迟,恢复瞬间可能出现一次不必要的切换。实操中你会发现,这个延迟配置对网络稳定性非常重要。

如果想看得更细,可以在SW2的GE0/0/1上开启抓包,观察VRRP组播224.0.0.18的报文。正常时1秒一个,Master故障后SW2发不出周期性报文?不对,应该是SW2作为Backup只收不发,故障切换后SW2开始周期性发送VRRP通告。这个抓包过程能直观看到协议时间线,比单纯看命令输出有趣得多。

4.3 故障模拟二:链路中断后的STP收敛

STP的验证和网络环路相关。在SW3上,当前根端口是连接SW1的GE0/0/1,备用阻塞端口是连接SW2的GE0/0/2。现在模拟上联链路中断,在SW3上执行:

interface GigabitEthernet0/0/1 shutdown

此时SW3到根桥的路径断掉,原本阻塞的GE0/0/2会在RSTP机制下迅速从Discarding转为Forwarding,PC1的流量改从SW2上联出去。PC1持续ping网关,你会发现丢包时间比VRRP切换更短,RSTP收敛通常在秒级完成。

恢复GE0/0/1后,RSTP会重新计算,根端口切回GE0/0/1,GE0/0/2回到ALTERNATE状态。注意:如果用的是经典STP,这个收敛过程可能要几十秒,这也是我强烈建议实验里用RSTP的原因。体验完RSTP之后,你可以自己把模式改成stp mode stp对比一下,感受收敛时间的差异,这对理解802.1w改进点很有帮助。

这个实验环节容易忽略的是,故障模拟要交替进行,不能只测一次。建议把VRRP切换和STP收敛拆成两次独立演练,每次都先确认基线状态,再制造故障,最后观察恢复,形成习惯。这样才能真正形成肌肉记忆。

5. 常见问题与排错速查:我在eNSP里踩过的坑

5.1 VRRP状态异常排查

实验里最容易碰到的坑集中在VRRP上。我把典型现象和排查思路整理成了一张表:

现象可能原因排查方向
display vrrp显示InitializeVLANIF接口没有UP检查VLANIF是否配置IP,底层物理口是否shutdown
两台设备都是MasterVRRP心跳报文不通检查核心间Trunk是否放通对应VLAN,STP是否阻塞了唯一路径
虚拟IP ping不通终端网关配置错误检查PC网关、VLAN归属,确认VRID与虚拟IP在同一广播域一致
配置了priority但主备没按预期配置写错了VRIDdisplay vrrp看PriorityRun和PriorityConfig是否一致
恢复后主备频繁切换抢占立即生效配置preempt-mode timer delay,通常3到5秒

第一个场景我实测遇到最多。很多时候是模拟器刚启动,交换机接口还没完全UP,你急着敲完配置一看VRRP是Initialize,以为配置错了,其实等十几秒接口起来就好了。

双主的问题更要重视。有一次我把SW1和SW2之间互联口的port trunk allow-pass vlan 10 20敲成了只放行VLAN10,结果VLAN20的VRRP组两边互相看不见,两个设备的VRID 20同时变Master。这种问题用display vrrp一眼能看到异常,但如果设备多、VRRP组多,就必须靠逐台查看和display current-configuration核对Trunk放行列表。

5.2 STP引发业务中断的排查

STP故障的表现通常不是“不通”,而是“意外不通”或者“时通时断”。最常见的一种是边缘端口没生效,PC接上去后等了几十秒才能上网。这是因为没有在接PC的端口上配置stp edged-port enable,端口参与了STP计算,收敛时间拖长了业务启动时间。

另一种相反的情况是边缘端口触发了BPDU保护,端口直接Down。此时在接口下执行display interface看错误计数,或display stp看端口状态,多半能看到BPDU保护相关记录。处理方法是确认端口确实只接终端,然后undo shutdown恢复端口。

还有一种隐藏较深的问题是STP根桥没按预期选出来。比如SW1明明配置了4096,display stp一看根桥却是SW2。原因通常是命令敲到了错误的设备上,或者配置没有保存模拟器重启丢了。遇到这种情况,逐台执行display stp确认本机优先级和根桥ID,比对桥优先级,问题马上暴露。

5.3 排错命令组合拳

遇到网络异常,我最建议按下面的顺序排查:底层物理状态、VLAN放行、STP计算、VRRP状态、终端网关。命令组合如下:

排查目的命令关键输出
查看接口状态display interface brief物理口UP还是DOWN
查看VLAN端口归属display vlan端口是否在正确VLAN
查看Trunk放行display port vlan哪些VLAN放行了
查看STP端口角色display stp briefROOT/ALTERNATE/DISCARDING
查看STP根桥display stpCIST Root和Bridge是否一致
查看VRRP状态display vrrpState、PriorityRun
查看完整配置display current-configuration确认命令没敲错设备

这一套下来,95%的实验问题都能定位。如果还查不出来,就抓包看ARP、VRRP和STP三种报文是否正常,基本没有死角。

我在实际练习里还养成了一个习惯:每次做完一个阶段就执行一次save,把配置保存到模拟器里。eNSP偶尔会崩,尤其是开了抓包之后,不保存配置重来一遍非常浪费时间。另外,所有配置修改都按设备、按功能模块分步骤做,不要一口气贴一大段,否则出问题根本不知道是哪个命令引起了连锁反应。

最后再分享一个我觉得最值得养成的操作习惯:协议配置完,一定要亲手制造故障,看它怎么恢复。我第一次做这个实验时,只看状态没实际断过线,自我感觉全通。后来真拿去排障才发现,自己连主备切换的预期和实际丢包数都对不上。只有真正拔过一次线、看过一次状态翻转、盯着屏幕等过一次收敛,你对VRRP和STP的理解才算落地。顺着这个实验做完,你还可以把RSTP换成MSTP,给不同VLAN划分多实例,再配合VRRP的负载分担,整个园区网的冗余骨架就算是彻底打通了。

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

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

立即咨询