静态路由与默认路由:eNSP配置、选路逻辑与排错实战

发布时间:2026/10/26 4:12:35
静态路由与默认路由:eNSP配置、选路逻辑与排错实战

静态路由和默认路由这两个词,几乎每个刚摸网络设备命令行的人都会在第一周撞上。看起来只是一条ip route-static命令的事,但真正在项目里配错、配漏、配出环路的情况,我见过太多次。这篇内容就围绕 eNSP 仿真平台里的静态路由和默认路由展开,把它们的原理、配置方法、选路逻辑、常见坑位一次性讲透。eNSP 是网络学习者最常用的设备仿真工具,命令行体系基于 VRP 操作系统,配置逻辑和真实设备基本一致,所以在上面练熟的命令,搬到机房里能直接用。适合谁看?刚接触路由配置的新手,可以照着拓扑一步步敲;已经会敲命令但说不清"为什么这么写"的中级使用者,能在这里找到出接口与下一跳的取舍依据、浮动路由的优先级设计思路、默认路由的环路陷阱;备考网络方向认证的朋友,也可以把它当作实验复盘笔记。整篇内容按"原理—规划—配置—排错"的顺序推进,每一段都配了可复现的操作和验证方法,你完全可以打开 eNSP 边看边做。

1. 先想清楚:静态路由和默认路由到底解决什么问题

1.1 路由表本质上在回答三个判断题

很多教程一上来就讲命令,我更习惯先讲清楚设备在转发一个数据包时脑子里的运算过程。一台路由器收到一个 IP 包,只看目的 IP,然后在自己的路由表里做三道判断:第一,这个目的地址落在哪几条路由的网段范围内;第二,如果有多条都能覆盖,谁的掩码更长;第三,掩码长度一样时,谁的优先级数值更小。三道判断走完,选出一条最优的,把包从对应接口扔出去。整个过程没有任何"智能"成分,纯粹是查表比对。

静态路由的价值就在于:管理员手工往这张表里写一条记录,告诉设备"去往某个网段,请朝这个方向走"。它不参与任何动态计算,不发送协议报文,不占用链路带宽,也不会因为邻居抖动而抖动。代价是拓扑一变,你得手动改。所以静态路由最适合的场景是:网络规模不大、拓扑相对稳定、出口方向单一,或者需要在边界上精确掌控流量走向的地方。反过来说,如果网络里有几十台设备、多路径冗余、经常调整,还硬用静态路由去堆,那就是给自己找麻烦。

默认路由是静态路由的一个特殊形态,目的网段写成0.0.0.0、掩码写成0.0.0.0,意思是"所有我没匹配上的目的地,都走这条路"。它的本质是最后兜底的一条路由,因为0.0.0.0/0的掩码长度是 0,永远是最短匹配,所以只有在路由表里找不到任何更精确匹配的时候才会被选中。这个特性决定了它只能出现在"出口方向唯一"的位置,比如企业网出口连运营商、末梢分支连总部。

1.2 静态路由和默认路由的取舍逻辑

我在实际配置里判断用哪种,基本看三个维度:出口是否唯一、精细控制需求有多强、网络未来会不会变。出口唯一、不需要区分流量走向的,直接上默认路由,配置量最小,维护成本最低。出口有多条、需要按目的网段分流(比如办公流量走 A 链路、服务器流量走 B 链路)的,必须用明细静态路由。网络后续可能扩张、会有新增网段的,最好在核心层做路由汇总,边缘用默认路由指向核心,形成"核心明细、边缘默认"的分层结构。

这里有个很多人忽略的点:默认路由不是越少越好,也不是越多越好。末梢路由器上一条默认路由指向核心,是合理的;但如果两台核心路由器互指默认路由,就可能出现互相把流量推给对方、谁也到不了目的地的死循环。这个问题后面第 6 节会专门拆解。

对比维度明细静态路由默认路由
目的网段写法具体网段 + 掩码0.0.0.0 0.0.0.0
匹配优先级掩码越长越优先最短匹配,最后兜底
配置量每个网段一条,随规模增长一条搞定全部未知目的
适用位置核心、汇聚、分流节点末梢、出口、边缘设备
主要风险漏配导致黑洞、维护繁琐误配导致环路或流量绕远

2. 静态路由的核心原理拆解

2.1 一条静态路由由哪些要素构成

