
1. 先想明白为什么非要在RIP和OSPF之间做重分发第一次在eNSP里把RIP和OSPF摆在一起的时候很多人的直觉是直接把两个协议都配上去不就行了。真配下去你会发现两边各自的邻居关系都是通的路由表里却看不到对端网段的影子——RIP觉得自己只认识跳数OSPF觉得自己只认识开销两套协议互不认账就像两个说不同方言的人坐在同一张桌子上谁也听不懂谁。路由重分发Route Redistribution要解决的就是这个问题在ASBR自治系统边界路由器上把一个协议进程里的路由翻译成另一个协议进程能听懂的语言再注入进去。这个技能在实际网络里的出场率非常高。园区网早年上的RIP后来出口设备换成支持OSPF的两套要共存一段时间或者并购、改造、分期割接的过程中老区域跑RIP、新区域跑OSPF边界设备上必然要做重分发。在eNSP里练这个好处是成本极低拓扑随便删命令敲错了reset saved-configuration一重启就干净了比真机折腾安全得多。所以我一直建议刚接触路由协议的人把RIP与OSPF双向重分发当成一道必修实验题——它把度量值、优先级、路由环路、路由过滤这几个核心概念一次性串起来了做完这一道路由选路的底层逻辑基本就通了。适合谁看能配单协议RIP或OSPF、但对引入之后路由去哪了心存疑惑的人正在准备网络方向认证、需要把实验现象和原理对上号的人以及被配了import-route但路由表没变化卡住、想找一条系统排查路径的人。下面我按原理—设计—配置—排错—工程化的顺序铺开讲命令都是在eNSP里实敲验证过的可以直接抄。1.1 两套协议并存不是设计失误是现实妥协很多人潜意识里觉得一个网络里跑两种IGP是不专业。实际上大型网络的演进从来不是推倒重来而是渐进替换。一个典型场景是某公司的老厂区网络十几年前用RIP搭起来设备老、网段简单、维护人员也熟新建的研发楼用OSPF因为要分层、要快速收敛、要支持VLSM。两边的核心交换机之间连一根线谁也不想把这个割接做成停机一个周末的大工程于是边界设备上就出现了RIP进程和OSPF进程同时运行的局面。还有一类场景是设备能力异构。有些低端接入设备只支持RIP跑不了OSPF而汇聚层以上全部是OSPF。这时候RIP就成了最后一公里的接入协议重分发点放在汇聚设备上。这种边缘RIP、核心OSPF的架构在一些传统行业网里至今还能见到。理解了这一点你就不会把重分发当成一个炫技的配置而会把它看成一种协议边界的适配层。适配层的设计目标很朴素让两边的路由该通的通、不该通的不通、通过去的那条路还得是次优解里最优的那条。想清楚这三个目标后面所有的参数种子度量、路由类型、优先级、过滤策略就都有了落脚点。1.2 重分发的本质汇率兑换加方向管理我一直用一个比喻来解释重分发它像货币兑换。RIP的度量单位是跳数OSPF的度量单位是开销Cost两者之间没有天然换算关系——就像人民币和美元你不能说1块钱等于1美元必须有个汇率。这个汇率在网络术语里叫种子度量Seed Metric是你手工指定的、路由刚进入新协议时的初始开销。种子度量给得合不合理直接决定了重分发过去的路由在对方域里是优等生还是垫底货。除了汇率还有方向。重分发是单向的在OSPF进程里写import-route rip意思是把RIP的路由拿进OSPF反过来在RIP进程里写import-route ospf才是另一个方向。这两条命令互不替代。很多人第一次配只写了一条然后疑惑为什么RIP能看到OSPF的网段OSPF看不到RIP的原因就在这儿。再往深一层还有谁能换、换多少、换过去之后能不能再换回来三个问题。谁能换靠路由策略控制换多少靠度量值和路由类型控制能不能换回来——这就是路由反馈和环路的源头也是重分发里最容易翻车的地方。我见过不少实验环境的配置单看每一条命令都对但两台边界路由器一互联路由表里就冒出莫名其妙的次优路径本质上都是换回来的钱又拿去换了一遍。1.3 一个最小可验证的拓扑设计讲原理不如直接上手。为了把现象看清楚我用一个三台路由器的线性拓扑这是验证重分发最经济的结构R1在RIP域R3在OSPF域R2夹在中间做ASBR两边各跑一套协议R2上做双向重分发。地址规划如下这个规划我在多个实验里复用逻辑清晰、不易冲突设备接口IP地址所属协议域R1GE0/0/0192.168.12.1/24RIPR1GE0/0/1192.168.1.1/24RIP模拟用户网段R2GE0/0/0192.168.12.2/24RIPR2GE0/0/1192.168.23.2/24OSPFR3GE0/0/0192.168.23.3/24OSPFR3GE0/0/1192.168.3.1/24OSPF模拟服务器网段为什么选线性拓扑而不是三角形因为三角形会天然引入两条路径双向重分发一旦配上次优路径和路由反馈会同时出现现象非常混乱新手根本分不清哪个现象是哪个原因造成的。先用线性拓扑把路由能不能过去这件最基本的事验证通过再换成三角形去看环路这个递进顺序我建议你别跳过。提示eNSP里给接口配完地址记得undo shutdown多数型号默认开启但某些镜像下GE口初始是关闭状态不放心就手动敲一遍代价为零。2. 原理拆解种子度量、优先级与环路是怎么发生的配置命令其实只有几行难的是理解为什么这么给参数。这一节我把三个决定成败的机制掰开讲种子度量决定路由过去之后的相对优劣优先级决定同一目的地有多条来源时谁进路由表路由反馈决定双向重分发会不会自激。这三件事想透了后面排错就是查表。2.1 度量值不可通约种子度量就是那个汇率RIP的度量是跳数取值范围1到1516表示不可达。OSPF的度量是开销默认算法是参考带宽 ÷ 接口带宽参考带宽默认100Mbps所以一个千兆口算出来的开销是1100/1000不足1按1算百兆口是1十兆口是10。两套量纲完全不同RIP里的3是3跳OSPF里的3是3个开销单位直接拿来比较毫无意义。所以当RIP路由进入OSPF时你必须告诉OSPF这条外部路由初始算多少开销这就是import-route rip 1 cost 20里那个20的作用。反过来把OSPF路由灌进RIP时import-route ospf 1 cost 3里的3就是初始跳数。这里有个非常关键的默认值陷阱OSPF引入外部路由时默认cost是1而RIP引入外部路由时默认cost是0路由表里显示为metric 1。这两个默认值都极度危险。RIP那边给0意味着这条从OSPF来的路由在RIP域里零跳比任何本地直连之外的RIP路由都优一旦网络里存在冗余链路流量会一股脑涌向重分发点。OSPF那边给1意味着不管RIP域里那条路实际有多远进入OSPF后统一按开销1对待多边界场景下所有OSPF路由器都会认为走这个ASBR最近。我的经验做法是RIP方向给3到5跳OSPF方向给20到50的开销。给这个范围的理由是留出余量——RIP最大15跳如果种子度量给到10以上再叠加几跳就撞16变不可达整条路由直接消失这种故障现象特别隐蔽路由表里是没有而不是错误很容易查错方向。OSPF给20以上则是因为域内一个千兆链路的开销才1种子度量太小会让外部路由比域内路由还优造成流量绕行。重分发方向命令位置默认种子度量建议取值给这个值的理由RIP → OSPFOSPF进程视图cost 120~50避免外部路由优于域内路由留出叠加空间OSPF → RIPRIP进程视图cost 0显示13~5避免零跳抢占最优同时不撞15跳上限顺带说OSPF外部路由的两种类型。type 1表示外部开销要加上沿途OSPF域内的内部开销type 2默认表示只算外部开销域内开销不累加。选路时Type 1永远优先于Type 2同类型之间才比总开销。多ASBR场景下如果你想让大家按离谁近走谁来选就用Type 1如果就是想固定从某个点进出、不想让路径长度影响选择用Type 2更稳。实验里先用默认的Type 2把流程跑通再切Type 1观察路由表变化这个对比做一次你对LSA的理解会深一层。2.2 优先级管理距离决定谁是回程那条路华为设备里管不同来源的同一目的地谁进路由表的参数叫优先级Preference概念上等价于思科的管理距离数值越小越优。默认值必须背下来路由来源默认优先级说明直连0最高永远优先OSPF域内/域间10内部路由静态路由60手工指定RIP100距离矢量OSPF外部ASE150引入进来的外部路由BGP255最低这张表里藏着一个很多人没注意到的关键点OSPF外部路由的默认优先级是150比RIP的100还低数值更大。这意味着在重分发边界路由器上如果同一个目的网段既有一条RIP学来的路由又有一条OSPF外部路由设备会选RIP那条。这个设计不是随意的它天然抑制了一部分路由反馈OSPF外部路由被引入RIP后RIP域里传一圈再传回边界路由器时因为优先级100优于150回传的那条不会被采纳环路被切断了一层。但别指望它包打天下——单向重分发时它确实好用双向重分发加多边界时优先级这道防线会被绕过去该出环还是出环。实际排错时display ip routing-table 192.168.3.0这条命令比什么都好使它会明确告诉你这个目的地有几条候选路由、各自什么协议、什么优先级、最终选了哪条。我经常看到有人只看display ip routing-table的汇总输出发现路由不对劲就开始瞎改配置其实一条带目的地址的查询就能定位到问题在优先级还是在度量值。2.3 双向重分发的环路从哪来怎么破线性拓扑下做双向重分发一般不会出问题因为路径是单线的。但只要你把拓扑改成三角形——比如R1和R3之间再加一条直连——麻烦立刻就来。推演一下R2把RIP域的路由引入OSPFR3学到了R3又把这条路由通过直连链路以OSPF的方式告诉了R1不对R1不跑OSPF。真正的经典场景是双边界两台边界路由器R2和R4同时连接RIP域和OSPF域两边都配了双向重分发。这时候一条RIP路由被R2引入OSPFOSPF泛洪到R4R4又把它引入回RIPRIP域里就出现了一条绕了一圈回来的路由度量值随传播增加但路由确实存在。如果R4引入时给的度量比原来那条还小RIP域内的选路就直接被带偏了。破法有三层从轻到重第一层是单向重分发 默认路由。如果两个域之间本质是边缘访问核心的关系根本不需要互相知道对方的所有明细那就让边缘域只下发一条默认路由核心域不需要知道边缘的明细。这是最干净的做法环路从根上就不存在。OSPF里用default-route-advertise alwaysRIP里用default-route originate各一条命令解决。第二层是路由过滤。用ACL或前缀列表在重分发点卡住不该传播的网段或者用路由策略给不同来源的路由打标签Tag在对方域里按标签拒绝。标签法是双边界场景的标准解法R2引入时打tag 100R4引入时打tag 200两边都在import时拒绝对方标签的路由环路立刻断掉。第三层是调整优先级和度量值让反馈回来的路由永远比原始路由差设备自然不会选它。这层属于用选路机制兜底不如前两层干脆但作为辅助手段很有效。注意双向重分发只在确实需要两边互相知道明细的时候才做。我见过太多实验环境上来就配双向然后花两小时查环路其实现网根本不需要——问一句RIP域真的需要知道OSPF域里的每一条明细吗答案往往是不需要。3. eNSP实操从零把这条链路配通原理讲完进eNSP动手。这一节的命令我按先跑通单协议、再加重分发、最后验证的顺序排每一步都有明确的验证动作做完一步看一步比一口气全敲完再排查要省事得多。3.1 拓扑搭建与基础地址配置在eNSP里拖三台AR系列路由器按1.3节的规划连线、改名、配地址。R1的配置system-view sysname R1 interface GigabitEthernet0/0/0 ip address 192.168.12.1 255.255.255.0 interface GigabitEthernet0/0/1 ip address 192.168.1.1 255.255.255.0 quitR2作为边界设备两个接口分属不同协议域system-view sysname R2 interface GigabitEthernet0/0/0 ip address 192.168.12.2 255.255.255.0 interface GigabitEthernet0/0/1 ip address 192.168.23.2 255.255.255.0 quitR3system-view sysname R3 interface GigabitEthernet0/0/0 ip address 192.168.23.3 255.255.255.0 interface GigabitEthernet0/0/1 ip address 192.168.3.1 255.255.255.0 quit配完之后先互相ping一下直连ping 192.168.12.2和ping 192.168.23.3都通了再往下走。这一步别省我踩过的坑里有一半是地址掩码敲错、接口没起来导致的协议不通结果花了半小时查协议配置。直连不通的时候看协议配置纯属浪费时间。3.2 先把RIP和OSPF各自配通R1的RIP配置重点是版本2和关闭自动汇总rip 1 version 2 undo summary network 192.168.1.0 network 192.168.12.0 quitversion 2必须配版本1是有类路由协议不支持掩码实验里用不上。undo summary是关闭RIPv2的自动汇总——默认情况下RIPv2会把192.168.1.0/24这类子网路由汇总成主类网络192.168.1.0/24C类正好是/24看不出差别但如果是192.168.10.0/24这种自动汇总会变成192.168.0.0/16发出去重分发到OSPF后就是一条错误的大网段。这个坑极其隐蔽因为汇总后的路由看起来也能通只是通了不该通的地方。R2的RIP侧和R1对接只宣告12网段OSPF侧只宣告23网段rip 1 version 2 undo summary network 192.168.12.0 quit ospf 1 router-id 2.2.2.2 area 0 network 192.168.23.0 0.0.0.255 quitR3的OSPF配置ospf 1 router-id 3.3.3.3 area 0 network 192.168.23.0 0.0.0.255 network 192.168.3.0 0.0.0.255 quit配到这儿验证两件事R1上display ip routing-table应该能看到192.168.12.0/24直连和192.168.1.0/24直连RIP邻居用display rip 1 neighbor确认状态是UpR3上display ospf peer brief应该看到2.2.2.2处于Full状态。此时R1看不到192.168.3.0R3也看不到192.168.1.0这是正常的两边还没打通。提示router-id在OSPF里必须手动指定。eNSP里如果没配loopback、也没指定router-id设备会自己从接口地址里选一个选举结果不可控重启后可能变引发邻居重建。养成习惯每台跑OSPF的设备第一件事就是写router-id。3.3 重分发命令逐条拆解现在在R2上加两条命令这是整个实验的核心。把RIP引入OSPFospf 1 import-route rip 1 cost 20 type 2 quit把OSPF引入RIPrip 1 import-route ospf 1 cost 3 quit就这两条路由就通了。现在R3上执行display ip routing-table protocol ospf应该能看到类似这样的输出Destination/Mask Proto Pre Cost Flags NextHop Interface 192.168.1.0/24 O_ASE 150 20 D 192.168.23.2 GE0/0/0四个字段值得逐个看O_ASE表示OSPF外部路由Pre 150就是前面讲的默认优先级Cost 20是你指定的种子度量下一跳是R2。R1上display ip routing-table protocol rip应该能看到192.168.3.0/24Cost为3。为了验证连通性在R1上ping 192.168.3.1通。到这一步最基础的双向重分发就跑通了。再补两个常用变体。如果RIP域里有静态路由或者直连网段需要传过去命令是import-route static和import-route directdirect在eNSP实验里用得很多因为不用额外造静态路由就能模拟内部网段。如果希望OSPF域能访问RIP域之外可以在OSPF里下发默认路由default-route-advertise always注意不加always的话只有本机存在默认路由时才会下发实验里经常因为没有默认路由而配了没反应。3.4 验证别只看路由表要看LSA和路径路由表通了只是第一层。真正确认重分发按你预期工作得多看几个地方。先看OSPF的LSDB确认外部路由是以Type-5 LSA的形式泛洪的display ospf lsdb ase 192.168.1.0输出里能看到Type: External、Ls id: 192.168.1.0、Advertising Router: 2.2.2.2、Metric: 20、Forwarding Address。Forwarding Address这个字段是重分发排错的常客——如果它被填成了一个不可达地址其他路由器虽然收到了LSA但算不出有效路径路由表里就是空的。默认情况下R2引入RIP路由时FA是0.0.0.0表示从ASBR自己走一般没问题但如果R2连接RIP域的接口被配成了静默接口或者被过滤FA可能变成实际地址就要留意了。再用tracert看实际转发路径。在R1上tracert 192.168.3.1应该看到两跳192.168.12.2、192.168.23.3。这个动作比ping有价值得多ping只告诉你通不通tracert告诉你走的是不是你以为的那条路。我在排查一次路由表看着对但延迟异常的问题时就是靠tracert发现流量绕了一台本不该经过的设备。最后一招在R2上开调试观察路由的引入过程实验环境用现网慎用terminal monitor terminal debugging debugging ospf routing能看到类似import route from rip的日志。看完记得undo debugging all关掉调试日志在eNSP里刷屏很快不及时关会拖慢模拟器。4. 疑难排查那些配了但没生效的时刻重分发的报障有很强的规律性绝大多数集中在五类现象上。我按现象—原因—验证—处理的结构整理了一遍配一份速查表遇到问题照着走一遍基本能定位。4.1 五类高频现象的原因分析现象一路由表里根本看不到引入的路由。最常见的原因是协议进程号写错。import-route rip 1里的1是RIP进程号如果你RIP配的是rip 2这条命令引的是个不存在的进程自然没东西进来。第二种原因是源协议里本身就没有这条路由——比如RIP域里的网段没有被network宣告出去RIP路由表里压根没有那OSPF再怎么引也引不到。验证方法很直接先在源协议上display rip 1 route或display ospf routing确认路由确实存在再去查引入端。现象二路由进来了但下一跳不可达路由表里标记为无效。这种通常在OSPF外部路由上出现表现为路由表里有一条但Flags不是D。原因多半是Forwarding Address指向了一个OSPF域内不可达的地址或者ASBR与下一跳之间的接口没跑OSPF。处理办法是在ASBR上确认引入接口所属网段已经被OSPF宣告或者干脆用import-route配合route-policy把FA强制设为0。现象三路由有了但走的是次优路径。这个最典型。比如OSPF域里明明有两条路能到R2但所有流量都挤在一条上。原因通常是种子度量给得太小比如默认的1导致所有路由器都认为从ASBR出去最近。这时候把cost调大或者改用type 1让内部开销参与累加路径就会自然分散。我在一次实验里把cost从1改成30之后OSPF域内两台路由器的下一跳立刻从都指向同一个ASBR变成了各走各的近端效果立竿见影。现象四RIP域里出现了一条跳数很离谱的路由。双向重分发加上冗余链路时路由反馈会让某条路由在RIP域里来回传播跳数不断累加直到撞上16变成不可达然后路由时有时无表现为间歇性丢包。看到这种抖动第一反应就应该是有环去查双向重分发的两个点。验证方法是在RIP域的两端分别display rip 1 route对比同一目的地的跳数是否不一致。现象五明细路由变成了大网段。前面提过的RIPv2自动汇总。192.168.10.0/24、192.168.11.0/24被汇总成192.168.0.0/16传给OSPFOSPF域里的设备就会认为整个/16都在RIP域去往192.168.99.0的流量也会被送到R2然后丢弃。处理就是在RIP进程下加undo summary然后在接口上确认没有额外的汇总配置。4.2 排查命令与速查表排查的核心思路是顺着数据流往回找先确认目的端有没有这条路由再看源端有没有这条路由最后看中间的重分发点有没有正确引入。每一步都有对应的命令。现象优先检查的命令常见原因处理动作完全看不到引入的路由display rip 1 route/display ospf routing源协议没有该路由、进程号写错补宣告、核对进程号路由存在但不可用display ospf lsdb ase看FA字段Forwarding Address不可达宣告ASBR互联网段、或route-policy改FA路径次优、流量集中display ip routing-table 目标网段种子度量过小调大cost或改type 1路由抖动、时通时断两端display rip 1 route对比跳数双向重分发环路加路由过滤、打Tag、改单向明细变大网段display rip 1 databaseRIPv2自动汇总未关闭undo summary引入后路由优先级异常display ip routing-table 目标网段看PreOSPF外部150 vs RIP 100用preference调整或加过滤再补两个我常用的组合命令。display ip routing-table protocol ospf只看OSPF路由比看全表清爽display ospf brief能看到本机是不是ASBR输出里有ASBR: YES如果这里显示NO说明你压根没配import-route或者配到了别的进程上——这个字段是判断重分发到底生效没有最快的一眼。注意OSPF的filter-policy import只影响本机路由表不影响LSA泛洪。很多人想用它阻止某条外部路由传播给其他设备配完发现邻居照样能学到就是因为这个。要真正阻止泛洪得用filter-policy export在ASBR上抑制Type-5生成或者在ABR上用asbr-summary做抑制。这个区别记牢能省下大量试错时间。5. 工程化收尾过滤、聚合与度量微调实验环境跑通只是起点。真实网络里重分发承担的是协议边界治理的职责光能通不够还得可控、可预测、不惹事。这一节讲三件在实验里容易被忽略、但在实际配置中必须做的事。5.1 用路由策略把不该传播的网段掐死最直接的手段是ACL加filter-policy。假设RIP域里有个实验网段192.168.1.0/24不需要让OSPF域知道先在R2上写ACLacl number 2000 rule 5 deny source 192.168.1.0 0.0.0.255 rule 10 permit quit然后在OSPF进程的引入上调用ospf 1 filter-policy 2000 export quit这样一来Type-5 LSA就不会为192.168.1.0生成OSPF域里彻底看不到。比在接收端过滤干净得多。更精细的控制用route-policy。它的好处是除了匹配还能改属性比如给引入的路由统一打标签route-policy TAG-RIP permit node 10 apply tag 100 quit ospf 1 import-route rip 1 route-policy TAG-RIP cost 20 type 2 quit打了Tag之后在双边界场景里另一台边界路由器就可以在import时拒绝tag 100的路由环路直接断掉。这套引入时打标、反向时拒绝的组合是我处理多边界重分发的默认动作比调度量值可靠得多因为它不依赖数值比较的巧合是逻辑上的硬隔离。对RIP侧做过滤命令形式一样rip 1 filter-policy 2001 export quit注意RIP的filter-policy作用在发送更新上export方向和OSPF的含义略有差别别搞混。5.2 度量值微调与聚合的取舍种子度量给多少除了前面讲的范围原则还要结合实际的链路带宽。华为设备可以用bandwidth-reference统一调整OSPF的参考带宽默认100Mbps在千兆、万兆环境下会让所有高速链路的开销都算成1失去区分度。如果实验里想看到带宽差异带来的选路变化可以在所有设备上统一改成bandwidth-reference 10000即10Gbps参考这样千兆口开销是10、百兆口是100差异就出来了。这个参数必须在同一OSPF域内所有设备上统一不一致会导致路由计算出现环路——因为每台设备对同一条链路的开销理解不同。聚合方面OSPF侧可以用asbr-summary把多条外部路由汇总成一条Type-5RIP侧可以用summary在接口上做汇总。聚合的好处是减小LSDB和路由表规模、提高稳定性代价是丢失明细聚合网段内的某些地址如果实际不可达流量会被引到ASBR然后丢弃形成黑洞。我的做法是只有在明细网段连续、且全部可达的前提下才做聚合且聚合后的掩码不要比实际使用的范围大太多。实验环境里可以大胆试把asbr-summary 192.168.0.0 255.255.0.0加进去观察路由表从多条变一条再undo回来对比这个过程对理解聚合边界很有帮助。最后提一句default-route-advertise的使用时机。如果RIP域是纯末端网络、只需要一条出口那在OSPF里下发默认路由、在RIP域里也下发默认路由两边互不引入明细是最稳的架构。这种设计下压根不存在重分发环路问题维护成本极低。我个人的偏好是能用默认路由解决的场景绝不引入明细能单向解决的场景绝不做双向。重分发的复杂度是有代价的而这个代价往往在半年后某次割接时才显现出来。我在实际做这类实验时的体会是命令本身十分钟就能背下来真正花时间的是看到现象能反推到原因。建议你把第4节那张速查表打印出来贴在显示器边上每次实验故意制造一个故障——把cost改成1、把undo summary删掉、把进程号写错——然后自己查一遍查三次之后这套东西就长在身上了。另外一个小技巧eNSP支持保存拓扑快照把配置正确的那个状态存一份改坏了直接回滚比一条条undo快得多也避免了改到一半忘了原配置是什么。