拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

路由重发布实验详解:OSPF与RIP双向引入及防环配置

路由重发布实验详解:OSPF与RIP双向引入及防环配置 1. 项目概述重发布实验到底是什么重发布全称叫路由重发布英文是 Route Redistribution国内网络工程师也常叫它“路由引入”或“路由再分发”。简单说就是让不同路由协议之间交换路由信息把OSPF学到的路由“翻译”给RIP把RIP的路由“翻译”给OSPF让整个网络的路由表统一起来。这个实验解决的痛点很明确生产环境中几乎不存在全网只用一种路由协议的情况。公司并购后两边网络协议不同、分支机构老设备只支持RIP而核心网用OSPF、为了策略灵活在边界同时跑BGP和IGP——这些场景都需要重发布来打通路由。没有重发布跨协议区域之间就是“聋子对话”数据包根本不知道往哪儿走。这个实验适合谁网络工程专业的学生、准备CCNP或HCIP认证的考生、刚入行的驻场工程师以及所有需要维护混合协议网络的运维人员。我当年在培训机构和真实项目里反复做这个实验踩过不少坑这篇就来手把手拆解整个过程重点讲清楚配置背后的原理和那些容易翻车的细节。2. 实验拓扑设计与地址规划2.1 拓扑结构的选择逻辑重发布实验的拓扑不宜太复杂但也别简单到只有一个边界路由器。我建议用三台路由器起步R1跑OSPFR3跑RIP中间的R2同时运行两种协议作为重发布的边界设备ASBR。这个拓扑最直观既能看清楚单向重发布的流向也能扩展成双向重发布来观察环路问题。拓扑结构如下R1的G0/0连接到R2的G0/0链路网段是192.168.12.0/24运行OSPFR2的G0/1连接到R3的G0/0链路网段是192.168.23.0/24运行RIP。R1的环回接口Lo0是10.1.1.1/32R3的环回接口Lo0是10.3.3.3/32。R2的环回Lo0是2.2.2.2/32后面我们会利用它来验证路由传播。这个拓扑选择有三个理由。第一三台设备即可覆盖“双协议边界设备”的最小完整场景排错范围小适合新手理解。第二通过环回接口模拟终端网段不会引入过多干扰因素。第三R2作为边界设备后续考察双向重发布时路由回灌和次优路径问题都能在这个规模下清晰复现。2.2 设备与模拟器准备实验可以在GNS3、EVE-NG或者思科CML上完成也可以使用华为eNSP配合AR2220路由器镜像。我个人推荐GNS3配思科IOS镜像比如c7200或c3745原因是命令通用性强、文档资料多、网上能搜到大量现成排错案例。如果你手头只有eNSP也没关系命令框架相同只是协议进程名和部分关键字略有差异。地址规划表如下设备接口IP地址所属协议用途说明R1G0/0192.168.12.1/24OSPF Area 0R1连接R2的OSPF链路R1Lo010.1.1.1/32OSPF模拟R1侧业务网段R2G0/0192.168.12.2/24OSPF Area 0R2的OSPF侧接口R2G0/1192.168.23.2/24RIP v2R2的RIP侧接口R2Lo02.2.2.2/32不参与路由协议测试直连路由重发布R3G0/0192.168.23.3/24RIP v2R3连接R2的RIP链路R3Lo010.3.3.3/32RIPnetwork发布模拟R3侧业务网段注意R2的Lo0地址故意不宣告进任何协议后面做直连重发布实验时会派上用场。如果你一上来就把它宣告进OSPF或RIP就少了一个关键验证点。3. 基础协议配置与连通性验证3.1 OSPF侧配置先配置R1的OSPFR1(config)# router ospf 100 R1(config-router)# router-id 1.1.1.1 R1(config-router)# network 192.168.12.0 0.0.0.255 area 0 R1(config-router)# network 10.1.1.1 0.0.0.0 area 0然后是R2的OSPF部分R2(config)# router ospf 100 R2(config-router)# router-id 2.2.2.2 R2(config-router)# network 192.168.12.0 0.0.0.255 area 0这里有两个细节要说明。第一OSPF进程号只具有本地意义R1和R2可以用不同的进程号路由器之间通过Hello报文协商参数不比较进程号。第二network声明的是接口网段而不是具体IP反掩码0.0.0.255匹配的是整个192.168.12.0/24网段这点和RIP宣告方式不同不要搞混。3.2 RIP侧配置R3配置RIPR3(config)# router rip R3(config-router)# version 2 R3(config-router)# no auto-summary R3(config-router)# network 192.168.23.0 R3(config-router)# network 10.0.0.0R2配置RIP部分R2(config)# router rip R2(config-router)# version 2 R2(config-router)# no auto-summary R2(config-router)# network 192.168.23.0RIP的network命令后面跟的是有类网络地址classful address不是反掩码。如果写network 192.168.23.0实际上匹配的是192.168.23.0/24这个接口。而R3宣告10.0.0.0的意思是匹配所有以10开头的接口地址。这里默认version 1只支持有类路由所以必须手动开启version 2并关闭自动汇总否则R3的10.3.3.3/32会被汇总成10.0.0.0/8后续观察重发布路由时会一头雾水。3.3 连通性验证方法基础配置完成后先做连通性验证确认OSPF和RIP各自区域内已经互通再做重发布。验证命令如下R1# show ip route R2# show ip route R3# show ip route R1# ping 192.168.12.2 R3# ping 192.168.23.2此时R1的路由表里应该有10.1.1.1/32、192.168.12.0/24还能看到OSPF的直连路由R3的路由表里有10.3.3.3/32、192.168.23.0/24。但R1的路由表里绝对看不到10.3.3.3/32R3的路由表里也看不到10.1.1.1/32——因为两种协议互不相通就像两个说不同语言的人面对面站着谁也听不懂谁。这个“互相看不见”的状态正是我们做重发布的动机和前提。经验做完基础配置先别急着敲redistribute命令。先确认区域内所有路由都正常出现在各自协议的路由表里再检查R1能ping通R2、R3能ping通R2。基础链路都不通就去搞重发布出的问题会非常难排查因为不知道是底层故障还是重发布配置错误。4. 单向重发布的配置与验证4.1 将RIP路由注入OSPF单向重发布有两种方向。第一种是把RIP的路由注入到OSPF实现“OSPF区域内的设备能访问RIP区域的网段”。在R2上配置如下R2(config)# router ospf 100 R2(config-router)# redistribute rip subnets这里重点解释subnets参数。OSPF的重发布命令默认只注入有类网络路由即主类网络边界上的路由如果10.3.3.3/32这个子网路由不加subnets它根本不会被重发布进OSPF。这是网络工程师新手最容易忽略的参数也是最常见的“配置了但路由不出现”的原因之一。配置完成后在R1上观察R1# show ip route ospf你应该能看到一条类型为O E2的10.3.3.3/32路由管理距离是110度量值是20。为什么是E2因为OSPF对重发布进来的外部路由默认标记为E2类型外部度量值默认是20。E2路由在OSPF区域里传播时只累加外部度量值不累加内部链路开销也就是说无论R1距离R2有多远这条路由的度量值始终保持20。4.2 将OSPF路由注入RIP第二种方向是把OSPF的路由注入到RIP实现“RIP区域内能访问OSPF区域的网段”。配置命令R2(config)# router rip R2(config-router)# redistribute ospf 100 metric 5RIP的度量值是跳数hop count范围1到1516表示不可达。重发布OSPF路由时必须手动指定metric否则默认度量值是无穷大路由不会出现在RIP路由表中。这里设成5意思是“从R2出发这条路由的跳数是5”。实际项目中通常设一个较小的值比如2或3具体要看网络规模。配置后在R3上观察R3# show ip route rip你应该看到一条RIP路由10.1.1.1/32度量值为5。此时R3去往10.1.1.1的数据包会交给192.168.23.2即R2由R2再转发到OSPF区域。整个路径R3→R2→R1跳数两跳但路由表里的metric是5而不是2——这是因为重发布时手动指定的5是边界路由器自己算的初始跳数此后再往RIP域内传播才会逐跳累加。4.3 种子度量值Seed Metric的坑我在实验中最常被问到的问题就是为什么重发布出来的路由metric这么奇怪答案几乎总是种子度量值seed metric没设置或设置不当。RIP重发布默认metric是16代表不可达所以必须手动指定。OSPF重发布默认metric是20可以直接用。IS-IS重发布默认metric是0。每种协议的默认值都不同用之前一定要查清楚。表常见路由协议重发布默认种子度量值目标协议默认种子度量值是否需要手动设置说明OSPF20可选外部路由默认E2metric20RIP16无穷大必填不设置则路由不可达IS-IS0建议设置metric 0会造成选路异常BGP原IGP度量传递根据场景决定通常配合route-map修改注意OSPF还有一个特例如果重发布的源是直连路由默认metric是20如果源是BGP默认metric是1。别问为什么记住就行这个细节在排错时能救你一命。5. 双向重发布与环路问题实战5.1 双向重发布的配置单向重发布打通了单向访问但实际网络要求双向通信所以必须做双向重发布。在R2上把两边的配置都加上R2(config)# router ospf 100 R2(config-router)# redistribute rip subnets R2(config)# router rip R2(config-router)# redistribute ospf 100 metric 5配置本身并不复杂核心就是“两边各写一条redistribute命令”。但配置完成后问题就来了——如果R2和R3之间除了RIP链路还有其他路径R3可能通过其他路径学习到OSPF域内的路由再把它们回灌给R2形成路由反馈回路。5.2 模拟环路产生修改管理距离光看基础拓扑三台路由器一条链路串起来环路还不明显。为了真实模拟生产环境中的次优路径和环路问题我们给拓扑增加一台R4连接R1和R3形成一条OSPF区域内的备用路径。R4的G0/0连R1的G0/1网段192.168.14.0/24R4的G0/1连R3的G0/1网段192.168.34.0/24R4跑OSPF区域0同时也可以配置RIP v2指向R3方向。这样一个菱形拓扑就把双向重发布的隐患暴露得淋漓尽致。在R2上完成双向重发布后R1去往10.3.3.3的路径有两条一条是R1→R2→R3OSPF E2路由另一条是R1→R4→R3OSPF区域内路由如果R4的OSPF也宣告了R3侧网段。但R1的路由表里会选择哪条这取决于管理距离和度量值。更有意思的情况是R3从RIP侧学到了OSPF重发布过来的10.1.1.1/32同时R4如果它也学习到了RIP路由并重发布回OSPF也知道了10.1.1.1/32。此时R3可能通过RIP从R2学到10.1.1.1也可能通过R4从OSPF学到10.1.1.1。如果OSPF路由的管理距离110小于RIP120R3会优先选择OSPF路径但这条OSPF路径很可能是“绕远路”的次优路径。5.3 控制回灌route-map与distribute-list解决环路和次优路径的经典手段是路由策略route-map和分发控制列表distribute-list。核心思想是在边界路由器上做单向重发布时拒绝接收自己曾经发布出去的路由或者给路由打上tag标记防止回灌。以OSPF→RIP方向为例只允许把R1的10.1.1.1/32和直连的192.168.12.0/24发布到RIP拒绝发布其他OSPF路由R2(config)# access-list 10 permit 10.1.1.1 0.0.0.0 R2(config)# access-list 10 permit 192.168.12.0 0.0.0.255 R2(config)# route-map REDIS-TO-RIP permit 10 R2(config-route-map)# match ip address 10 R2(config)# router rip R2(config-router)# redistribute ospf 100 metric 5 route-map REDIS-TO-RIP这里的逻辑是先通过ACL匹配允许的路由再用route-map的permit语句放行最后在redistribute命令后挂载route-map。这样RIP域内只会出现10.1.1.1/32和192.168.12.0/24不会接收到其他可能引起回灌的OSPF路由。更进阶的方式是tag标记法。在OSPF外部路由上打一个专属tag比如200重发布到RIP时拒绝带这个tag的路由防止环路。这种方式在大型网络中更常用但原理比较复杂初学者先用ACLroute-map的方式控制路由方向已经能解决绝大多数问题了。6. 直连路由重发布与精细策略配置6.1 直连路由重发布的场景除了协议之间的重发布还有一种常见需求把边界路由器的直连路由不宣告进任何协议的接口网段重发布到动态路由协议中让全网都能访问这些地址。R2上的2.2.2.2/32就是为此预留的测试地址。配置命令如下R2(config)# router ospf 100 R2(config-router)# redistribute connected subnets此时R1的路由表里会出现2.2.2.2/32类型为O E2。这个方法在真实项目里的典型应用是设备上有管理网段、VIP地址或用于监控的环回接口只想让它们被全网感知又不愿意承担动态路由协议本身的开销。6.2 用route-map过滤特殊路由直接redistribute connected会一股脑把所有直连网段都发布出去包括连接R1的192.168.12.0/24、连接R3的192.168.23.0/24、环回Lo0的2.2.2.2/32。想把192.168.12.0/24过滤掉只发布2.2.2.2/32需要更精细的策略R2(config)# ip prefix-list ONLY-LO0 permit 2.2.2.2/32 R2(config)# route-map CONN-TO-OSPF permit 10 R2(config-route-map)# match ip address prefix-list ONLY-LO0 R2(config)# router ospf 100 R2(config-router)# redistribute connected subnets route-map CONN-TO-OSPF之所以用前缀列表prefix-list而不是ACL去匹配是因为ACL对前缀匹配的表达能力有限而prefix-list可以精确匹配2.2.2.2/32这个特定前缀长度。在实际项目中我几乎只用prefix-list配合route-map来过滤路由比ACL可靠得多。6.3 控制OSPF外部路由类型E1与E2OSPF重发布的外部路由有两种类型E1和E2。默认是E2不累加内部度量而E1会累加从ASBR到目标路由器之间的内部链路开销。在存在多条路径的复杂网络中E2可能会导致选路失准因为所有路由器看到的外部路由度量值都一样无法区分远近。改E1的方法是在redistribute命令后加metric-type参数R2(config)# router ospf 100 R2(config-router)# redistribute rip subnets metric-type 1配置后R1上看到的10.3.3.3/32路由类型是O E1度量值由两部分组成ASBR注入时的初始度量默认20加上R1到R2的内部OSPF开销。E1路由适合有多条出口链路、需要精确表达“到外部网络真实距离”的场景E2适合只关心“基于出口选择”的简单需求。生产环境我建议优先用E1除非有明确的策略理由。7. 常见问题与排查技巧实录7.1 路由没有出现在对端路由表中这是最高频的问题。排查思路按下述顺序进行第一检查重发布命令是否写了子网参数。OSPF的redistribute不带subnets时有类边界上的子网路由会被过滤掉。第二检查RIP重发布是否设置了种子度量值。RIP默认16不设则路由不可达。第三看路由策略是否匹配。route-map中ACL或prefix-list写错、permit/deny顺序颠倒都会导致该发的路由没发。第四确认路由本身存在于源协议路由表中。如果源协议都没学到这条路由重发布自然无米下炊。第五查看边界路由器的路由表。如果边界路由器本身没有去往目标网段的路由它就不可能重发布出去。用show命令逐条核对基本能在两分钟内定位问题。7.2 出现路由环路与次优路径环路的具体表现是某个网段的路由在R2和R3之间来回传递TTL消耗殆尽ping不通。次优路径的表现是数据包绕了一大圈才到达目的地链路延迟明显偏高。排查方法是在边界路由器上查看路由来源R2# show ip route 10.3.3.3 R2# show ip ospf database external R3# show ip rip database看看这条路由到底是从哪个协议学到的。如果R3的10.3.3.3/32居然通过OSPF被学习到被重发布回灌了说明回灌控制没做好。解决办法是加上route-map过滤或在R3上配置distribute-list拒绝从RIP侧接收10.3.3.3/32。表重发布常见问题速查问题现象可能原因处理办法OSPF重发布后路由不出现缺少subnets参数加上subnetsRIP重发布后路由不可达seed metric为16手动指定metric值出现路由环路双向重发布回灌route-map过滤/tag标记外部路由走次优路径管理距离或metric选择偏差调整metric-type为E1或过滤重发布路由不精确误发布不需要的网段用prefix-list精细匹配7.3 管理距离调整的利与弊有人会用distance命令直接调协议的管理距离来解决次优路径问题比如把OSPF的管理距离改成比RIP大让RIP路由优先生效。这在小型实验中很容易“见效”但在生产环境中极其危险——管理距离是全局性的影响的不只是重发布相关的路由而是所有同协议路由的选路。我建议不要轻易修改管理距离先用route-map控制路由方向和范围。有效排错的核心是“让该出现的路由出现让不该出现的路由不出现”而不是粗暴地改变路由器的基础选路逻辑。8. 重发布实验的项目总结与心得重发布实验做下来我的直观体会是配置命令本身很少难点全在理解度量值、管理距离、路由回灌这些看不见的概念上。它不像VLAN配置那样“所见即所得”更像是在模拟一个跨语言翻译系统——翻译得好不好取决于边界设备是否足够“聪明”是否清楚什么该翻译、什么不该翻译。有几个经验值得强调。第一做任何重发布操作前先画清楚路由流向图标出哪些路由从哪边进、从哪边出。方向不明确时进行配置出了故障很难定位。第二双向重发布一定要配回灌控制策略不要抱有侥幸心理哪怕实验拓扑看起来不可能出现环路生产环境中的物理链路和逻辑链路往往比实验室复杂得多。第三所有度量值都要显式声明并做成文档记录RIP的metric是5OSPF的外部metric是20这些都要如实记录方便后人排错。这个实验的延展方向也很多可以继续做IS-IS与OSPF之间的重发布、BGP与IGP之间的重发布、用前缀列表配合route-map实现精细路由控制还可以在华为设备上对比思科的命令差异。学完这个实验你的网络排错能力和路由协议理解深度会有明显提升因为重发布几乎强迫你把路由协议的核心机制全部串起来。如果在实际实验环境中遇到其他奇怪的问题欢迎按文章里的排查思路逐项排查。这三台路由器的实验拓扑值得反复做三遍以上每做一遍你对路由协议的认知都会更透彻一层。
返回列表