一条静态路由最少要表达四件事:去哪、走哪、多优、谁写的。对应到命令上就是目的网段、掩码、下一跳或出接口、优先级。命令格式长这样:

ip route-static 192.168.30.0 255.255.255.0 10.0.12.2

这条命令读作:去往 192.168.30.0/24 这个网段,交给 10.0.12.2 这个邻居去处理。设备收到这条命令以后,会先做一件事:检查 10.0.12.2 自己在不在直连网段里。如果在,路由直接生效并下发到转发表;如果不在,这条静态路由会被标记为"无效",虽然还在配置里,但不参与转发。这个检查机制叫递归查找,是排查静态路由"配了但不通"时第一个要看的点。

优先级字段是隐藏参数。不写的时候默认值是 60,直连路由是 0,动态路由协议各有各的默认值。数值越小越优,这个设计让静态路由天然排在直连之后、大多数动态路由之后。想让它当备份,就把数值调大,比如 80 或 100,主路由消失时它才浮上来,这就是浮动静态路由的由来。

2.2 出接口与下一跳的四种写法与适用边界

新手最常纠结的是:命令最后到底写接口还是写 IP。VRP 支持四种写法,每种都有自己的适用场景,选错了不会立刻报错,但会在某些拓扑下悄悄失效。

第一种,只写下一跳 IP。这是最推荐的通用写法,尤其适合以太网这类广播型接口。设备会把下一跳 IP 拿去查直连路由,找到对应出接口,再通过 ARP 解析出对端 MAC。好处是链路中间加了交换机也不会失效,坏处是多一次递归查找,配置里看不出从哪个口出去。

第二种,只写出接口。适合点到点链路,比如串口、POS 口、隧道接口。因为点到点链路上只有一个对端,不需要解析 MAC,设备直接把包从这个口发出去就行。但在以太网接口上只写出接口会有隐患:路由器不知道对端是谁,可能对每个目的 IP 都发起 ARP 请求,形成大量 ARP 广播,极端情况下消耗设备资源。所以我现在基本不用这种写法。

第三种,出接口加下一跳一起写。这是最保险的写法,转发路径明确,不用递归查找,也不会触发多余的 ARP。缺点是配置长一点,链路对端地址变了要改两处。对稳定性要求高的场景我倾向用这种。

第四种,指向 NULL0 接口。这不算真正的转发路由,而是把流量丢弃,常用于路由汇总后的防环。后面会讲具体用法。

写法命令示例适用场景主要风险
只写下一跳ip route-static 192.168.30.0 24 10.0.12.2以太网链路、通用场景下一跳不可达时路由失效
只写出接口ip route-static 192.168.30.0 24 GigabitEthernet0/0/1点到点链路广播网络上产生大量 ARP
接口加下一跳ip route-static 192.168.30.0 24 GigabitEthernet0/0/1 10.0.12.2对稳定性要求高的生产网配置较长,变更需同步修改
指向 NULL0ip route-static 192.168.20.0 24 NULL0汇总防环、流量黑洞误配会静默丢包且无日志

注意:在 eNSP 里用 AR 系列路由器做实验,以太网接口上只写出接口的静态路由,某些版本会出现路由显示为有效但实际不通的情况,本质就是 ARP 解析没走通。养成写下一跳的习惯能省掉大量排查时间。

2.3 优先级、度量值与选路顺序的实际影响

优先级(preference)决定的是"不同来源的路由谁更可信",度量值(cost)决定的是"同一来源的多条路由谁更近"。这两个概念经常被混为一谈,我在带新人的时候会用一句话区分:优先级比的是出身,度量值比的是路程。

静态路由默认优先级 60、默认度量值 0。度量值在静态路由里几乎用不上,因为手工配的路由不存在"算出更近路径"的需求。真正有用的是优先级。举个例子:一台路由器同时有两条去往同一网段的静态路由,一条优先级 60 走主链路,一条优先级 80 走备链路。正常情况下只有 60 的那条进路由表,80 的那条藏在后台。当主链路的接口 down 掉或者下一跳不可达,60 的路由被撤销,80 的立刻顶上来。整个过程不需要人工干预,切换时间取决于设备检测链路故障的速度,通常在一秒以内。

