ARTICLE DETAIL

资讯详情

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

OSPF与RIP双向路由重分布实验:种子度量、管理距离与环路规避实战

OSPF与RIP双向路由重分布实验:种子度量、管理距离与环路规避实战 做网络实验这些年只要碰上多协议共存的网络最后基本都会绕到“路由重分布”这个话题上。所谓路由重分布简单说就是把一种路由协议学习到的路由转换并注入到另一种路由协议里让OSPF、RIP、EIGRP这些平时各管一段的协议能互相交换路由信息。我这次做的重分布实验用的是最常见的OSPFRIP组合虽然协议组合很基础但里面涉及的种子度量、管理距离、路由回馈、环路规避几乎把重分布的坑全踩了一遍。写出来给准备做类似实验的兄弟、正在备考CCNP或HCIP的朋友做个参考也顺便记录一下自己这次调试的完整思路。这套实验适合这么几类人一是正在学路由协议、想把理论落到设备上的初学者二是企业网络里真遇到多协议合并场景的运维三是对OSPF和RIP只停留在“会配”层面、没深究过路由怎么跨协议流动的人。做完之后你对两种协议的路由优先级、度量值计算、环路形成的底层原因会有比看书直观得多的认识。1. 实验目标与整体设计思路实验目标说起来很简单让运行OSPF的路由器和运行RIP的路由器之间互相学习对方的路由最终全网互通。但真正动手之前得先想清楚几个问题为什么选这两种协议拓扑怎么搭才能把关键问题暴露出来实验做到什么程度算“真正做完”这些想明白了后面配置起来才不会稀里糊涂。1.1 为什么选OSPFRIP这个组合选协议组合这件事看着不起眼其实直接影响实验效果。OSPF是链路状态协议算路径用的是cost开销跟接口带宽挂钩RIP是距离矢量协议算路径只看跳数超过15跳直接认为不可达。这两者的度量体系完全不同互相转换的时候必然需要人为指定一个“翻译”用的初始值这正是重分布最核心、最容易出问题的地方。如果拿OSPF和EIGRP做实验虽然也能看到外部路由标记、AD值差异这些现象但两者底层逻辑相近很多细节会被掩盖掉。OSPFRIP这种“代差”组合反而能把种子度量、管理距离这些概念清晰地暴露出来。再说了现实中确实还有不少老网络跑着RIP和新建的OSPF区域合并时重分布是绕不开的一步。1.2 拓扑设计与网段规划实验拓扑我做了最精简的三台路由器R1和R2之间跑OSPFR2和R3之间跑RIPv2R2就是两种协议的交界点也就是重分布发生的地方。拓扑示意如下R1(Lo0:1.1.1.1/32) ---- OSPF area 0 ---- R2 ---- RIPv2 ---- R3(Lo0:3.3.3.3/32) f0/0:10.0.12.1 f0/0:10.0.12.2 f1/0:10.0.23.2 f1/0:10.0.23.3网段规划的思路是这样的R1和R2之间用10.0.12.0/24属于OSPF area 0的骨干区域。R2和R3之间用10.0.23.0/24属于RIP域。R1上的Loopback0用1.1.1.1/32模拟OSPF域内的终端网段。R3上的Loopback0用3.3.3.3/32模拟RIP域内的终端网段。R2作为重分布路由器两个接口分别属于两个协议域。三台设备、两个loopback、两段互联地址这个规模足够把所有核心问题都演示出来。为什么不加第四台设备模拟多区域OSPF因为实验追求的是把单个机制看透拓扑越简单问题定位越容易。真把拓扑搞复杂了配置出错时你根本分不清是重分布的问题还是区域设计的问题。1.3 实验预期与验证目标配置之前先想清楚“通”的标准是什么。我给自己定的验证目标有三条第一只配OSPF和RIP、不做重分布时R1的路由表里应该只有10.0.12.0/24和1.1.1.1/32R3只有10.0.23.0/24和3.3.3.3/32两边互相ping不通。这一步是“对照组”确认基础协议没有问题。第二做单向重分布后RIP域能学到OSPF域的路由或者反之。这一步验证重分布最基本的“翻译”功能。第三做双向重分布后R1能ping通3.3.3.3R3能ping通1.1.1.1整个网络不出现环路和次优路径。这一步才算真正做完。2. 基础网络配置与环境准备重分布实验对硬件和模拟器没有太高要求但设备选型和基础配置的规范性直接决定后面调试的体验。这一节把环境准备和“没做重分布之前的初始状态”完整过一遍后面所有问题都建立在这一节的基础上。2.1 实验环境选择我这次用的是EVE-NG搭的Cisco IOSv15.x版本。平时写文档、做测试也用GNS3这两个都能跑完整IOS实验现象真实。如果手头只有Cisco Packet Tracer做个简单的OSPFRIP重分布也能跑通但debug输出和一些细节行为会不太一样建议有条件还是用GNS3或者EVE-NG。华为设备命令差别比较大主要体现在重分布用import-route种子度量不会像Cisco那样暴露得那么明显不过原理相通华为党也可以参考思路。实验里接口类型用普通的GigabitEthernet就行RIP实验不涉及串行链路的带宽和延迟不需要刻意模拟WAN环境。三台路由器的管理口可以都接到一个管理网段上方便远程操作但注意管理口不要参与OSPF或RIP的network宣告否则会把实验路由污染掉。2.2 接口与IP地址配置三台设备的基础接口配置如下直接照着敲就行! R1 hostname R1 ! interface GigabitEthernet0/0 ip address 10.0.12.1 255.255.255.0 no shutdown ! interface Loopback0 ip address 1.1.1.1 255.255.255.255! R2 hostname R2 ! interface GigabitEthernet0/0 ip address 10.0.12.2 255.255.255.0 no shutdown ! interface GigabitEthernet1/0 ip address 10.0.23.2 255.255.255.0 no shutdown! R3 hostname R3 ! interface GigabitEthernet1/0 ip address 10.0.23.3 255.255.255.0 no shutdown ! interface Loopback0 ip address 3.3.3.3 255.255.255.255Loopback地址用/32这个细节很重要。OSPF对/32主机路由的处理方式很明确会正常通告和接受RIP则默认不处理/32吗不是的RIPv2也支持子网路由问题在于Cisco的redistribute命令里默认不带subnets参数这个坑后面会专门讲。现在先把地址配好做好接口物理层up的检查。2.3 OSPF与RIP基础配置R1和R2上启用OSPF用一个进程号1区域0! R1 router ospf 1 network 10.0.12.0 0.0.0.255 area 0 network 1.1.1.1 0.0.0.0 area 0! R2 router ospf 1 network 10.0.12.0 0.0.0.255 area 0R2和R3上启用RIPv2注意关闭自动汇总! R2 router rip version 2 network 10.0.0.0 no auto-summary! R3 router rip version 2 network 10.0.0.0 no auto-summaryRIPv2默认不发送子网掩码吗实际上RIPv2是支持VLSM和CIDR的但Cisco设备默认auto-summary会把子网汇总成主类网络所以必须no auto-summary。这里R2宣告的是10.0.0.0这是个主类网络宣告它会自动匹配10.0.12.0和10.0.23.0两个接口R3同理。如果不关自动汇总10.0.12.0/24和10.0.23.0/24会被压成10.0.0.0/8问题会很隐蔽排查起来也头疼。配置完成后先验证基础协议状态R2上用show ip ospf neighbor能看到R1的邻居状态是FULL/DR。R2上用show ip rip database能看到来自R3的10.0.23.0/24。R1路由表里有10.0.12.0/24和1.1.1.1/32但看不到10.0.23.0/24和3.3.3.3/32。R3路由表里有10.0.23.0/24和3.3.3.3/32但看不到10.0.12.0/24和1.1.1.1/32。到了这一步R1 ping不通R3的loopbackR3也ping不通R1的loopback这是正常的因为两种协议完全没有交集。下面才轮到重分布登场。3. 双向路由重分布核心配置很多人做重分布实验都是到这一步直接在两台路由器上敲几条redistribute命令然后发现路由要么学不到要么学到之后网络就通了但不知道为什么会通。这节先讲清楚两个绕不开的概念再给完整的配置过程和验证方法。3.1 两个关键概念种子度量与管理距离第一个概念是种子度量seed metric。假设R2要把OSPF学到的1.1.1.1/32注入RIPRIP收到这条外部路由时根本不知道该给它多少跳数。OSPF的cost单位是跟带宽相关的无量纲数值RIP的度量是跳数两者没有换算公式。这时候就必须由管理员在redistribute命令里指定一个初始跳数这就是种子度量。如果忘了指定Cisco会给一个默认值对外部路由来说默认种子度量往往是0而RIP认为0跳意味着不可达于是这条路由根本不会出现在路由表里也不会通告给其他RIP邻居。这也解释了为什么很多新手配完重分布另一边的路由表里什么都看不到。第二个概念是管理距离AD。管理距离用来比较不同协议的可信度数值越小越可信。Cisco设备上OSPF的管理距离是110RIP是120。重分布之后注入到新协议里的路由带着的是新协议的管理距离。问题往往出在重分布路由器自己身上它同时运行两种协议同样一条目的路由可能既从RIP学到又通过OSPF的外部LSA学到AD 110的OSPF会压过AD 120的RIP导致路由器选择了从OSPF学来的“回流”路由而不是从原始RIP邻居学来的路由。这就是后面4.1节要讲的环路问题的根源。3.2 单向注入把OSPF路由重分布进RIP先在R2的RIP进程下做OSPF到RIP的重分布! R2 router rip redistribute ospf 1 metric 3这里metric 3的意思是所有从OSPF注入到RIP的路由在RIP域里统一视为3跳。为什么不写metric不写的后果就是上面说的种子度量为0R3学不到。为什么是3而不是1因为假设R3的loopback 3.3.3.3也要被R2注入OSPF域如果两边互相注入的外部路由都是3跳那么回程路径上每台设备看到的距离相对一致比较容易对比。其实设多少都行关键是明白这是在给RIP域指定一个“翻译”后的距离。配完后在R3上看路由表R3# show ip route ... R 1.1.1.1/32 [120/3] via 10.0.23.2, 00:00:12, GigabitEthernet1/0方括号里120是RIP的管理距离3是种子度量。R3 ping 1.1.1.1也能通。到这里第一方向的重分布成功。R1上此刻还看不到3.3.3.3因为还没做另一个方向的重分布这是单向场景也符合预期。3.3 另一个方向的注入把RIP路由重分布进OSPF在R2的OSPF进程下做RIP到OSPF的重分布命令多两个参数! R2 router ospf 1 redistribute rip subnets metric-type 1 metric 100subnets这个参数非常关键。Cisco的redistribute rip默认只重分布主类网络也就是它只会把10.0.0.0/8这种主类路由注入OSPF而3.3.3.3/32这种子网路由会被直接忽略。实验里R3的loopback是/32如果不加subnetsR1死活都学不到3.3.3.3这是经典坑。metric-type 1和metric-type 2的区别这里值得说透。默认是type 2外部路由进入OSPF域后cost只是外部指定的那个值不叠加域内路径的开销type 1则会把外部指定的初始cost和域内到达ASBR的开销加在一起。实验里用的metric-type 1所以在R1上看到的3.3.3.3/32的开销是1100101。为什么是1加100因为R1到R2之间是千兆口OSPF cost默认是100Mbps除以接口带宽千兆口的cost就是1加上外部初始cost 100合计101。这一步能直观看到type 1的累加特性对理解OSPF外部路由计算很有帮助。配完后在R1上看路由表R1# show ip route ... O E1 3.3.3.3/32 [110/101] via 10.0.12.2, 00:01:05, GigabitEthernet0/0O E1表示OSPF外部路由类型1管理距离110开销101。现在R1能ping通3.3.3.3了。3.4 双向重分布后的全网互通验证把3.2和3.3两个方向的配置合在一起就是真正的双向重分布。配置完成后用以下命令做一次全面验证R1上show ip route确认有1.1.1.1/32、10.0.12.0/24、10.0.23.0/24和3.3.3.3/32。R3上show ip route确认同样能看到全部四个网段。R1用扩展ping测3.3.3.3指定源地址为1.1.1.1确认不是借路通的ping 3.3.3.3 source 1.1.1.1。R3用扩展ping测1.1.1.1指定源地址为3.3.3.3。在R2上看show ip route注意10.0.23.0/24这条路由它是从RIP学到的AD 120还是从OSPF学到的AD 110如果显示110说明R2已经倾向于通过OSPF路径访问RIP域这就是次优路径的苗头。这时候网络表面上是通的但内部可能已经埋了雷。如果R2关于RIP域的直连网段路由被OSPF外部路由覆盖一旦R1那边有一条指向相同目的地的劣化路由通过OSPF传播回来环路就产生了。所以“能ping通”只证明转发面通了一半控制面是否健康还得继续看第4节的环路排查。4. 环路与路由回馈重分布后的隐患与规避双向重分布配好网络通了但这只是开始。真正的重分布实验核心不在于“配通”而在于“配稳”。这一节专门讲重分布之后最臭名昭著的路由回馈问题以及我用route-map和tag做的规避方案。4.1 路由回馈Route Feedback是怎么产生的回馈的英文叫route feedback简单描述就是A协议的路由被注入B协议之后在B协议域里转了一圈又从另一个入口回到了A协议域里。听起来像数据包环路其实是路由信息环路。用我的实验拓扑推演一遍R3有一条3.3.3.3/32通过RIP通告给R2R2把它重分布进OSPFR1通过OSPF学到了3.3.3.3/32这是正常流程。坏就坏在OSPF是链路状态协议链路状态信息会在整个区域里泛洪R2自己也在OSPF区域里所以R2也会收到来自OSPF的3.3.3.3外部LSA下一跳指向R1。因为OSPF的管理距离110比RIP的120小R2在路由表里会优先选择这条来自OSPF的3.3.3.3下一跳指向R1。而R1学到3.3.3.3的路径是R1-R2下一跳指向R2。于是R2认为去3.3.3.3走R1R1认为去3.3.3.3走R2两个路由器互相指着对方数据包就死循环了。这就是双点双向重分布两个ASBR互相注入或者单点双向重分布后没有过滤最容易出现的路由回馈。单点也会出问题只要R2同时运行两种协议并且两者都学习到同一目的地。4.2 用route-map tag控制重分布方向要解决回馈问题思路是在路由注入时打一个身份标记当这条路由在外面转了一圈想再回到原协议域时拒绝它。这个标记就是tagroute tag一个可以附加在路由上的数字标签。我的做法是在R2上定义两个route-mapip prefix-list RIP_PREFIXES seq 5 permit 3.3.3.3/32 ! route-map RIP_TO_OSPF permit 10 match ip address prefix-list RIP_PREFIXES set tag 200 ! route-map OSPF_TO_RIP deny 10 match tag 200 ! route-map OSPF_TO_RIP permit 20这段配置的逻辑是R2把RIP域注入OSPF时给3.3.3.3/32打上tag 200当OSPF域里的这条被打过tag的3.3.3.3又传回R2、R2准备把它注入RIP时route-map OSPF_TO_RIP的deny规则让它直接出局。同理在反方向上给OSPF域注入RIP的路由打tag 100再在RIP到OSPF方向拒绝tag 100。有一点要提醒RIP协议对tag的支持非常弱RIPv2虽然有route tag字段但很多设备实现里不能可靠地在RIP域内传递tag。所以我的经验是依赖tag做过滤时只放在OSPF侧RIP侧改用prefix-list或者标准ACL按目的前缀过滤可靠性高得多。这也是为什么上面的例子我只在OSPF到RIP方向匹配tag 200而没有在RIP到OSPF方向匹配tag 100的原因。应用route-map到重分布命令里写法如下router rip redistribute ospf 1 metric 3 route-map OSPF_TO_RIP ! router ospf 1 redistribute rip subnets metric-type 1 metric 100 route-map RIP_TO_OSPF改完配置后清一下路由表把旧路由清掉避免计时器留着旧条目R2# clear ip route *4.3 用管理距离调整做兜底除了route-map过滤还有一种思路是调整管理距离让某条路径永远压不过另一条。比如让OSPF外部路由的管理距离大于RIP这样R2在两条路径之间选择时始终优先RIP原始路由router ospf 1 distance ospf external 130这行的意思是把OSPF外部路由O E1和O E2的管理距离从110改成130比RIP的120大。这样一来R2即使收到从OSPF传回来的3.3.3.3外部路由也会因为AD 130大于RIP的120而选择RIP路径回馈问题自然消失。这个方案配置极简但缺点也很明显它把整个OSPF进程里所有外部路由的AD都改了影响面过大。如果你的OSPF域里还有合法的、希望优先的外部路由这个方案会把优先级搞乱。相比之下route-maptag的精确匹配要可控得多。我的建议是实验环境可以两种都试试生产环境优先route-map管理距离方案只作为临时兜底。4.4 实验验证配置前后对比这轮验证我分成了配置前和配置后两步。配置前在R2上show ip route查看3.3.3.3R2# show ip route 3.3.3.3 Routing entry for 3.3.3.3/32 Known via ospf 1, distance 110, metric 101 Last update from 10.0.12.1 on GigabitEthernet0/0注意Known via是OSPF下一跳是10.0.12.1R1这就是回流覆盖了原始RIP路由的证据。配置route-map并清路由后再看一次R2# show ip route 3.3.3.3 Routing entry for 3.3.3.3/32 Known via rip, distance 120, metric 3 Last update from 10.0.23.3 on GigabitEthernet1/0这次Known via是RIP下一跳变成10.0.23.3R3这才是原始的正确路径。再配合R1和R3之间互相扩展ping连续发几百个包不丢数据面验证通过。5. 常见问题与排查技巧实录重分布实验踩坑是必然的关键是踩完坑要知道怎么爬出来。这一节把我这次实验过程中遇到的典型问题、排查思路和解决命令整理成几个独立的小节后面再碰到类似现象可以直接对号入座。5.1 学不到OSPF域路由先查种子度量故障现象是R3路由表里没有1.1.1.1/32但R2上能看到OSPF路由。最可能的原因是R2上redistribute ospf 1后面没写metric参数种子度量为0RIP认为是不可达路由直接丢弃。用show ip rip database查看R2# show ip rip database 1.1.1.1/32 auto-summary redistributed [0] via 10.0.12.1, metric 0看到metric 0就实锤了。解决办法是给redistribute命令补上metric参数然后clear ip route *刷新router rip redistribute ospf 1 metric 35.2 OSPF域里看不到RIP子网路由多半是漏了subnets故障现象是R1的路由表里只有10.0.23.0/24没有3.3.3.3/32。原因就是redistribute rip时忘记带subnets参数。Cisco的默认行为只重分布主类网络3.3.3.3/32这种子网全被忽略。在R2上show ip ospf database external如果连外部LSA都没有基本可以断定是subnets的问题。解决方法是router ospf 1 redistribute rip subnets metric-type 1 metric 100这里还想多说一句很多人分不清OSPF和RIP方向上的默认行为差异RIP默认不会因为“子网”而丢弃路由它的度量是跳数0跳不可达OSPF则默认不接收子网路由必须有subnets关键字才放开。两个坑方向相反初学时特别容易搞混。5.3 路由表出现次优路径或环路要检查管理距离和tag故障现象是网络虽然能通但traceroute发现路径绕路或者某些目的地址时通时不通。先不要急着改配置按照三步排查第一步show ip route x.x.x.x看这条路由Known via是哪个协议、AD是多少第二步show ip protocols确认redistribute配置和route-map是否挂上第三步show ip ospf database external看外部LSA里有没有不应该存在的路由。如果是回馈问题解决思路就是用第4节的route-maptag做过滤或者distance ospf external调整AD。注意调整AD之后要观察R2上原始RIP路由是否恢复正常不正常的AD值可能引入新的问题。5.4 路由震荡先看物理层和更新周期故障现象是路由表中的重分布路由一会儿出现一会儿消失ping测试时通时断。可能的原因有几个一是RIP的180秒失效计时器和240秒清除计时器在新旧路由切换期间引发震荡这个等收敛完成一般能自愈二是接口down/up频繁物理层不稳定用show ip interface brief检查三是route-map匹配规则写反了把合法路由也deny掉了导致路由被反复撤销和重新通告。排查时用debug ip rip和show logging看有没有周期性出现的路由更新和撤销记录。5.5 故障排查速查表故障现象可能原因验证命令解决办法RIP域学不到OSPF路由种子度量为0show ip rip databaseredistribute ospf 1 metric 3OSPF域学不到RIP子网路由缺少subnets参数show ip ospf database externalredistribute rip subnets metric-type 1 metric 100出现次优路径或环路管理距离导致回流路由覆盖原始路由show ip route x.x.x.xroute-maptag过滤或distance ospf external 130路由反复撤销与重学接口不稳定或route-map误匹配show ip interface brief、debug ip rip先检查物理链路再检查route-map规则5.6 加分技巧验证数据面不要只看路由表路由表是控制面的结果能ping通说明数据面基本可用但“基本可用”不等于“路径正确”。我每次做完重分布实验都会加一个traceroute验证确认从R1去3.3.3.3真的走了R2而不是绕了远路还会用扩展ping指定源地址连续发1000个包看丢包率。数据面持续稳定控制面路由表来源正确这个实验才算真正闭环。6. 实验心得与后续扩展这次重分布实验做下来我个人最大的体会是重分布表面上是几条redistribute命令真正的难点全在“路由身份”的管理上。什么路由该进、什么路由不该进、进了之后在另一个协议里如何被看待这些都要在动手之前想清楚。我一开始图省事跳过单向验证直接配双向重分布结果路由回馈问题出来之后花了大半个小时才定位到是管理距离在搞鬼。从那之后我做任何重分布实验都坚持“先单向、逐方向验证、再开双向”的顺序。最后再分享一个小技巧每次改动重分布配置之前先在每台设备上截一张show ip route的完整截图出问题之后对比路由表的变化定位速度会快很多。这个拓扑后续还可以继续扩展加点静态路由做静态到OSPF的重分布或者把RIP换成EIGRP再对比一下不同协议处理外部路由的差异玩透了比看十篇配置文档都管用。
返回列表