1. 一台网关挂掉之后VRRP要填的那个坑到底有多大VRRPVirtual Router Redundancy Protocol虚拟路由器冗余协议在eNSP模拟器里配置起来不过四五条命令但真正决定这套方案能不能在实际环境里顶住故障的是配置之前对网关单点故障这个问题的理解深度。我见过太多实验报告命令敲得一字不差display vrrp回显也漂漂亮亮可一旦把主用设备的接口关掉业务照断不误——因为二层没收敛、因为抢占延时配得太短、因为上行链路断了但VRRP还认为自己是Master。这篇文章就从这个命令会背、故障不抗的坎儿说起把VRRP的原理、eNSP里的完整配置命令、回显解读和排错链路一次讲透。适合刚接触三层冗余的网络方向学习者也适合已经会敲命令但没搞清楚细节的在岗运维。1.1 静态路由和策略路由补不上的一环终端访问外网靠的是什么很多人第一反应是路由。但请你想清楚PC发出去的第一个包目的IP是8.8.8.8举例它在自己网段之外于是它不会去查路由表它只做一件事——把包丢给网关。这个动作发生在PC的IP层跟路由协议一点关系都没有。网关地址是人工配死在PC上的或者由DHCP下发它天然就是一个单点。所以不管核心层跑的是OSPF还是IS-IS不管路由收敛有多快只要PC配置的那一个网关地址对应的设备宕机或者接口downPC就彻底失联。路由协议的收敛发生在网关设备之间而PC到网关这一段路由协议管不着。这是一个非常关键的分层认知动态路由解决的是网关之间怎么走VRRP解决的是终端怎么找到还活着的网关。两者是接力关系不是替代关系。有人会想到配两个网关。Windows确实支持在高级TCP/IP设置里加多个默认网关但这个机制本质上是个失败后重试的兜底切换时间取决于TCP重传超时实测下来几十秒起步而且Linux下多默认网关是按metric选一条压根不做故障检测。还有方案是在PC上跑动态路由协议比如某些场景下的RIP客户端但这会带来安全和管理上的巨大麻烦。真正在工程上被广泛采用的就是让多台三层设备共同扮演一个网关IP。1.2 VRRP用多台设备共用一个IP来解题VRRP的核心思路非常朴素把N台物理三层设备编成一个组组内选出一个老大Master由老大真实地持有那个虚拟IP并应答ARP其他设备Backup只是待命。终端侧的配置完全不变——网关还是那个IP只是这个IP背后的物理设备从一台变成了一个可以自动切换的集群。这里有一个容易被忽略的细节终端感知不到切换是因为虚拟IP和虚拟MAC是绑定在一起的一组。VRRP规定虚拟路由器拥有一个虚拟MAC地址格式固定为00-00-5E-00-01-{VRID}。当Master切换时新Master会立刻发出一个免费ARPGratuitous ARP把自己的物理MAC和这个虚拟MAC的映射关系广播出去同时刷新上游交换机的MAC地址表。终端和中间交换机的ARP缓存、MAC表在几百毫秒内就被纠正过来业务流的下一跳自动指向新设备。这也是为什么VRRP的切换能做到秒级甚至亚秒级而配两个网关的方案只能做到几十秒。差别不在于设备性能而在于是否有一套主动的、带心跳的选举与通告机制。理解到这一层后面所有的配置命令你就都能对上号了vrid决定虚拟MAC的后两位priority决定谁是老大advertisement-interval决定心跳多快preempt-mode决定老大的位置能不能被抢。2. 报文格式、状态机与选举规则把谁是Master这件事讲透配置命令敲错回显里往往能看出来但选举逻辑理解错了配置全对拓扑一切换就出问题而且极难定位。这一章把VRRP的报文、定时器和选举规则拆开讲后面配置章节的每一条命令你都能在这里找到它对应的字段。2.1 五种字段直接决定选举结果VRRP报文封装在IP之上协议号112目的地址是组播224.0.0.18TTL固定为255这个TTL值本身是一个防欺骗设计设备收到TTL不为255的VRRP报文会直接丢弃因为正常通信不可能不经过任何路由跳数。报文里跟选举强相关的字段有这么几个字段取值范围作用与注意点VRID1–255标识虚拟路由器组同一组内必须一致同时决定虚拟MAC末字节Priority0–255竞选权重默认1000为特殊值255为IP拥有者专用Advertisement_Interval默认1秒Master发通告的周期组内所有设备必须一致Preempt_Mode开启/关闭高优先级设备是否抢回Master身份Auth Type无/简单字符/MD5VRRPv2支持VRRPv3已取消认证字段优先级这里有两个特殊值必须记牢。优先级255是IP地址拥有者专用如果某台设备的接口真实IP恰好等于虚拟IP它的优先级自动被视为255直接成为Master且不参与抢占逻辑因为它本来就是主人。很多人在实验里把优先级手工配成255结果发现抢占延时不生效、切换行为跟预期不符就是因为踩了这个保留值。优先级0则是设备主动让位时发送的表示我不干了你们重新选用于优雅退出。优先级相同时怎么选比较接口的主IP地址数值大的当选。这一条在双机配置对称、忘了改优先级的场景里经常成为为什么主用是它不是我的答案。所以规范做法是优先级别配成相同值主用一侧显式提高不要依赖IP比较这个兜底规则。2.2 三个定时器与Master_Down_Interval的推算VRRP有三个时间参数理解它们的换算关系是排查切换慢问题的钥匙Advertisement_IntervalMaster发通告的间隔默认1秒可配范围为1–255秒。Skew_Time偏移时间计算公式为(256 - Priority) / 256秒。优先级越高偏移越小。它的作用是让多个Backup在Master失效后错开切换动作避免同时抢占造成冲突。Master_Down_IntervalBackup判定Master失效的等待时间计算公式为3 × Advertisement_Interval Skew_Time。按默认值算一遍主用优先级120备用优先级100。备用侧等待时间 3×1 (256-100)/256 3 0.609 ≈ 3.61秒。也就是说默认配置下从主用设备彻底静默到备用接管大约要3.6秒。这个时间对普通办公网够用对实时性业务就偏长了。想缩短怎么办把advertisement-interval调小比如调到200毫秒注意部分版本只支持整秒需要看设备能力。这里有个坑组内所有设备的通告间隔必须一致否则会出现Backup认为Master超时、Master认为自己还活着的双主隐患。所以改这个参数一定要两端同时改且改之前先确认设备平台的取值范围限制。2.3 虚拟MAC为什么锁定在00-00-5E-00-01-XX这个前缀不是随便定的。00-00-5E是IANA分配给VRRP协议使用的OUI00-01表明这是VRRP虚拟路由器类型最后两位就是VRID的十六进制。VRID为1时虚拟MAC就是00-00-5E-00-01-01。这个设计的工程价值在于虚拟MAC与物理设备解耦。当Master从设备A切到设备B虚拟MAC保持不变终端ARP表里虚拟IP → 虚拟MAC这条记录压根不需要更新只有交换机侧虚拟MAC → 出端口的MAC表项需要刷新。这就是为什么VRRP切换对终端几乎透明而如果改用两个真实IP轮流上线的方案终端必须感知ARP变化切换必然有感知。顺着这个逻辑你也能理解为什么同一个二层域内不同VRRP组的虚拟MAC必须不同如果两个组用了同一个VRID它们会生成相同的虚拟MAC交换机的MAC表就会来回翻动形成MAC漂移直接把网络搞乱。做负载分担时这一点尤其致命后面第6章会展开。3. eNSP实验拓扑与地址规划先画图再敲命令我一直建议初学的人别急着敲命令先把拓扑画清楚、把地址表列出来。VRRP的配置错误里有相当一部分不是命令写错而是VLAN、接口、网段三者没对齐。本章给出一个可以直接照着搭的最小可复现拓扑后面的配置和验证都在这个拓扑上完成。3.1 拓扑搭建与设备选型在eNSP里拖两台三层交换机S5700系列即可支持完整的VRRP功能、一台二层接入交换机、一台路由器作为出口、两台PC作为终端。连线方式如下PC1、PC2 接入二层交换机二层交换机通过两条链路分别上联到 SW1 和 SW2形成二层冗余这里可以后续接MSTP本文先按单链路讲第7章再说双链路。SW1 的 Gi0/0/1 接出口路由器 AR1 的 Gi0/0/0。SW2 的 Gi0/0/1 接出口路由器 AR1 的 Gi0/0/1。SW1 和 SW2 之间用 Gi0/0/2 互联作为VRRP心跳的二层通道。提示SW1与SW2之间的互联链路不是VRRP的必需品VRRP报文本质是组播只要两台设备在同一个二层广播域内就能互相收到。但如果两台设备之间没有直连报文必须经过接入交换机绕行实验时容易出现链路通了但报文被过滤的问题所以直连一条更省事。3.2 地址与VLAN规划表规划这部分我吃过亏。早期做实验时习惯随手起网段结果配到一半发现VRRP组的虚拟IP和某台设备的接口IP冲突或者两台设备的接口IP配到了同一个地址上排错花了半小时。所以现在一律先列表设备接口VLANIP地址说明SW1Vlanif1010192.168.10.2/24真实接口地址VRRP优先级120SW2Vlanif1010192.168.10.3/24真实接口地址VRRP优先级100虚拟Vlanif1010192.168.10.1/24VRRP虚拟IP即终端网关SW1Vlanif202010.1.1.1/30上联AR1SW2Vlanif202010.1.1.5/30上联AR1AR1Gi0/0/0—10.1.1.2/30对接SW1AR1Gi0/0/1—10.1.1.6/30对接SW2PC1—10192.168.10.10/24网关192.168.10.1PC2—10192.168.10.11/24网关192.168.10.1这张表里有三个刻意的设计。第一虚拟IP取网段的.1两台设备的真实地址取.2和.3虚拟IP不与任何真实地址重合避免触发255优先级的IP拥有者逻辑。第二两台设备的真实地址必须在同一个网段内这是VRRP的硬性要求不在同网段连报文都发不出去。第三上联用/30掩码两个地址刚好够用既节省地址空间又避免误配。3.3 二层与三层基础配置先把二层打通再配三层。SW1上创建VLAN 10和VLAN 20把接PC的接口划进VLAN 10access模式把接AR1的接口划进VLAN 20把两台交换机互联的Gi0/0/2配成trunk并放行VLAN 10。SW2做对称配置。# SW1 二层配置 vlan batch 10 20 interface GigabitEthernet0/0/3 port link-type access port default vlan 10 interface GigabitEthernet0/0/1 port link-type access port default vlan 20 interface GigabitEthernet0/0/2 port link-type trunk port trunk allow-pass vlan 10三层配置就是给Vlanif接口配地址。SW1的Vlanif10配192.168.10.2Vlanif20配10.1.1.1SW2对称。配完之后先别急着上VRRP用PC ping一下192.168.10.2和192.168.10.3确认二层和直连三层都通。这一步看着多余实际上是给后面排错留一条基准线——如果VRRP配完不通你能立刻判断问题出在VRRP本身还是基础连通性。另外别忘了给出口路由器配一条回程路由指向192.168.10.0/24下一跳可以指向SW1也可以指向SW2或者干脆跑个OSPF让路由自动收敛。实验环境为了简化静态路由指向虚拟IP也可以因为虚拟IP始终有一个Master在应答。4. 主备模式的配置全流程从vrid到抢占延时基础通了VRRP的配置本身其实很短。但短不等于简单每条命令背后的意图必须清楚否则调参就是瞎猜。4.1 Master端与Backup端的命令差异SW1计划作为主用的Vlanif10配置interface Vlanif10 ip address 192.168.10.2 24 vrrp vrid 1 virtual-ip 192.168.10.1 vrrp vrid 1 priority 120 vrrp vrid 1 preempt-mode timer delay 20 vrrp vrid 1 advertisement-interval 1 vrrp vrid 1 track interface GigabitEthernet0/0/1 reduced 30SW2备用的Vlanif10配置interface Vlanif10 ip address 192.168.10.3 24 vrrp vrid 1 virtual-ip 192.168.10.1 vrrp vrid 1 priority 100 vrrp vrid 1 preempt-mode timer delay 20 vrrp vrid 1 advertisement-interval 1 vrrp vrid 1 track interface GigabitEthernet0/0/1 reduced 30逐条解读。vrrp vrid 1 virtual-ip 192.168.10.1是核心命令一个接口下可以配多个VRRP组只要VRID不同。两端这条命令必须完全一致VRID一致、虚拟IP一致。如果一端写成了vrid 2两端各自成组都是Master都去应答同一个IP的ARP那就形成了双主网络会时通时断而且display vrrp在各自设备上看都是正常的Master极具迷惑性。priority 120只在主用侧显式配置备用侧保持默认100。差值20是个经验值留出足够的余量将来如果要跟踪多条上行链路每条降10降两次还有余量。如果差值只有1一条链路故障后优先级降到99反而比备用低效果一样但余量没了。preempt-mode timer delay 20是抢占延时20秒这条命令是本篇里我认为最容易被省略、也最不能省略的一条下一节专门讲。advertisement-interval 1保持默认显式写出来是为了在多人协作的实验环境里让配置意图清晰同时也提醒自己要改就两端一起改。track interface GigabitEthernet0/0/1 reduced 30是上行链路联动意思是当Gi0/0/1这个接口down掉时本设备的VRRP优先级降低30从120降到90低于备用的100从而主动让位。更深入的用法在第6章展开。配完之后等几秒在两台设备上分别执行display vrrp正常应该看到SW1是Master、SW2是Backup虚拟IP的State都是Up。4.2 preempt-mode timer delay为什么必须要配抢占Preempt的含义是优先级高的设备一旦发现当前Master优先级比自己低就抢回Master身份。这个机制默认是开启的而且没有延时——一旦发现就抢。问题出在一旦发现这四个字上。假设SW1因为上行链路闪断被降优先级、让位给SW2几秒后链路恢复SW1优先级回升立刻抢回Master。如果这条链路不稳定反复闪断VRRP就会反复切换SW1让位→SW2接管→SW1抢回→SW1让位……每次切换都伴随一次免费ARP广播和全网MAC表刷新业务表现为周期性的几秒卡顿这种故障在现场极其难查因为每次你去测的时候它恰好是通的。配置了preempt-mode timer delay 20之后设备即使发现自己应该抢也要先等20秒。这20秒是个冷静期如果链路在这期间又断了优先级再次下降抢占就不会发生。工程上把这个值设在20–60秒比较常见具体看业务对切换时间的容忍度和链路抖动的时间尺度。有一个细节要注意抢占延时对Master设备主动失效后的重新选举不起作用。如果SW2作为Master直接宕机SW1作为Backup在Master_Down_Interval超时后接管这个接管是选举行为不受抢占延时约束。抢占延时只影响Backup发现Master优先级比自己低这一种场景。所以别指望配了这个延时会让故障切换变慢它俩是两回事。还有一点备用侧我也配了preempt-mode timer delay 20。虽然它当前优先级低、抢不了但将来如果主备角色互换比如做了双主负载分担这行配置就有意义了。保持两端对称是减少后期维护心智负担的好习惯。5. display vrrp输出逐行拆解怎么从回显里看出真实状态命令敲完不算完能读懂回显才算真的会配。display vrrp和display vrrp verbose这两条命令里藏着的信息量比大多数人以为的多得多。5.1 关键字段解读在Master设备上执行display vrrp verbose典型回显里会包含这几块内容VRRP组的基本信息、状态信息、配置信息和统计信息。逐个看StateMaster还是Backup。这是最直观的但也是最容易骗人的。如果拓扑里两台设备都显示Master别怀疑回显直接去查VRID和虚拟IP是否配错、或者中间的二层链路是否把组播过滤了。Virtual IP确认虚拟IP是否正确以及后面是否标注了IP address owner。如果出现了这个标注说明有设备的真实IP和虚拟IP重合了前面提到的255优先级逻辑被触发。Priority当前生效的优先级。注意这里显示的是运行时优先级如果配置了track并且上行链路已down这里会显示降低后的值而不是配置文件里的原值。这一点在排查为什么它明明是主用却让位了时是关键证据。Preempt Mode是否开启以及延时值。Advertisement Interval通告间隔两端对比一下必须一致。Master IP当前Master的接口真实IP。在Backup设备上这个字段告诉你我现在听谁的。Master Down Interval根据当前优先级算出来的超时时间可以直接印证第2章那个公式。统计信息里关注两个计数Received和Sent。Master的Sent应该随时间稳定增长每秒1个Backup的Received也应该同步增长。如果Backup的Received一直是0说明报文没收到往二层方向查如果Received在涨但State一直是Backup那优先级可能真的比对方低回显里的Priority字段会说明一切。5.2 切换过程的抓包与验证光看稳态回显不够必须做一次完整的切换演练而且要抓包看过程。eNSP支持在链路上抓包把抓包点设在SW1的上联口和PC1的接入链路然后执行shutdown关掉SW1的Vlanif10或者关掉物理口。抓包能看到的关键节点SW1最后发出的几条VRRP通告目的224.0.0.18消失了。大约3.6秒后SW2开始以1秒间隔发送VRRP通告报文的源IP变成10.1.1.xSW2的真实地址优先级100。SW2立即发出一个免费ARP广播192.168.10.1 is at 00-00-5E-00-01-01这个ARP在抓包里非常显眼目的MAC是全F。PC1侧如果正在ping会看到丢3–4个包后恢复。这个演练建议至少做三遍手工shutdown主用接口、手工shutdown主用上行链路验证track生效、直接关闭主用设备电源模拟真实宕机。三种场景的切换时间、切换后路径都不一样只有都做过心里才有底。验证恢复时记得用reset vrrp statistics清一次计数否则统计信息里的历史数据会干扰判断。另外切换演练做完后一定要把主用设备恢复并观察抢占延时是否按预期生效——如果恢复后立刻抢回说明preempt-mode timer delay没配上或者配错了接口。6. 负载分担与上行链路联动别让Backup常年吃灰主备模式下备用设备在99%的时间里什么都不干硬件资源完全闲置。对于预算紧张又要提升性能的场景负载分担是非常实用的方案。6.1 双VRID负载分担的配置思路是建两个VRRP组把终端分成两拨一半用组1的虚拟IP做网关另一半用组2的虚拟IP做网关两组的主用分别落在两台设备上。SW1的Vlanif10追加vrrp vrid 2 virtual-ip 192.168.10.254 vrrp vrid 2 priority 100 vrrp vrid 2 preempt-mode timer delay 20SW2的Vlanif10追加vrrp vrid 2 virtual-ip 192.168.10.254 vrrp vrid 2 priority 120 vrrp vrid 2 preempt-mode timer delay 20这样组1VIP 192.168.10.1的Master是SW1组2VIP 192.168.10.254的Master是SW2。PC1的网关配.1PC2的网关配.254流量就从两个方向出去了。这里有两个必须注意的点。第一两个组的虚拟MAC必须不同因为VRID不同1和2虚拟MAC末字节分别是01和02自动满足。如果为了好记把两组都配成vrid 1虚拟MAC就撞了交换机的MAC表会在两个端口之间反复漂移网络直接瘫掉。第二两个虚拟IP不能落在同一台设备的同一个接口上还配成同一优先级否则两台设备各在一个组里当Master看起来是负载分担了但实际上如果某台设备整体宕机另一个组的主用也会跟着丢因为那台设备同时是两个组的Backup。所以负载分担模式下两台设备互为备份的关系依然成立只是每台都同时扮演一个组的主、另一个组的备。这种方案还有一个隐性收益两个方向的流量在正常状态下都只走单跳不经过设备间互联链路节省了互联带宽。而在主备模式下所有流量都集中在一台设备上互联链路平时空闲。6.2 track接口与BFD联动的降优先级track interface解决的是直连链路断了这一类故障它的检测速度取决于接口的物理状态变化通常很快。但它有一个明显的盲区如果故障发生在上行设备之后而不是本设备的接口上接口本身不会downtrack就检测不到。比如SW1上联的口是通的但AR1那台设备挂了或者AR1的上联断了SW1仍然认为自己的上行正常继续当Master结果所有流量到了SW1之后无路可走形成黑洞。解决这条链路有两种做法。一种是跑路由协议通过路由收敛让SW1发现自己没有去往外网的路由然后主动降优先级部分平台支持这种联动配置复杂度较高。另一种更轻量的做法是用BFD或NQA做端到端的探测探测目标选一个稳定的远端地址探测失败就降优先级。bfd quit bfd atob bind peer-ip 10.1.1.2 source-ip 10.1.1.1 discriminator local 1 discriminator remote 2 commit interface Vlanif10 vrrp vrid 1 track bfd-session 1 reduced 40这段配置的意思是跟对端10.1.1.2建立BFD会话如果会话downVRRP优先级降40从120降到80低于备用的100主动让位。BFD的检测周期可以配到毫秒级所以这种方案的切换时间能压到1秒以内比默认的3.6秒强得多。需要注意的是降的数值要算清楚。主用优先级120备用100差20。降30之后变成90够了降40变成80也够。但如果跟踪了两条链路、每条降30同时故障就是降60变成60也低于100没问题。可如果将来有人把备用优先级改成了80主用降之后是80两者相等就变成比IP大小了结果不可控。所以降优先级的数值设计必须留足余量并且把两端的初始优先级和所有track的减值写进文档这是团队协作里最容易失控的地方。7. 实验里最容易翻车的七个地方这一章是我自己在eNSP里反复折腾之后攒下来的问题清单按出现频率排序从最常见的往下走。第一双主。表现为网络时通时断、display vrrp两台都是Master。原因几乎总是VRID或虚拟IP不一致或者中间二层链路把224.0.0.18的组播过滤了。排查方法是在两端同时执行display vrrp statistics看Received是否在增长。如果一端Sent在涨、另一端Received为0问题在链路。第二优先级配了255。配成255之后设备成为IP地址拥有者不参与抢占抢占延时失效。很多人以为255是最高优先级所以最好实际上这是个保留值正常配置应使用1–254。第三抢占延时没配链路抖动导致反复切换。典型表现是业务周期性卡顿几秒每次抓包都能看到免费ARP。这个坑的隐蔽性极强因为你去测的时候网络恰好是恢复的。第四二层没收敛就切了VRRP。如果SW1和SW2之间有冗余链路跑STPSW1宕机后VRRP可能在3.6秒内就切换了但STP的拓扑收敛要30秒以上新Master的流量在二层上还找不到路径形成黑洞。这种情况下必须配边缘端口、快速收敛比如RSTP或MSTP配边缘端口和P/A机制必要时调整VRRP的检测时间让三层切换和二层收敛的节奏匹配。这是三层冗余和二层冗余必须一起设计的典型案例。第五VRRP和MSTP的实例映射错位。做了MSTP多实例之后VLAN 10的根桥应该和VRRP组1的Master在同一台设备上否则流量会先到SW1的网关再从二层链路上绕到SW2出去形成次优路径。验证方法是在两台设备上看display stp instance的根桥位置跟display vrrp的Master位置对照。第六改advertisement-interval只改了一端。结果一端认为1秒一次另一端认为200毫秒一次超时判断错乱间歇性双主。第七忘了在VLANIF接口上配VRRP跑到物理口上去了。VRRP必须配在三层接口上eNSP里的三层交换机对应的是Vlanif接口路由器对应的是物理口或子接口。配错位置的话命令会报错这一条本身不难发现难的是有些版本对配置位置的要求不那么严格配上去能生效但跟VLAN的对应关系就乱了。最后一个心得做VRRP实验一定要养成改完配置就reset统计、抓一次包、做一次切换的习惯。稳态下一切正常不代表故障时能顶住VRRP的价值恰恰体现在那几秒钟里而那几秒钟的真相只有抓包能告诉你。这个协议本身的原理并不复杂真正花时间的是把二层收敛、上行联动、抢占时序这几件事捏在一起调通这部分只能靠一遍遍地关接口、看回显、改参数堆出来。