这里有个细节值得展开:如果主备两条静态路由的优先级写成一样,会发生什么?答案是多路径负载分担。两条路由同时进路由表,流量按包或者按流在两个方向上分摊。这个特性在需要扩容带宽的时候很好用,但在做主备备份的时候是灾难,因为你会以为自己在做冗余,实际上是在做负载均衡,一旦一条链路出问题,一半的流量会丢。所以配浮动路由时,优先级一定要显式写出来,别依赖默认值。

2.4 路由递归与迭代深度

前面提到下一跳要能被直连路由解析,这个解析过程叫递归。设备拿到ip route-static 192.168.30.0 24 10.0.12.2这条配置,会去路由表里找谁能覆盖 10.0.12.2,找到直连网段 10.0.12.0/30 后,把出接口确定为该直连网段对应的接口。整个递归算一层。

如果下一跳地址本身也要靠另一条静态路由才能到达,就会形成两层递归。VRP 支持的递归深度有限,超过限制的路由会被判定为无效。更麻烦的是递归成环:A 路由的下一跳靠 B 路由解析,B 路由的下一跳又靠 A 路由解析,两条路由互相依赖,谁也解析不出来,最终都失效。这种问题在配置时看不出来,只有用display ip routing-table看路由状态是 Active 还是 Inactive 才能发现。我的经验是:静态路由的下一跳一定要落在直连网段里,不要让下一跳再去依赖另一条静态路由,能避免 90% 的递归问题。

3. eNSP 实验环境搭建与地址规划

3.1 拓扑设计与 IP 规划表

原理讲完,必须动手。我设计了一个最小但足够覆盖知识点的拓扑:三台路由器串成一条链,两端各挂一台 PC,模拟总部—中转—分支的结构。选这个拓扑的原因是它同时具备三个特征:中间设备需要看明细路由、两端设备可以用默认路由简化、任意一段链路断开都能验证备份切换。

具体规划如下:

设备接口IP 地址说明
PC1Ethernet0/0/1192.168.10.10/24网关指向 192.168.10.1
AR1GE0/0/0192.168.10.1/24连接 PC1 的网关接口
AR1GE0/0/110.0.12.1/30连接 AR2 的互联接口
AR2GE0/0/110.0.12.2/30连接 AR1
AR2GE0/0/010.0.23.2/30连接 AR3
AR3GE0/0/010.0.23.1/30连接 AR2
AR3GE0/0/1192.168.30.1/24连接 PC2 的网关接口
PC2Ethernet0/0/1192.168.30.10/24网关指向 192.168.30.1

互联链路用了 /30 掩码,这个选择不是随手写的。/30 的掩码是 255.255.255.252,每个网段正好提供 4 个地址,去掉网络地址和广播地址,剩下两个可用地址,刚好够一条点到点链路两端使用。相比用 /24 掩码浪费 252 个地址,/30 在地址规划上是标准做法。你在做实验时如果看到有人互联链路配 /24,八成是图省事,真实项目里这么干会被地址规划的人念叨。

拓扑在 eNSP 里拖三台 AR2220、两台 PC,用 Copper 线连接,注意 PC 连接路由器要用交叉线或者直接让 eNSP 自动选线。连线完成后先别急着启动设备,把所有设备选中一起启动,等指示灯变绿,这个过程大概需要一到两分钟,取决于电脑性能。

3.2 设备基础配置与命令习惯

设备起来以后,双击进入命令行。第一件事是改名,方便在多设备环境下确认自己在敲哪台机器:

<Huawei> system-view [Huawei] sysname AR1 [AR1]

尖括号是用户视图,只能做查看和测试;方括号是系统视图,才能改配置。这个层级概念新手容易搞混,记住一句话:看到尖括号先system-view,看到方括号才能干活。

第二件事我习惯关掉信息中心。eNSP 的日志刷屏速度很快,配置一多,屏幕上全是日志,命令和回显混在一起,很容易看错:

[AR1] undo info-center enable

这条命令只是关掉终端弹日志,不影响日志缓冲区记录,属于实验环境的便利性设置。真实设备上是否关闭要看运维规范,有些单位要求保留日志输出用于审计。

第三件事是配接口地址。以 AR1 为例:

[AR1] interface GigabitEthernet 0/0/0 [AR1-GigabitEthernet0/0/0] ip address 192.168.10.1 24 [AR1-GigabitEthernet0/0/0] quit [AR1] interface GigabitEthernet 0/0/1 [AR1-GigabitEthernet0/0/1] ip address 10.0.12.1 30 [AR1-GigabitEthernet0/0/1] quit

