
路由重发布这个实验几乎是每个学网络工程的人都会撞上的一堵墙。我当年做这个实验作业的时候被种子度量值和路由回馈折腾得够呛配置命令敲了无数遍show 出来的路由表就是不对。后来带了几届学生的实验课发现大家踩的坑惊人的一致。这篇就把我对重发布实验的完整理解、实操配置和排错经验一次性写清楚不管是应付作业还是备考认证都能直接用上。1. 重发布是什么为什么实验作业总绕不开它1.1 从网络工程师视角看路由重发布路由重发布英文叫 route redistribution核心解决一个问题让不同路由协议的路由信息互相传递。一个企业网络里核心网跑 OSPF接入网可能还在用 RIP或者一部分设备走静态路由这些协议之间默认是老死不相往来的。OSPF 学到的路由不会自动进入 RIP 的路由表RIP 的跳数信息 OSPF 也完全不认。重发布就是在新旧协议之间架一座桥把 A 协议的路由翻译成 B 协议能听懂的度量值然后注入进去。这个机制的实际意义很直接。你不需要把全网都统一成一种协议——那是理想状态现实里网络是长出来的有历史包袱有部门边界有设备型号限制。重发布让异构网络能协同工作但又不能简单粗暴地全部互相注入否则环路、次优路径会扑面而来。这就决定了重发布实验必然是配置简单、排错复杂的典型几条 redistribute 命令就能敲完但要让路由表干净、路径最优、不震荡得对协议底层逻辑有真正的理解。1.2 重发布实验在课程体系里的位置之所以实验作业爱出重发布是因为它几乎是路由协议部分的综合大题。前面学的静态路由、RIP、OSPF 都是单一协议的配置和验证到了重发布你需要同时操作两种协议还要处理度量值换算、管理距离冲突、路由回馈这些问题。这一个实验能把你对路由协议的理解串起来考察也是面试和认证里特别爱考的实战场景。我自己判断一个学生是不是真懂路由就看他做不做得好重发布实验。会敲命令的一抓一大把但能说清楚为什么 RIP 重发布进 OSPF 时默认度量值是 20为什么双向重发布会产生环路的人就少很多了。这篇博文不只是让你把作业交上去更要让你把这几个为什么彻底搞明白。2. 实验设计的思路拆解协议选择、拓扑构建和度量值规划2.1 先选对协议组合实验就成功了一半做重发布实验第一步不是敲命令而是选协议组合和搭拓扑。常见组合有 OSPF RIP、OSPF EIGRP、RIP 静态路由再复杂一点可以上 IS-IS。我的建议是第一次做就用 OSPF RIP 这个经典组合原因很实在EIGRP 在很多模拟器环境里支持有限制IS-IS 对新手来说又增加了无谓的学习成本。OSPF 和 RIP 是公有标准协议实验环境完全可控两种协议的度量机制差异也足够大能把重发布的核心矛盾都暴露出来。拓扑也不需要搞得太花哨三台路由器就能搭出一个标准的两区域连接场景。R1 单独跑 RIPR3 单独跑 OSPFR2 作为边界路由器同时跑两种协议在这台设备上完成双向重发布。这个拓扑看着简单但已经能完整展示单向发布、双向发布、路由回馈这几个关键场景。你要是想挑战一下自己可以在这个基础上加一台设备做多点多向重发布那个复杂度就上一个台阶了。拓扑规划的要点是明确哪些网段属于 RIP 域哪些属于 OSPF 域边界设备在哪期望看到的路由条目是什么。我见过很多同学一上来就配配完了对着路由表发呆根本不知道每一条路由该不该出现。动手之前先在草稿纸上画清楚哪个网段应该以什么方式出现在哪台设备的路由表里这比记十条命令都有用。2.2 种子度量值是重发布的核心密码重发布里最核心也最容易出错的概念就是种子度量值英文叫 seed metric。每一种路由协议对路径好坏的度量方式完全不同RIP 数跳数OSPF 算开销CostEIGRP 算复合度量。当你把 RIP 的路由发布进 OSPF 时OSPF 根本不知道这条 RIP 路由花了多少代价需要你给它一个初始值这个初始值就是种子度量值。因为它代表的是外部路由进入本协议域时的起点分。这里有个大坑不同协议重发布进 OSPF 的默认种子度量值不一样。OSPF 对重发布进来的外部路由默认种子度量值是 20BGP 发布进来的是 1类型是 O E2外部类型 2。而 RIP 重发布进 OSPF 时默认度量值也是 20。但反过来OSPF 重发布进 RIP 时RIP 的默认种子度量值比较特殊——如果不手动指定很多平台里这个值是 0 或者 1而 RIP 的最大跳数是 15超过 15 视为不可达。也就是说你不小心让一条路由的跳数算成了 16它就无声无息地消失了。这是重发布实验里最常见的配置都对路由就是不来的元凶之一。种子度量值的设置没有统一标准完全取决于你的网络设计意图。我在实验里通常这样规划RIP 域跳数少、网络规模小重发布进 OSPF 时可以直接用默认度量 20OSPF 域开销相对高发布进 RIP 时手动指定一个合理跳数比如 metric 3表示从边界路由器算起这条外部路由距离为 3 跳。这个值不是拍脑袋定的要结合对端 RIP 网络的规模保证全网跳数不超过 15。设计阶段就把这些值定下来配置的时候心里就有底了。2.3 管理距离的冲突路由回馈和次优路径的根源种子度量值解决了翻译的问题但重发布还有第二层矛盾管理距离。每种路由协议都有自己的管理距离这个值表示路由来源的可信度越小越可信。直连路由 0静态路由 1OSPF 是 110RIP 是 120。当你做双向重发布时可能会出现这样的情况边界路由器从 OSPF 学到了一条约 50 的开销路由又从 RIP 收到了同一条路由的重发布版本。路由器会比较管理距离发现 OSPF 的 110 小于 RIP 的 120于是选择 OSPF 学到的路径。这在单边界路由器上问题不大但在多台边界路由器的场景里就可能造成路由来回震荡、次优路径甚至环路。还有一个隐蔽的问题是路由回馈也叫路由环回。A 协议的路由发布进 B 协议后如果 B 域里又有一条路径把这条路由重新发布回 A 域A 就会收到一条自己人发布回来的自己人的路由形成环路。路由器虽然靠管理距离和各种防环机制不会立刻绕圈绕死但路由表会混乱路径选择会失控。这也是重发布实验里最需要设计策略的地方后面我会详细讲怎么用路由过滤来控制它。3. 完整实操OSPF 与 RIP 双向重发布配置实录3.1 实验拓扑与 IP 规划我用最经典的三台路由器拓扑来做演示你在 GNS3 或 EVE-NG 里都能原样搭出来。R1 只跑 RIP连接 PC1 模拟的终端网段再连到 R2R3 只跑 OSPF连接 PC2 模拟的终端网段也连到 R2R2 作为边界设备同时跑 RIP 和 OSPF完成双向重发布。具体的接口和网段规划如下设备接口IP 地址所属协议域R1G0/0192.168.12.1/24RIP 域R1G0/1192.168.1.1/24RIP 终端网段R2G0/0192.168.12.2/24RIP 域R2G0/1192.168.23.2/24OSPF 域R3G0/0192.168.23.3/24OSPF 域R3G0/1192.168.3.1/24OSPF 终端网段要验证的关键点有三个R1 能不能学到 192.168.3.0/24 这个 OSPF 域网段的路由R3 能不能学到 192.168.1.0/24 这个 RIP 域网段的路由两台终端之间能不能互通。如果这三个问题都解决了重发布就是成功的。规划时我特意把两个终端网段放在离边界路由器各一跳的位置这样度量值设计简单验证起来也直观。3.2 基础配置先把各协议域内部跑通重发布实验最大的禁忌是协议还没跑通就急着做重发布。我自己的操作顺序一定是先把两个协议域内部的路由彻底搞定show ip route 确认所有内部路由都出现在路由表里了再做重发布配置。否则排错的时候你根本分不清是内部协议的问题还是重发布的问题故障域瞬间扩大一倍。R1 上的基础配置很简单启用 RIP 版本 2宣告直连网段R1(config)# router rip R1(config-router)# version 2 R1(config-router)# no auto-summary R1(config-router)# network 192.168.12.0 R1(config-router)# network 192.168.1.0这里要提醒一下RIP 的 network 命令用的是有类地址我实验时习惯把 no auto-summary 加上避免路由被自动汇总成有类网络RIPv2 支持无类路由这个命令能保证明细路由正常传递。R3 上的 OSPF 配置更直接把接口所在网段宣告进区域 0R3(config)# router ospf 1 R3(config-router)# network 192.168.23.0 0.0.0.255 area 0 R3(config-router)# network 192.168.3.0 0.0.0.255 area 0OSPF 进程号只在本地有意义R2 和 R3 可以不一样但实验里保持一致性便于管理。此时你在 R2 上应该能看到这样两条关键路由一条是 RIP 学到的 192.168.1.0/24一条是 OSPF 学到的 192.168.3.0/24。如果这一步就看不到路由先别往下走检查接口状态、网段宣告、设备互联是否正常。边界路由器 R2 上把两种协议都配上但先不要写任何 redistribute 命令R2(config)# router rip R2(config-router)# version 2 R2(config-router)# no auto-summary R2(config-router)# network 192.168.12.0 R2(config-router)# exit R2(config)# router ospf 1 R2(config-router)# network 192.168.23.0 0.0.0.255 area 0这时候 R2 的路由表里 RIP 域和 OSPF 域的路由各归各存在互不干扰。我习惯把这个状态作为重发布前的基线保存一份配置快照。后面做完重发布如果路由表出现异常可以快速对照基线判断是重发布策略的问题还是度量值的问题。3.3 双向重发布的完整配置与参数选择基线确认无误后就可以开始写重发布命令了。我分两步来做先做单向验证通过后再做反向这样每一段的变化都可控、可排查。第一步把 OSPF 路由重发布进 RIP。进入 RIP 进程写R2(config)# router rip R2(config-router)# redistribute ospf 1 metric 3关键就在 metric 3 这个参数。RIP 的度量是跳数OSPF 路由进入 RIP 域后边界路由器是翻译者给每条外部路由一个初始跳数。我给 3 的理由是RIP 域里 R1 到边界 R2 本身要算 1 跳OSPF 域的路由到达边界后再注入给 3 跳既不会让远端 RIP 路由器的跳数累加超过 15又能和内部 RIP 路由形成合理的度量层次。你要是给 1所有重发布进来的路由就跟直连一样显眼容易和真实直连路由混淆。第二步把 RIP 路由重发布进 OSPF。进入 OSPF 进程写R2(config)# router ospf 1 R2(config-router)# redistribute rip subnets这条命令里 subnets 参数绝对不能漏。如果不加 subnetsOSPF 只会重发布有类主网路由你的 192.168.1.0/24 这种无类子网路由会全部被过滤掉这是OSPF的一个老传统。加了 subnets 之后所有子网路由都能进入 OSPF 域。种子度量值我这次故意不写让它使用 OSPF 默认的 20。因为 RIP 域只有两个网段拓扑简单默认值 20 完全够用也让这个实验顺便展示了默认种子度量值的行为。配置到这里双向重发布其实已经完成了。但注意我现在还没有加任何路由过滤策略。在这个简单拓扑里不会立刻出大问题不过出于实验严谨性我建议你把路由打标签tag的配置也加上。给来自 RIP 的路由打上 tag 100给来自 OSPF 的路由打上 tag 200这样后面排查路由来源时一目了然R2(config)# route-map REDIST-OSPF permit 10 R2(config-route-map)# set tag 100 R2(config)# route-map REDIST-RIP permit 10 R2(config-route-map)# set tag 200 R2(config)# router ospf 1 R2(config-router)# redistribute rip subnets route-map REDIST-OSPF R2(config)# router rip R2(config-router)# redistribute ospf 1 metric 3 route-map REDIST-RIP3.4 验证命令与预期结果的逐条解读配置完成后的验证环节是区分背命令和真懂的分水岭。我有一套固定的验证顺序从上到下能把重发布的每个环节都查一遍。先看 R1 的路由表重点找 192.168.3.0/24 这条 OSPF 域的路由R1# show ip route预期结果是这条路由以 RIP 的形式出现下一跳是 192.168.12.2跳数为 4。这个 4 是怎么算出来的R2 把 OSPF 路由重发布进 RIP 时初始跳数是 3从 R2 到 R1 经过一条 RIP 内部链路跳数累加 1到 R1 就是 4。如果你看到跳数是 16那说明广播出了问题路由会被标为不可达。再看 R3 的路由表找 192.168.1.0/24R3# show ip route预期结果是这条路由的类型是 O E2度量值是 20。E2 表示外部路由类型 2这种类型的路由在传递过程中内部链路的开销不会累加到外部度量上。这正是为什么 OSPF 重发布默认种子度量值 20 就能保证全网可见——所有 OSPF 内部路由器看到的开销都是 20路径选择只看内部开销那一部分。接着在 R2 上验证两种协议确实都在工作R2# show ip protocols R2# show ip routeshow ip protocols 的输出里能同时看到 RIP 和 OSPF 两个协议进程以及每个进程的重发布来源这是确认重发布配置是否生效的权威依据。R2 的路由表里应该同时出现 RIP 标记的 192.168.1.0/24 和 OSPF 标记的 192.168.3.0/24。最后别忘了从 PC1 ping PC2这是终极验证。我遇到过路由表完全正常但 ping 不通的情况十有八九是接口 ACL 或模拟器本身的问题但有一个细节特别容易被忽略R1 和 R3 各自连接终端的接口有没有被宣告进对应的路由协议。我见过拓扑图里 R3 的 G0/1 忘记宣告结果 OSPF 内部互通没问题但终端网段的直连路由一直不在协议里重发布自然也不会发布它。4. 重发布实验的经典坑与排查技巧4.1 路由学不到的几种原因与处理顺序重发布做完最典型的故障是该出现的路由不出现。我把排查顺序固定为先看源协议路由是否存在再看重发布命令是否正确最后查度量值是否合理。第一步永远是在边界路由器上确认源路由是否存在。比如 R3 学不到 192.168.1.0/24先回 R2 上看这条路由在不在如果在用 show ip route rip 和 show ip route ospf 分别看它是被哪种协议学到的。如果这条路由在 R2 上根本不存在那问题出在 RIP 域内部重发布命令写得再对也没用。第二步检查重发布命令的位置和参数。很多人把 redistribute 命令写错了进程比如把 OSPF 的发布命令写到了 RIP 进程里命令语法对但语义完全反了。用 show run | section router 把两个协议段的配置分别拉出来看确认每条 redistribute 都在正确的进程下。subnets 参数缺失也是高频问题尤其是 OSPF 接收外部路由时漏了 subnets 会导致大量子网路由凭空消失。第三步检查度量值。RIP 域里超过 15 跳的路由会被标记为不可达OSPF 里默认度量值不会让路由消失但如果同时存在多条路径度量值会影响路径选择。我建议在 RIP 域里把 metric 设为一个明确的数字不要依赖缺省值这样查看路由表时能直接通过跳数判断发布是否成功。4.2 路由回馈引发环路与次优路径的处理思路在简单三设备拓扑里做双向重发布环路的隐患还不算致命但一旦拓扑扩大到多台边界路由器路由回馈就会立刻变成灾难。我有一年帮一个校园网项目排查过类似问题两台边界设备同时做了 OSPF 和 RIP 的双向重发布结果 RIP 域里的路由在 OSPF 域里来回交叉发布路由表里的下一跳不断在两条边界设备之间跳变网络时通时不通。控制路由回馈的经典手段是路由过滤最常用的是 distribute-list 配合前缀列表或 ACL。思路很简单在边界路由器上明确哪些路由允许发布出去哪些路由不允许。以我的实验为例RIP 发布进 OSPF 时只允许发布 RIP 域内部真实存在的网段 192.168.1.0/24不允许发布那些从 OSPF 学来再回注 RIP的路由。反过来同理。配置示例如下。先写前缀列表只放行需要发布的路由R2(config)# ip prefix-list FROM-RIP seq 5 permit 192.168.1.0/24 R2(config)# ip prefix-list FROM-OSPF seq 5 permit 192.168.3.0/24然后在重发布时调用它R2(config)# router ospf 1 R2(config-router)# redistribute rip subnets route-map REDIST-OSPF R2(config)# router rip R2(config-router)# redistribute ospf 1 metric 3 route-map REDIST-RIP配合 route-map 里已有的 tag 标记你甚至可以不写前缀列表直接在 route-map 里用匹配 tag 的方式过滤。比如 REDIST-OSPF 这个 route-map 只匹配 tag 为 200 的路由即真正来自 OSPF 域的路由再发布回 RIPREDIST-RIP 只匹配 tag 为 100 的路由再发布回 OSPF。这样可以确保从哪里来的路由不会再被发送回哪里去从源头切断回馈环路。这个来源标记 方向过滤的组合是我在真实环境里用过最稳的方案比单纯在接口上配 distribute-list 更灵活。因为重发布的路由可以经过多跳传递基于 tag 的过滤在边界设备上就能完成判断不需要每台中间设备都维护复杂的 ACL。做实验作业时不管拓扑多简单我都建议你把这个机制加进去这是区分会配置和懂运维的样板操作。4.3 管理距离冲突导致的次优路径怎么诊断和修正次优路径是另一个重发布后常见的隐性故障路由能学到互通也没问题但数据走的路径不是最优的。问题根源在于管理距离在不同协议之间的默认优先级。比如边界路由器同时从 OSPFAD 110和 RIPAD 120学到了同一目的网段的路由即使 RIP 的路径物理上更近路由器也会选择 AD 值更小的 OSPF 路由。诊断次优路径最直接的方法是看路由表里的路由来源和管理距离值。show ip route 输出里每条路由前面都有一个中括号里面两个数字第一个就是管理距离第二个是度量值。看到某条路由的管理距离不符合你的设计预期就知道是 AD 冲突了。R2 的路由表里如果 192.168.3.0/24 同时有 OSPF 和 RIP 两个来源你对比两者中括号里的 AD 值就能解释路由器最终选了哪一条。修正手段有两种一是调整管理距离把某种协议针对特定前缀的 AD 值改大或改小二是用路由策略直接控制哪些路径进入路由表。我一般优先用第二种因为修改全局管理距离很容易影响其他路由的选择属于杀敌一千自损八百的做法。要精准控制某一条前缀的路径选择可以用 route-map 配合匹配条件在重发布入口过滤掉你不想要的路径或者在协议进程里修改指定前缀的距离值。做实验时如果遇到次优路径问题我建议先别急着调配置而是把三台设备的路由表全部打出来画一条数据流的实际路径再画一条你期望的最优路径对比一下差异在哪一跳出现的。这个习惯能帮你快速定位是边界设备的路由选择问题还是内部协议度量值设计不合理的问题。相信我在你脑子里画出这条数据流路径的速度决定了你排错的速度。4.4 节省排查时间的几个信息采集命令最后分享几个我平时排查重发布问题必用的信息采集命令。show ip protocols 是第一个要看的它能显示每个协议进程下的重发布配置明细包括你设置的 metric 和挂载的 route-map。show ip route 配合过滤参数可以快速聚焦show ip route rip 只看 RIP 路由show ip route ospf 只看 OSPF 路由show ip route 192.168.3.0 查看特定前缀的所有可用路径。追踪路由来源和环路还有一个利器是 traceroute。在 R1 上 traceroute 192.168.3.1完整输出每一跳的路径一旦发现数据包在 R2 和 R3 之间来回跳就是路由回馈产生的环路现场。我在模拟器里做实验时还会顺手在 R2 上用 debug ip rip 和 debug ip ospf events 观察重发布过程确认路由更新是否真的从这个进程发出去、收到了什么更新。不过 debug 在真实设备上很吃 CPU实验环境随便用生产环境慎开这是条铁律。我还习惯在每个阶段的验证完成后把配置导出一份存档。实验结束后把最终配置和一开始的基线配置做个 diff能直观地看到每一步改动对路由表的影响。这个习惯帮我在一次真实的割接排错里快速回滚到了稳定状态——当时重发布上了生产后出现了环路我因为留有配置快照五分钟内恢复了业务而同事还在翻历史配置。5. 从实验作业到真实网络的几个关键认知实验作业做完了路由表也验证通过了但重发布这件事在真实网络里的分量比实验里展现的要重得多。我见过不少同学实验满分却在项目里一遇到重发布就手足无措原因是实验环境太干净了——没有链路震荡、没有设备性能差异、没有复杂的策略路由叠加。所以最后想分享几个超出作业本身的认知。第一个认知是重发布是最后手段而不是首选方案。真实网络里能用单协议就不做重发布能拆域就拆域能用 BGP 做边界就用 BGP。重发布引入的环路、次优路径、管理距离冲突都是需要额外运维成本去压制的。实验作业专门让你做重发布是为了让你见识协议互通的机制但真实网络里你要时刻提醒自己少一次重发布就少一类故障。第二个认知是路由过滤策略和重发布命令是一体两面的。很多教材把 redistribute 当重点把 distribute-list、route-map 当附加内容但实际运维中后者才是重发布能否长治久安的关键。我的经验是任何一条 redistribute 命令上线都必须配套对应的过滤策略哪怕今天拓扑简单到看起来不需要过滤。过滤策略不只是防环路还是一种文档——它明确写清楚了这个边界允许哪些路由通过这个信息对后续接手网络的人极其重要。第三个认知是你心态上的排错不要慌也不要靠盲猜。重发布的问题看似千变万化归根结底就是三条链路——源路由是否存在、翻译度量是否正确、回馈环路是否被控制。顺着这三条链路逐段排查任何一个网络问题都能拆成可验证的小步骤。我在实际项目里有过一个印象很深的经历一个同事重发布配完后全网路由间歇性丢失他怀疑设备有 bug折腾了一下午。我登录设备后先看 show ip protocols发现他把 OSPF 的 redistribute 命令写进了 RIP 进程两个协议的 metric 互相干扰改对进程后全网恢复。所以先看配置再看路由表最后才怀疑设备这个顺序能帮你避开绝大多数的无头绪排查。实验作业不是终点它是你面对真实网络问题前的一次彩排。把种子度量值的计算、管理距离的权衡、路由过滤的设计都想透了以后在项目里遇到异构网络对接你就不会心里发虚。如果在做作业过程中还有哪一步没跑通欢迎回来对照这篇按顺序查一遍——我能保证绝大多数问题都出在你自己配置里的某个想当然上。