路由重发布实验详解:OSPF与RIP互通、种子度量值与防环实战

📅 发布时间:2026/10/19 16:27:19
路由重发布实验详解:OSPF与RIP互通、种子度量值与防环实战
做网络实验这么多年要说哪个实验最容易“配完就通、通了又莫名其妙出问题”路由重发布Route Redistribution绝对排前三。很多初学者把重发布理解成“在两个协议进程里各敲一句 redistribute”结果拓扑里出现环路、次优路径排查半天才发现是双向重发布惹的祸。这篇博文就围绕一个最经典的“重发布实验”展开把为什么要做重发布、怎么做、做了之后会踩哪些坑、怎么排查从头到尾捋一遍。适合正在学路由协议、准备网络认证考试或者工作中要接触多种协议互通场景的网络工程师参考。1. 重发布是什么先搞清楚两个协议之间怎么“互相介绍路由”1.1 为什么不同协议不能天然互通路由协议的世界里RIP、OSPF、IS-IS、BGP 各有各的“方言”。OSPF 用开销Cost算路径RIP 用跳数Hop Count算路径BGP 用路径属性来选路。协议之间既不明白对方的度量值含义也看不懂对方的路由条目格式。更重要的是默认情况下一台路由器上即使同时运行了 OSPF 和 RIP它也只会把各自学到的路由分别放进同一个路由表绝不会主动把一个协议的路由“翻译”给另一个协议。打个生活化的比方你在一个单位里同时管着两个班组一个班组用中文写日报一个班组用日文写日报。你作为中间管理者如果不去翻译两个班组互相之间就永远不知道对方每天干了什么。重发布Redistribution就是那个翻译动作——在边界路由器上把一种路由协议学到的路由转换成另一种协议能理解和传递的格式然后注入到对方协议里去。1.2 重发布的本质与适用场景重发布的本质听起来简单但牵扯的东西很多。它不只是“把路由A搬进协议B”这么机械还涉及种子度量值Seed Metric怎么算、管理距离AD不一致导致的选路差异、以及防环机制如何建立。常见的重发布场景主要有三类静态路由注入动态协议比如一条指向出口网关的默认路由通过 static 重发布进 OSPF让全网都知道出口在哪。直连网段注入动态协议把路由器直连接口所在的网段作为外部路由注入到 OSPF 或 RIP 中。动态协议之间互相重发布比如 OSPF 域和 RIP 域合并或者公司并购后两个网络需要互通这是最常见也最考验功底的场景。第四个隐藏场景也值得注意把 BGP 路由导入 IGP或者把 IGP 路由导入 BGP这在大型网络里同样普遍但实验复杂度更高一般作为进阶内容。1.3 动手之前必须想清楚的四个问题很多人在实验里翻车不是命令敲错了而是动手前没把思路理顺。做重发布之前至少要回答这四个问题度量值如何换算RIP 的跳数是16不可达OSPF 的 Cost 可以到65535。将一个 OSPF Cost 为 10 的路由重发布进 RIP跳数应该给几这个需要实验者自己指定协议不会自动换算。管理距离会不会影响选路OSPF 内部路由 AD 是 110RIP 是 120。如果一条路由既可以通过 OSPF 学到又可以通过 RIP 学到路由器会优先信谁这直接影响流量走哪里。双向重发布会不会形成路由回馈边界路由器把自己刚注入进去的路由又学回来再重新注入到另一边就可能形成环路。需要控制哪些路由方向是不是所有路由都要双向传递有没有需要过滤掉的网段现实网络中几乎一定需要过滤。这四个问题想清楚了配置命令反而只是手指工夫。2. 实验拓扑与地址规划别急着敲命令先画图2.1 最小可复现拓扑三台路由器起手重发布实验最忌讳“一口气把拓扑搭得很大”。我建议先用三台路由器搭一个最小的单边界拓扑验证通信逻辑再扩展到双边界拓扑来复现次优路径和路由回馈问题。这里以常见网络设备为例规划如下R1 和 R2 之间跑 OSPF区域 0。R2 和 R3 之间跑 RIP版本2。R2 就是重发布边界路由器同时运行两种协议。R1 的环回口 Lo0 模拟一个需要被全网访问的网段R3 的环回口 Lo0 模拟另一个网段。这个拓扑的好处是R2 只有一个“翻译点”路由传播路径清晰适合先把基础配置跑通。后面要研究环路和次优路径时可以再加一台 R4 作为第二个边界路由器构成双点双向重发布。2.2 地址与协议规划表规划地址时建议把直连网段、环回口网段、协议归属都列清楚避免后面配置时手忙脚乱。设备接口IP 地址所属协议用途R1Gi0/0192.168.12.1/24OSPF连接 R2R1Lo010.0.1.1/32OSPF (network 10.0.1.1 0.0.0.0)模拟业务网段 AR2Gi0/0192.168.12.2/24OSPF连接 R1R2Gi0/1192.168.23.2/24RIP连接 R3R3Gi0/0192.168.23.3/24RIP连接 R2R3Lo010.0.3.3/32RIP (network 10.0.0.0)模拟业务网段 B采用 24 位掩码是因为实验环境里直连链路地址够用即可环回口用 32 位掩码是模拟一个主机网段这在实际网络里也很常见。2.3 基础配置先让两个协议各自跑起来在配置重发布之前先做基础配置确保 OSPF 域内和 RIP 域内各自都能通信。下面是 R1、R2、R3 的基础配置示例! R1 interface GigabitEthernet0/0 ip address 192.168.12.1 255.255.255.0 no shutdown interface Loopback0 ip address 10.0.1.1 255.255.255.255 router ospf 1 router-id 1.1.1.1 network 192.168.12.0 0.0.0.255 area 0 network 10.0.1.1 0.0.0.0 area 0 ! R2 interface GigabitEthernet0/0 ip address 192.168.12.2 255.255.255.0 no shutdown interface GigabitEthernet0/1 ip address 192.168.23.2 255.255.255.0 no shutdown router ospf 1 router-id 2.2.2.2 network 192.168.12.0 0.0.0.255 area 0 ! R3 interface GigabitEthernet0/0 ip address 192.168.23.3 255.255.255.0 no shutdown interface Loopback0 ip address 10.0.3.3 255.255.255.255 router rip version 2 network 192.168.23.0 network 10.0.0.0 no auto-summary配置完这两段先分别验证R1 能 ping 通 192.168.12.2R3 能 ping 通 192.168.23.2。然后看 R1 有没有 10.0.3.3 的路由肯定没有。R3 有没有 10.0.1.1 的路由也没有。因为重发布还没做两个域是“孤岛”。这一步验证很重要能让你确认问题是不是基础配置引起的。3. 核心配置实操先做单向再做双向3.1 第一步把直连和静态路由重发布进协议最安全的入坑方式先从最安全的方式入手在 R2 上把直连网段重发布进 OSPF 和 RIP。这样不会产生环路因为直连路由不可再被“学回来”。命令如下! R2 把直连接口网段注入 OSPF router ospf 1 redistribute connected subnets ! R2 把直连接口网段注入 RIP router rip version 2 redistribute connected metric 1注意一个关键差异OSPF 的 redistribute connected 因为默认 seed metric 是 20所以能直接生效。但 RIP 的默认 seed metric 是无穷大16如果不手动指定 metric 1重发布的路由会被标记为不可达R3 根本学不到。这就是“种子度量值”的第一个坑。配置完在 R1 上应该能看到 192.168.23.0 和 10.0.3.3 这两条路由但它们的来源是 OSPF 外部路由O E2说明是重发布进来的。在 R3 上应该能看到 192.168.12.0 和 10.0.1.1来源是 RIP。此时 R1 和 R3 的环回口已经互相能 ping 通了。3.2 第二步OSPF 与 RIP 之间的双向重发布单点单向重发布只解决了“一边知道另一边”的问题。更常见的是双边都要通所以要做双向重发布。在 R2 上增加两条命令router ospf 1 redistribute rip subnets router rip version 2 redistribute ospf 1 metric 1注意 OSPF 侧一定要带关键字 subnets否则默认只重发布主类网络10.0.1.1/32 这类子网路由传不进去。这也是一坑后面排查部分细说。配置完R1 能看到去 10.0.3.3 的路由R3 能看到去 10.0.1.1 的路由。至此这个三路由器的小实验拓扑已经能“全网互通”。3.3 种子度量值Seed Metric详解为什么同一个命令效果不一样种子度量值是一个很容易被忽略但极其重要的参数。它的含义是当一条路由从一个协议被“翻译”到另一个协议时在目标协议里初始拥有的度量值。不同协议对重发布路由的默认处理完全不同协议默认种子度量不手动指定时的效果OSPF20BGP 重发布除外为1可以正常传递但没法体现原协议的真实开销RIP16不可达路由学不到必须手动指定 metric 1~15IS-IS0可以传递但默认开销为0需要留意EIGRP无穷大路由学不到必须手动指定 metric 带宽/延迟/可靠性/负载/MTU这个设计不是随意的。RIP 把16视为无穷大不给种子度量就默认不可达逼迫网络工程师明确思考该路由在 RIP 域里应该占几个跳数。OSPF 则提供一个合理默认值20让实验能跑通但坏处是所有外部路由看起来开销都一样选路时无法区分近远。因此实操中我会习惯性在配置里加 default-metric 或者 redistribute 后的 metric 参数。比如router ospf 1 default-metric 10 router rip version 2 default-metric 3这样所有重发布进来的路由在各自协议里都统一了度量基准不至于出现“RIP 域里所有外部路由都是同一个跳数”的尴尬情况。4. 重发布之后的事次优路径与路由回馈4.1 路由回馈Loop是怎么发生的双向重发布之后最经典的问题就是路由回馈。以前面三台路由器拓扑为例把时序拆开看R1 把 10.0.1.1/32 通告给 R2OSPF 内部路由。R2 执行 redistribute ospf 1 metric 1把这条路由注入 RIPR3 通过 RIP 学到 10.0.1.1/32下一跳是 192.168.23.2。但 R3 的 RIP 域里还有自己的直连网段 192.168.23.0 和 10.0.3.3。R2 执行 redistribute rip subnets把从 RIP 学到的 10.0.3.3/32 和 192.168.23.0/24 注入 OSPF。问题在于R2 的 RIP 进程里除了 R3 通告的 10.0.3.3/32会不会也包含它自己刚注入进去的 10.0.1.1/32答案是会的。RIP 是距离矢量协议R3 收到 10.0.1.1/32 的 RIP 通告后会认为这是一条路径并继续向外通告如果还有别的 RIP 邻居。但实际上这条路由的始作俑者是 R2 自己等于自己把自己说的话又听了一遍然后还要再复述一遍。如果只有三台路由器R3 没有第二个 RIP 邻居环路不会持续扩散。但在双边界或多边界拓扑里R2 注入到 RIP 的路由可能通过 RIP 域里另一台边界路由器 R4 重新学回来然后再通过 OSPF 传回去形成一个完整的路由环路。这会导致什么后果数据包在两个域之间反复跳转直到 TTL 耗尽路由表振荡下一跳来回横跳严重时 CPU 飙升整台路由器卡死。这就是路由回馈的破坏力。4.2 次优路径为什么危险除了环路次优路径也是一个“通而不优”的隐患。用一个扩展拓扑来说明在 R2、R3 之间加一台 R4R4 同时连接 OSPF 域和 RIP 域构成双点双向重发布。此时R3 要去 10.0.1.1/32按理说最优路径是 R3 → R2 → R1因为 R3 直连 R2。但如果 R4 也把这条路由重发布进了 RIPR3 可能选择 R4 作为下一跳因为 R4 那条路由的 RIP 跳数是 1假设 R4 和 R3 直连而直接从 R2 学到的也是 1选路时可能陷入“看谁先通告”的随机局面。更糟的是如果 R4 通过 OSPF 学到的外部路由 AD 是 110而 R3 直接从 R2 学到的 RIP 路由 AD 是 120那么 R3 反而会优先选 R4 作为下一跳即使实际路径要绕路。次优路径危险在于它往往“能通”没有明显故障现象只会表现为延迟升高、带宽浪费。排查这类问题不能只盯着接口 up/down 和丢包率要老老实实看路由表里的下一跳和来源。4.3 规避手段一distribute-list 做方向过滤最直接的防回馈方法是在边界路由器上做路由过滤。例如在 R2 的 OSPF 进程中拒绝把从 RIP 学到的路由中那些“本不该出现在 OSPF 域里”的路由重新注入回去。配置方式如下! 在 R2 上定义前缀列表只允许把 R3 的环回口路由注入 OSPF ip prefix-list RIP_TO_OSPF permit 10.0.3.3/32 router ospf 1 redistribute rip subnets route-map FROM_RIP_TO_OSPF route-map FROM_RIP_TO_OSPF permit 10 match ip address prefix-list RIP_TO_OSPF这样 R2 只会把 10.0.3.3/32 从 RIP 重发布进 OSPF而不会把 10.0.1.1/32 这种“自己人”的路由再次引入 OSPF从根上截断了回馈。同理在 RIP 侧也可以做反向过滤。4.4 规避手段二route-map prefix-list 精细化控制如果需要更精细控制——比如按照路由的 tag、下一跳或度量值来决定是否发布route-map 就比单纯的 prefix-list 更合适。配置思路是先定义 prefix-list 匹配目标网段再用 route-map 绑定 match 和 set 动作。例如ip prefix-list BLOCK_LOOPED permit 10.0.0.0/8 ge 24 le 32 route-map OSPF_TO_RIP deny 10 match ip address prefix-list BLOCK_LOOPED route-map OSPF_TO_RIP permit 20 router rip version 2 redistribute ospf 1 metric 1 route-map OSPF_TO_RIP这段配置的含义是在把 OSPF 路由重发布进 RIP 时先拒绝所有 10.0.0.0/8 范围内掩码长度在 24 到 32 之间的网段其他网段放行。route-map 的匹配顺序和 ACL 一样从上往下逐条匹配第一条 deny 命中就直接拒绝不再往下看。所以 route-map 里必须有一条最后的 permit 语句否则什么路由都发布不出去。这是实验里非常容易踩的坑。4.5 规避手段三调整管理距离另一种思路是让路由器“不信”某些路由。例如希望 RIP 域里的路由器优先走直连的边界路由器可以修改边界路由器上重发布路由的管理距离让 RIP 外部路由的 AD 变大从而不被优先选择。router rip version 2 distance 130这会让 RIP 路由的 AD 从默认的 120 变成 130。如果 OSPF 外部路由的 AD 是 110路由器会优先选择 OSPF 学到的路由也就是优先走 R4 那条链路。不过要注意调整 AD 是全局性的会影响该协议下所有路由的优先级。如果只想针对某几条路由调整需要结合 ACL 做精细化 distance 配置。这三种手段各有利弊distribute-list 直接、暴力理解成本低适合快速截断route-map 灵活可以组合多种匹配条件适合生产环境调整 AD 是最后的手段影响面大需要谨慎使用。5. 常见问题排查与实操技巧实录5.1 重发布实验问题速查表现象可能原因排查命令RIP 域里学不到重发布路由seed metric 未设默认16不可达show ip rip database、show run | section router ripOSPF 域里子网路由传不过来redistribute 缺 subnets 关键字show ip ospf database external路由环路、下一跳来回跳双向重发布无防环过滤show ip route、traceroute、show ip protocols次优路径协议 AD 不一致导致选路异常show ip route关注 AD 值重发布路由时有时无route-map 顺序错误或缺 permitshow route-map、show ip prefix-list过滤后所有路由都没了route-map 没有最后的 permit导致全拒show ip protocols查看路由过滤器是否生效5.2 排查命令组合一条条看到问题本质排查重发布问题我有一套固定的命令组合按顺序执行基本能定位 90% 的问题。第一步看路由表全貌。用 show ip route 确认路由是否出现、下一跳是谁、AD 值和 metric 是多少。重点看是否带 O E2 或 R 标记以及括号里的 [110/20] 这类值。第二步看协议数据库。OSPF 侧用 show ip ospf database externalRIP 侧用 show ip rip database。这一步能确认路由是否已经进入了协议数据库。如果数据库里没有说明重发布或通告有问题如果数据库里有但路由表里没有说明是选路或 AD 的问题。第三步看进程配置。用 show run | section router 确认 redistribute 命令是否带上正确的关键字和 metric。很多时候问题就出在少写了一个 subnets 或者忘加 metric。第四步路由振荡时关掉快速收敛用 debug ip rip 观察 RIP 更新报文里的路由条目能直观看到哪条路由被反复通告。注意 debug 命令在生产环境要慎用实验环境随便开。5.3 实操中踩过的几个坑第一个坑prefix-list 掩码长度写错。我曾在 R2 上过滤 10.0.0.0/8 ge 24 le 32以为能匹配所有子网结果漏了 10.0.3.3/32 这种精确主机路由导致 R3 的环回口在 OSPF 侧消失了。排查了很久才发现是 ge/le 范围写窄了。建议配置 prefix-list 前先用 show ip prefix-list detail 查看实际匹配情况。第二个坑在 OSPF 重发布 RIP 时忘了加 subnets。当时的情况是R3 的 10.0.3.3/32 在 R1 上一直看不到但 R3 的其他非主类子网却能通。原因是 redistribute rip 不带 subnets 时只会重发布主类网络。这个关键字对 OSPF 来说几乎是必须的却特别容易被忽略。第三个坑route-map 里只有 deny 没有放行。我最初在 R2 上做双向重发布防环时定义了一个 route-map只写了 deny 段没写最后的 permit。结果所有路由都被拦住了全网立即不通。后来形成肌肉记忆route-map 用完之后永远在最后补一条空 permit。第四个坑改完配置忘了清除 OSPF 进程。有时重发布配置修改后OSPF 不会立即重新计算外部路由需要敲 clear ip ospf process 或者被动等刷新。很多人改完配置发现路由没变化以为是配置问题其实只是进程没刷新。5.4 一个值得反复练习的扩展实验如果时间充裕建议再做一次“多边界路由策略”的实验在之前拓扑中再加一台 R4让 R2 和 R4 同时做 OSPF 和 RIP 的双向重发布然后用 route-map 实现不对称控制——比如只允许 R2 发布某条路由R4 只能发布另一条路由。这样能逼着自己把前文的防环、过滤、AD 调整手段组合起来真正理解什么叫“策略控制”。这个实验做完再回头看 show ip protocols 输出的路由过滤信息和 AD 信息你会对整个路由选择过程有非常清晰的认识。我个人在实际操作中的体会是重发布实验一定要按“先单向、后双向先连通、再防环、后优化”的顺序去做。不要一上来就双边互指否则出了问题你根本不知道是哪个方向引起的。另外一个小技巧是每次配置完重发布第一件事就是看 show ip protocols 里的 Redistributing 段落它会把外部路由的 seed metric、路由过滤器是否生效都列出来一眼就能看出配置有没有进对地方。这个习惯帮我省了不少排查时间建议你也养成。