ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

路由重发布原理与实验:OSPF与RIP双向互通及避坑指南

路由重发布原理与实验:OSPF与RIP双向互通及避坑指南 做网络这一行最难跟新人解释清楚的协议操作路由重发布绝对排得上号。它还有一个高频英文名Route Redistribution。说白了就是把一种路由协议学到的路由再发布进另一种路由协议让原本互不往来的协议域彼此能看到对方的路由。我这两年每次做网络割接或者帮客户整合两个独立园区网几乎都要跟它打交道。这篇就把我反复练过的重发布实验完整梳理一遍从原理到操作再到踩坑一次性讲透。适合正在备考网络认证的考生、刚入行的网络工程师以及所有被“RIP和OSPF怎么互通”折磨过的人。先给还没做过实验的朋友说一句定心话重发布本身不难难的是它后面藏着一堆路由反馈、度量值转换、防环设计的问题。实验里把这些坑都踩一遍到了现网才能不慌。我下面的配置以Cisco IOS为主但思路对所有厂商都通用华为/H3C换一套命令照样能复刻。1. 重发布到底解决什么问题——先搞懂它的价值1.1 为什么现网里总会存在“多种协议共存”很多人刚接触路由协议时脑子里默认“全网只用一种协议”。现实里根本不是这样。早期的小型网络常用RIP因为配置简单但它的跳数上限是15跳收敛也慢网络一大人就受不了。后来OSPF出现适合中型和大型网络收敛快、开销小于是新一代网络基本都跑OSPF。还有一部分场景用的是EIGRP、IS-IS甚至BGP。技术迭代不是一天完成的网络演进也不是推倒重来。于是你经常能看到这样的现网公司的核心区域跑OSPF某个老旧分支还在跑RIP或者A公司被B公司收购两套网络的协议体系完全不一样又或者新老设备替换期核心路由器已经切到OSPF接入层还在用静态路由。只要两种协议在一个网络里共存就一定要有一个“中间的翻译”让两边互相学习路由这就是重发布诞生的根本原因。1.2 重发布不是“复制路由”而是“翻译路由”这里必须先纠正一个常见误解重发布不是简简单单把路由表复制到另一个协议里。不同路由协议对“一条路由”的描述方式完全不同。OSPF用cost作为度量值cost越小越优RIP用跳数hop count最多15跳16跳就算不可达EIGRP用的是带宽、延迟、可靠性、负载、MTU组成的复合度量BGP则是一堆路径属性。协议之间没法直接“看懂”对方的度量。所以重发布的本质是翻译边界路由器把从协议A学到的路由按照协议B的规则重新计算一个初始度量值再塞进协议B的路由体系里。这个初始度量值在思科体系里有个专门术语叫做种子度量seed metric是重发布里最核心、也最容易踩坑的点。翻译过程中会产生信息损耗翻译出来的“新路由”可能不是最优路径甚至可能被原协议域再次学回去形成环路。这些坑后面会一个一个讲清楚。2. 动手实验前的设计——拓扑、选型与理论储备2.1 实验环境与设备选型我平时做这类路由实验首选EVE-NG比GNS3更稳定支持多台设备并发启动资源占用控制得也比较好。如果你机器配置一般用GNS3也完全够。镜像方面用Cisco IOS就行老一点的比如c3725或者新一点的vIOS都可以命令差异不大。当然用真机也可以但三台真机的成本显然不如模拟器来得痛快。设备选型上我建议至少准备三台路由器因为重发布实验至少要有一个“中间边界设备”承担两种协议的转换两边各有一台设备用来验证路由是否真的学到了。如果只有两台路由器也能勉强做单向重发布但双向重发布和路由反馈的验证就受限了。三台是最舒服的起点。2.2 为什么选OSPF和RIP这对组合有人会问现在做实验为什么不直接练OSPF重发布EIGRP或者IS-IS原因很简单OSPF和RIP的度量机制差异足够大重发布后的“翻译痕迹”一眼就能看出来。OSPF的cost是累加的路径开销RIP则是简单粗暴的跳数你把OSPF路由重发布进RIP后跳数怎么算、16跳不可达怎么体现都比两个相似协议之间的重发布直观得多。RIP的种子度量问题也因此成了实验里最经典的教学点。另外OSPF外部路由类型E1和E2平时单跑OSPF根本用不上只有做重发布时才会真正理解它们的区别。学完这一对协议组合你再去碰OSPF和EIGRP、OSPF和静态路由之间的重发布基本就是换汤不换药。2.3 三个必须提前搞懂的核心机制第一个是管理距离Administrative DistanceAD。同一台路由器可能同时从OSPF和RIP学到同一条路由选谁看AD。Cisco体系里直连路由AD是0静态路由是1EIGRP内部路由是90OSPF是110RIP是120。AD越小越优先所以默认情况下OSPF路由比RIP路由更可信。这个机制直接关系到后续路由回注问题就算RIP把OSPF的路由回传给边界路由器边界路由器一看自己原本就有AD更小的OSPF路由通常不会买账。第二个是种子度量。重发布进入新协议域的路由需要一个初始度量值。OSPF重发布进来的默认种子度量是20类型E2RIP就比较麻烦如果你不手动指定很多版本会默认取一个不可达值接收端直接学不到。EIGRP更狠种子度量是五个参数组成的复合值不配好甚至直接不生效。实验里必须在命令里显式指定这一点我现在已经条件反射了。第三个是路由反馈。双向重发布时协议A域里的路由被边界路由器重发布进协议B很可能又被另一台边界路由器当作协议B的路由重发布回协议A形成环路风险。解决思路通常是在重发布时给路由打上标记route tag再用路由策略过滤掉不该回来的路由。这个单边界实验里暂时不明显但双边界拓扑里会让你头疼所以理论储备阶段必须知道。3. 完整实操OSPF与RIP双向重发布从零到通3.1 拓扑规划与IP编址先摆拓扑三台路由器一条线串起来R1 --- R2 --- R3。R1是OSPF域的设备R3是RIP域的设备R2横跨两个协议域承担重发布职责。设备和接口规划如下表设备接口/环回口IP地址参与协议R1G0/012.1.1.1/24OSPF Area 0R1Loopback01.1.1.1/32OSPF Area 0R2G0/012.1.1.2/24OSPF Area 0R2G0/123.1.1.2/24RIPR3G0/023.1.1.3/24RIPR3Loopback03.3.3.3/32RIP之所以把环回口单独拿出来做一条/32路由是为了后面验证效果更直观R1能学到3.3.3.3R3能学到1.1.1.1说明重发布生效了。如果只用网段路由验证有时候路由学是学到了但具体是哪条路由没看清容易误判。3.2 基础协议配置让OSPF和RIP先各自跑起来先配R1让它只跑OSPFinterface GigabitEthernet0/0 ip address 12.1.1.1 255.255.255.0 no shutdown ! interface Loopback0 ip address 1.1.1.1 255.255.255.255 ! router ospf 1 router-id 1.1.1.1 network 1.1.1.1 0.0.0.0 area 0 network 12.1.1.0 0.0.0.255 area 0再配R3让它只跑RIPinterface GigabitEthernet0/0 ip address 23.1.1.3 255.255.255.0 no shutdown ! interface Loopback0 ip address 3.3.3.3 255.255.255.255 ! router rip version 2 no auto-summary network 3.0.0.0 network 23.0.0.0重点在边界设备R2interface GigabitEthernet0/0 ip address 12.1.1.2 255.255.255.0 no shutdown ! interface GigabitEthernet0/1 ip address 23.1.1.2 255.255.255.0 no shutdown ! router ospf 1 router-id 2.2.2.2 network 12.1.1.0 0.0.0.255 area 0 ! router rip version 2 no auto-summary network 23.0.0.0这里有几个细节要特别说明。R2的OSPF进程只宣告了12.1.1.0网段千万不要顺手把23.1.1.0也宣告进OSPF同样RIP进程只宣告23.0.0.0不要宣告12网段。这样做的目的是让两个协议域在R2上保持干净隔离重发布之后才看得清楚效果。另外RIPv2的network命令填写的是主类网络号23.1.1.0属于B类主网23.0.0.0所以写network 23.0.0.0。no auto-summary务必加上否则R3的3.3.3.3/32可能被自动汇总成3.0.0.0/8验证时又是一头雾水。配置完先不要做任何重发布在R2上看一下路由表此时应该同时存在OSPF和RIP两种来源的路由1.1.1.1/32来自OSPF3.3.3.3/32来自RIP。但R1看不到3.3.3.3R3也看不到1.1.1.1因为两边协议没有交集。这就是重发布之前的“隔离状态”。3.3 单向重发布把RIP域的路由注入OSPF现在在R2上把RIP路由重发布进OSPFrouter ospf 1 redistribute rip subnets注意命令末尾的subnets这是第一个大坑。如果不带subnetsOSPF只会重发布主类网络路由像3.3.3.3/32这种有子网掩码的明细路由直接被忽略R1死活学不到。很多人做完重发布发现OSPF域没反应八成就是漏了这个关键词。配置完成后到R1上验证show ip route ospf你会看到一条3.3.3.3/32的路由协议类型是O E2下一跳指向12.1.1.2度量值是20。这个E2就是OSPF外部路由类型2表示这条路由是从外部协议重发布进来的默认种子度量20而且不再累加OSPF域内部到达边界路由器的cost。R1到达边界路由器的路径开销不会体现在这个20上。如果你希望外部路由的cost包含到达边界路由器本身的路径开销可以把类型改成E1router ospf 1 redistribute rip subnets metric-type 1改成E1之后R1上看到的度量值就不再是固定的20而是20加上R1到R2的内部cost。这个区别在单边界实验中还不明显但到多边界环境下E2和E1会直接影响路径选择后面排错章节再详细说。3.4 反向重发布把OSPF域的路由注入RIP接下来在R2上把OSPF路由重发布进RIProuter rip redistribute ospf 1 metric 3这里必须手动指定metric 3原因是RIP对重发布进来的路由如果没有显式指定种子度量也没有在router rip下配置default-metric很多IOS版本会默认给一个不可达的跳数R3收到后直接拒绝放进路由表。这个行为我当年第一次做实验就撞上过明明配置了redistributeR3上死活没有1.1.1.1查了一圈才知道是度量值的问题。指定metric 3的含义是这条从OSPF重发布过来的路由进入RIP域时的初始跳数是3。为什么选3因为从R2到R1要经过一跳物理链路再从R2的角度看OSPF域的环回口用3作为初始跳数留出了余量又能保证不超过15跳。实际网络里你可以根据具体拓扑调整这个数值。配置完成后到R3上验证show ip route rip此时能看到1.1.1.1/32协议类型RIP度量值3下一跳指向23.1.1.2。至此单向重发布的两个方向都已经打通了。3.5 双向重发布后的完整验证两条redistribute命令都配上之后全网路由应该完全互通。做一个完整的验证流程# 在R1上 ping 3.3.3.3 source 1.1.1.1 # 在R3上 ping 1.1.1.1 source 3.3.3.3 # 查看R2路由表确认两种来源的路由都存在 show ip route # 查看R1的OSPF外部路由明细 show ip ospf database external # 查看双方的实际转发路径 traceroute 3.3.3.3traceroute的结果应该是R1 - 12.1.1.2 - 23.1.1.3 - 3.3.3.3路径完全走边界路由器R2没有绕路说明双向重发布正常工作。做到这一步实验的主流程就算完成了。4. 重发布实验里的高频故障——排查实录与避坑清单4.1 OSPF侧学不到RIP路由十有八九忘了subnets我在不同模拟器和真机上都复现过这个现象redistribute rip命令敲下去R1的OSPF路由表却没有出现RIP域的路由。查配置redistribute在查R2路由表RIP路由也在查R1的OSPF数据库外部LSA却压根没有。问题几乎都出在subnets上。OSPF的redistribute默认不对子网路由做重发布这在老版本IOS里是出了名的坑。RIP域里你宣告的全都是像3.3.3.3/32、23.1.1.0/24这种带前缀长度的明细路由如果不加subnets它们全被过滤掉只有主类网络比如3.0.0.0/8才会被考虑。而我实验里用的全是子网路由自然一条都进不来。这个坑的排查思路也很简单在R2上敲show ip route rip确认RIP路由存在再敲show run | section router ospf看redistribute命令有没有subnets关键词。没有就补上立刻生效。需要提醒的是某些平台版本对subnets的处理略有差异但养成任何时候都带subnets的习惯可以规避九成以上的问题。4.2 RIP侧路由不可达seed metric没给对有一回我在配置redistribute ospf 1到RIP时偷了个懒只写redistribute ospf 1没有加metric。结果R3的路由表里出现了1.1.1.1但状态是“possibly down”或者干脆没有出现在路由表里ping更是不通。用show ip route一看失败的根源就在度量值RIP跳数变成了16而16在RIP的世界里就是不可达。这个故障非常典型几乎每个新手都会遇到。RIP对重发布进来的路由没有像OSPF那样默认给一个可用种子度量很多IOS版本下你不显式指定它就给你一个不可达的值。解决办法就两招一是在redistribute命令后面直接跟metric二是在router rip下配default-metric。我的习惯是第一种因为更直观比如router rip default-metric 3或者router rip redistribute ospf 1 metric 3两者效果差不多但显式metric的好处是重发布多条来源不同协议时你可以分别控制种子度量灵活度更高。度量值本身也会影响路径选择双边界场景下很多人就是靠设置不同的seed metric来人为控制选路的。4.3 次优路径与路由回注双向重发布的连环套单边界双向重发布看起来岁月静好但如果把拓扑扩展成双边界——也就是有两台边界路由器同时连接OSPF域和RIP域问题立刻接踵而来。举个例子OSPF域里的1.1.1.1会被R2重发布进RIPR4也会把1.1.1.1重发布进RIPRIP域内的路由器可能同时看到两条去1.1.1.1的RIP路由它选哪条取决于跳数大小但跳数小并不一定代表真实路径最优。更要命的是路由回注。假设RIP域里的3.3.3.3先被R2重发布进OSPFOSPF域内的R4通过外部LSA学到了3.3.3.3随后R4又把这个OSPF外部路由重发布回RIP域于是RIP域里的设备会收到一条“去往3.3.3.3但绕了一大圈回来”的RIP路由。如果RIP设备的AD和选路逻辑再配合一下就可能出现环路或者次优路径。解决这个问题的手段我在实际项目中用最多的是路由标记route tag加路由策略。基本思路是R2在重发布时给所有路由打上tag 100R4打上tag 200然后在重发布回另一个域之前用route-map检查路由的tag如果发现是自己域里的路由或者已经有别的边界打过的tag就拒绝再发布。这样可以从源头掐断回注循环。实验版本里敲起来类似这样route-map HOLD-DOWN deny 10 match tag 100 ! route-map HOLD-DOWN permit 20 ! router ospf 1 redistribute rip subnets route-map HOLD-DOWN这套操作比单纯堆两条redistribute命令复杂不少但却是现网重发布真正值钱的部分。实验里建议至少把route-map的思路走一遍哪怕拓扑简单也能逼自己想清楚“哪些路由该重发布、哪些路由不该回来”。4.4 常见问题速查表把上面这些问题和另外几个高频故障整理成一张表排查时对号入座症状可能原因排查命令解决办法OSPF域学不到RIP域明细路由redistribute rip缺少subnetsshow run | section router ospf加上subnets关键词RIP域路由不可达seed metric未指定或为16show ip route rip显式指定metric或配置default-metric双向重发布出现路由回注多边界场景没有做路由过滤show ip route、show ip protocolroute-map tag过滤学到外部路由但路径不是最优OSPF E2/E1类型选择不当show ip route、traceroute改用metric-type 1RIP自动汇总导致路由变成主网路由未关闭auto-summaryshow ip protocols配置no auto-summary重发布配置正确但始终不起效OSPF进程ID或协议进程不对应show ip protocols核对进程ID和网络宣告范围排查重发布问题时我的第一站永远是show ip protocols。这个命令会把当前路由器上所有路由协议进程、重发布配置、管理距离、默认种子度量列得清清楚楚比在show run里一行一行翻配置要快得多。4.5 让问题现形的排查工具除了show ip protocols另外几个命令在重发布排错里也高频出现。show ip route是最直观的验证手段学没学到、走哪个下一跳、度量值是多少一眼可见。debug ip rip可以看到RIP周期性更新报文的收发细节R3有没有向R2发送3.3.3.3、R2有没有把1.1.1.1通告回R3都清楚记录下来。debug ip ospf events在调试OSPF邻居关系和外部路由学习时很管用。traceroute则用来确认流量实际走的路径是否符合预期。需要提醒的是debug命令在现网设备上不要轻易开尤其是生产环境高CPU占用可能导致设备转发性能下降甚至中断。我在实验环境里随便开在客户设备上只敢在维护窗口内短时间开着抓关键信息抓完立刻关。5. 做完实验后的进阶建议与个人体会5.1 从实验到现网哪些场景真正需要重发布实验做完很多人会问现实网络里到底哪里需要这个东西我列几个自己实际遇到过的场景。最常见的场景是企业并购后两套网络合并一边是OSPF一边是静态路由或老RIP中间用重发布打通。第二个常见场景是新老设备替换期新的核心区域跑OSPF老接入设备暂时还在跑RIP过渡期必须让两边路由互通等老设备全部退网再撤掉重发布。第三种是静态路由和动态路由互通比如通过redistribute static把特定业务路由注入动态协议这也是非常高频的需求。还有一种就是多区域BGP场景下的路由引入思路类似但复杂度高很多。这些场景有一个共同点重发布都是阶段性手段不是永久方案。能收敛在同一套协议体系里的最终还是要收敛。所以做重发布实验时不要只满足于“通了”还想清楚什么时候该撤、怎么撤、撤了之后会不会影响业务这才是现网工程师的价值。5.2 给新手工程师的几条实在建议第一做任何重发布之前先在纸上画出边界。明确谁是边界设备、哪些路由要进、哪些路由绝对不能进再动手敲命令。最怕的就是两手一摊直接在边界路由器上把双向redistribute一配剩下全交给运气。第二宁可先做单向验证再开双向。我习惯先把OSPF重发布进RIP验证RIP域正常了再反过来做另一个方向。这样一旦出问题至少能缩小排查范围。双向一起配万一两边都不通排错时满脑子都是问号。第三seed metric和管理距离这两个数一定要烂熟于心。它们是重发布能否生效的第一道关卡也是路由回注、次优路径等问题的源头。第四条件允许就把route-map和tag这套过滤机制用起来。实验里的单边界拓扑可能看不出它的必要性但这是为双边界和多边界场景打底练熟了以后面对复杂变更会从容很多。我自己练这个实验练到第五遍才算真正把重发布吃透前几遍全在忘记subnets和metric之间打转。后来在一个双边界替换割接里靠着tag过滤避免了环路的出现才真正明白实验里埋的那些坑就是为现网排除掉的雷。如果你也在练重发布建议亲手把双向配置完整敲一遍再把边界的route-map过滤做出来做完之后再回头去看那些协议度量值和管理距离表会有一种豁然开朗的感觉。
返回列表