注意掩码可以直接写位数30,也可以写完整格式255.255.255.252,两种写法等价。我在批量配置时喜欢写位数,短,不容易敲错;但在给别人做配置文档时写完整格式,可读性更好。

AR2 和 AR3 照葫芦画瓢,把表和图上对应的地址填进去。PC 的配置在 eNSP 里是图形界面,双击 PC,在 IPv4 配置页填地址、掩码、网关,点应用即可。PC 不用配路由,它只需要一条默认网关就能把跨网段流量交给路由器。

3.3 配置后的第一轮验证

地址配完,一定要验证,别一路配到底最后一起排错。验证分三层:

第一层,看接口状态和地址有没有写对:

[AR1] display ip interface brief

回显里 Physical 和 Protocol 都是 up,IP 地址和规划一致,这一层就过了。如果有 down 的,先查线缆有没有连对、接口有没有被 shutdown。

第二层,看直连能不能通。在 AR1 上 ping AR2 的互联地址:

[AR1] ping 10.0.12.2

通了说明二层和三层直连没问题。注意第一次 ping 可能会丢一个包,因为要触发 ARP 解析,这属于正常现象,别以为是配置错了。

第三层,看 PC 能不能 ping 通自己的网关。这一步经常被跳过,但它是后面所有跨网段测试的基础。如果 PC ping 不通网关,问题一定在接入链路或 PC 配置上,和静态路由毫无关系。先把这一层捋顺,再谈路由。

4. 静态路由配置实操全流程

4.1 逐跳配置与连通性验证

现在的状态是:AR1 知道自己直连的 192.168.10.0/24 和 10.0.12.0/30,AR3 知道自己直连的 10.0.23.0/30 和 192.168.30.0/24,但 AR1 完全不知道 192.168.30.0/24 在哪,AR3 也不知道 192.168.10.0/24 在哪。PC1 ping PC2,包到 AR1 就被丢了。

先看 AR1 的路由表:

[AR1] display ip routing-table

你会看到只有两条直连路由,目的网段分别是 192.168.10.0/24 和 10.0.12.0/30。这时去 ping 192.168.30.10 肯定不通,回显是 Request time out,原因就是查表查不到匹配项,设备直接丢弃。

补上明细静态路由。AR1 要去 192.168.30.0/24,下一跳是 AR2 的互联地址 10.0.12.2:

[AR1] ip route-static 192.168.30.0 255.255.255.0 10.0.12.2

AR3 反过来,去 192.168.10.0/24,下一跳是 AR2 的另一个地址 10.0.23.2:

[AR3] ip route-static 192.168.10.0 255.255.255.0 10.0.23.2

AR2 处于中间,两端都是直连,理论上不需要额外配置。但这里要提醒一句:很多实验拓扑里中间设备确实不用配路由,可一旦拓扑变成环状或者有旁路,中间设备就必须知道两端的网段,否则回程流量会在它这里断掉。判断标准很简单:把每个网段都当成一个目的地,逐台设备问"你知道怎么去吗",不知道就补一条。

配置完成后验证:

[AR1] display ip routing-table protocol static [AR1] ping -a 192.168.10.1 192.168.30.10

display ip routing-table protocol static只过滤静态路由,输出干净,适合确认自己刚配的那条有没有进表。ping -a指定源地址,这个技巧非常关键。默认情况下路由器 ping 远端时会用出接口地址做源,回程路径可能和你以为的不一样。指定源地址为 192.168.10.1,模拟的就是 PC1 的流量,验证结果才有意义。我见过不少人 ping 通了就以为配好了,结果 PC 还是不通,原因就是源地址不同导致回程路由走了另一条路。

4.2 默认路由的三种典型用法

明细路由跑通以后,把 AR1 和 AR3 上的明细换成默认路由,体会一下差别。

用法一:末梢设备兜底。AR1 是一个末梢,除了直连网段,所有未知目的地都应该往 AR2 方向走。那就把刚才那条明细删掉,换成:

[AR1] undo ip route-static 192.168.30.0 255.255.255.0 10.0.12.2 [AR1] ip route-static 0.0.0.0 0.0.0.0 10.0.12.2

0.0.0.0 0.0.0.0这个写法初看很怪,展开理解就是"目的地址任意、掩码长度为零",等价于"所有地址"。它的掩码长度是 0,比任何明细路由都短,所以永远排在最后被选中。AR1 上现在有一条默认路由加两条直连路由,去往 192.168.30.10 的包匹配不上任何直连,落到默认路由,被送往 10.0.12.2,转发路径和之前完全一样,但配置从"每个远端网段一条"变成了"一条管全部"。

