尧图精选

用Wireshark抓包彻底搞懂VRRP:从原理到排障实战

🕒 发布时间:2026/9/18 11:49:09 📁 来源:尧图网络
1. 为什么突然聊VRRP一个真实故障引出的选题先说个我前段时间遇到的现场问题。某个客户的网络架构其实很常规核心交换机做了堆叠下联各楼栋的接入交换机网关全部放在核心上。听起来没啥毛病但某天运维群里炸了办公网大面积断网ping网关直接超时重启完汇聚设备又恢复过一阵又断。查了几天最后的根因说出来你可能不信——有人在交换机的某个VLAN接口上手动配了一个同网段的VRRP备份组虚拟IP和核心网关一模一样而且优先级比核心还高。于是核心那边一直在抢占、让位、再抢占整个网段的流量像坐过山车一样反复横跳。这个案例让我意识到VRRP这东西很多人只知道“虚拟网关冗余”这六个字但真正抓包看协议交互、看状态机切换、看报文超时遇到问题还是两眼一抹黑。正好手头有一台测试设备可以组一个最小拓扑这次就用Wireshark把VRRP从原理到排障完整过一遍。这篇文章适合谁看三类人一是网络运维工程师天天跟网关、冗余打交道但没细看过协议报文二是准备网络认证考试华为、思科都可以VRRP和HSRP原理相通的考生抓包能帮你把状态机彻底吃透三是搞网络安全、做流量分析的朋友多熟悉一种协议报文的特征以后在抓包文件里一眼认出VRRP排查环路或者网关冲突会快很多。2. 折腾前必看VRRP的工作机制和报文结构2.1 虚拟网关的“户口本”VRRP MAC地址到底长啥样VRRP全称Virtual Router Redundancy Protocol虚拟路由冗余协议。它的核心思路是把多台路由器或者三层交换机组成一个备份组对外共享一个虚拟IP作为网关。实际转发流量的那台叫Master其他设备叫Backup。Master挂了Backup里面优先级最高的顶上整个切换过程对终端完全透明——终端根本不需要改网关因为它的ARP缓存里网关IP对应的MAC地址始终是那个虚拟MAC。那虚拟MAC是多少标准里写得很清楚00-00-5E-00-01-XX。前三段是IANA分配给VRRP的OUIXX是VRRP的VRID虚拟路由器ID。比如VRID是1虚拟MAC就是00-00-5E-00-01-01。这个细节太重要了后面抓包排查的时候看到目标MAC或者源MAC是00-00-5E-00-01-xx开头的基本就能锁定是VRRP的流量。这里顺便说一句思科的私有协议HSRPHot Standby Router Protocol虚拟MAC是00-00-0C-07-AC-XX华为的VRRP跟标准RFC 3768、RFC 5798是一致的。如果你在抓包里看到00-00-0C-07-AC开头那是HSRP不是VRRP别搞混了。排查跨厂商设备的时候这个细节能帮你省不少时间。2.2 谁是老大、怎么选出来的优先级和抢占机制VRRP设备之间靠什么决定谁当Master就两个东西优先级和IP地址。优先级数值范围是1到254默认100。选举规则是数值大的当Master如果优先级一样就看接口的主IP地址大的当Master。这个跟OSPF的DR选举有点像但VRRP更简单粗暴它不搞什么“不抢占”的花活抢占默认也是开着的。实际部署的时候一般会把核心交换机A的优先级设成120核心交换机B保持默认100。正常情况下A是MasterB是Backup。A的链路或者整机挂了B收到超过Master_Down_Interval这个时间下面细说时间没有Master的广告报文就会立刻升为Master接管虚拟IP和虚拟MAC继续转发流量。等A恢复之后因为它的优先级更高会重新抢占回Master的位置。抢占机制在绝大多数场景下是好事但有一种情况特别坑主备设备之间链路质量不稳定一会儿通一会儿断。备设备刚升成Master主的又恢复了马上抢回去网络来回抖。这种场景建议把主设备的抢占关掉华为的命令是vrrp vrid 1 preempt-mode disable让它在恢复后老老实实当Backup避免流量被来回踢皮球。2.3 报文里到底写了什么VRRP报文字段逐个拆VRRP报文是基于IP协议直接封装的协议号是112IP头里的TTL字段固定为255目的地址通常是组播地址224.0.0.18VRRP专用组播。我把常见字段整理成一张表抓包的时候对照着看会很清晰字段长度作用常见取值Version4bit版本号VRRPv2是2VRRPv3是3Type4bit报文类型VRRP只有一种Advertisement通告值为1Virtual Rtr ID8bit虚拟路由器IDVRID1-255与虚拟MAC尾段对应Priority8bit优先级0-255实际用1-254255是IP地址拥有者专用Count IP Addrs8bit虚拟IP地址数量v2里通常为1v3支持多个Auth Type8bit认证类型0表示无认证1表示简单文本认证v2Adver Int8bit通告间隔单位秒v2默认1秒v3单位厘秒Checksum16bit校验和标准IP校验和算法IP Addresses可变虚拟IP列表就是给终端用的网关IP这里要注意VRRPv2和VRRPv3除了版本号不同v3是支持IPv6和IPv4双栈的而且通告间隔的单位从秒变成了厘秒所以默认值是100而不是1。新部署或者排障的时候先确认设备跑的是v2还是v3不然看到通告间隔的数值会发懵。另外认证字段值得一提。VRRPv2的简单文本认证Auth Type1其实就是个摆设报文明文抓包就能看到密码根本起不到安全作用。VRRPv3干脆把这个字段砍了取而代之的是IPsec认证实际用得也少。所以做网络安全审计的同学如果看到线上网络还在用VRRPv2的文本认证该提醒下这是个隐患。3. 复现环境搭建两台设备一个虚拟网关的最小拓扑3.1 手头没有真机怎么办用GNS3快速搭一套排障和验证串口抓包最理想的是拿真机来测但多数人家里不会有交换机。我的建议是用GNS3加两台思科IOS镜像或者华为的eNSP如果你有思科和华为的镜像都行跑一个最简拓扑设备AGNS3里的路由器起一个三层接口配好物理IP再配置VRRP优先级设120。设备B另一台路由器同样接口优先级保持默认100。下面挂一台PC或者一台二层交换机PC的网关指向虚拟IP。PC和路由器的互联链路中间接一个集线器或者配了镜像口的交换机方便Wireshark抓包。拓扑看起来像这样PC — 二层交换机 —镜像口接Wireshark— 路由器A / 路由器B。抓包点放在PC和网络设备之间的链路上能看到终端发出的ARP请求、VRRP组播报文以及各设备之间的转发流量。如果你手头有真实的华为交换机配置更简单。两个交换机做VRRP的典型配置模板下面会完整给出来这里先用GNS3把原理跑通一样的。3.2 华为交换机的VRRP配置模板可直接抄假设场景是核心交换机A和B都接在同一个二层域里网段是192.168.10.0/24虚拟IP是192.168.10.254A的物理接口IP是192.168.10.251B是192.168.10.252。设备A的配置interface Vlanif10 ip address 192.168.10.251 255.255.255.0 vrrp vrid 1 virtual-ip 192.168.10.254 vrrp vrid 1 priority 120 vrrp vrid 1 preempt-mode timer delay 10 vrrp vrid 1 track interface GigabitEthernet0/0/1 reduced 30设备B的配置interface Vlanif10 ip address 192.168.10.252 255.255.255.0 vrrp vrid 1 virtual-ip 192.168.10.254这段配置里有几个细节要展开讲第一preempt-mode timer delay 10这条。它的意思是设备A恢复后延迟10秒再抢占。这10秒是为了等设备A的上联链路、路由表完全收敛避免刚恢复就抢回Master结果路由还没学全导致流量黑洞。实际生产中这个延迟建议配5到15秒视复杂度而定。第二track interface这条。它监控的是设备A的上联口GigabitEthernet0/0/1如果这个口down了优先级自动降30。这时候A的优先级就从120降到90低于B的100B就会接管网关。这个机制解决了VRRP一个著名痛点设备本身没坏但上联链路断了。如果不做接口跟踪A还是Master但流量到了A却出不去整个网段就废了。这个坑很多初学VRRP的人没注意到实际上生产环境里这是必配项。第三优先级降到90不是降到0。这里有个临界点问题。如果你不配track interface优先级是120配了之后链路故障时降30变成90。但如果你原本优先级就配了110降30就变成80B的优先级100照样能抢过来。但要注意如果B那边的优先级也是120两边相等就靠IP地址比大小谁IP大谁是Master这种优先级配置打架的情况故障时选主会变得不可控。所以规划优先级的时候主备用之间建议拉开30以上的差距别卡在临界值。3.3 开始抓包前的Wireshark准备工作在GNS3里拓扑启动后别急着点抓包。先把过滤条件写好。VRRP在Wireshark里已经内置了解析器直接用vrrp作为显示过滤器就行。但有个坑如果你抓包的时候VRRPv3的报文被识别成ip.proto112而不是vrrp说明Wireshark版本比较老或者没装好解析插件。这时候可以用ip.proto112兜底过滤效果一样。另外建议在抓包开始前把Wireshark的“着色规则”看一眼默认情况下VRRP流量是不着色的混在一堆组播报文里不太明显。Wireshark 4.0以上版本可以在“视图 - 着色规则”里手动加一条过滤器vrrp前景色白色、背景色深紫这样一眼就能在时间轴上看到VRRP报文的节奏。4. 核心实战Wireshark抓包看VRRP的全过程4.1 主备都正常时每秒一发的通告报文长什么样拓扑启动PC的网关是192.168.10.254设备A是Master设备B是Backup。这时候链路上会周期性出现VRRP Advertisement报文抓包后第一眼看到的就是这幅画面。用vrrp过滤后你会看到源MAC是A的物理接口MAC还是虚拟MAC这里有个很多人搞错的地方。VRRP Advertisement报文封装在以太网帧里的时候源MAC用的是发送接口的物理MAC不是虚拟MAC目的MAC用的是虚拟MAC00-00-5E-00-01-01不是组播MAC。换句话说VRRP的组播是IPv4层面的组播224.0.0.18但二层帧的目的MAC是VRRP虚拟MAC这跟普通IP组播报文的组播MAC映射规则不一样。Wireshark的Expert Info里如果出现“Invalid VRRP MAC”之类的警告多半就是有人手工改过虚拟MAC或者设备实现有坑这点在跨厂商对接时尤其值得留意。点开一个VRRP报文你会看到典型的字段Virtual Router Redundancy Protocol Version: 2 Type: Advertisement (1) Virtual Rtr ID: 1 Priority: 120 Count IP Addrs: 1 Auth Type: No Authentication (0) Adver Int: 1 Checksum: 0x9f51 [correct] IP Address: 192.168.10.254这个报文不长总共也就20多个字节的负载。但它每一秒发一次用的是组播地址局域网里所有运行了VRRP的设备都能收到。Backup B收到后会刷新一个定时器确认A还活着自己继续安心当备胎。如果B连续Master_Down_Interval计算方法是3 × Adver_Int Skew_Time时间没收到报文就开始进入竞选流程。这里的Skew_Time等于256 - Priority/256秒。为什么要有它主要是防止多台Backup同时升Master造成报文冲突。优先级越高的BackupSkew_Time越小能在更接近3 × Adver_Int的时刻触发切换这样即便多台备用设备也会有一个清晰的时间梯度避免大家在同一微秒抢着发广播。4.2 手工杀掉Master看Backup如何秒变网关现在在GNS3里把设备A的接口直接shutdown模拟Master宕机的场景。Wireshark上会看到什么首先原本身为Backup的设备B会等待Master_Down_Interval时间默认3秒多一点因为Adver_Int是1秒、B的优先级100算下来Skew_Time是(256-100)/2560.609375秒所以总等待大约是3.6秒然后立刻开始发送VRRP Advertisement报文优先级是它自己的100报文源MAC变成自己的物理接口MAC。关键点来了B升为Master之前会先发送一个免费ARPGratuitous ARP报文广播宣告192.168.10.254对应的MAC地址是虚拟MAC00-00-5E-00-01-01。这是整个切换流程里对终端影响最大的一步——它让局域网里所有终端的ARP缓存立刻刷新网关MAC从A的物理MAC切换成虚拟MAC其实正常情况下终端ARP缓存里的网关MAC本来就是虚拟MAC但如果之前发生过Master抢占缓存里的网关MAC可能短暂指向A的物理MACB升空后发免费ARP就是强制大家把网关MAC刷成虚拟MAC。抓包的时候关注这个免费ARP的来源IP是192.168.10.254而不是192.168.10.252这一点在排障的时候特别重要。如果你看到终端持续向旧的物理MAC发数据但网上查不到对应的免费ARP那就说明Master切换后免费ARP丢了或者被设备拦截了。这类问题在开启端口安全或者启用动态ARP检测的交换机上特别常见后面我单独讲。B升为Master后会立刻把接口IP地址和MAC地址做一次绑定同时向组播地址发一个自己的VRRP Advertisement。这个时候抓包会看到VRRP报文的优先级从100变成了当前B自己的优先级说明Master状态已经转移。对PC来说整个过程几乎无感最多就是丢一两秒的包——这取决于PC的ARP缓存对虚拟MAC是否保持稳定。4.3 抓包看抢占高优先级设备恢复后的移交流程这是我最喜欢演示的场景因为很多人在生产环境里不敢乱动设备但在GNS3里随便玩。把A的接口重新no shutdown看Wireshark里发生了什么。A恢复后接口UP起来它作为默认抢占者会等待约preempt-mode timer delay配置的延迟生产环境常见配置为10秒然后向组播地址发一个VRRP Advertisement里面优先级是120。B收到后一比对优先级120 自己的100于是B立刻降级为Backup同时A升为Master。这里要留意一个细节抢占触发的瞬间新的MasterA也会发免费ARP。它的作用和上面B升Master一样都是为了让终端刷新ARP缓存确保流量切到新Master。如果你在Wireshark里看到VRRP Advertisement报文之后紧接着出现一条免费ARP基本就可以确认抢占切换的过程是完整健康的。但有一种情况会导致切换出问题A恢复后接口UP了但它的上行路由还没有完全收敛。如果抢占延迟设置得太短比如没配preempt-mode timer delay直接恢复就抢就会出现“Master活着但业务不通”的现象。这也是为什么我一直强调抢占延迟一定要配不要觉得它多此一举。5. 进阶场景VRRP报文里藏着哪些排障信号5.1 抓包文件里没有VRRP报文可能压根没跑起来如果你的Wireshark什么都抓不到没有任何VRRP Advertisement先别急分几步排查第一确认路由器的接口是否UP。VRRP只会在接口状态UP的情况下才会发送Advertisement。接口down了VRRP直接哑火。第二确认VRID配置是否正确。两台设备配置的VRID必须一致一个配了VRID 1另一个配了VRID 2它们根本不在同一个备份组里谁都不会理谁自然也就没有报文交互。第三确认组播是否被过滤。VRRP用的组播地址是224.0.0.18如果中间的二层设备开了一些IGMP snooping功能并且处理不当可能会把这个组播流量当成普通组播给过滤掉。虽然224.0.0.18属于链路本地组播正常情况下不会被IGMP snooping裁剪但在某些特殊交换机配置里确实会出现异常。建议先确认自己和设备中间的二层链路没有奇怪的ACL或者组播过滤规则。5.2 虚拟IP配置不一致两边Gateway各说各话这里存在一个经典错误两台设备的VRRID都是1但虚拟IP一个配的是192.168.10.254另一个配的是192.168.10.253。两台都在发VRRP Advertisement但报文里携带的IP地址不一样。Wireshark里能看到两个VRID相同的VRRP报文优先级不同但虚拟IP字段不同。这种情况下局域网终端会间歇性收到不通的免费ARP有的终端ARP缓存指向..254有的指向..253于是整个网段的“网关”都不一样表现出来就是部分终端能上网、部分终端突然断网重启网卡或清ARP又恢复过一阵又有人断网。这类问题最烦人因为症状像ARP欺骗。但只要你抓包看VRRP报文里的IP Address字段马上就能定位是配置冲突。5.3 优先级反复横跳两台设备都觉得自己是Master另一个经典异常两台设备的VRRP接口都频繁发Advertisement优先级都是100导致频繁抢占。抓包看起来就是两个IP不同的VRRP报文交替出现每隔几秒源MAC变一次。这种情况的典型原因有两台设备的优先级配置反了A想当BackupB想当Master结果全网没有一个稳定的Master。两台设备之间的链路不稳定导致Backup收不到Master的通告超时后又升Master恢复后又退让周而复始。用Wireshark看这个现象最简单的方法看VRRP报文里Priority字段的数值变化以及报文的源MAC地址是否频繁切换。稳定状态下应该只有Master周期性地发AdvertisementBackup基本不发某些实现里Backup可能会在收到高优先级报文后发一次确认但多数情况下安静。如果你看到两个源交替发报文且优先级数值忽高忽低基本可以锁定是抢占抖动问题先去查主备之间的链路质量。5.4 认证不匹配静默的BackupVRRPv2环境下如果一台配置了简单文本认证另一台没配它们之间也能互相收到报文但会做认证校验。不通过的话Backup会直接把报文丢弃不更新定时器。表现就是一台设备在发Advertisement另一台完全没反应既不切换也不报错非常隐蔽。Wireshark里看配置了认证的报文Auth Type字段会显示1并且下面会带一个文本字符串。抓包时如果你发现设备之间报文正常但有一台始终是Init状态华为的display vrrp能看到就要怀疑是不是认证类型或者密码不一致。同理如果设备之间跑VRRPv3认证字段根本不存在就不用纠结密码了直接看版本是否一致。6. 生产环境排障高频问题速查表把这段时间做VRRP抓包分析遇到的典型问题和对应排查方法整理成一个速查表方便放到你的运维笔记里现象抓包特征常见根因处理建议抓不到任何VRRP报文无vrrp流量VRRP未启用 / 接口down / 中间链路过滤组播检查配置、接口状态确认中间设备没加奇怪ACL虚拟IP冲突部分终端断网两个VRID相同的报文IP Address字段不同两台设备虚拟IP配得不一致统一虚拟IP重新配置主备频繁切换间歇性断网VRRP报文源MAC频繁变化Priority都在100上下优先级配置不当或主备链路不稳定调大优先级差距检查链路质量必要时增加抢占延迟Backup收不到Master报文却又不报错Master周期性发AdvertisementBackup无响应认证不匹配 / 版本不一致v2 vs v3检查认证密码和协议版本两端统一Master活得好好的但流量不通VRRP报文正常但免费ARP触发后终端仍用旧MAC二层设备开端口安全 / DAI拦截了免费ARP在故障链路放行VRRP组播和免费ARP调整安全策略恢复后频繁震荡30秒以上抢占后Master每秒发报文但Backup仍在抢抢占延迟没配Master刚恢复路由没收敛修改配置增加抢占延迟这个表格看着简单但每一条我在现场都撞过。这里面最值得警惕的是“免费ARP被拦截”这条。现在的园区网普遍做了端口安全和动态ARP检测如果接入交换机把网关的免费ARP当成非法ARP处理了VRRP切换再快、报文发得再标准终端缓存就是刷不过来用户该断网还是断网。排查的时候别光盯VRRP报文免费ARP能不能正常广播到终端一样重要。7. 写在最后抓包这件事纸上谈兵不如实际敲一遍VRRP这个协议光看文档你会觉得它简单——就是一个主备切换、一个虚拟IP、一个优先级。但真正排障的时候涉及的坑一个接一个。我个人经验是凡是遇到“网关间歇性不通”“主备切换之后业务还是断”“网上查不到问题”的案例先抓包看三样东西VRRP Advertisement是否稳定、免费ARP是不是及时发出、终端ARP缓存有没有更新。这三样对上了大部分问题都能直接定位。最后再分享一个小技巧用Wireshark看VRRP的时候把时间列调整成“Seconds Since Previous Captured Packet”右键时间列选择“列首选项”然后观察相邻两条VRRP报文的间隔。正常情况下稳定在一秒或者你配置的通告间隔。如果你发现间隔忽长忽短或者经常超过三秒才收到一条那这个网络的上行链路或者设备CPU八成在打嗝提前排查比等Master Down再救火要省心得多。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →