ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

OSPF综合实验:MSTP+VRRP联动配置与排障实战

OSPF综合实验:MSTP+VRRP联动配置与排障实战 写OSPF综合实验这个题目我估计不少朋友一看就懂——它几乎是网络工程师面试和实操考核里绕不开的老三样组合OSPF做三层路由、MSTP做二层拓扑收敛、VRRP做网关冗余。我这次搭的实验环境把这三套东西拉通在一起顺带用上了display ospf error、debug ospf这些老手段做完排障。整个实验做下来最大的感受就一句话问题不用慌先查错误表再开debug真的比抓包省事多了。这篇内容适合两类人看一类是正在备考或刚入职想系统过一遍OSPF综合场景的兄弟另一类是平时光会配ospf 1、router-id、area 0这些基础命令但遇到邻居不UP、路由不通就手忙脚乱的老哥。我会把实验拓扑、地址规划、配置步骤和排障过程完整写出来重点是为什么这么设计、为什么这么排查而不是干巴巴贴一段配置让你抄。1. 实验场景与拓扑设计1.1 这个综合实验到底在模拟什么场景真实企业网络里OSPF几乎不会孤零零地出现在一台路由器上。常见的形态是核心交换机跑OSPF进程汇聚设备作为ABR连接不同区域接入侧跑MSTP做二层的多实例负载均衡同时用VRRP给终端网关做冗余。这三套协议各管一段OSPF管三层路由MSTP管二层的生成树拓扑VRRP管网关的故障切换。它们联动起来才是完整的园区网络骨架。我这套实验模拟的就是一个典型的中型园区二层接入有两台汇聚设备汇聚往上跑OSPF接入核心区域往下跑MSTP和VRRP双网关。终端网关既需要冗余又不能因为某条上行链路断了导致整个业务长时间中断。于是就有了OSPF、MSTP、VRRP三者的协作场景。实验里最核心的一个设计点是MSTP负责物理链路的二层次备VRRP负责网关切换OSPF负责路由层面的收敛和路径优化。三层协议和二层协议之间靠什么联动靠的是cost调整、接口状态跟踪和路由发布策略。这个联动才是综合实验的精髓比单配一个协议有价值得多。1.2 拓扑规划与地址分配我采用的拓扑是两台核心交换机Core-1、Core-2组成OSPF骨干区域Area 0两台汇聚交换机Agg-1、Agg-2作为ABR连接Area 0和业务区域Area 10接入交换机放在二层通过MSTP双归属到两台汇聚设备。地址规划尽量简单方便后续扩展到更多区域设备接口地址段OSPF区域说明Core-1G0/0/110.0.12.1/30Area 0连Agg-1Core-2G0/0/110.0.23.2/30Area 0连Agg-2Core-1 - Core-2互联10.0.99.0/30Area 0核心互联Agg-1G0/0/110.0.12.2/30Area 0上行到Core-1Agg-1Vlanif10192.168.10.254/24Area 10业务网关VLAN10Agg-1Vlanif20192.168.20.254/24Area 10业务网关VLAN20Agg-2G0/0/110.0.23.1/30Area 0上行到Core-2Agg-2Vlanif10192.168.10.253/24Area 10VRRP备份网关Agg-2Vlanif20192.168.20.253/24Area 10VRRP备份网关这样设计的好处是业务网段全部挂在Area 10汇聚设备向Area 0发布Type 3 LSA核心区域的路由表很干净。同时业务网段的网关由VRRP虚拟地址承担OSPF只负责把网段路由传上去二者职责清晰不互相干扰。2. OSPF基础配置区域、Router-ID与邻居建立2.1 Router-ID规划为什么到处是1.1.1.1OSPF的Router-ID是整个协议运行的身份证。实验里常见到ospf 1 router-id 1.1.1.1这种写法新手容易产生两个误区第一Router-ID不是接口地址它只是一个全局标识符第二如果不手动配置设备会从所有接口地址里自动选规则是优先Loopback地址没有Loopback就选物理接口里地址最大的那个。这个自动选举规则在实际项目里非常坑。比如你有一台设备接口地址是10.1.1.1和10.2.2.2系统自动选出来的Router-ID是10.2.2.2过两天你新加了一个10.3.3.3的接口并重启OSPF进程Router-ID就变了邻居关系全部重建整网瞬间闪断。所以我在实验里给每台设备都用loopback接口承载Router-ID并且固定为1.1.1.1这种有规律的值。有兄弟会问两台设备能不能配一样的Router-ID答案是不行。OSPF邻居建立时会做Router-ID冲突检测一样的ID会导致邻居反复上下线error表里会不停地刷Duplicate router-id之类的记录。合理规划是Core-1用1.1.1.1Core-2用2.2.2.2Agg-1用3.3.3.3Agg-2用4.4.4.4形成一套一眼就能对应到物理设备的编号体系。2.2 区域划分与ABR的角色实验里Core-1、Core-2、Agg-1、Agg-2同时跑OSPF但Agg-1和Agg-2既要和Core建立邻居又要向业务区域发布网段路由所以它们必须是ABR。ABR有一个重要特征至少有一个接口在Area 0同时还有接口在其他区域。ABR的作用是生成Type 3 LSASummary LSA把区域间的路由汇总后发给骨干区域。配置上Agg-1的OSPF进程里同时宣告两个区域# Agg-1上的关键配置 router id 3.3.3.3 ospf 1 router-id 3.3.3.3 area 0.0.0.0 network 10.0.12.0 0.0.0.3 area 0.0.0.10 network 192.168.10.0 0.0.0.255 network 192.168.20.0 0.0.0.255这里有个细节network命令里的反掩码是0.0.0.255代表匹配整个C类网段。如果某个网段在多个区域都宣告了OSPF会认为该网段属于所有宣告它的区域这会产生不合理的LSA。所以业务网段只放在Area 10互联段只放在Area 0这是综合实验里最需要遵守的纪律。2.3 邻居状态与区域类型验证配置完成后用display ospf peer查看邻居关系。正常状态应该是Full表示邻居建立成功LSA已经开始同步。我看到很多新手拿到邻居状态是2-Way就以为通了其实2-Way只是双向发现路由信息还没开始交换。必须确认到Full才算这条OSPF邻居链路真正可用。状态含义是否需要处理Down未收到对端Hello检查接口和网络类型Init收到Hello但未看到自己检查Router-ID或Hello间隔2-Way双向邻居发现完成DR/BDR选举阶段正常ExStart/Exchange正在协商和交换DBD等待即可Loading正在请求LSA等待即可Full邻居建立LSDB同步正常验证命令如下display ospf peer display ospf lsdb display ospf routing如果邻居卡在ExStart不动十有八九是接口MTU不匹配。OSPF在交换DBD报文时会协商MTU两端不一致就反复协商永远进不了Full状态。我这次实验里故意把一台设备的接口MTU改成1492果然卡在ExStart改回1500后立即恢复正常这就是综合实验里最典型的低配错误。3. OSPF与MSTP、VRRP的联动配置3.1 VRRP网关冗余与OSPF发布网段业务网关由Agg-1和Agg-2组成VRRP备份组。VLAN10的虚拟IP是192.168.10.254其中Agg-1为主Agg-2为备VLAN20反过来Agg-2为主Agg-1为备实现网关负载分担。关键问题是VRRP只解决网关冗余终端访问其他网段的路由还需要OSPF把网段发布出去。业务网段在Agg-1和Agg-2上都宣告了OSPF所以不管VRRP主备是谁核心路由器都有去往192.168.10.0/24的路由且下一跳可能是Agg-1或Agg-2。这样设计有个好处VRRP切换时终端网关立即切换到备份设备而OSPF路由也早已通过备份设备学习到所以跨网段通信不会因为主网关故障而中断。真正做到网关冗余路由冗余的双保险。3.2 MSTP多实例与上行链路的选择接入交换机连接两台汇聚如果只跑普通STP会阻塞一条上行链路导致大量流量挤在单条链路上。我采用MSTP多实例的方式实例1承载VLAN10实例2承载VLAN20让两个实例分别以不同的汇聚设备为根桥实现二层流量的负载分担。MSTP与OSPF的联动体现在路径选择上。OSPF选路看cost而实际数据从接入层到汇聚层走的却是MSTP的转发路径。如果OSPF认为某条路径最优但MSTP在二层恰恰阻塞了这条路径对应的VLAN报文就会被绕路产生次优路径。解决办法是在MSTP实例和OSPF cost之间做对齐。我在实验里把实例1的根桥配在Agg-1上同时把Agg-1上行到核心的OSPF cost调低把Agg-2上行的cost调高这样VLAN10的流量无论二层还是三层都偏向走Agg-1整体路径是一致的。配置核心是# Agg-1上调整OSPF cost让VLAN10主路径走自己 interface GigabitEthernet0/0/1 ospf cost 10 # Agg-2上对应接口调高cost interface GigabitEthernet0/0/1 ospf cost 20这么做的意义在于让二层的生成树路径和三层的路由路径保持一致避免路由说走A二层却把流量导到B的矛盾局面。3.3 上行链路切换后的收敛验证综合实验里最刺激的环节就是人为断链。我在Agg-1的上行接口执行shutdown然后连续观察首先VRRP检测到接口Down把VLAN10的网关主备切换同时OSPF的Hello报文不再从该接口发出设备在Dead间隔后把路由从路由表里删除并重新计算路径最后MSTP感知到链路变化切换生成树路径。整个过程里终端业务中断时间取决于各组件的检测速度。VRRP的抢占延迟、OSPF的Dead间隔、MSTP的Forward Delay都是可调参数。我在实验里把OSPF的Dead间隔从默认40秒调短到20秒把VRRP的抢占延迟设为0实测切换时间从原来的三十多秒缩短到十几秒。注意这里有个实战坑调短OSPF计时器必须两端一致否则邻居起不来。一端Hello间隔10秒另一端改成5秒两边hello报文互相不认error表里就会刷Hello interval mismatch这种错误在display ospf error里一眼就能看到。4. OSPF排障实战error表、debug与抓包4.1 display ospf error排障第一站热词里说的ospf error 表里面查问题老清晰了一点不夸张。OSPF排障最忌讳一上来就抓包正确的顺序是先看邻居状态再看error计数器最后才用debug或抓包细化。error表把OSPF协议层面的异常直接按类别累加起来比如错误类型常见的触发原因Hello interval mismatch两端hello计时器不一致Duplicate router-idRouter-ID冲突Area mismatch两端区域号不一致Authentication mismatch认证类型或密码不一致MTU mismatch接口MTU不一致Bad LSA checksum链路质量差导致LSA损坏我用display ospf error命令能直接看到每类错误累计了多少次。如果邻居一直不UP先别急着重启进程看一眼错误计数往往立刻就知道是哪个参数不匹配。这个命令在真实项目里救过我好几次尤其是排查对接第三方设备时错误表里通常都记录得很清楚。4.2 debug ospf定位问题的第二板斧如果error表里啥也没有或者计数一直在涨但看不出具体原因我才会开debug。调试OSPF最常用的命令是debugging ospf packet和debugging ospf event。debugging ospf packet terminal debugging terminal monitor开debug有个必须注意的点在现网环境要极其谨慎因为debug输出会消耗设备CPU量大时可能影响业务转发。我建议先在测试环境复现确认真要开也最好选业务低峰期并且随手准备undo debugging ospf all来关闭。debug输出里最值得关注的是Hello报文的交互记录。比如对端一直收不到你的Hello可能不是OSPF本身的问题而是接口被二层策略阻断了。有一次我排查一个邻居不UP的问题error表无异常抓包也正常最后debug发现是接口下配了permit的ACL只允许了特定VLAN把OSPF用的组播地址给拦掉了。这种问题靠抓包也能看出来但debug的信息更直接。4.3 抓包最后手段不是第一手段很多朋友学OSPF时喜欢一上来就开抓包看一堆Hello报文、LSU报文然后被复杂的LSA类型搞晕。我自己做实验的经验是抓包更适合验证协议行为不适合快速定位问题。大部分OSPF故障在error表和debug阶段就能解决抓包通常是用来确认一些比较隐蔽的问题比如报文被静默丢弃、DR选举混乱、路由环路等。真的要抓包重点看两类报文Hello报文和LSU报文。Hello包里关注Router-ID、Area ID、Hello/Dead间隔、邻居列表这几个字段LSU包里关注LS Type、通告路由器、序列号。只要确认这两类报文正常交互OSPF的基本行为就不会有大问题。抓包命令用tcpdump示例tcpdump -i eth0 -p -s 0 -v -nn host 10.0.12.2 and proto ospf4.4 这次实验里遇到的两个典型故障第一个是邻居卡在ExStart排查步骤先看error表发现MTU mismatch计数在涨接着两边接口分别display interface果然一端MTU是1500另一端是1492改回一致后邻居立即到Full。整个过程不到两分钟根本没碰抓包。第二个是OSPF路由通了但终端ping不通跨网段地址。error表没有任何异常路由表里目的网段也在但下一跳指向的VRRP虚拟地址始终不通。后来发现是VRRP报文用的组播地址和MSTP的端口角色冲突阻塞端口把VRRP报文也挡了。把MSTP的阻塞端口对应的VLAN实例调整后一切恢复正常。这类问题就是典型的二层与三层联动故障单看OSPF看不出毛病要看整条数据路径。5. 收敛时间调优与常用验证命令5.1 合理设置OSPF、VRRP、MSTP的计时器综合实验的价值在于验证整条链路快不快而不只是路由通不通。我给设备做了三个层面的计时器调优OSPF层面把Hello间隔从10秒改到5秒Dead间隔从40秒改到20秒配合BFD联动可以让收敛时间进入秒级甚至毫秒级。VRRP层面把抢占延迟改为0主备切换立即完成。MSTP层面如果环境允许改用RSTP或调整Forward Delay能把生成树收敛从50秒缩短到几秒。计时器调整原则是变化必须可控两端必须一致。改OSPF计时器前先确认对端设备也同步改改VRRP抢占延迟前确认备份设备状态正常避免频繁抢占造成业务抖动。5.2 常用验证命令速查综合实验做完验证环节我会按以下顺序走一遍display ospf peer brief display ospf lsdb display ospf routing display ospf error display vrrp display stp brief先看OSPF邻居和路由再看VRRP主备状态最后确认MSTP端口角色。如果都正常再延展到业务层面ping测。这套组合命令基本能覆盖实验里绝大部分问题的定位。结尾这个OSPF综合实验我从下午做到天黑踩了两个坑也把三套协议的联动逻辑彻底理清了。最后想分享一个经验综合实验的难点不在单个协议的配置而在出问题后怎么判断故障层。遇到业务不通先看OSPF邻居、路由表、VRRP状态、STP端口角色四样东西逐一排查比对着协议文档背命令有效得多。别急着抓包先看error表再debug最后才上抓包工具——这个顺序能帮你省下大量时间。有机会我再把BFD联动和路由引入的坑单独写一篇那个场景下的学问也不少。
返回列表