这个替换的收益在网络扩张时体现得最明显。假设分支侧新增了 192.168.40.0/24、192.168.50.0/24,用明细路由你得在 AR1 上加两条,用默认路由一条都不用改。代价是失去了精细控制:如果 AR1 上还连着另一条链路,你没法通过默认路由区分哪些流量走哪条。所以默认路由适合"只有一个出口"的设备,这点前面讲过,现在通过实操应该更有体感了。

用法二:出口设备指向外部。企业网出口路由器上配一条默认路由指向运营商给的网关地址,是所有内网流量出网的总阀门。这条路由的特点是下一跳不在自己的管理范围内,链路质量、对端设备状态都不可控,所以通常要配合浮动静态路由或者链路检测机制使用。

用法三:与明细路由共存做分流。默认路由和明细路由不是互斥的。一台路由器上完全可以既有默认路由,又有若干条明细静态路由。设备选路时先比掩码长度,明细路由的掩码长,优先匹配;匹配不上明细的才落到默认。这个特性可以用来做策略分流:去往合作方专网的流量走明细路由指向专线,其余全部走默认路由出公网。配置上互不干扰,逻辑也很清晰。

4.3 浮动静态路由与备份链路

单链路谈备份是纸上谈兵,得加一条链路。在 AR1 和 AR2 之间再连一根线,AR1 用 GE0/0/2、AR2 用 GE0/0/2,地址规划为 10.0.12.5/30 和 10.0.12.6/30。这条链路平时不用,主链路断了才启用。

配置思路:主路由优先级用默认的 60,备份路由显式设成 80。

[AR1] ip route-static 0.0.0.0 0.0.0.0 10.0.12.2 [AR1] ip route-static 0.0.0.0 0.0.0.0 10.0.12.6 preference 80

配完立刻看路由表:

[AR1] display ip routing-table 0.0.0.0

你会发现只有优先级 60 的那条在转发,80 的那条不显示。想看它还在不在,得用:

[AR1] display ip routing-table protocol static

输出里会列出所有静态路由,包括没进主路由表的。或者在路由表命令后加verbose参数,能看到活跃和未活跃的完整列表。这个细节很重要:很多人配了备份路由,用display ip routing-table看不到,以为没配上,其实是正常的,备用路由本来就不该出现在活跃路由表里。

验证切换:进入 AR1 的 GE0/0/1 接口,手动 shutdown,模拟主链路故障:

[AR1] interface GigabitEthernet 0/0/1 [AR1-GigabitEthernet0/0/1] shutdown

然后再看路由表,默认路由的下一跳应该变成了 10.0.12.6,出接口变成 GE0/0/2。此时 PC1 ping PC2 应该仍然通,中间可能丢一两个包,取决于收敛速度。测完记得undo shutdown恢复。

这里有个参数选择值得说一说:为什么备份路由的优先级选 80 而不是 100 或者 200?数值本身没有硬性规定,只要比主路由大就行。但如果你打算在这个网络里跑动态路由协议,就得考虑它们的默认优先级。比如某个动态协议的默认优先级是 100,你把备份静态路由设成 120,那它连动态路由都抢不过,永远不会生效;设成 90,它能在动态路由之前顶上,但又在主静态路由之后。我的习惯是主静态 60、备静态 80,这个区间既大于主路由,又小于大多数动态路由的默认值,切换层次比较清晰。

4.4 路由汇总与黑洞路由的实战细节

网络一变大,明细路由的数量会失控。假设 AR3 后面挂了一堆 192.168.x.0/24 的网段,AR1 上就得配一堆明细。这时候该做汇总。

汇总的算法不复杂,把要汇总的网段写成二进制,找从左往右相同的位数。举例:192.168.0.0/24 和 192.168.1.0/24,第三段分别是 0 和 1,二进制是 00000000 和 00000001,前七位相同,第八位不同。所以汇总后的掩码是 24 减 1,等于 23,网段是 192.168.0.0/23。这个 /23 覆盖 192.168.0.0 到 192.168.1.255,正好把两个 /24 都包进去,没有多余。

配置:

[AR1] ip route-static 192.168.0.0 255.255.254.0 10.0.12.2

