静态递归路由配置实操:下一跳不是邻居,路由器自己层层往下查
这是静态路由系列的第三篇。前两篇一篇是基本静态路由、一篇是浮动路由,这次的**递归路由(Recursive Route)**是三篇里最绕的一个——它的下一跳地址不是直连邻居,而是一个"够不着"的地址,路由器得自己一层一层往下查,直到查到一个能直接送出去的出口为止。听着玄,配完就懂了。
目录
一、先看全貌:网络长这样
先上拓扑。Device1 要去 200.200.200.0/24 这个网段,但路由的下一跳不写邻居接口 IP,而是写 Device3 的环回口 192.168.1.1——这个地址 Device1 够不着(不是直连),所以得靠递归查找。Device1 有两条路到这个环回口:主路径直接经 Device3,备路径绕经 Device2:
🟡 看图有个小窍门 注意 Device3 那个
lo0: 192.168.1.1——这是环回口,逻辑接口永远 up。整张递归路由的关键就在这个地址上:它是递归路由的"下一跳",但它不是 Device1 的直连邻居,所以 Device1 得自己想办法查到它。
二、先扯两句:递归路由到底在干嘛
上一篇浮动路由说,静态路由 = 目的网络 + 掩码 + 下一跳。正常情况下下一跳是直连邻居的接口 IP,路由器一看「哦这个地址在我直连网段里,直接从那个接口送出去」就完事了。
但递归路由不一样——它的下一跳是一个非直连地址,路由器在自己直连网段里找不到,于是得再查一次路由表:「这个下一跳地址我自己怎么到?」查到的那条路由如果下一跳还是非直连,就再查……直到查到一个直连的下一跳为止。这个一层一层往下查的过程就叫递归(Recursive)。
🟠 打个比方 就像查地图。你要去 200.200.200.0,地图告诉你「先去中转站 192.168.1.1」;但你不知道中转站咋走,于是再查「192.168.1.1 怎么到」,地图告诉你「走 172.16.13.3 这条路」——这下 172.16.13.3 是你认识的直连邻居了,递归结束,出发。
递归深度就是查了几层。本案列递归深度是 2:先查 200.200.200.0 的下一跳(192.168.1.1),再查 192.168.1.1 的下一跳(172.16.13.3,直连),到这就到底了。
🔵 为啥要这么绕? 因为递归路由的下一跳写的是一个稳定的环回口地址,不随某个物理链路的 up/down 而变化。这样 200.200.200.0 这条路由本身不用改,只要「到达环回口的路径」能自动切换,递归解析出来的出接口就跟着切——等于把"路径切换"这件事下放给了到达环回口的那些路由。
三、需求和拓扑怎么设计的
网络需求
- Device1 配两条静态路由可达
192.168.1.1/32(Device3 的环回口),一条经 Device3、一条经 Device2。优先走 Device3 这条主路径。 - Device1 配一条静态递归路由可达
200.200.200.0/24,下一跳写环回口192.168.1.1。当 Device1 与 Device3 之间的线路故障后,该路由自动切换到 Device2 通信。
地址规划
我把原文 IP 换了一套,Device3 用 .3、Device2 用 .2,一眼能区分:
| 设备 | 接口/VLAN | IP 地址 | 连谁 | 角色 |
|---|---|---|---|---|
| Device1 | G0/0/0(VLAN13) | 172.16.13.1/24 | Device3 | 主路径本端 |
| Device1 | G0/0/1(VLAN12) | 172.16.12.1/24 | Device2 | 备份路径本端 |
| Device3 | G0/0/0(VLAN13) | 172.16.13.3/24 | Device1 | 主路径对端 |
| Device3 | G0/0/1(VLAN23) | 172.16.23.3/24 | Device2 | Device2↔Device3 链路 |
| Device3 | lo0(环回口) | 192.168.1.1/32 | — | 递归下一跳 |
| Device2 | G0/0/0(VLAN12) | 172.16.12.2/24 | Device1 | 备份路径对端 |
| Device2 | G0/0/1(VLAN23) | 172.16.23.2/24 | Device3 | Device2↔Device3 链路 |
| 目的网段 | — | 200.200.200.0/24 | Device3 后面 | 递归路由目的地 |
🟡 这里有个小心得 环回口地址
192.168.1.1用/32掩码——因为它是一个主机地址,不是一个网段。递归路由的下一跳就是冲着这个主机地址去的,掩码必须精确到 32 位。
四、配之前先想清楚递归原理
这一步是整篇的重点,原理搞懂了,后面的命令和路由表变化就是顺水推舟。
第一层:去环回口的两条路由(带浮动)
Device1 要能"够到"环回口 192.168.1.1,得先配两条去 192.168.1.1/32 的路由,一条主一条备,靠管理距离分主次(上一篇浮动路由的套路):
| 路由 | 下一跳 | 管理距离 | 说明 |
|---|---|---|---|
| 去 192.168.1.1/32(主) | 172.16.13.3(Device3,直连) | 1(默认) | 走主路径 |
| 去 192.168.1.1/32(备) | 172.16.12.2(Device2,直连) | 10 | 走备份路径 |
🟢 注意 这两条路由的下一跳(172.16.13.3 和 172.16.12.2)都是 Device1 的直连邻居,所以它们是普通静态路由,不需要递归。递归发生在下面那条路由上。
第二层:递归路由去 200.200.200.0/24
关键来了。去 200.200.200.0/24 的路由,下一跳写的是环回口 192.168.1.1——这个地址不是 Device1 的直连邻居:
🟠 递归解析过程 路由器看到 200.200.200.0/24 的下一跳是 192.168.1.1,但自己直连网段里没这个地址 → 再查路由表,发现有 192.168.1.1/32 的路由,下一跳是 172.16.13.3 → 172.16.13.3 在直连网段 172.16.13.0/24 里 → 递归终止,出接口 vlan13。200.200.200.0/24 这条路由本身没写出接口,出接口是递归查出来的。
故障时怎么切换?
主路径(Device1↔Device3)断了之后:
🟢 递归路由的妙处 200.200.200.0/24 这条路由的下一跳始终是 192.168.1.1,一个字都没变。但它依赖的 192.168.1.1/32 路由因为主路径 down 而 AD=1 的失效、AD=10 的浮上来,递归解析出的出接口就从 vlan13 变成了 vlan12。等于把"切换"这件事甩给了到达环回口的那些路由——递归路由自己啥都不用管。
🔴 这里有个容易想歪的地方 环回口 lo0 是逻辑接口,永远 up(除非手动 shutdown)。所以 192.168.1.1/32 这条路由的"消失"不是因为环回口 down,而是因为到达环回口的路径(经 Device3 的直连链路)down 了,导致 AD=1 那条路由失效。别搞反了。
五、开始敲命令
步骤一:VLAN 和接口 IP(略)
老规矩,VLAN12/13/23 建好,端口划进去,接口配 IP。别忘了 Device3 的环回口也要配 IP:
Device3(config)#interface loopback 0
Device3(config-if)#ip address 192.168.1.1 255.255.255.255
🟡 小技巧 环回口掩码用 255.255.255.255(/32),因为它是单一主机地址,不是一个网段。配完验证:Device1 分别
ping 172.16.13.3和ping 172.16.12.2都通,说明两条链路 OK。
步骤二:配去环回口的两条路由(主路径 + 浮动备份)
Device1 —— 主路径经 Device3(AD=1),备路径经 Device2(AD=10):
Device1#configure terminal
Device1(config)#ip route 192.168.1.1 255.255.255.255 172.16.13.3
Device1(config)#ip route 192.168.1.1 255.255.255.255 172.16.12.2 10
Device2 —— Device2 也要能到环回口,它通过 172.16.23.0/24 直连 Device3:
Device2#configure terminal
Device2(config)#ip route 192.168.1.1 255.255.255.255 172.16.23.3
🟠 核心概念 注意 Device1 那条主路由的 AD 没写(默认 1),备路由末尾写了 10。这跟上一篇浮动路由一个套路:主路 AD 小优先,备路 AD 大藏着,主路断了备路浮上来。区别只在于——这里的"目的"是一个环回口地址,不是业务网段。
步骤三:配递归路由
Device1 —— 去业务网段 200.200.200.0/24,下一跳写环回口(非直连,触发递归):
Device1(config)#ip route 200.200.200.0 255.255.255.0 192.168.1.1
🔴 易错点警告 这条命令的下一跳 192.168.1.1 不是 Device1 的直连邻居!如果你忘了前面那两条去 192.168.1.1/32 的路由,这条递归路由会因为「找不到下一跳怎么到」而安装失败——路由表里根本不会出现 200.200.200.0/24。递归路由能不能生效,完全取决于你有没有给它配好"到达下一跳的路由"。
六、看路由表:递归是怎么解析的
配完查看 Device1 路由表:
Device1#show ip route
Codes: C - connected, S - static, R - RIP, O - OSPF, OE - OSPF External, M - Management
D - Redirect, E - IRMP, EX - IRMP external, o - SNSP, B - BGP, i - ISIS
Gateway of last resort is not set
C 172.16.12.0/24 is directly connected, 00:04:07, vlan12
C 172.16.13.0/24 is directly connected, 00:03:58, vlan13
C 127.0.0.0/8 is directly connected, 73:10:12, lo0
S 200.200.200.0/24 [1/100] via 192.168.1.1, 00:00:08, vlan13
S 192.168.1.1/32 [1/100] via 172.16.13.3, 00:01:46, vlan13
🟢 重点看最后两行
192.168.1.1/32这条路由下一跳是 172.16.13.3(Device3,直连 vlan13),AD=1——这是主路径生效;200.200.200.0/24这条路由下一跳是 192.168.1.1,但出接口显示的是 vlan13!这个 vlan13 不是命令里写的,是路由器递归查出来的——它查到 192.168.1.1 要从 vlan13 走,于是 200.200.200.0/24 也从 vlan13 走。
🟠 递归依赖关系 200.200.200.0/24 这条路由依赖于 192.168.1.1/32 这条路由。192.168.1.1/32 的出接口一变,200.200.200.0/24 的出接口就跟着变。这就是"递归"——上面那条路由的出口,由下面那条路由来定。
七、验证故障切换
模拟主路径故障:把 Device1 的 G0/0/0(连 Device3 的主路径)shutdown,再看路由表:
Device1(config)#interface g0/0/0
Device1(config-if)#shutdown
Device1#show ip route
Codes: C - connected, S - static, R - RIP, O - OSPF, OE - OSPF External, M - Management
D - Redirect, E - IRMP, EX - IRMP external, o - SNSP, B - BGP, i - ISIS
Gateway of last resort is not set
C 172.16.12.0/24 is directly connected, 00:09:04, vlan12
C 127.0.0.0/8 is directly connected, 73:15:18, lo0
S 200.200.200.0/24 [1/100] via 192.168.1.1, 00:00:02, vlan12
S 192.168.1.1/32 [10/100] via 172.16.12.2, 00:00:02, vlan12
🟢 对比故障前后,三个变化
- 直连的
172.16.13.0/24(vlan13)没了——主链路 down,直连路由消失;192.168.1.1/32路由的下一跳从 172.16.13.3 变成 172.16.12.2,AD 从 1 变成 10——主路径失效,AD=10 的备路径浮上来;200.200.200.0/24路由的下一跳还是 192.168.1.1(没变!),但出接口从 vlan13 变成了 vlan12——递归重新解析,自动切到 Device2。这就是递归路由的核心价值:业务路由的下一跳不动,到达下一跳的路径自己切,出接口跟着切。
八、几个容易混的点
递归路由 vs 浮动路由 vs 普通静态
| 类型 | 下一跳 | 特点 | 切换方式 |
|---|---|---|---|
| 普通静态 | 直连邻居 | 下一跳直接可达,一步到位 | 不切换 |
| 浮动路由 | 直连邻居 | 两条去同一目的,靠 AD 分主备 | 主断备浮 |
| 递归路由 | 非直连地址 | 下一跳要递归查找才能解析出接口 | 依赖路由自己切 |
🟠 核心区别 浮动路由和递归路由可以叠加使用——本案列就是:去环回口那两条路由是"浮动",去业务网段那条是"递归"。递归路由自己不切,靠它依赖的浮动路由切。
递归深度
| 递归深度 | 含义 | 性能 |
|---|---|---|
| 1 层 | 下一跳是直连邻居,不递归 | 最快 |
| 2 层 | 下一跳非直连,查一次就能到直连 | 本案列,可接受 |
| 多层 | 下一跳非直连,查好几次才到直连 | 太深会拖慢转发,不建议 |
🔴 易错点警告 递归不能成环!如果路由 A 的下一跳要查路由 B,路由 B 的下一跳又指回路由 A,就会形成递归死循环,路由器会报错并丢弃这条路由。配递归路由时一定要确保递归链最终能落到一个直连下一跳上。
为什么用环回口做递归下一跳?
| 对比 | 物理接口 | 环回口 lo0 |
|---|---|---|
| 状态 | 随链路 up/down | 永远 up(逻辑接口) |
| 稳定性 | 链路一断地址就不可达 | 只要设备活着就可达 |
| 适合做递归下一跳 | ❌ 不适合 | ✅ 适合 |
🟡 小技巧 递归路由的下一跳为什么要用环回口?因为环回口不随物理链路 down 而消失,地址始终"存在"。这样递归路由的下一跳(192.168.1.1)永远有效,真正切换的是"到达这个环回口的路径"——这正是递归路由能自动切换的根本原因。
九、递归失败/切不过来怎么办
递归路由不生效或切换失败,基本是这几个原因:
| 第几步 | 检查啥 | 命令 | 判断 |
|---|---|---|---|
| 1 | 到达下一跳的路由有没有 | show ip route | 没有去 192.168.1.1/32 的路由 → 递归失败 |
| 2 | 备份路径通不通 | ping 备份下一跳 | 不通就查备份链路 |
| 3 | AD 大小对不对 | show ip route | 备份那条 AD 要比主大 |
| 4 | 有没有递归环 | show running-config | A 指向 B、B 指向 A → 死循环 |
🔴 我踩过最多次的三个坑
① 递归路由没配上,因为忘了配到达下一跳的路由 光敲了ip route 200.200.200.0 ... 192.168.1.1,但没配去 192.168.1.1/32 的路由,路由器查不到下一跳咋到,这条路由直接安装失败,路由表里根本看不到。排查先看 192.168.1.1/32 在不在路由表里;
② 环回口没配 IP 或 mask 写错 环回口配成了 /24 而不是 /32,导致 192.168.1.1/32 这条主机路由匹配不上;
③ Device2 没配去环回口的路由 切到备份路径后包到了 Device2,但 Device2 不知道 192.168.1.1 怎么到(没配ip route 192.168.1.1 ... 172.16.23.3),包到了 Device2 就丢了。
十、最后说两句
递归路由三篇里最绕,但拆开看就两层:第一层配"到达下一跳的路由"(带浮动主备),第二层配"递归路由"(下一跳写非直连地址)。路由器自己递归查解析出接口,到达下一跳的路径一切换,递归路由的出接口就跟着切。
| 阶段 | 192.168.1.1/32 路由 | 200.200.200.0/24 出接口 | 谁在转发 |
|---|---|---|---|
| 正常 | AD=1 via 172.16.13.3 | vlan13 | Device3 |
| 主路断 | AD=10 via 172.16.12.2 | vlan12 | Device2 |
| 主路恢复 | AD=1 重新生效 | vlan13 | Device3 切回 |
📌 记一句话就够了
递归路由 = 下一跳写一个"够不着"的地址,路由器自己一层层查到直连出口为止。业务路由不动,到达下一跳的路由一切换,出接口自动跟着切。
三篇静态路由到此告一段落:基本配置 → 浮动主备 → 递归切换,难度逐步递进。下一篇打算进入动态路由 RIP,那块的坑比静态多不少,等我弄完再发。有问题评论区见。
计算机网络 静态递归路由 递归查找 环回口 软考网工
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐




所有评论(0)