备考HCIP的时候,重发布这一章前后啃了两遍。第一次看考点以为就是几条 import-route 命令的事,真正在模拟器里搭起双点双向拓扑一跑,路由要么绕路,要么反复震荡,严重的时候整个网络直接不通。后来把原理、配置、排错三条线拆开重新过了一遍,才明白这一章为什么被频繁拿出来考。这篇文章就按我当时的学习路径来写,适合正在备考HCIP的工程师,也适合做企业网运维、需要处理多协议边界的人。读完你会发现,重发布真正的难点不在那条引入命令,而在引入之后你打算怎么收拾局面。
1. 为什么必须做重发布:两种协议之间没有“通用语言”
1.1 现实网络里,很少只跑一种路由协议
很多人以为只有在运营商骨干网才会遇到多协议并存,其实企业网里更常见。比如公司总部核心跑OSPF,分支或旧区域保留着一套RIP;比如通过静态路由连了专线和合作伙伴,外部路由需要进入内部OSPF域;再比如引入了BGP以后,要把BGP路由注入到内部IGP里。现实网络不会为了保持某一种协议的“纯洁”而重搭物理架构,协议边界一旦存在,路由信息就必须在两个体系之间搬运,这就是路由重发布的本职工作。
HCIP对重发布的考察,表面上是你会不会敲 import-route 命令,实际上考的是三件事:能不能判断边界在哪、敢不敢让两个协议域互相“看见”、以及知不知道引入以后会带来什么连锁反应。前两件都好办,多数人栽在最后一件上。因为重发布不是把路由表“复制粘贴”过去那么简单,它自带一套副作用,尤其是当网络里有两台边界设备同时做双向引入的时候,环路和次优路径几乎是必然出现的。
1.2 重发布的本质:给另一边的路由器“翻译”路由信息
OSPF和RIP为什么不能直接互通?因为两者的路由描述方式完全不在一个维度。OSPF携带的是Cost,RIP携带的是跳数,IS-IS也有自己的metric体系,但语义和OSPF根本不可比。更麻烦的是,OSPF的路由通过LSA扩散,RIP直接往UDP 520端口周期性发送报文,IS-IS则靠PDU在二层直接交换。协议栈设计都不一样,路由信息没办法原样递过去。
所以重发布只能由边界设备来完成:边界路由器同时运行两个协议,把A协议的路由表项取出来,按B协议的格式重新封装,再以B协议的方式通告出去。你可以把这个过程理解成翻译:OSPF的Cost翻译成RIP的跳数,RIP的下一跳地址翻译成OSPF的LSDB里的外部LSA信息。翻译必然丢“原意”,比如Metric值的量纲对不上,比如路由的原始来源信息部分丢失,这就是后面所有环路的导火索。
提示:做重发布的设备,必须同时维护两个协议的路由表,它自己的全局路由表里也必须同时存在两边路由。如果边界路由器自己都没学到某条路由,重发布就无从谈起。这是排查“路由为什么没重发布出去”时第一个要查的点。
H2正好也解释了一个常见困惑:为什么我在单协议环境里从不需要重发布?因为同一个协议内部的路由信息天然就是统一的,只有跨协议才需要“翻译”。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 重发布的三要素:方向、种子度量和Tag
2.1 方向性:import-route 永远是单向的
华为路由器上重发布命令的格式是:
bash复制ospf 1
import-route rip 1
或者反向:
bash复制rip 1
import-route ospf 1
一次配置只完成一个方向。所谓“双向重发布”,实际操作时就是在两台设备或者同一台设备上各写一条方向相反的引入命令。单方向不会形成环路,但它也解决不了“两边路由都要通”的需求,所以绝大多数的实验和真实网络都会配置双向。
理解方向性有个很简单的方法:每一条 import-route 命令都固定有一个“源协议”和一个“宿协议”。命令写在哪个协议视图下,哪个就是宿协议;被引入的是源协议。这个方向一旦看反,配置就会写到错误的位置,或者写对了地方却把过滤策略加反,第5节会详细讲这种低级的致命错误。重发布方向的规划,本质上就是在设计流量边界:哪个区域是主,哪个区域是备,路由主要从哪个方向流入,这些都会直接决定策略往哪儿挂。
2.2 种子度量值:每个协议的默认值不一样
重发布时最容易被忽略的是种子度量值(seed metric)。边界设备把外部路由引入新协议时,新协议不知道该怎么给这条路“定价”,只能用一个预设值充当初始metric,这个预设值就是种子度量值。不同平台、不同协议的默认值差异很大,华为设备上的常见默认值如下:
| 目标协议 | 默认种子度量值 | 说明 |
|---|---|---|
| OSPF | 1 | 默认外部路由类型为Type-2,Tag默认为1 |
| IS-IS | 0或10 | 取决于metric风格,强烈建议手工指定 |
| RIP | 1 | 表示1跳,通常需要在引入时手工加大 |
| BGP | 继承原路由的MED/开销 | 引入IGP时开销会继续传递 |
默认值的坑在于,IS-IS引入外部路由时如果默认metric偏小,会让所有IS-IS路由器认为这条路“几乎零开销”,流量全往边界设备上压。我在实验里习惯在引入命令里手动指定metric,比如:
bash复制rip 1
import-route ospf 1 cost 5
ospf 1
import-route rip 1 cost 100 type 1
这样做的另一个好处是,两边引入的开销不对称,在排错时能根据路由cost一眼看出路由的来源方向。凡是进入生产环境的双点双向重发布,我都不会让两边使用相同的引入cost,否则无法通过路由表区分路径来源。
2.3 Tag是排错和防环的利器
OSPF的外部LSA里有一个Tag字段,默认值为1。RIP的路由表项里也有Route Tag字段。Tag可以理解成贴在路由上的标签:边界路由器引入外部路由时给这条路打一个标记,另一台边界路由器看到带某个Tag的路由就知道“这条路是我兄弟从另一个域引回来的,不能再引回去”。Tag不参与选路计算,只用于标记和策略匹配,因此它是防环方案里的核心工具。
实战里我建议所有重发布实验都统一规划Tag编号。比如OSPF域引入到RIP的路由打100,RIP域引入到OSPF的路由打200,这样在 display ip routing-table 或者 display ospf lsdb 时能直接看到外部路由的来源,排查效率会高很多。需要注意,Tag的编号规划要写进网络变更文档,否则下次排障的人看到一条Tag为100的路由,根本不知道它代表什么。
3. 单点重发布简单,双点双向才是HCIP的重头戏
3.1 单点重发布快速回顾
单点重发布只有一个边界设备,即只有一台路由器同时连接两个协议域。这种情况下,即使双向引入,路由也只会通过这台设备单向流动,不会上游回环。因为另一侧没有第二台可以“重复引入”的边界设备,OSPF域内的路由被引入RIP后,RIP域内没有设备再能把它重新塞回OSPF。因此单点重发布只需关注metric失真,无需担心环路。
HCIP里单点通常作为基础题出现,考的是你知不知道在不同的目标协议视图下写 import-route,以及是否记得给外部路由设置合理的cost。多数人在这里不会出大问题,真正的分水岭在双点双向。双点双向在现网里几乎是标配,因为生产网络为了高可用,不可能只有一台边界路由器承担所有跨协议流量。一旦多加一台边界设备,问题就来了。
3.2 双点双向为什么危险
双点双向是指两个协议域之间有两台边界设备,并且每条边界上都配置了双向重发布。这是HCIP大纲和综合实验里极其常见的设计。两台边界设备同时把对方协议域的路由拿回来再导出去,OSPF和另一个协议之间就会出现“你来我往”的传递,环路和次优路径就都有了生存空间。
用一句话概括危险根源:重发布会改变路由的“出身”。一条原本属于OSPF域内的路由,经过一次重发布进入RIP后,在另一台边界设备看来,它已经变成了“从RIP学到的外部路由”,可以被再次引入回OSPF。如果两边都不做任何防护,这条路由就会在两个协议域之间来回跳动,甚至反复注入,形成看不见的振荡。振荡不像环路那样直接导致完全不通,但会造成路由频繁切换、丢包、时延抖动,排查起来非常恶心。
3.3 一个具体的环路形成链路
假设OSPF域内有一台路由器R4,其环回口地址为10.1.0.0/24,OSPF域通过R1和R2两台边界路由器连接到RIP域,R1、R2之间还有一条内部互联链路。整个环路形成过程如下:
- R4在OSPF域内通告10.1.0.0/24,R1、R2都能通过OSPF学到。
- R2执行OSPF到RIP的引入,把10.1.0.0/24注入RIP域。
- RIP域内的路由器(包括R1的RIP邻居)学到了这条路由,下一跳指向R2。
- R1从RIP侧学到10.1.0.0/24,但此时它已经不知道这条路由起源于OSPF。
- R1又执行RIP到OSPF的引入,把10.1.0.0/24重新注入OSPF域。
- OSPF域内出现两条关于10.1.0.0/24的外部LSA,一条由R2产生,另一条由R1产生,且R1通告的路径需要经过RIP域绕一圈。
这个过程再往后循环,如果R2还把R1重新注入的这条路由再次引回RIP,路由就在OSPF域和RIP域之间来回打转。实际表现为OSPF域内路由器到R4的路径忽好忽坏,下一跳在R1、R2之间不停切换。在RIP中跳数还会不断增加,直到达到16跳被判定不可达。
3.4 比环路更隐蔽的次优路径
环路是极端情况,更常见的是次优路径。还是上面的拓扑,R4的位置离R1很近,理论上OSPF域内流量走R1就能直达。但因为R2把10.1.0.0/24引进了RIP,R1又从RIP学回来,再通过重发布把它注入OSPF,就会在OSPF里多产生一条外部LSA。OSPF在Type-2外部路由下比较的是外部cost,如果这条绕路的外部cost更低(比如因为种子metric设置不当),域内路由器就会优先选择“OSPF内走到R1,再由R1绕经RIP域到R2,最后回到OSPF域”的荒谬路径。
这种次优路径不会导致断网,但会带来严重的时延增加和带宽浪费,而且极难通过ping发现。我在现网排查过一次类似问题,现象只是跨区域访问变慢,最后在边界设备上用 display ip routing-table 逐条对比,才发现所有跨域流量都绕了半圈。自那以后,凡是涉及双点双向重发布的方案,我都默认加防环策略,不再依赖自己“记得清拓扑”。
4. HCIP实验解法:三种主流防环方案的配置与对比
4.1 方案一:路由过滤,直接打断重发布回灌
最基本的思路是“不让不该回来的路由回来”。还是上面的场景,R1从RIP侧学到10.1.0.0/24后,不能再把它当外部路由引入OSPF。具体做法是在R1的RIP到OSPF引入方向上加过滤,直接拒绝这个前缀。
配置示例(在R1上):
bash复制# 定义前缀列表,拒绝回灌路由10.1.0.0/24
ip ip-prefix deny-back index 10 deny 10.1.0.0 24
ip ip-prefix deny-back index 20 permit 0.0.0.0 0 less-equal 32
route-policy deny-back deny node 10
if-match ip-prefix deny-back
route-policy deny-back permit node 20
ospf 1
import-route rip 1 route-policy deny-back
同时R2方向也需要做对应的防护,形成对称配置。这个方案简单直接,但它的问题是“一刀切”的边界感要很清楚:如果你确实希望在两个方向上都承载部分互访流量,盲目的过滤会误伤合法路由。所以在做过滤前,必须先画出双向的流量需求矩阵,明确哪些路由可以被重复注入,哪些必须杜绝。这个方案适用于协议之间不需要互相备份、流量方向比较固定的场景。
4.2 方案二:调整路由优先级,让“原厂路由”永远更优
第二种思路不是封锁路由,而是人为降低“重发布回来的路由”的优先级。华为路由器上路由优先级(preference)数值越小越优先,默认值如下表:
| 协议 | 默认优先级 |
|---|---|
| Direct | 0 |
| OSPF | 10 |
| IS-IS | 15 |
| 静态路由 | 60 |
| RIP | 100 |
| BGP | 170 |
假设OSPF域内保底优先级是10,那我在OSPF进程中,针对从RIP引入回来的Tag 100外部路由单独调低优先级到80,这样OSPF内部路由始终领先。配置如下:
bash复制route-policy lower-pref permit node 10
if-match tag 100
apply preference 80
route-policy lower-pref permit node 20
ospf 1
preference route-policy lower-pref
需要说明,preference route-policy 作用于OSPF所有路由的计算结果,因此node 20放行其余路由保持原优先级,避免误伤。这个方案的优点是灵活,不会丢路由,只会影响选路。它天然适合“两个方向都要通,但以OSPF域内路由优先”的场景。缺点是你需要清楚知道哪条路由是重发布回来的,Tag匹配必须准确,否则误伤或者漏网都很难排查。
4.3 方案三:Tag标记 + 入方向策略拒绝(对称防环)
第三种方案是前面两种思路的规范化版本,也是我在现网中最常用的。用Tag做全局来源标记,用route-policy在引入方向做统一拒绝。
先定义规则:OSPF域引入到RIP域的路由,统一打Tag 100;RIP域引入到OSPF域的路由,统一打Tag 200。然后在R1上,RIP到OSPF引入方向拒绝Tag 100,防止OSPF路由绕RIP一圈又回到OSPF;在R2上,OSPF到RIP引入方向拒绝Tag 200,防止RIP路由绕OSPF一圈又回到RIP。
R2上OSPF到RIP方向的配置:
bash复制# 给源OSPF路由打Tag 100
route-policy tag100 permit node 10
apply tag 100
rip 1
import-route ospf 1 route-policy tag100
R1上RIP到OSPF方向拒绝Tag 100:
bash复制route-policy deny-tag100 deny node 10
if-match tag 100
route-policy deny-tag100 permit node 20
ospf 1
import-route rip 1 route-policy deny-tag100
反向对称配置同理。这个方案的好处是:不管理由条目怎么变化,只要来源方向固定,策略都能自动命中。相比前缀列表逐条匹配,它在大规模网络里的可维护性高得多。缺点是需要提前规划好Tag编号体系,而且所有边界设备要使用同一套编号文档,否则换了人维护后很难看懂Tag含义。
注意:如果协议组合换成OSPF和IS-IS,则需要用前缀列表方案代替Tag匹配,因为IS-IS的LSP里没有标准的外部路由Tag字段,策略匹配方式要随之调整。
4.4 三种方案的对比
| 方案 | 原理 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| 路由过滤 | 打断回灌 | 简单直观,配置量小 | 容易误伤合法路由 | 单向流量为主的边界 |
| 优先级调整 | 让内部路由优先 | 不丢路由,选路灵活 | 依赖Tag匹配准确性 | 双向互访且需要冗余的边界 |
| Tag+策略拒绝 | 标记来源并统一拒绝 | 可管理性强,适合大规模 | 需要维护Tag编号体系 | 多边界、多协议的综合网络 |
4.5 实验验证:如何判断方案生效
配置完成后,不能只看ping通就算完。验证分三步:
第一步,在边界设备上查看外部路由的Tag。使用 display ip routing-table 加具体网段,或者 display ospf lsdb 查看外部LSA里的Tag值,确认引入方向打标正确。
第二步,在OSPF域内选择一台非边界路由器,执行 display ip routing-table 10.1.0.0 24,检查去往R4环回口的下一跳是R1还是R2,并对比路径是否合理。如果配置了优先级调整,应能看到OSPF域内的内部路由(preference=10)优先于重发布回来的外部路由。
第三步,观察路由是否振荡。连续执行 display ospf peer 和 display rip neighbor,看邻居是否稳定;再配合 ping 指定源地址持续跑一段时间,如果出现大量丢包或时延突变,说明路由还在跳变,防环方案没有生效。还有一个很实用的命令是 display ip routing-table statistics,如果路由表频繁刷新,统计值会异常增长,可以快速判断是否有振荡。
5. 考场与现网中容易丢分和踩坑的细节
5.1 过滤方向搞反的经典错误
我在模拟器里演示双点双向时,很多同学会把 filter-policy 或者 route-policy 挂错视图。比如在OSPF进程下执行 import-route rip 1,随后紧跟着写 filter-policy,本意是“过滤从RIP学来并引入OSPF的路由”,结果把过滤策略挂到了OSPF的区域内入方向,导致OSPF域内的正常路由也被过滤,最终全网路由表残缺。
这里必须说清楚华为的实现逻辑:OSPF视图下的 filter-policy import 作用于路由表计算阶段,它会影响所有进入OSPF路由表的路由,包括OSPF内部路由;而 import-route 命令本身绑定的 route-policy 是在重发布源头就决定哪条路由被引入。两者作用位置不同。如果只想去掉某条重发布回来的路由,优先在 import-route 命令上绑定 route-policy,而不是在OSPF进程下挂 filter-policy import。
5.2 度量值和Tag不一致
另一个常见问题是对Tag默认值理解不到位。OSPF默认会把外部路由的Tag置为1,如果你在配置中使用了“拒绝Tag 1”的策略,那么所有从其他协议引入OSPF的路由都会被拒绝,因为默认Tag就是1。我在实验里习惯给所有需要防环的路由打一个非默认的Tag值(比如100、200),只有这样才能区分“人为引入”和“协议默认引入”。
还有一点容易被忽略:OSPF外部路由的Type-1和Type-2对选路的影响完全不同。Type-2只比较ASBR到目的地前缀的外部Cost,域内Cost不参与计算;Type-1会把内部Cost加进外部Cost里。双点双向中如果一边是Type-1一边是Type-2,选路结果会和预期差很多。HCIP实验里最常见的是默认Type-2,我建议统一显式指定,比如 import-route rip 1 cost 50 type 1,避免默认行为干扰判断。
5.3 一套可以复用的排错顺序
最后分享一套我在现网和模拟器里都经常使用的外部路由排错顺序,按这个顺序查,基本能覆盖90%的重发布问题:
- 在每台边界设备上执行 display current-configuration,先确认 import-route 命令存在,且方向正确。
- 用 display ip routing-table 查看边界设备自身的全局路由表,确认源协议的路由已经学到,且下一跳是期望值。
- 用 display ip routing-table protocol ospf 或 display ip routing-table protocol rip 查看引入后的路由是否出现在协议路由表中,注意看preference、cost和Tag。
- 如果是双点双向,去另一台边界设备上查看同一条路由的表项,对比两边的cost和preference,找出谁在“回灌”。
- 最后用 display ospf lsdb 和 display rip database 检查LSDB和RIP数据库的实际内容,确认策略确实作用于通告出去的路径,而不是只改了本地路由表。
这五步走完,绝大多数重发布引发的环路、次优路径和路由震荡问题都能定位到具体设备和具体命令。整个过程不要靠猜,每一步都看表项说话。重发布这一章难就难在它不是一个“敲完就完事”的配置,而是需要你从整体网络设计的高度去考虑流量怎么走、路由怎么防环。把双点双向这个模型彻底想清楚,HCIP综合实验里再遇到任何协议边界问题,你都能有一套完整的应对思路。