注意掩码 255.255.254.0 对应的就是 /23。汇总的好处是路由表条目锐减,坏处是可能把不存在的网段也包进来。如果 192.168.1.0/24 这个网段实际上不存在,流量打到 AR2 上,AR2 查表查不到,会回一个 ICMP 不可达,同时产生大量无用流量。更糟糕的情况是 AR2 上恰好有一条默认路由指向 AR1,流量在两者之间来回弹,形成环路。

解决办法是在 AR2 上配一条指向 NULL0 的汇总路由:

[AR2] ip route-static 192.168.0.0 255.255.254.0 NULL0

NULL0 是一个逻辑接口,指向它的流量会被直接丢弃,不产生 ICMP 不可达,也不占带宽。这条路由的作用是"占位":让汇总网段在 AR2 的路由表里有匹配项,避免流量被默认路由带回 AR1。这是标准的防环手段,在有汇总的场景里几乎是必配项。配的时候注意优先级,黑洞路由的优先级要小于等于明细路由的优先级,否则它会把正常流量也吸走。

5. 常见故障排查实录

5.1 现象与原因速查表

静态路由的故障现象高度集中,我把这些年遇到的整理成表,遇到问题先对号入座,能省不少时间。

现象最可能原因排查动作
路由配了但不显示在路由表下一跳不可达,递归失败display ip routing-table看状态,检查下一跳是否在直连网段
路由表里有,但 ping 不通回程路由缺失在对端设备上查是否有回来的路由
路由表里有,PC 也不通PC 未配网关或网关写错检查 PC 的 IPv4 配置页
主链路正常但流量走备份优先级配反或未配display ip routing-table protocol static对比优先级
两条路由同时生效抢流量优先级写成一样,变成负载分担显式给备份路由加 preference
默认路由配了却环路两端互指默认路由检查拓扑,收敛到单方向出口
汇总后部分网段不通明细网段不存在,流量被丢弃配 NULL0 黑洞路由或补明细
重启设备后配置丢失未执行 save配置完执行save并确认

表格里最后一条特别值得说。eNSP 里设备断电重启,未保存的配置全部丢失,这是仿真环境和真实设备一致的特性。辛苦配一小时的实验,忘了save,关掉重开后一切归零。我的习惯是每个关键节点配完就存一次,命令是save,回车后输入 y 确认,回显 "Save the configuration successfully" 才算完事。

5.2 三个真实踩过的坑

第一个坑:只在一边配了路由。早年做实验,配完 AR1 去往 AR3 的路由就急着 ping,结果不通,查了半天以为是掩码写错了。实际上是 AR3 上没有回程路由,ICMP 请求能到 PC2,但 PC2 的回复到了 AR3 就找不到回去的路,被丢弃。判断方法很简单:在两端同时抓包,或者在中间设备上看接口计数,请求包只增不减,就说明回程有问题。单向通的本质是"去程和回程是两条独立的路",两端都得配。

第二个坑:下一跳写成了对端接口的另一个地址。路由器互联链路两端各有一个地址,比如 AR1 是 10.0.12.1、AR2 是 10.0.12.2。给 AR1 配静态路由时,下一跳必须写 AR2 的地址 10.0.12.2,写成自己的 10.0.12.1 就完全无效,因为设备会发现自己就是那个地址,无法把包"交给"自己。这个错误看起来低级,但在多接口环境下地址一多,写错一个数字很难自查。养成配完立刻display ip routing-table确认路由状态是 Active 的习惯,能第一时间发现。

第三个坑:默认路由导致流量绕远。有一回在一个三节点的环形拓扑里,三台设备都配了指向对方的默认路由,结果 PC 之间能通,但延迟高得离谱,抓包发现流量在环路里转了好几圈才到目的地。原因是每台设备都认为"未知目的地走邻居",而邻居又认为"未知目的地走另一台",包在环里打转,直到 TTL 耗尽。这个问题用tracert一看就清楚,回显里会出现重复的地址。解决办法是打破环,让默认路由只出现在一个方向上,环形拓扑的节点必须配明细路由而不是默认路由。

提示:凡是看到 tracert 回显里出现同一跳地址重复两次以上,基本可以判定是路由环路,不用再怀疑链路质量。

5.3 排错命令清单

排查顺序我固定成四步,从下往上,先物理后逻辑,每次出问题都按这个顺序走,效率最高。

