
1. 路由重分发到底在解决什么问题第一次接触OSPF路由重分发是在一个企业网改造项目里。当时网络里跑着三种路由协议核心层是OSPF几个老旧的汇聚节点还在用RIP出口方向则是一条静态默认路由。三套逻辑各管各的路由表看着挺热闹实际上A区能通的地方B区完全摸不着头脑。那会儿我就意识到路由重分发不是一道“选修题”而是多协议共存环境下的“必修课”。说白了OSPF路由重分发就是让不同路由协议之间能够互相“翻译”路由信息。OSPF学到的路由通过重分发机制注入到RIP里RIP学到的路由同样可以灌进OSPF。静态路由、直连路由也能通过这种方式进入OSPF域。没有重分发各协议就是一座座孤岛彼此之间没有桥梁。这个技术点适合谁网络运维工程师、系统集成项目的实施人员、准备网络方向认证的学员以及任何需要处理多厂商、多协议混合组网场景的技术人员。你不需要是OSPF专家但至少要能看懂路由表、理解区域概念、知道什么是自治系统边界。如果连show ip route的输出都看不明白建议先把OSPF单协议的基础打牢再来看重分发否则很容易被各种LSA类型和度量值搞晕。重分发解决的核心问题就一个路由可达性的跨协议传递。但它的难点不在于“能不能通”而在于“怎么通才不出环、不次优、不翻车”。我见过太多人配完重分发测试机ping通了就以为万事大吉结果生产环境一跑次优路径、路由环路、度量值混乱全冒出来了。所以这篇文章不光讲怎么配更要讲清楚每一步背后的逻辑和那些文档里不会写的坑。2. 重分发的核心机制与方案选型2.1 种子度量值重分发的“汇率”不同路由协议计算路径开销的方式完全不同。OSPF用开销值跟带宽挂钩100Mbps链路开销是110Mbps是10RIP用跳数最大15跳16跳不可达。这就好比一个用人民币计价一个用美元计价你要把人民币价格标到美元货架上必须定一个汇率。这个“汇率”就是种子度量值。在OSPF里叫default-metric在RIP里也叫default-metric但数值含义完全不同。OSPF的默认度量值范围是1到16777214RIP的默认度量值范围是1到15。如果你在OSPF进程里配了default-metric 20那么所有从外部重分发进来的路由初始开销都是20。这个值设多少合适我的经验是参考你网络里最差链路的开销值再往上加一点。举个例子你网络里最远的OSPF内部路由开销是30那重分发进来的外部路由种子度量值至少设成40这样内部路由永远优先于外部路由避免出现“外部路由抢了内部路由的活”这种尴尬局面。我见过有人图省事直接写default-metric 1结果重分发进来的外部路由比所有内部路由都“近”流量全往外部路径跑直接导致次优路径。注意种子度量值只在重分发那一刻生效后续OSPF会正常累加链路开销。所以它决定的是“起点”不是“终点”。2.2 重分发方向与路由过滤重分发是单向的。你在OSPF进程里配redistribute rip意思是把RIP路由注入OSPF反过来不成立。如果要双向重分发两边都得配。但双向重分发是路由环路的温床必须配合路由过滤使用。路由过滤的手段有好几种distribute-list、route-map、prefix-list。我最常用的是route-map配合prefix-list因为逻辑清晰、可读性强、调试方便。比如你只想把RIP里的192.168.10.0/24网段重分发进OSPF可以这样写ip prefix-list RIP-TO-OSPF permit 192.168.10.0/24 route-map RIP-TO-OSPF-MAP permit 10 match ip address prefix-list RIP-TO-OSPF然后在OSPF进程里调用redistribute rip subnets route-map RIP-TO-OSPF-MAP注意那个subnets关键字。不加它只有主类网络能被重分发所有子网全被丢掉。这是新手最容易踩的坑之一配完发现路由表里空空如也排查半天才发现少敲了一个单词。2.3 双向重分发的环路风险与规避双向重分发最危险的地方在于OSPF学到的路由被重分发进RIPRIP又把它重分发回OSPF形成一个反馈回路。虽然协议本身有防环机制但配置不当照样出问题。规避方法有三条。第一在重分发点做标记。OSPF里可以用tag给外部路由打标签RIP那边重分发回OSPF时用route-map匹配标签并拒绝。第二管理距离调整。OSPF的管理距离是110RIP是120在同一个路由器上OSPF路由优先于RIP路由这天然提供了一层保护。但如果重分发点不止一个就要小心了。第三单向重分发优先。如果业务允许尽量设计成单向重分发从根源上杜绝环路。我个人的习惯是只要涉及双向重分发必配标签过滤。标签就像给路由贴了个“外来户”的标记从哪来回哪去绝不二次入境。3. 实操过程与核心环节实现3.1 实验环境搭建与基础配置先交代一下实验拓扑。三台路由器串成一条线R1跑OSPF区域0R2作为边界路由器同时跑OSPF和RIPR3跑RIP。R1和R2之间是OSPFR2和R3之间是RIP。目标是把R3的RIP路由重分发进OSPF让R1能学到。R1的基础配置interface GigabitEthernet0/0 ip address 10.0.12.1 255.255.255.0 ! router ospf 1 router-id 1.1.1.1 network 10.0.12.0 0.0.0.255 area 0R2的基础配置interface GigabitEthernet0/0 ip address 10.0.12.2 255.255.255.0 ! interface GigabitEthernet0/1 ip address 10.0.23.2 255.255.255.0 ! router ospf 1 router-id 2.2.2.2 network 10.0.12.0 0.0.0.255 area 0 ! router rip version 2 no auto-summary network 10.0.0.0R3的基础配置interface GigabitEthernet0/0 ip address 10.0.23.3 255.255.255.0 ! interface Loopback0 ip address 172.16.3.1 255.255.255.0 ! router rip version 2 no auto-summary network 10.0.0.0 network 172.16.0.0配完这些R2应该能同时学到OSPF路由和RIP路由。在R2上show ip route能看到10.0.12.0/24是O10.0.23.0/24和172.16.3.0/24是R。但R1只有OSPF域内的路由R3的172.16.3.0/24对R1来说完全不可见。3.2 在OSPF进程里重分发RIP路由现在在R2的OSPF进程里加入重分发配置router ospf 1 redistribute rip subnets default-metric 50这两行敲下去R1的路由表里立刻会出现172.16.3.0/24标记为O E2。E2代表外部路由类型2这是OSPF重分发的默认类型。E2的特点是度量值不随路径累加始终等于种子度量值。也就是说不管R1到R2之间有多少跳这条外部路由的开销永远是50。如果你希望度量值随路径累加可以改成E1类型redistribute rip subnets metric-type 1E1和E2的区别很关键。E1的度量值等于种子度量值加上内部路径开销E2则固定不变。选哪个取决于你的网络设计意图。如果外部路由的入口点唯一E2够用如果入口点有多个希望流量走最近的那个就用E1。3.3 验证重分发效果与路由表解读配完之后在R1上执行show ip route ospf应该能看到O E2 172.16.3.0/24 [110/50] via 10.0.12.2, 00:00:05, GigabitEthernet0/0方括号里第一个数字110是OSPF的管理距离第二个数字50是度量值。O E2表示OSPF外部路由类型2。via 10.0.12.2是下一跳。在R2上执行show ip ospf database external能看到Type-5 LSA。Type-5 LSA是AS外部LSA由ASBR自治系统边界路由器产生用来描述OSPF域外的路由。LSA里的Forwarding Address字段值得关注如果这个字段是0.0.0.0说明流量要经过ASBR转发如果是具体IP说明可以绕过ASBR直接转发。在RIP重分发场景下Forwarding Address通常是0.0.0.0因为RIP域内的下一跳不在OSPF域内。3.4 双向重分发的完整配置如果R3也需要学到OSPF路由就得在R2的RIP进程里也配重分发router rip version 2 no auto-summary redistribute ospf 1 metric 3注意RIP的redistribute命令必须带metric参数因为RIP没有default-metric这种全局种子度量值的概念。这里的metric 3表示重分发进来的OSPF路由初始跳数为3。为什么是3因为RIP最大15跳种子度量值不能太大否则加上后续跳数容易超过15导致不可达。一般设1到5之间比较安全。配完双向重分发后R3上应该能看到OSPF域内的路由标记为R。但这时候要特别小心环路。假设R2从OSPF学到10.0.12.0/24重分发进RIPR3又通过RIP学到这条路由如果R3和R2之间还有另一条RIP路径就可能出问题。好在我们的拓扑是线性的没有环路风险。但在网状拓扑里必须配标签过滤。3.5 标签过滤的配置方法在R2上给重分发进OSPF的RIP路由打标签route-map RIP-TO-OSPF permit 10 set tag 100 ! router ospf 1 redistribute rip subnets route-map RIP-TO-OSPF然后在RIP重分发OSPF时拒绝带标签100的路由route-map OSPF-TO-RIP deny 10 match tag 100 ! route-map OSPF-TO-RIP permit 20 ! router rip redistribute ospf 1 metric 3 route-map OSPF-TO-RIP这样从RIP来、打上标签100的路由不会再被重分发回RIP。标签就像护照上的入境章从哪来的回哪去不会绕圈。提示标签值范围是0到4294967295建议用有意义的数字比如100代表RIP200代表静态路由方便后期维护。4. 常见问题与排查技巧实录4.1 重分发后路由不出现这是最高频的问题。配了redistribute路由表里却什么都没有。排查思路按优先级排列第一检查subnets关键字。OSPF重分发时如果不加subnets只有主类网络能被重分发。比如172.16.3.0/24是子网不加subnets就被丢弃。这是新手第一大坑。第二检查路由是否真的存在于源协议的路由表里。如果RIP都没学到172.16.3.0/24OSPF自然重分发不了。在R2上show ip route rip确认一下。第三检查default-metric是否配置。OSPF重分发如果不配default-metric且重分发的路由没有携带度量值默认种子度量值是20。但如果路由本身有度量值OSPF会沿用。不过为了可控建议显式配置。第四检查route-map或distribute-list是否误过滤。有时候配了route-map但忘了写permit语句所有路由都被隐式拒绝。4.2 次优路径问题重分发配完网络通了但traceroute一看流量绕了一大圈。这就是次优路径。原因通常是种子度量值设得太小导致外部路由比内部路由更“优先”。解决办法调大种子度量值或者改用E1类型让度量值累加。我一般会在重分发点做一条静态路由指向Null0然后重分发这条静态路由利用管理距离控制优先级。不过这属于进阶操作新手先把种子度量值调对再说。4.3 路由环路双向重分发最容易出环路。症状是路由表频繁抖动CPU占用飙升ping丢包严重。排查方法是看路由的年龄字段如果一条路由的年龄不断被重置说明它在两个协议之间来回跳。解决办法就是前面说的标签过滤。另外可以在重分发点配distribute-list做双向过滤只允许特定网段通过。最彻底的办法是重新设计网络把双向重分发改成单向。4.4 常见问题速查表问题现象可能原因排查命令解决方法重分发后路由不出现缺少subnets关键字show ip route加subnets只有主类网络出现未配subnetsshow ip ospf database external加subnets路由出现但ping不通下一跳不可达show ip route检查下一跳路由频繁抖动双向重分发环路show ip route配标签过滤次优路径种子度量值过小traceroute调大度量值RIP重分发失败缺少metric参数show ip protocols加metric路由被过滤route-map拒绝show route-map检查permit语句4.5 实操心得与避坑技巧第一个心得重分发前先画拓扑图标清楚每个协议的边界和重分发点。我见过太多人配到一半忘了哪个路由器是ASBR结果在错误的路由器上敲命令怎么都不生效。第二个心得种子度量值宁大勿小。设大了最多是路径不是最优设小了可能导致流量走错方向甚至环路。我一般设成内部最大开销的两倍。第三个心得双向重分发必配标签。这是铁律没有例外。标签过滤的成本很低但不配的代价可能是一次全网故障。第四个心得测试时用traceroute不要只用ping。ping通不代表路径正确traceroute才能看出流量实际走了哪条路。第五个心得改配置前先备份。重分发配置一旦出错影响范围可能是全网。在R2上改配置之前先把当前配置导出来出问题能快速回滚。第六个心得注意管理距离的优先级。OSPF是110RIP是120静态路由是1直连是0。在重分发点如果同一条路由从多个协议学到管理距离小的胜出。这个特性可以用来做备份路径但也可能造成意外。4.6 进阶话题重分发进OSPF的LSA类型选择重分发进OSPF的路由默认产生Type-5 LSA。如果网络里有Stub区域或NSSA区域Type-5 LSA无法进入Stub区域需要用Type-7 LSA转换。NSSA区域的ASBR产生Type-7 LSA在ABR处转换为Type-5 LSA。这个转换过程涉及P-bit位和Forwarding Address配置时要注意area nssa命令后面的参数。如果不想让外部路由进入某个区域可以配area x stub或area x nssa。Stub区域完全拒绝外部路由NSSA区域允许Type-7 LSA但拒绝Type-5 LSA。选哪个取决于该区域是否有ASBR。我在一个项目里遇到过NSSA区域重分发失败的问题排查了半天才发现是P-bit没置位。P-bit位于Type-7 LSA的选项字段决定ABR是否将Type-7转换为Type-5。默认情况下从NSSA区域内部重分发进来的路由P-bit是置位的但从外部重分发进来的路由P-bit可能不置位。这个细节在官方文档里写得很隐晦实际排错时很容易忽略。4.7 重分发与默认路由的配合默认路由的重分发是个特殊场景。在OSPF里可以用default-information originate命令下发默认路由但前提是本地路由表里必须有一条默认路由。如果想让OSPF无条件下发默认路由加always关键字router ospf 1 default-information originate always在RIP里默认路由的重分发用default-information originate或者直接redistribute static。但要注意默认路由重分发进OSPF后会产生Type-5 LSA链路状态ID是0.0.0.0。如果网络里有多台ASBR都下发默认路由可能造成默认路由冲突。解决办法是用route-map控制只让主ASBR下发备ASBR用default-information originate但不加always依赖本地默认路由的存在性。4.8 性能与规模考量重分发的路由数量直接影响LSA的数量和路由表的规模。如果RIP域里有几千条路由全部重分发进OSPFType-5 LSA的数量会非常庞大对路由器的CPU和内存都是考验。这时候要考虑路由聚合。OSPF里可以用summary-address做外部路由聚合router ospf 1 summary-address 172.16.0.0 255.255.0.0这条命令会把所有172.16.0.0/16的子网聚合成一条Type-5 LSA。但聚合的前提是这些子网有相同的下一跳和度量值否则聚合后可能丢失路径信息。RIP那边可以用auto-summary做自动聚合但RIPv2默认关闭自动聚合手动开启要小心因为自动聚合是按主类网络聚合的可能把不连续的网段聚合成一条错误的路由。我一般建议用ip summary-address在接口上做手动聚合控制更精确。4.9 多厂商环境下的重分发差异不同厂商的路由器在重分发命令上有些差异。比如某厂商的OSPF重分发默认就包含子网不需要subnets关键字另一家厂商的RIP重分发默认度量值是1而不是必须显式指定。这些差异在混合组网时特别容易踩坑。我的建议是在重分发点尽量使用同一厂商的设备。如果做不到就在配置前查清楚两边的默认行为和参数范围。比如OSPF的种子度量值有的厂商默认是20有的是1有的是10。配之前先确认配之后用show ip protocols验证。另外标签的传递在不同厂商之间也可能有差异。有的厂商支持标签透传有的不支持。如果标签过滤不生效就要考虑用distribute-list或prefix-list做基于网段的过滤虽然麻烦一点但兼容性更好。4.10 重分发的替代方案重分发不是唯一的选择。如果只是想让两个协议域互通还可以用以下方案方案一隧道。在两个协议域之间建一条隧道把其中一个协议的路由通过隧道传递。优点是隔离性好缺点是隧道本身有开销且配置复杂。方案二双点重分发加路由过滤。在两个边界路由器上同时做重分发但用精细的路由过滤控制哪些路由能通过。优点是冗余性好缺点是配置复杂容易出错。方案三路由协议迁移。如果条件允许把两个协议统一成一个从根源上消除重分发需求。这是最彻底的方案但实施成本最高适合新网络建设或大规模改造。我个人的选择顺序是能统一协议就统一不能统一就单向重分发必须双向就加标签过滤标签不生效就用前缀列表兜底。隧道方案只在特殊场景下用比如两个协议域之间没有直接物理连接。4.11 监控与维护建议重分发配好之后不是一劳永逸的。网络拓扑变化、路由条目增减、设备重启都可能影响重分发效果。建议做以下监控第一定期检查ASBR的路由表确认重分发路由的数量和状态。第二监控Type-5 LSA的数量如果突然暴增可能是重分发配置被误改或出现了环路。第三在关键路径上配traceroute探测定期验证路径是否正确。第四保存重分发配置的基线每次变更前对比。我在一个项目里遇到过重分发路由突然消失的情况排查发现是RIP进程被重启后redistribute命令的metric参数丢失了。原因是配置没有保存到启动配置里设备重启后加载的是旧配置。所以改完配置一定要write memory这个习惯能省掉很多半夜排障的麻烦。4.12 一个真实项目的重分发设计复盘最后分享一个我参与过的企业网改造项目。网络里有OSPF区域0、OSPF区域1、RIP域和静态路由。原设计是双点双向重分发配了标签过滤。上线后运行了三个月突然出现路由抖动。排查过程先看日志发现Type-5 LSA频繁更新再看路由表发现一条外部路由的年龄不断被重置最后定位到一台边界路由器它的标签过滤配置被一次变更覆盖了导致RIP路由被重分发回OSPF后又重分发回RIP形成环路。修复方法恢复标签过滤配置并加了一条distribute-list做双重保险。之后运行了一年多再没出过问题。这个案例给我的教训是重分发配置的变更必须走审批流程改完必须验证标签过滤是否生效。标签过滤是双向重分发的安全绳绳子断了迟早出事。重分发这个技术点入门容易精通难。配通只是第一步配稳才是真本事。希望这些经验能帮你少走几个弯路。