资讯动态

路由重发布实战:OSPF与RIP双向重发布的坑与解法

发布时间:2026/10/17 3:31:58 来源:尧图企业网站定制
1. 为什么网络工程师迟早要趟重发布这摊浑水先讲个我在某中型企业网项目里遇到的真实场景。客户那边的网络分两块核心区域跑的是OSPF汇聚到接入这一段用的却是RIP。为什么这么搞因为历史遗留——早期网络规模小网管用RIP觉得简单、够用后来核心区扩容、上双链路被迫引入了OSPF。于是两套路由协议在同一张网里共存A区域的路由B区域看不见业务互通全靠出口那台双协议设备手工写静态。后来业务一多静态路由越堆越乱彻底撑不住了。解决方案只有一个路由重发布Route Redistribution。就是把一种路由协议学到的路由通过边界设备翻译成另一种协议的样式再注入进去让两边设备主动学到对方的路由扔掉手工静态。很多刚入行的朋友对重发布实验的理解停留在敲两条命令router ospf 1 redistribute rip subnets敲完发现路由表确实动了于是以为完事。但实际生产环境里重发布是个大坑次优路径、路由回灌、环路、度量值错乱一个比一个阴。我在模拟器里把这个实验完整做了好几轮也踩了不少雷。这篇把整个过程、现象、根因和解决办法都摊开讲适合那些正在学路由交换、准备考证或者刚接手双协议混合网络的运维朋友。核心价值就一句话搞懂重发布背后路由是怎么被污染、怎么被防环、怎么被选路的完整链路你才能真正驾驭这张网。2. 重发布到底是翻译什么两个协议之间的度量值鸿沟先说清楚基础概念不然后面的实验现象你根本看不懂。2.1 重发布的本质是两种语言的强制转换每种路由协议都有自己的一套度量标准。OSPF用的是Cost开销默认跟接口带宽挂钩10M接口Cost是101G接口Cost是1越小越优。RIP用的是跳数Hop Count每经过一台路由器加1最大有效跳数1516跳视为不可达。当你在这两种协议之间做重发布最棘手的问题来了一种协议的度量值没法直接丢进另一种协议里比较。所以路由协议设计了一个折中方案——种子度量值Seed Metric。外部路由被重发布进来时默认会带上一个户口本上的初始值之后在协议内部传播时再按各自规则累加。我打个比方这就像两个国家的人互相移民。OSPF国的人移民到RIP国RIP海关看他体重Cost没用得重新登记一个身高跳数。如果你不去指定这个初始数字海关工作人员心情不好就给你填个默认值而这个默认值经常导致路由不可达。2.2 默认种子度量值的坑有多大各协议对重发布进去的外部路由默认种子度量值完全不一样这是实验里最容易踩的第一个雷协议方向默认种子度量值后果重发布进RIP无穷大实际表现为不可达必须手动指定metric否则RIP域学不到路由重发布进OSPF20RIP/静态/直连1BGP特殊处理还算能用但20这个值往往选不出最优路径重发布进IS-IS0需要手动指定metric否则可能出现奇怪选路重发布进EIGRP无穷大必须手动指定否则路由不生效我在实验里第一次做RIP方向的重发布时没写metric参数结果RIP域内的路由器死活学不到OSPF那边的路由。查了半天才发现是种子度量值作祟。所以做重发布实验的第一个血泪教训涉及RIP或EIGRP方向redistribute命令里必须带上metric参数否则你敲了等于没敲。OSPF方向虽然不强制但20的默认值会在双点重发布时引出一连串选路问题这个后面细说。3. 实验组网与基础配置模拟器里复现最经典的OSPFRIP双协议环境我自己做实验用的是GNS3模拟器跑了三台路由器R1和R2组成OSPF骨干区域R2和R3之间跑RIPR2作为ASBR自治系统边界路由器同时身兼两个协议。拓扑细节如下3.1 地址规划与设备角色设备接口地址所属协议角色R1Loopback01.1.1.1/32OSPFOSPF域内源R1G0/010.0.12.1/24OSPF连接R2R2G0/010.0.12.2/24OSPFASBRR2G0/110.0.23.2/24RIPASBRR3G0/110.0.23.3/24RIPRIP域设备R3Loopback03.3.3.3/32RIPRIP域内源这个拓扑虽然小但足够暴露重发布的绝大部分问题R2是唯一的双协议边界R1的环回口要通过OSPF重发布进RIP最终出现在R3的路由表里R3的环回口则要通过RIP重发布进OSPF最终出现在R1的路由表里。3.2 基础协议配置重发布之前的干净状态先把两边协议跑起来确认域内路由完全正常再做重发布。这一步很关键——实验里最容易犯的错误就是一上来就敲redistribute结果最后出了问题根本分不清是基础配置的锅还是重发布的锅。R1的配置interface Loopback0 ip address 1.1.1.1 255.255.255.255 ! interface GigabitEthernet0/0 ip address 10.0.12.1 255.255.255.255 ! router ospf 1 router-id 1.1.1.1 network 10.0.12.0 0.0.0.255 area 0 network 1.1.1.1 0.0.0.0 area 0R2的配置interface GigabitEthernet0/0 ip address 10.0.12.2 255.255.255.255 ! interface GigabitEthernet0/1 ip address 10.0.23.2 255.255.255.255 ! router ospf 1 router-id 2.2.2.2 network 10.0.12.0 0.0.0.255 area 0 ! router rip version 2 network 10.0.0.0R3的配置interface Loopback0 ip address 3.3.3.3 255.255.255.255 ! interface GigabitEthernet0/1 ip address 10.0.23.3 255.255.255.255 ! router rip version 2 network 10.0.0.0 network 3.0.0.0敲完之后做基础验证R1的OSPF邻居应该是Full状态R2和R3的RIP邻居能互相学到路由。此时R1的路由表里只有OSPF域内路由没有R3的3.3.3.3R3的路由表里同样没有R1的1.1.1.1。这正常因为两边还没打通。3.3 双向重发布的初始配置含种子度量值修正接下来在R2上做双向重发布。这里我把第一个实验的两种参数都试了一遍方便大家对比R2上配置OSPF方向重发布把RIP路由注入OSPFrouter ospf 1 redistribute rip subnets metric 30R2上配置RIP方向重发布把OSPF路由注入RIProuter rip version 2 redistribute ospf 1 metric 2注意两个细节subnets参数在OSPF方向是必须的否则OSPF只会重发布主类网络路由子网路由全部被丢RIP方向的metric 2给外部路由赋了一个初始跳数避免默认无穷大的坑。4. 第一轮实测次优路径问题如期而至4.1 敲完命令后的路由表现象配置做完我在R1上查看路由表3.3.3.3确实出现了但路径选择让所有人大吃一惊R1# show ip route 3.3.3.3 Routing entry for 3.3.3.3/32 Known via ospf 1, distance 110, metric 30 Tag 0 Last update from 10.0.12.2 on GigabitEthernet0/0 Routing Descriptor Blocks: * 10.0.12.2, from 2.2.2.2, via GigabitEthernet0/0 Route metric is 30, traffic share count is 1从R1的角度看3.3.3.3要走10.0.12.2R2这没有问题毕竟R2是唯一的边界。但如果我再加一台R4做成双点重发布情况就会乱套。别急我把R4加进了拓扑扩展实验马上能看到经典问题。扩展后拓扑R4新增一台设备同时跑OSPF和RIP与R2构成双点双向重发布。R1到R3存在两条物理路径R1-R2-R3两条协议边界均重发布和R1-R4-R3。重新查看R1的路由表发现去往3.3.3.3出现了两条等价或不等价的OSPF外部路由分别从R2和R4学来。重点在于从实际物理路径来看R1直达R4再直达R3可能明明更近但R1却选了R2那条路。在模拟器里我用traceroute验证数据流果然绕了远路R1# traceroute 3.3.3.3 Type escape sequence to abort. Tracing the route to 3.3.3.3 1 10.0.12.2 12 msec 8 msec 10 msec 2 10.0.23.3 18 msec 16 msec 14 msec数据包明明可以从R1直接到R4再到R3更短偏偏走了R1-R2-R3。这就是**次优路径Suboptimal Routing**问题。4.2 为什么OSPF会选一条更远的路径外部路由类型的根因问题出在OSPF对外部路由的泛洪与选路机制上。我从RIP重发布进OSPF的路由默认是Type 2外部路由E2。E2路由的Cost计算方式是只累加重发布时设定的种子度量值我们设的30不累加ASBR到本设备的内部链路Cost。这意味着在R1看来从R2学到的3.3.3.3的Cost是30从R4学到的Cost也是30两台ASBR配置完全相同。OSPF在两条Cost相同的E2路由之间会怎么做默认情况下它会在路由表里只保留一条选择标准是比较接收到的路由的Advertised Router ID之类结果往往不是你期望的那条。而如果R1-R4之间的链路是千兆Cost 1R1-R2是百兆Cost 10物理上明明R4这条路更快但因为E2不累加内部CostR1完全看不到这个差异。你让它怎么选优它根本无从比较。注意如果改成Type 1外部路由E1Cost就会把重发布种子度量值和内部Cost都加起来选路就会更符合物理实情。但默认配置下E2的不累加恰恰就是次优路径的温床。4.3 度量值权重不匹配引发的假最优还有一种情况更隐蔽。我在R2上设置OSPF重发布RIP的metric是30在R4上设置的是100那R1去往3.3.3.3就会很干脆地选R2即使R4那条路物理上近得多。看起来R1理性地选了metric更小的外部路由但你心里清楚这个metric是我人为指定的跟真实链路质量没有半毛钱关系。你设置的种子度量值成了选路的唯一依据而它可能完全不反映物理拓扑的实际优劣。这就是重发布选路的本质问题用一种协议的价值观强行给另一种协议的路由赋分分数定得不好选路就歪。5. 第二轮实测路由回灌与环路风险如果说次优路径只是绕路的尴尬那路由回灌就是可能造成全网路由震荡甚至环路的严重问题。5.1 环回路由是怎么被灌回去的还是基于刚才的拓扑。R1的环回口1.1.1.1/32原本是OSPF域内路由R2和R4同时重发布OSPF进RIP于是1.1.1.1/32被注入RIP域。R3从R2和R4两个方向学到1.1.1.1/32这本身没问题。但R3学到的这条RIP路由又会继续传给R2和R4——R2和R4本来就是OSPF的ASBR它们把OSPF路由重发布进RIP现在它们又从RIP域收到了1.1.1.1/32这条路由在它们的RIP进程里被当成了来自RIP域的外部路由。关键一步来了R2和R4配置了把RIP重发布进OSPF——于是这条被加工过的1.1.1.1/32又被重新注入了OSPF域问题严重在哪R1作为1.1.1.1/32的始发者本来拥有直连路由AD 0OSPF重发布进来的外部路由AD 110优先级远低于直连所以不会覆盖R1的直连路由。但OSPF域内其他设备就可能收到两条1.1.1.1/32一条是OSPF域内路由来自R1本身另一条是OSPF外部路由被RIP域回灌回来的残留信息。如果外部路由的度量值更低某些设备就会错误地认为去往1.1.1.1要走ASBR而不是直连的R1。在模拟器里我在OSPF区域内一台非边界设备上看到了这样的路由表R5# show ip route 1.1.1.1 Routing entry for 1.1.1.1/32 Known via ospf 1, distance 110, metric 31 Last update from x.x.x.x (ASBR方向的邻居地址)这条路由的来源路径已经被污染了——源地址还是1.1.1.1但下一跳指向了ASBR而不是R1而且AD值判定它不如域内直连R1的那条。虽然因为R1的直连路由AD值更低暂时不会造成真正的黑洞但一旦R1宕机或者链路抖动这条幽灵路由就会立刻变成转发黑洞把发往1.1.1.1的流量引向一个根本不通的方向。5.2 防环机制在两个协议之间为什么失效很多学过RIP的人知道RIP有水平分割和毒性反转来防环。水平分割的核心原则是从某个接口学到的路由不再从同一个接口通告回去。在单一RIP域内这个机制确实能在很大程度上防止环路。但重发布硬生生在中间架了一座桥路由从RIP域学来后被翻译成OSPF路由OSPF从另一个方向通告回去又可以被重发布成RIP路由——这时的路由已经改头换面防环机制认不出它了。OSPF这边本身没有像RIP那么严格的跳数防环它靠SPF算法保证区域内无环但对跨协议回灌的路由缺乏天然的血缘识别。当你的网络里存在多点双向重发布路由回灌几乎是必然发生的事只是时间早晚问题。5.3 回灌隐患的排查证据路由标记是关键我在实验里抓到了回灌的实锤。看一下R2从RIP域里收到的路由注意它的Tag字段R2# show ip rip database 3.3.3.3/32 auto-summary 3.3.3.3/32 via 10.0.23.3 metric 1 1.1.1.1/32 auto-summary 1.1.1.1/32 via 10.0.23.3 metric 31.1.1.1/32在RIP数据库里出现说明它已经被RIP域学习了。这条路由在R2上被重发布进OSPF时会成为一条OSPF外部路由。如果R2和R4两条ASBR都这么干OSPF域里就会有一堆自产自销的环回路由。要彻底排查回灌**路由标记Route Tag**是救命稻草。REDISTRIBUTE命令里可以携带tag参数router ospf 1 redistribute rip subnets metric 30 tag 100 router rip redistribute ospf 1 metric 2 tag 200重发布进来的每条路由都打上专属标签。在OSPF域内看到tag 100的路由就知道是RIP重发布进来的在RIP域内看到tag 200就知道是OSPF重发布进来的。这样回灌路由一出现你就能靠tag追溯它的身世而不是在茫茫路由表里大海捞针。6. 让选路回到正轨三类修正手段的实测对比次优路径和路由回灌都确认了接下来就是动手治。我在实验里挨个试了三种主流方案各有适用场景。6.1 方案一修改外部路由类型把E2改成E1既然E2不累加内部Cost导致选路失真那就把重发布进OSPF的外部路由改成E1router ospf 1 redistribute rip subnets metric 30 metric-type 1配置完成后R1的路由表里3.3.3.3的Cost变成种子度量值ASBR到R1的链路Cost。如果R1-R2是百兆Cost 10R1-R4是千兆Cost 1那从R4学到的3.3.3.3的Cost就是30131从R2学到的就是301040OSPF会明确选择R4路径物理选路立刻恢复正常。这个方案的优点是一行命令搞定干净利落适合拓扑相对清晰、ASBR数量少的场景。缺点是它只解决OSPF侧如何比较外部路由的问题如果RIP域内部因为重发布metric设置不当导致次优这个方案无能为力。6.2 方案二管理员距离干预给特殊路由降权有时候你不光要调度量还要调整路由的政治地位。比如某个RIP域里的路由是备份链路你希望OSPF域内的设备无论如何优先走OSPF域内路径只有域内路径全断了才走重发布进来的备份路由。这时可以单独针对重发布路由调整AD值router ospf 1 distance 150 0.0.0.0 255.255.255.255 5这行命令表示从任何邻居收到的、匹配ACL 5的OSPF路由管理距离从默认的110抬到150低于直连、静态也低于OSPF内部路由110但高于RIP内部路由120。注意具体数值要根据你的选路策略来定没有通吃方案。用ACL精确匹配你关心的备份路由把AD抬高就能让正常的主路径永远优先备份路由只在主路径消失后浮出水面。这个思路在生产网络里非常常用比改度量值更彻底因为它改变的是路由的优先级等级而不是分数。6.3 方案三分发列表做路由过滤直接从源头掐断回灌回灌问题的根治手段是在重发布的方向上做路由过滤。比如我不希望OSPF把R1的1.1.1.1/32重发布进RIP因为这条路由重发布进RIP后很容易经过RIP域转一圈又回来。在R2和R4的RIP进程里配置分发列表access-list 10 deny 1.1.1.1 access-list 10 permit any ! router rip version 2 distribute-list 10 in GigabitEthernet0/1这样RIP从R3方向收到1.1.1.1/32时直接拒收从源头上断了回灌。但要注意方向distribute-list in控制的是收到方向distribute-list out控制的是通告方向用错位置要么过滤不掉要么误伤正常路由。我在实验中把三条方案各测了一轮。最理想的组合是外部路由类型改成E1让OSPF域内选路符合物理实情重发布进RIP时给OSPF路由一个合理的初始跳数匹配实际链路状况同时用分发列表过滤掉回灌路由只放行真正需要的目标网段。三者配合才能让一张双协议网络既选路正确又不产生环路。7. 重发布实验的验证方法与维护心得实验做完了但做完不等于做对你得有手段证明网络在长期运行中不出幺蛾子。7.1 从路由表、数据库和流量三个层面交叉验证每次调整完重发布配置不要只看一台设备的路由表。我就见过有人改完R2在R1上看到路由OK就宣布收工结果R3上路由都丢了。我习惯三层验证法路由表层核心设备上show ip route逐一核对源路由网段。重点看管理距离、metric、下一跳是否和预期一致特别注意有没有出现源地址对但下一跳明显不对的幽灵路由。协议数据库层show ip ospf database external和show ip rip database交叉确认。外部路由的ASBR、Tag等信息在这里看得一清二楚。两条ASBR重发布时要确认它们通告的外部路由内容和Tag一致避免一边打tag一边不打导致OSPF内部选路混乱。数据平面层traceroute实际打流验证。我现在看一张双协议网络一定会从R1打R3的环回口再从R3打R1的环回口两条方向都通了才算真的通。很多重发布配置只通了一个方向另一个方向被过滤规则误伤单看路由表不一定能发现。7.2、验证配置效果时必查的五个命令模拟器里多做几轮之后我把每次重发布实验的验证命令固定为这组show ip route | include 3.3.3.3|1.1.1.1 show ip ospf database external show ip rip database show ip protocols debug ip routingshow ip protocols经常被忽略但它能直接告诉你当前配置了哪些重发布、方向、metric、tag和过滤规则是排障第一站。debug ip routing可以看到路由表变化的实时过程——比如回灌发生时你能抓到路由是怎么被加进表的但要记得用完就关别在现网开着跑。7.3 重发布上线前的自查清单踩完这些坑之后我给自己定了一张清单每次做重发布实验或者给现网配置重发布之前都过一遍检查项如果不做会怎样RIP/EIGRP方向必须指定metric路由不可达配置等于白做OSPF方向建议明确指定metric默认20导致次优选路OSPF重发布必须加subnets参数子网路由丢失只通告主类网络多点重发布必须考虑防回灌路由环路、路由震荡严重时全网瘫痪双ASBR的metric、tag配置保持一致OSPF内部选路混乱来回震荡改配置前备份当前运行配置出问题无法快速回滚这张表看着简单但每一条背后都是一个真实的故障案例。我在实验里至少因为忘记加subnets参数在OSPF侧丢了三次子网路由排查时对着路由表翻来覆去浪费了大把时间。7.4 我对重发布实验的最终体会做这个实验的过程中我最深的感受是重发布本身不难难的是它把不同协议的信任边界和度量体系搅在一起时产生的连锁反应。每一条命令背后都是对协议设计哲学的一次碰撞。你在OSPF域内做选路优化要考虑重发布进RIP的路由会不会被RIP域的错误跳数拉偏你在RIP域里调分发列表要警惕OSPF域内会不会因为过滤产生路由黑洞。两个域的配置就像一对相互拉扯的秤砣一端动了另一端必须跟着调整。最后再分享一个实验技巧做重发布实验时尽量把拓扑做得不对称一些——两台ASBR连接的接口带宽不同、RIP域的跳数不同、OSPF区域的Cost不同这样配置下去各种次优路径、选路偏差、回灌现象才会充分暴露。如果你只搭一个完全对称的理想拓扑你只会以为自己配置完美无缺等到上了真实网络才措手不及。我在模拟器里吃过这个亏所以特别强调别只搭好看的城市路网要把烂路、窄桥、收费站全加上重发布的真功夫就是在这些地方练出来的。

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

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

免费获取报价 →
↑