1. 实验背景与整体设计思路
1.1 为什么高级路由实验是网络学习的分水岭
做过几个基础实验之后,很多人会有一种错觉:配个IP、起个路由协议、ping通就完事了。但真正到了高级路由实验这个环节,你会发现事情没那么简单。基础实验里,网络拓扑通常是扁平的,两三个路由器直连,跑个静态路由或者单区域OSPF就能通。可一旦引入多区域、路由重分发、路由策略、备份链路这些概念,整个网络的复杂度会指数级上升。
高级路由实验的核心价值在于:它模拟的是真实企业网络中常见的多协议共存、多路径冗余、策略控制等场景。你在实验里踩过的每一个坑,在真实项目里几乎都会以某种形式重现。比如双点双向重分发产生的次优路径和路由环路,比如OSPF与EIGRP之间因为管理距离不同导致的路径选择异常,比如用route-map做策略路由时因为ACL匹配顺序写错导致流量走向完全偏离预期。
这个实验适合已经掌握基础路由配置、对OSPF和EIGRP有初步了解、能独立完成VLAN间路由的读者。如果你还没做过基础实验,建议先回去补课,否则高级实验会让你一头雾水。但如果你已经有一定基础,想往网络工程师方向深入,这个实验是绕不过去的坎。
1.2 实验拓扑的整体规划
我设计的这个实验拓扑包含四个路由器区域,模拟一个典型的企业总部-分支机构网络。核心层有两台路由器跑OSPF多区域,其中骨干区域Area 0连接两台核心路由器,Area 1和Area 2分别连接两个分支区域。边缘有一台路由器跑EIGRP,模拟收购来的子公司网络,需要通过重分发与OSPF域互通。另外还有一条备份链路,用浮动静态路由实现主链路故障时的自动切换。
为什么这样设计?因为真实企业网络很少是单一协议的。公司总部可能用OSPF,收购的子公司原来用EIGRP,两边要互通就必须做重分发。而重分发是高级路由里最容易出问题的地方,管理距离、度量值、路由标记、过滤策略,任何一个环节没处理好都会导致网络异常。我把这些元素全部塞进一个实验里,就是为了让你在一个可控的环境中把所有坑都踩一遍。
拓扑的IP地址规划我采用10.0.0.0/8的私有地址空间,每个路由器之间的互联链路用/30掩码,环回口用/32掩码模拟用户网段。这样做的好处是地址规划清晰,后续做路由汇总的时候也方便。具体规划如下表:
| 设备 | 接口 | IP地址 | 说明 |
|---|---|---|---|
| R1 | Lo0 | 10.1.1.1/32 | 模拟Area 1用户网段 |
| R1 | Gi0/0 | 10.0.12.1/30 | 连接R2 |
| R2 | Lo0 | 10.2.2.2/32 | 模拟Area 0核心 |
| R2 | Gi0/0 | 10.0.12.2/30 | 连接R1 |
| R2 | Gi0/1 | 10.0.23.1/30 | 连接R3 |
| R3 | Lo0 | 10.3.3.3/32 | 模拟Area 2用户网段 |
| R3 | Gi0/0 | 10.0.23.2/30 | 连接R2 |
| R3 | Gi0/1 | 10.0.34.1/30 | 连接R4 |
| R4 | Lo0 | 10.4.4.4/32 | 模拟EIGRP域网段 |
| R4 | Gi0/0 | 10.0.34.2/30 | 连接R3 |
| R4 | Gi0/1 | 10.0.45.1/30 | 连接R5(备份链路) |
| R5 | Gi0/0 | 10.0.45.2/30 | 连接R4 |
| R5 | Gi0/1 | 10.0.35.1/30 | 连接R3(备份链路) |
这个规划里,R4和R5之间的链路是备份路径,正常情况下不走流量,只有当R3到R4的主链路故障时才启用。这样设计的目的是练习浮动静态路由和路由冗余。
1.3 协议选型与重分发策略的考量
为什么核心用OSPF而不是EIGRP?因为OSPF在多区域场景下更典型,Area 0骨干区域的概念、LSA类型、区域间路由汇总这些知识点是网络工程师必须掌握的。EIGRP虽然配置简单,但它是思科私有协议,在多厂商环境下不适用。当然,实验里我特意保留了一个EIGRP域,就是为了练习重分发。
重分发的方向有两个:OSPF重分发进EIGRP,EIGRP重分发进OSPF。这两个方向的处理方式完全不同。OSPF重分发进EIGRP时,需要指定度量值,因为EIGRP的度量参数(带宽、延迟、可靠性、负载)和OSPF的成本值没有直接映射关系。而EIGRP重分发进OSPF时,需要指定度量类型(Type 1还是Type 2),还要考虑是否设置种子度量值。
我见过很多人在做重分发时直接写redistribute ospf 1 metric 10000 100 255 1 1500就完事了,结果发现路由是学到了,但路径选择完全不对。问题出在度量值设置不合理,导致路由器选择了次优路径。正确的做法是根据实际链路带宽计算度量值,或者用route-map对特定路由设置标记,在另一端根据标记做策略。
注意:重分发是双向的,但策略必须对称设计。如果只在一边做过滤,另一边不做,很容易产生路由环路。我建议在重分发的两个边界路由器上都配置route-map,明确哪些路由允许重分发,哪些不允许。
2. 核心配置细节与实操要点
2.1 OSPF多区域配置的关键参数
先搞定OSPF多区域。R1在Area 1,R2在Area 0和Area 1的边界(ABR),R3在Area 0和Area 2的边界(ABR),R4在Area 2。这里有个细节:R2同时连接Area 0和Area 1,它是ABR;R3同时连接Area 0和Area 2,也是ABR。ABR的角色很重要,因为它负责生成Type 3 LSA(网络汇总LSA),把本区域的路由通告到其他区域。
R1的OSPF配置:
R1(config)# router ospf 1 R1(config-router)# router-id 1.1.1.1 R1(config-router)# network 10.1.1.1 0.0.0.0 area 1 R1(config-router)# network 10.0.12.0 0.0.0.3 area 1R2的OSPF配置:
R2(config)# router ospf 1 R2(config-router)# router-id 2.2.2.2 R2(config-router)# network 10.2.2.2 0.0.0.0 area 0 R2(config-router)# network 10.0.12.0 0.0.0.3 area 1 R2(config-router)# network 10.0.23.0 0.0.0.3 area 0R3的OSPF配置:
R3(config)# router ospf 1 R3(config-router)# router-id 3.3.3.3 R3(config-router)# network 10.3.3.3 0.0.0.0 area 2 R3(config-router)# network 10.0.23.0 0.0.0.3 area 0 R3(config-router)# network 10.0.34.0 0.0.0.3 area 2这里有个容易忽略的点:R2的Gi0/0接口在Area 1,Gi0/1接口在Area 0。配置的时候要确保接口所属区域正确,否则ABR不会生成Type 3 LSA,区域间路由就学不到。我见过有人把两个接口都配到Area 0,结果Area 1的路由传不出去,排查了半天才发现是区域配错了。
另一个关键点是router-id。如果不手动指定,OSPF会自动选择环回口地址或者物理接口地址作为router-id。在实验环境里,我强烈建议手动指定router-id,因为自动选择的router-id可能在接口down掉后发生变化,导致OSPF邻居关系重置。router-id的格式是点分十进制,通常用环回口地址,比如1.1.1.1、2.2.2.2这样,方便记忆和排查。
2.2 EIGRP域的配置与AS号选择
R4跑EIGRP,AS号我用100。为什么用100?其实AS号在EIGRP里只有本地意义,只要同一域内的路由器AS号一致就行。但为了和OSPF的进程号1区分开,我用100,避免混淆。
R4的EIGRP配置:
R4(config)# router eigrp 100 R4(config-router)# no auto-summary R4(config-router)# network 10.4.4.4 0.0.0.0 R4(config-router)# network 10.0.34.0 0.0.0.3 R4(config-router)# network 10.0.45.0 0.0.0.3注意no auto-summary这条命令。EIGRP默认开启自动汇总,会把10.4.4.4/32汇总成10.0.0.0/8,这在实验环境里会导致路由混乱。虽然在新版本的IOS里自动汇总默认是关闭的,但手动敲一下更保险。我踩过的坑是:有一次做重分发实验,EIGRP把10.0.0.0/8通告进了OSPF,结果OSPF域里所有10.x.x.x的明细路由都被覆盖了,整个网络瘫痪。排查了半小时才发现是自动汇总没关。
R5的EIGRP配置类似,但R5只连接R4和R3,它不跑EIGRP,而是用静态路由实现备份。这里先按下不表,后面讲浮动静态路由时再说。
2.3 双点双向重分发的配置与陷阱
重分发是本实验的核心难点。R3同时跑OSPF和EIGRP,它是重分发点。R4也同时跑OSPF和EIGRP吗?不,R4只跑EIGRP,但R4通过R3学到OSPF路由。等等,这里需要理清楚:R3的Gi0/1接口连接R4,这个接口在OSPF Area 2里,但R4不跑OSPF,所以R3和R4之间实际上没有OSPF邻居关系。那R3怎么把OSPF路由传给R4?通过重分发。
R3的重分发配置:
R3(config)# router ospf 1 R3(config-router)# redistribute eigrp 100 subnets R3(config-router)# redistribute eigrp 100 subnets route-map EIGRP-TO-OSPF R3(config-router)# default-metric 100 R3(config)# router eigrp 100 R3(config-router)# redistribute ospf 1 metric 10000 100 255 1 1500 route-map OSPF-TO-EIGRP这里我用了route-map来做策略控制,而不是裸重分发。为什么?因为裸重分发会把所有路由都倒过去,包括你不想要的路由。比如OSPF域里的10.0.12.0/30这种互联链路,没必要通告进EIGRP。用route-map可以精确控制哪些路由允许重分发。
先定义ACL匹配需要重分发的路由:
R3(config)# ip access-list standard OSPF-ROUTES R3(config-std-nacl)# permit 10.1.1.0 0.0.0.255 R3(config-std-nacl)# permit 10.2.2.0 0.0.0.255 R3(config-std-nacl)# permit 10.3.3.0 0.0.0.255 R3(config)# ip access-list standard EIGRP-ROUTES R3(config-std-nacl)# permit 10.4.4.0 0.0.0.255然后定义route-map:
R3(config)# route-map OSPF-TO-EIGRP permit 10 R3(config-route-map)# match ip address OSPF-ROUTES R3(config-route-map)# set metric 10000 100 255 1 1500 R3(config)# route-map EIGRP-TO-OSPF permit 10 R3(config-route-map)# match ip address EIGRP-ROUTES R3(config-route-map)# set metric 100这样配置之后,只有10.1.1.0/24、10.2.2.0/24、10.3.3.0/24会被重分发进EIGRP,只有10.4.4.0/24会被重分发进OSPF。互联链路和备份链路不会被通告,减少了路由表规模,也避免了潜在的路由环路。
但这里有个陷阱:双点双向重分发。如果R3和R4都做重分发,而且两边都允许对方的路由进来,就可能产生路由环路。比如R3从OSPF学到10.1.1.0/24,重分发进EIGRP传给R4;R4又从EIGRP学到10.1.1.0/24,重分发回OSPF传给R3。R3一看,这条路由我从OSPF也学到了,从EIGRP也学到了,选哪条?如果管理距离没调好,可能选错路径。
解决办法是在重分发点做路由标记(tag),然后在另一端根据tag做过滤。或者更简单粗暴:只在一个方向做重分发,另一个方向用静态路由或默认路由。但实验要求双向重分发,所以必须用tag。
改进后的配置:
R3(config)# route-map OSPF-TO-EIGRP permit 10 R3(config-route-map)# match ip address OSPF-ROUTES R3(config-route-map)# set metric 10000 100 255 1 1500 R3(config-route-map)# set tag 110 R3(config)# route-map EIGRP-TO-OSPF deny 5 R3(config-route-map)# match tag 110 R3(config)# route-map EIGRP-TO-OSPF permit 10 R3(config-route-map)# match ip address EIGRP-ROUTES R3(config-route-map)# set metric 100 R3(config-route-map)# set tag 220这样,从OSPF重分发进EIGRP的路由被打上tag 110,当这些路由从EIGRP再回来时,被route-map EIGRP-TO-OSPF的deny 5语句匹配到,直接拒绝,防止了环路。同理,从EIGRP重分发进OSPF的路由打tag 220,在OSPF-TO-EIGRP方向也要加一条deny语句匹配tag 220。
提示:tag的值是32位整数,本地有效,只要两端约定好就行。我习惯用110表示来自OSPF,220表示来自EIGRP,方便记忆。
2.4 浮动静态路由实现备份链路
R5的角色是备份路径。正常情况下,R3到R4的流量走Gi0/1直连链路(10.0.34.0/30)。当这条链路故障时,流量应该自动切换到R3-R5-R4的路径。实现方式是在R3上配置一条浮动静态路由,管理距离设为200(比OSPF的110大),指向R5。
R3的浮动静态路由配置:
R3(config)# ip route 10.4.4.4 255.255.255.255 10.0.35.2 200这条命令的意思是:去往10.4.4.4/32的流量,下一跳是10.0.35.2(R5的Gi0/1接口),管理距离200。正常情况下,OSPF学到的10.4.4.4/32路由管理距离是110,优先于静态路由的200,所以流量走主链路。当主链路故障时,OSPF路由消失,静态路由浮上来,流量切换到备份路径。
R5上需要配置回程路由:
R5(config)# ip route 10.1.1.1 255.255.255.255 10.0.45.1 R5(config)# ip route 10.2.2.2 255.255.255.255 10.0.45.1 R5(config)# ip route 10.3.3.3 255.255.255.255 10.0.45.1R5不跑任何动态路由协议,纯粹做转发。这样设计的好处是简单可靠,备份链路不参与动态路由计算,不会影响主路径的路由选择。
但这里有个细节:R5到R3的链路是10.0.35.0/30,R5的Gi0/1接口IP是10.0.35.1,R3的Gi0/1接口IP是10.0.34.1。等等,这里IP规划有问题。R3的Gi0/1接口已经配了10.0.34.1/30用于连接R4,不能再配10.0.35.1。所以R3需要另一个接口连接R5,或者用子接口。为了简化,我在R3上再加一个环回口模拟连接R5的链路,或者调整拓扑让R3和R5之间用单独的物理接口。
实际实验环境中,如果模拟器支持,最好给R3加一个Gi0/2接口,配10.0.35.1/30。如果接口不够,可以用环回口代替,但环回口不会down,无法模拟链路故障。所以还是建议用物理接口。
修正后的R3配置:
R3(config)# interface Gi0/2 R3(config-if)# ip address 10.0.35.1 255.255.255.252 R3(config-if)# no shutdown R3(config)# ip route 10.4.4.4 255.255.255.255 10.0.35.2 200R5的配置:
R5(config)# interface Gi0/0 R5(config-if)# ip address 10.0.45.2 255.255.255.252 R5(config-if)# no shutdown R5(config)# interface Gi0/1 R5(config-if)# ip address 10.0.35.2 255.255.255.252 R5(config-if)# no shutdown R5(config)# ip route 10.1.1.1 255.255.255.255 10.0.45.1 R5(config)# ip route 10.2.2.2 255.255.255.255 10.0.45.1 R5(config)# ip route 10.3.3.3 255.255.255.255 10.0.45.1这样备份路径就完整了。测试方法是:在R3上shutdown Gi0/1,然后从R1 ping 10.4.4.4,应该能通,但路径变成了R1-R2-R3-R5-R4。用traceroute可以看到路径变化。
3. 完整实操流程与验证方法
3.1 分阶段配置与验证步骤
我习惯把配置分成四个阶段,每个阶段配完就验证,不要一次性全配完再排错,那样出了问题很难定位。
第一阶段:基础IP配置和OSPF多区域。先给所有接口配IP,然后配OSPF。验证方法是show ip ospf neighbor看邻居关系是否Full,show ip route ospf看路由是否学到。R1应该能学到10.2.2.2/32、10.3.3.3/32,R3应该能学到10.1.1.1/32、10.2.2.2/32。
第二阶段:EIGRP配置。R4配EIGRP,R3也配EIGRP。验证方法是show ip eigrp neighbors看邻居关系,show ip route eigrp看路由。此时R3应该能学到10.4.4.4/32。
第三阶段:重分发配置。先配route-map和ACL,再配重分发。验证方法是show ip route看路由表,R1应该能学到10.4.4.4/32(通过OSPF外部路由),R4应该能学到10.1.1.1/32、10.2.2.2/32、10.3.3.3/32(通过EIGRP外部路由)。用show ip route 10.4.4.4看详细信息,确认是O E2还是O E1。
第四阶段:浮动静态路由和备份链路。配R5的静态路由和R3的浮动静态路由。验证方法是先正常ping,然后shutdown主链路,再ping,看是否切换。
每个阶段的验证命令我整理成了一张表:
| 阶段 | 验证命令 | 预期结果 |
|---|---|---|
| OSPF | show ip ospf neighbor | 邻居状态Full |
| OSPF | show ip route ospf | 学到其他区域的路由 |
| EIGRP | show ip eigrp neighbors | 邻居状态Up |
| EIGRP | show ip route eigrp | 学到EIGRP域路由 |
| 重分发 | show ip route | 看到O E2和D EX路由 |
| 重分发 | show ip route 10.4.4.4 | 确认管理距离和度量值 |
| 备份 | traceroute 10.4.4.4 | 路径经过R3-R4 |
| 备份 | shutdown主链路后traceroute | 路径经过R3-R5-R4 |
3.2 路由表分析与路径选择验证
配置完成后,R1的路由表应该包含以下关键条目:
R1# show ip route Codes: C - connected, S - static, O - OSPF, D - EIGRP 10.0.0.0/8 is variably subnetted C 10.1.1.1/32 is directly connected, Loopback0 C 10.0.12.0/30 is directly connected, GigabitEthernet0/0 O IA 10.2.2.2/32 [110/2] via 10.0.12.2, GigabitEthernet0/0 O IA 10.3.3.3/32 [110/3] via 10.0.12.2, GigabitEthernet0/0 O E2 10.4.4.4/32 [110/100] via 10.0.12.2, GigabitEthernet0/0注意10.4.4.4/32是O E2,管理距离110,度量值100。这个度量值是在R3上重分发时设置的种子度量值。E2表示外部路由的度量值不累加内部OSPF成本,始终是100。如果改成E1,度量值会累加沿途的OSPF成本。
R4的路由表:
R4# show ip route D 10.4.4.4/32 is directly connected, Loopback0 D 10.0.34.0/30 is directly connected, GigabitEthernet0/0 D EX 10.1.1.1/32 [170/...] via 10.0.34.1, GigabitEthernet0/0 D EX 10.2.2.2/32 [170/...] via 10.0.34.1, GigabitEthernet0/0 D EX 10.3.3.3/32 [170/...] via 10.0.34.1, GigabitEthernet0/0D EX表示EIGRP外部路由,管理距离170。度量值是一串数字,包括带宽、延迟、可靠性、负载、MTU。具体数值取决于重分发时设置的种子度量值。
这里有个验证技巧:用show ip route 10.4.4.4查看详细路由信息,确认下一跳和出接口是否正确。如果发现下一跳不对,比如应该走R3却走了R5,说明浮动静态路由的管理距离设置有问题,或者OSPF路由没学到。
3.3 故障切换测试与收敛时间观察
备份链路的测试是实验的高潮部分。先在R1上开一个持续的ping:
R1# ping 10.4.4.4 repeat 1000然后在R3上shutdown主链路:
R3(config)# interface Gi0/1 R3(config-if)# shutdown观察R1的ping输出。正常情况下,前几个包会丢失(因为路由收敛需要时间),然后恢复。丢包数量取决于OSPF的收敛速度,通常在3-10个包之间。如果丢包超过20个,说明收敛太慢,可能需要调整OSPF的hello和dead计时器。
恢复主链路:
R3(config)# interface Gi0/1 R3(config-if)# no shutdown再观察ping输出,同样会有短暂丢包,然后恢复。用traceroute确认路径切换回来了。
这个测试我做过很多次,发现一个现象:如果R3的Gi0/1接口shutdown后,OSPF邻居关系不会立即断开,而是要等到dead计时器超时(默认40秒)。这意味着路由切换会有40秒左右的延迟。为了加快收敛,可以把接口的OSPF dead计时器调小:
R3(config)# interface Gi0/1 R3(config-if)# ip ospf dead-interval 10 R3(config-if)# ip ospf hello-interval 2这样dead计时器变成10秒,收敛时间缩短到10秒以内。但注意,hello和dead计时器必须在链路两端一致,否则邻居关系建立不起来。所以R4的对应接口也要改。但R4不跑OSPF,所以这条链路实际上没有OSPF邻居。那R3怎么感知主链路故障?靠接口状态变化。当Gi0/1接口down时,OSPF会立即撤销该接口相关的路由,不需要等dead计时器。所以收敛时间主要取决于接口down的检测速度,通常很快。
注意:如果链路故障是中间传输设备导致的,接口状态可能不会立即down,这时候就需要依赖OSPF的dead计时器或者BFD(双向转发检测)来快速检测。BFD配置更复杂,实验里可以先不涉及。
4. 常见问题排查与避坑经验
4.1 重分发后路由丢失或次优路径
这是最常见的重分发问题。症状是:重分发配置看起来没问题,但路由表里就是没有对方协议的路由,或者有路由但路径不对。
原因一:种子度量值没设置或设置不合理。OSPF重分发进EIGRP时,如果不指定metric,EIGRP会拒绝这些路由。因为EIGRP的度量参数和OSPF的成本值没有映射关系,必须手动指定。我见过有人只写了redistribute ospf 1,没写metric,结果EIGRP路由表里空空如也。正确的写法是redistribute ospf 1 metric 10000 100 255 1 1500,这五个数字分别代表带宽(Kbps)、延迟(10微秒)、可靠性、负载、MTU。
原因二:管理距离冲突。如果同一目的地从两个协议都学到了路由,路由器会根据管理距离选择。EIGRP内部路由的管理距离是90,OSPF是110,所以EIGRP优先。但如果EIGRP路由是外部路由(D EX),管理距离是170,OSPF就优先了。这个特性在做双点双向重分发时特别容易出问题。解决办法是用distance命令调整管理距离,或者用route-map做过滤。
原因三:ACL匹配顺序错误。route-map里的match语句是按顺序匹配的,如果第一条deny语句匹配了所有流量,后面的permit语句就永远不会执行。我踩过的坑是:ACL里写了deny any,结果所有路由都被拒绝了。正确的做法是ACL只匹配需要过滤的流量,最后隐含permit any。
排查方法:用show ip protocols查看重分发配置,用show route-map查看route-map的匹配计数,用debug ip routing实时观察路由变化。但debug命令在模拟器里可能导致卡顿,建议只在必要时短时间开启。
4.2 OSPF邻居关系无法建立
OSPF邻居关系卡在Init或ExStart状态,是另一个高频问题。
Init状态表示收到了对方的hello包,但对方没有收到自己的hello包。通常是单向连通性问题,比如ACL阻止了OSPF的组播地址224.0.0.5,或者接口的MTU不匹配。OSPF默认要求链路两端MTU一致,如果一边是1500,另一边是1400,邻居关系会卡在ExStart。解决办法是用ip ospf mtu-ignore忽略MTU检查,或者把MTU改成一致。
ExStart状态表示MTU不匹配或者router-id冲突。router-id冲突的情况是两台路由器配了相同的router-id,OSPF会检测到并拒绝建立邻居关系。解决办法是修改router-id,然后clear ip ospf process重启OSPF进程。
还有一个容易被忽略的点:OSPF的network命令。如果network命令的掩码写错了,接口不会参与OSPF。比如接口IP是10.0.12.1/30,network命令写成network 10.0.12.0 0.0.0.255 area 0,掩码不匹配,接口就不会启用OSPF。正确的写法是network 10.0.12.0 0.0.0.3 area 0,反掩码是0.0.0.3。
排查方法:show ip ospf interface查看接口是否启用了OSPF,show ip ospf neighbor查看邻居状态,debug ip ospf adj查看邻居建立过程。同样,debug命令要慎用。
4.3 浮动静态路由不生效
浮动静态路由不生效,通常是因为管理距离设置不对,或者主路由没有消失。
如果主路由是OSPF学到的,管理距离是110,浮动静态路由的管理距离必须大于110才会在主路由存在时隐藏。我一般设200,留足够的余量。如果设成115,虽然也能隐藏,但万一以后调整了OSPF的管理距离,可能会冲突。
另一个原因是主路由没有真正消失。比如主链路故障了,但OSPF通过备份链路又学到了一条去往同一目的地的路由,管理距离还是110,浮动静态路由依然不生效。这种情况说明备份链路也跑了OSPF,需要检查备份链路的配置,确保它不参与OSPF。
还有一种情况是递归路由问题。浮动静态路由的下一跳必须可达,如果下一跳地址本身是通过主链路学到的,主链路故障后下一跳不可达,浮动静态路由也不会生效。解决办法是用出接口而不是下一跳地址,或者确保下一跳地址通过备份链路可达。
排查方法:show ip route 10.4.4.4查看当前生效的路由,show ip route static查看静态路由表,show ip route 10.0.35.2查看下一跳是否可达。
4.4 常见问题速查表
| 问题现象 | 可能原因 | 排查命令 | 解决方法 |
|---|---|---|---|
| 重分发后无路由 | 未设种子度量值 | show ip protocols | 添加metric参数 |
| 重分发后次优路径 | 管理距离冲突 | show ip route | 调整distance或做过滤 |
| OSPF邻居卡Init | 单向连通性问题 | show ip ospf neighbor | 检查ACL和组播 |
| OSPF邻居卡ExStart | MTU不匹配 | show ip ospf interface | mtu-ignore或改MTU |
| 浮动静态路由不生效 | 管理距离设置错误 | show ip route static | 调整管理距离 |
| 路由环路 | 双点双向重分发未打tag | show ip route | 配置route-map打tag |
| EIGRP邻居不建立 | AS号不一致 | show ip eigrp neighbors | 统一AS号 |
| 备份链路不切换 | 下一跳不可达 | show ip route | 改用出接口或修路由 |
5. 进阶扩展与实战建议
5.1 路由汇总的配置与效果验证
实验基本功能跑通之后,可以加上路由汇总,减少路由表规模。OSPF的汇总在ABR上配置,EIGRP的汇总在AS边界路由器上配置。
R2作为ABR,可以把Area 1的路由汇总:
R2(config)# router ospf 1 R2(config-router)# area 1 range 10.1.0.0 255.255.0.0这样R2会把10.1.0.0/16通告进Area 0,而不是10.1.1.1/32。R3学到的是汇总路由,路由表更简洁。
EIGRP的汇总在R3上配置:
R3(config)# interface Gi0/1 R3(config-if)# ip summary-address eigrp 100 10.0.0.0 255.0.0.0这样R3会把10.0.0.0/8通告给R4,R4的路由表里只有一条汇总路由。但要注意,汇总可能会导致黑洞路由。如果R4有去往10.5.5.5的流量,匹配了10.0.0.0/8的汇总路由,但R3没有10.5.5.5的明细路由,流量就会被丢弃。解决办法是配置一条指向Null0的静态路由作为防环:
R3(config)# ip route 10.0.0.0 255.0.0.0 Null0这样R3会丢弃匹配汇总路由但没有明细路由的流量,避免转发到R4再被丢弃。
验证汇总效果:show ip route看路由表是否只有汇总路由,show ip ospf database看LSA是否减少,traceroute看路径是否正常。
5.2 策略路由与流量工程入门
如果实验还有余力,可以尝试策略路由(PBR),实现基于源地址或目的的流量分流。比如让R1的流量走R2,R3的流量走R5备份链路,实现负载分担。
PBR的配置在接口上:
R3(config)# route-map PBR permit 10 R3(config-route-map)# match ip address FROM-R1 R3(config-route-map)# set ip next-hop 10.0.45.2 R3(config)# interface Gi0/0 R3(config-if)# ip policy route-map PBR这样从R1来的流量会被强制走R5备份链路,即使主链路正常。PBR的优先级高于路由表,所以可以实现灵活的流量控制。但PBR配置复杂,容易出错,建议在基础实验熟练后再尝试。
5.3 实验后的知识梳理与延伸学习
做完这个实验,你应该掌握以下技能:OSPF多区域配置、EIGRP配置、双点双向重分发、路由标记与过滤、浮动静态路由、路由汇总、策略路由。这些技能在真实网络项目中都是核心能力。
下一步可以学习BGP,这是运营商和大型企业网络的核心协议。BGP的路径属性、选路规则、路由反射器、联盟等概念,比OSPF和EIGRP复杂得多。但有了这个实验的基础,学习BGP会容易很多。
另外建议学习MPLS和Segment Routing,这些是現代网络的前沿技术。不过这些技术对模拟器的要求较高,可能需要更强大的实验环境。
我个人在实际操作中的体会是:高级路由实验的价值不在于配置命令本身,而在于理解路由协议之间的交互和冲突。你配的每一条命令,背后都有路由选择、度量值计算、管理距离比较的逻辑。把这些逻辑搞清楚,比记住命令重要得多。踩过的坑越多,理解越深。我做了不下二十遍这个实验,每次都能发现新的细节。网络技术就是这样,入门容易精通难,但每深入一层,看到的风景都不一样。