第一步,看接口。

[AR1] display ip interface brief

关注 Physical 和 Protocol 两列,任一为 down 就先解决链路问题,别往下看。

第二步,看直连。

[AR1] display ip routing-table protocol direct

直连路由是路由表的基石,直连不对,静态路由全部建不起来。

第三步,看静态路由状态。

[AR1] display ip routing-table protocol static [AR1] display ip routing-table verbose

重点看每条路由前面的状态标记,Active 是活跃,Inactive 是未激活。Inactive 的路由九成是下一跳不可达。

第四步,逐跳 ping。

[AR1] ping -a 192.168.10.1 10.0.12.2 [AR1] ping -a 192.168.10.1 10.0.23.2 [AR1] ping -a 192.168.10.1 192.168.30.10

从近到远,逐跳验证。哪一跳断,问题就在那一跳和上一跳之间。这个方法的精髓是不要直接 ping 最终目标,而是把路径拆开,把排查范围一步步缩小。

6. 几个容易被忽略的工程细节

6.1 默认路由的两端互指陷阱

两台设备互相把默认路由指向对方,是新手最容易制造的死循环。场景通常是这样:两台核心路由器之间连着一根线,每台上都配了ip route-static 0.0.0.0 0.0.0.0 <对端地址>,想着"这样不管什么流量都能互相转过去"。实际情况是,一个目的地址不可达的包进来,A 查表匹配默认路由,扔给 B;B 查表也匹配默认路由,扔回 A。包在两者之间来回穿梭,直到 TTL 归零。链路带宽被白白消耗,设备 CPU 也会被这些无用的转发拖高。

判断方法:在两台设备上分别执行display ip routing-table 0.0.0.0,如果两边都只有一条指向对方的默认路由,且它们之间没有任何更具体的明细路由区分方向,那就有环的风险。解决思路是让默认路由有明确的方向性:末梢指向核心可以,核心指向末梢不行。如果确实需要双向都配,就必须用明细路由把两个方向的流量区分开,或者引入链路检测机制让其中一条失效。

6.2 静态路由的长期维护成本

静态路由配置简单,维护起来却是隐形成本。一个几十台设备的网络,全用静态路由,新增一个网段意味着所有需要访问它的设备都要加一条配置。出差错的方式还特别隐蔽:漏配一台,表现出来的症状是"某个角落的机器访问不了某个服务",排查起来要比对全网的配置清单,工作量巨大。

我的做法是画一张表,纵轴是网段,横轴是设备,交叉点标注这一台设备上该网段走哪个下一跳。配置前先把表填满,配置时对着表逐项打勾,配置完再随机抽几个组合验证连通性。这张表还有个附带价值:三个月后网络变更,不用重新翻设备,看表就知道该改哪里。规模再大一点,就该考虑上动态路由了,静态路由的边界大概在十几台设备、两三个出口这个量级,超过这个量级硬扛静态路由,维护成本会指数上升。

6.3 实验到生产的差距

在 eNSP 里配通和在真实环境里配通,中间隔着几件事。第一是链路质量,仿真环境永远不会丢包、不会抖动,真实链路上一个光模块接触不良就能让你的静态路由看起来"时好时坏"。第二是设备差异,不同型号、不同软件版本对命令的支持有细微区别,某些参数在低端设备上可能不支持。第三是安全策略,真实网络中静态路由往往要和访问控制列表、流量策略配合,仿真环境里这些通常是缺省的。

所以我的建议是:在 eNSP 里把原理和命令练熟,但别把"仿真环境能通"当成"生产环境能通"的证明。有条件的话,在真实设备的实验环境里再跑一遍同样的拓扑,感受一下差异。比如在真机上你会遇到接口协商速率、双工模式、ARP 老化时间这些仿真环境里被隐藏的细节,这些才是真正考验功力的地方。

我个人在实际操作中的体会是,静态路由和默认路由的价值不在于命令本身有多难,而在于你能否在动手之前就想清楚"这条路由的下一跳为什么是它、它失效了谁来顶、它会不会和别的路由打架"这三个问题。想清楚了再敲命令,比敲完再排查要省力得多。另外分享一个小习惯:每配完一组路由,我会故意 shutdown 一条链路,看备份能不能顶上来,再恢复回去。这一步花不了两分钟,但能提前把大部分冗余设计的问题暴露出来,比等着业务真的中断了才发现备份没生效要划算得多。