跳到正文
Lutong's Homepage

华为H3C实战 | 第10章 静态路由与默认路由

📚 本系列共 43 篇(第 10 / 43 篇) · 第二卷 路由与广域网篇 —— 让数据找到路

← 上一篇:第 9 章 MAC 地址表与端口安全  下一篇:第 11 章 OSPF 协议配置详解 →


本章导读:静态路由是你亲手写给设备的一张"地址条":稳、可控、好懂,代价是网络一变就得人跟着改。本章重点落在三件事:优先级怎么裁决、下一跳怎么写才不会变成"假路由"、路由表里到底哪条真的活着。

本章结构:

  • 10.1 功能原理与业务场景 —— 把路由器想象成分拣中心:目的地址+掩码、下一跳、出接口、优先级、开销五个字段逐一讲透,默认路由是"最后一行的兜底条款"
  • 10.2 华为设备配置详解 —— ip route-static 完整写法、preference 写多条的备份关系、指向 NULL0 的汇总黑洞路由防环、等价路由
  • 10.3 H3C 设备配置详解 —— 与华为的结构对应、ip route-static 写法差异
  • 10.4 命令对照表 —— 配置命令与三层接口/查看命令两张表
  • 10.5 配置验证 —— 四个层次:五秒看路由表 → 看谁被选中(优先级裁决)→ 看配了几条活了几条(verbose 看 State)→ ping/tracert 端到端确认
  • 10.6 排错与故障树 —— 按顺序往下走的五步故障树:路由在不在表→Interface 是真接口吗→下一跳通不通→出接口对不对→回来有没有路由;外加两家各自的补充排查点和包计数验证
  • 10.7 新手踩坑 —— 只写下一跳不查下一跳可达、默认路由把所有流量吸走
  • 10.8 本章小结 —— 要点清单 + 自测题

重点提示:路由"配了但没生效",别急着怀疑设备,先 display ip routing-table ... verbose 看这条的 State 和 Interface 列——下一跳不可达时接口列会是空的,这就是 10.6 第 2 步。想要"主链路断了自动切备份",靠的是两条默认路由的 preference 差(如 60/80),这一点在 10.2 和 10.5.2 讲得最细。 关联章节:接口和 IP 怎么配见第 2、6 章;IP 地址规划与 PPPoE 出口见第 15 章;路由条目多了改用动态路由见第 11 章;用 ACL/路由策略过滤和控制路由见第 17 章。

10.1 功能原理与业务场景

10.1.1 这功能是干嘛的(通俗版)

静态路由,说白了就是你亲手写给设备的一张"地址条"。

想象一个快递分拣中心。包裹上写着"送到东风路 18 号",分拣员不看人,只看地址簿:地址簿上写着"东风路 → 走 3 号传送带,交给隔壁中转站"。分拣员照做就行,他不关心那条路上有没有坑、有没有绕远,因为地址簿是人写的。

路由器的路由表就是这本地址簿,每一条路由就是一行条目:

  • 目的地址 + 掩码:这行条目管的是哪片"街道";
  • 下一跳(NextHop):交给哪个"隔壁中转站";
  • 出接口(Interface):从哪个"传送带"送出去;
  • 优先级(Preference):几本地址簿打架时,谁的说了算;
  • 开销(Cost):同一本地址簿里有两条同样可信的条目时,比的"远近"。

静态路由就是你手动写上去的条目——稳定、可控、简单,但网络一变就得人跟着改。默认路由是地址簿最后一行的兜底条款:“上面所有条目都对不上号?那就统统走 1 号传送带。“它一定排最后,因为它的"街道范围"覆盖了整个城市,是最不精确的一条。

适用版本:华为 VRP V200R019 及以上(AR6000/S5700 系列);H3C Comware V7(R2610 及以上)。

10.1.2 在网络里怎么落地(设计视角)

9.1.2.1 路由表长什么样:五个关键字段

不管华为还是 H3C,一条 IPv4 路由的核心信息就是这几项,查表时也按这个顺序用:

字段 华为 display ip routing-table 列名 H3C display ip routing-table 列名 含义
目的地址 / 掩码 Destination/Mask Destination/Mask 这条路由管哪片网段,/32 表示只管一台主机
协议 Proto Proto 谁写的:Direct 直连、Static 静态、OSPF、RIP、ISIS、BGP 等
优先级 Pre Pre 协议可信度,数值越小越优先
开销 Cost Cost 同优先级内比较远近,静态路由缺省一般为 0
下一跳 / 出接口 NextHop / Interface NextHop / Interface 交给谁、从哪儿走

一句话记规则:先比掩码长度(最长匹配),再比优先级(小者优),再比开销(小者优)。注意"最长匹配"是排在最前面的,它不受优先级影响——哪怕你配了一条优先级为 1 的 10.0.0.0/8,也抢不过一条优先级为 150 的 10.1.1.0/24,因为后者更精确。

9.1.2.2 直连路由:不用人写,接口 up 就自动出现

直连路由(Direct)是设备自己发现的:只要某个三层接口配了 IP 地址、并且协议状态是 up,设备就会把"这个接口所在的网段"写进路由表,优先级固定为 0(最高,不可改),出接口就是该接口本身,开销为 0。

为什么必须"up"才有?因为对设备来说,一个 down 的接口等于一条断头路,写了地址簿也没用,报文发不出去。所以直连路由是"活的”:插上网线、接口协议状态变 up,条目出现;拔掉网线,条目随之消失——它是静态路由能生效的地基,下面讲"下一跳迭代"时你会看到原因。

一个配了 192.168.10.1/24 的接口,在路由表里通常会贡献三条直连条目:网段路由 192.168.10.0/24(发往整个网段)、本机地址 /32 主机路由(192.168.10.1/32,指向 127.0.0.1)、以及广播地址 /32(192.168.10.255/32)。直连路由和静态路由的差别就在这三点:来源(自己发现 vs 人工写)、优先级(0 vs 60)、生存方式(跟着接口状态走 vs 配置了就一直在,但能不能生效还要看下一跳)。

9.1.2.3 默认路由:0.0.0.0/0 的秘密

0.0.0.0/0 的掩码长度为 0,意味着它与任何目的地址都能"匹配”,但匹配长度最短,所以永远排在最长匹配的最后一位。它的语义是"去往所有我不认识的地方",典型场景就是出口设备把流量甩给运营商。

写法的关键在于掩码:掩码写成 0.0.0.0 或长度 0,两者等价。千万别写成 0.0.0.0 255.255.255.0 或者 0.0.0.0/24——这不是默认路由,而是"去往 0.0.0.0/24"的一条普通网段路由,不仅不能兜底,还因为落在路由表最前面,看着像"配上了但一点用没有",是新手最常见的翻车点之一。

9.1.2.4 浮动静态路由:靠优先级做"主备"

同一个目的网段,你可以写两条静态路由:主链路一条、备用链路一条,备用那条把优先级调高(数值变大)。设备永远只把优先级小的那条放进"活跃"状态,另一条躺在"非激活"里待命。一旦主路由因为接口 down 或下一跳不可达而从活跃状态消失,备用那条自动顶上——这个过程叫浮动,因为备用路由平时"浮"在下面,只在主路由沉底时才浮上来。

9.1.2.5 下一跳迭代:地址簿里的一次"转查"

只写了下一跳、没写接口的静态路由,设备要回答一个问题:“这个下一跳地址,我从哪儿发出去?“办法是拿着下一跳地址再去路由表查一次,查到的结果(通常是直连路由)才是真正的出接口。这个"转查"就叫递归查找 / 下一跳迭代。

由此推出两个重要结论:

  • 下一跳必须"查得到”,静态路由才能变成活跃。如果设备上根本没有任何路由能到达这个下一跳(接口 down 了、地址配错了、网段写错了),这条静态路由会一直不生效。
  • 迭代可能有深度:A 静态指向 B,B 又指向 C……每一层都要查一次。华为提供 ip route-static selection-rule relay-depth(系统视图,缺省未使能)来开启"按迭代深度优选”:当存在多条同前缀、同优先级但迭代深度不同的静态路由时,会选迭代深度较小的那条作为活跃路由。官方说明这条命令最初是为解决 GGSN 业务静态路由形成转板、循环的问题;开启后可能使原来活跃的路由变为不活跃,生产环境开之前要评估。

对出接口写法来说,情况分两类:点到点链路(如 PPP 封装的串口)上"出接口就是下一跳",只写出接口就够了;而以太网、VLANIF 这类广播型接口上,“同一个接口后面挂着很多邻居”,只写出接口没法确定交给谁,所以必须同时写下一跳。华为允许"出接口 + 下一跳"一起写,这样设备就不用做迭代,直接参与选路;H3C 也支持同样写法。

9.1.2.6 优先级对照:两家数值到底差在哪

任务里常被问到"华为静态 60、H3C 静态 60,那 OSPF 呢?"——结论是两家的缺省值其实一致,并不像坊间传言那样"H3C 的 OSPF 优先级跟华为不一样"。华为官方 IP 路由知识库与 H3C《IP 路由基础配置》给出的缺省优先级为:OSPF 内部 10、IS-IS 15、单播静态 60、RIP 100、OSPF 外部(ASE/NSSA)150、IBGP/EBGP 255。下表把两家并排放:

路由来源 华为缺省优先级 H3C 缺省优先级 备注
直连(DIRECT) 0 0 最高,不可修改
组播静态 见厂商表格 1 H3C 缺省表中有此项
OSPF(内部) 10 10 一致
IS-IS 15 15 一致
单播静态 60 60 本章主角,可逐条修改
RIP 100 100 一致
OSPF ASE(外部) 150 150 一致
OSPF NSSA(外部) 150 150 一致
IBGP / EBGP 255 / 255 255 / 255 一致
来自不可信源端 255 256(UNKNOWN) 兜底

真正存在差异的是**“同优先级时谁赢"的补充规则**。华为在《IP 路由》里明确:两个协议被你手工配成同一个外部优先级时,系统用"内部优先级"再排一次——OSPF 10、IS-IS Level-1 15、IS-IS Level-2 18、静态 60、RIP 100、OSPF ASE 150、IBGP 200、EBGP 20。H3C 的官方表格里没有把它写成"内部优先级"这一层,但不少中文资料会把 IS-IS L1/L2 拆成 15/18、把 EBGP/IBGP 写成 20/200,这其实来自同样的"内部细化"逻辑,不建议把它当成 H3C 的协议缺省优先级去用。落到操作上记住一条就够:两家缺省都遵循"直连 0 < OSPF 10 < IS-IS 15 < 静态 60 < RIP 100 < OSPF 外部 150 < BGP 255”。

再补一句"为什么这层差异平时感觉不到":真正需要你动手改优先级的场景只有三种——做备用路由(浮动静态)、强制静态优先于动态、同优先级做负载分担。其余情况按缺省值走,两家行为完全一致,不会出现"换个厂商选路就变了"的问题。

9.1.2.7 路由状态:活跃、非激活与无效

路由表里的条目不是非黑即白。除了"在表里 / 不在表里",还有状态之分:

  • 活跃(Active):被选中,真正用于转发。
  • 非激活(Inactive):配置存在,但在仲裁中输给了更优的条目(例如优先级更高的 OSPF 路由),或者出接口还没恢复。
  • 无效(Invalid):迭代失败、出接口不存在等"根本没法用于转发"的情形。

华为的 display ip routing-table 摘要视图只显示活跃路由,要看非活跃的必须 verbose,或在 protocol static 视图里看 <Inactive> 那一段;H3C 的摘要视图同样只列活跃路由,verbose 才给全量。理解这三者的区别是判断"配了没有、活了没有"的分水岭——很多"配了没用"的工单,其实只是把非激活读成了"没配上",于是又配了一遍,路由表里出现两条一模一样的条目,越查越乱。

9.1.2.8 等价路由:什么时候该用、什么时候别用

等价路由的成立条件是"同目的、同优先级、同开销、不同下一跳/出接口"。它天然支持多线路分担,但有两个前提:两侧线路的真实带宽应大致相当(否则小带宽那条会成为木桶短板),以及出口设备上运营商对源地址的策略要能接受,否则会出现"从 A 出、从 B 回"的路由不对称,NAT 会话表和防火墙状态很难受。企业双出口的正确姿势通常是主备(浮动静态)+ 策略路由,而不是简单 ECMP——这也是本书把浮动静态讲在 ECMP 前面的原因。

9.1.2.9 本章案例拓扑

后面所有配置都基于这栋办公楼的双出口场景:

                    +------------------+
   运营商A ---------| Gi0/0/0   AR6140 |--- Gi0/0/1
  (主出口)          |  (S5735 核心)    |   (备出口)--- 运营商B
                    +------------------+
                          |  Vlanif10: 192.168.10.1/24
                          |
                    [接入交换机]
                          |
                     PC 192.168.10.100

  AR6140 主出口接口 Gi0/0/0: 172.16.1.2/24,运营商A 侧 172.16.1.1
  AR6140 备出口接口 Gi0/0/1: 172.16.2.2/24,运营商B 侧 172.16.2.1
  专线对端网段: 10.200.1.0/24(经 Gi0/0/0 方向的下一跳 172.16.1.1)

本章假设:核心交换机的 VLAN 与 VLANIF 已按第 3、6 章配好,PC 网关指向 192.168.10.1;本章只讲"路怎么指"。

10.2 华为设备配置详解

10.2.1 命令行基础速览(本章会用到的那几条)

进入系统视图后,静态路由的命令都在系统视图下敲。华为 ip route-static 的基本结构是:目的网段 + 掩码 + 下一跳(或出接口 + 下一跳)+ 可选参数。

命令 作用 备注
ip route-static 10.200.1.0 255.255.255.0 172.16.1.1 配一条去往 10.200.1.0/24 的静态路由 掩码写点分十进制
ip route-static 10.200.1.0 24 172.16.1.1 同上,掩码也可写位数 两种写法等价
ip route-static 0.0.0.0 0 172.16.1.1 默认路由 掩码必须是真的 0
ip route-static ... preference 80 指定优先级(数值越大越不优先) 缺省 60
ip route-static 10.0.0.0 24 GigabitEthernet0/0/1 172.16.2.1 出接口 + 下一跳一起写 免迭代,直接参与选路
ip route-static 10.0.0.0 24 NULL0 黑洞路由,匹配的报文直接丢弃 防环、防汇总漏网
ip route-static default-preference 80 改"以后新配的"静态路由缺省优先级 对已存在的路由无效
undo ip route-static 10.200.1.0 24 172.16.1.1 删除指定静态路由 参数要写全

10.2.2 完整配置模板

下面是一台华为 AR6140-16G4XG 出口路由器的完整模板,涵盖直连、专线静态路由、主备默认路由、黑洞路由和演示用的等价路由。

# 从用户视图进入系统视图并改设备名
<HUAWEI> system-view
[HUAWEI] sysname HUAWEI

# 主出口接口:配地址后,172.16.1.0/24 直连路由自动出现
[HUAWEI] interface GigabitEthernet0/0/0
[HUAWEI-GigabitEthernet0/0/0] description TO_ISP_A
[HUAWEI-GigabitEthernet0/0/0] ip address 172.16.1.2 255.255.255.0
[HUAWEI-GigabitEthernet0/0/0] quit

# 备出口接口
[HUAWEI] interface GigabitEthernet0/0/1
[HUAWEI-GigabitEthernet0/0/1] description TO_ISP_B
[HUAWEI-GigabitEthernet0/0/1] ip address 172.16.2.2 255.255.255.0
[HUAWEI-GigabitEthernet0/0/1] quit

# 用户网关(三层接口上起 VLANIF,接第 3/6 章配置)
[HUAWEI] interface Vlanif10
[HUAWEI-Vlanif10] description OFFICE_SUB10_GW
[HUAWEI-Vlanif10] ip address 192.168.10.1 255.255.255.0
[HUAWEI-Vlanif10] quit

# 去专线对端网段的静态路由:只写下一跳,交给迭代去解析出接口
[HUAWEI] ip route-static 10.200.1.0 255.255.255.0 172.16.1.1

# 主默认路由:掩码必须为 0,从运营商A 出去
[HUAWEI] ip route-static 0.0.0.0 0 172.16.1.1 preference 60 description HOLD:PRIMARY_ISP_A

# 备默认路由:优先级 80,主路由失效时它才上位
[HUAWEI] ip route-static 0.0.0.0 0 172.16.2.1 preference 80 description HOLD:BACKUP_ISP_B

# 汇总黑洞:把 192.168.0.0/16 中不存在的部分丢进 Null0,防止回环
[HUAWEI] ip route-static 192.168.0.0 255.255.0.0 NULL0 preference 80

# 等价路由演示:两条同优先级、同开销的静态路由一起活跃
[HUAWEI] ip route-static 10.200.9.0 24 172.16.1.1
[HUAWEI] ip route-static 10.200.9.0 24 172.16.2.1

# 保存配置,重启不丢(会提示输入 Y 确认)
[HUAWEI] quit
<HUAWEI> save

10.2.3 逐行讲解

先配地址,再配路由。 ip address 是直连路由的唯一来源,没配地址的接口不会给路由表贡献任何直连条目。反例:有人在 VLANIF 上配了 ip address 192.168.10.1 255.255.255.0 却忘了对应 VLAN 里没有 up 的二层口,结果 VLANIF 一直是 down,直连路由和它的静态路由全部"躺平"。

ip route-static 10.200.1.0 255.255.255.0 172.16.1.1 是指向运营商专线对端网段的典型写法。这里只写了下一跳、没写出接口,设备会拿 172.16.1.1 去路由表里查一次,查到 172.16.1.0/24 Direct ... GigabitEthernet0/0/0,于是这条静态路由的出接口自动变成 GigabitEthernet0/0/0。反例:把下一跳写成 172.16.3.1(一个根本没有直连的地址),这条路由就永远不会活跃,display ip routing-table 里压根看不到它。

ip route-static 0.0.0.0 0 172.16.1.1 preference 60 是主默认路由。preference 60 其实等于缺省值,这里显式写出来是为了把设计意图写进配置。description HOLD:PRIMARY_ISP_A 是给以后接手的人(和三个月后的你)看的备注,display current-configuration 能看到它,排错时非常有用。

ip route-static 0.0.0.0 0 172.16.2.1 preference 80 是浮动默认路由。优先级必须严格大于 60,否则两条默认路由会同时活跃,变成"按流随机走两条线路",双线带宽不一样时体验极差。反例:有人把备路由写成 preference 60,以为自己做了主备,其实做成了负载分担,而且打乱了运营商 A 的源地址策略。

ip route-static 192.168.0.0 255.255.0.0 NULL0 preference 80 是黑洞路由。为什么要配?把 192.168.0.0/16 汇总丢 Null0 后,一旦某条精确路由(如 192.168.10.0/24)因为故障消失,报文会被这条汇总路由立刻吃掉丢弃,而不是被兜底的默认路由甩到运营商那里——如果运营商那侧恰好也有去往该网段的路由,报文就会来回兜圈子,形成路由环。这也是"用汇总 + 黑洞防止环路"这一经典手法的由来。要注意优先级放到 80,避免它抢位。

等价路由那两行:目的地址、优先级、开销都相同,但下一跳不同,于是两条都会留在路由表里,设备按负载分担把流量分到两条路径上。这就是等价多路径(Equal-Cost Multi-Path,ECMP)。

⚠ 版本差异:AR 系列与 S 系列对静态路由可选参数的支持不完全一样。permanent(永久发布)、recursive-lookup host-route、BFD 联动等参数在不同版本出现时间不同,配置前请先在设备上用 ip route-static ? 看一眼参数表;ip route-static selection-rule relay-depth 更需要在对应版本的命令参考里确认。

10.3 H3C 设备配置详解

10.3.1 与华为的结构对应关系

H3C Comware V7 的静态路由命令名和思路与华为几乎一致,差异集中在三处:三层交换机的接口编号是 1/0/1 这种三段式(路由器只有两段)、掩码强烈推荐写位数、三层接口在交换机上是 Vlan-interface 而不是 Vlanif。另外 H3C 的 ip route-static 把"出接口"和"下一跳"的先后顺序和华为略有不同,写错顺序设备会直接报错,这是跨厂商迁移时最容易卡住的地方。

10.3.2 完整配置模板

下面是 H3C MSR3610-X1 的等价模板,与 9.2.2 一一对应:

# 从用户视图进入系统视图并改设备名
<H3C> system-view
[H3C] sysname H3C

# 主出口接口
[H3C] interface GigabitEthernet0/0
[H3C-GigabitEthernet0/0] description TO_ISP_A
[H3C-GigabitEthernet0/0] ip address 172.16.1.2 24
[H3C-GigabitEthernet0/0] quit

# 备出口接口(MSR3610-X1 的接口槽位号按整机编号,这里按第 2 槽第 0 口举例)
[H3C] interface GigabitEthernet2/0
[H3C-GigabitEthernet2/0] description TO_ISP_B
[H3C-GigabitEthernet2/0] ip address 172.16.2.2 24
[H3C-GigabitEthernet2/0] quit

# 用户网关:H3C 三层交换机上是 Vlan-interface
[H3C] interface Vlan-interface 10
[H3C-Vlan-interface10] description OFFICE_SUB10_GW
[H3C-Vlan-interface10] ip address 192.168.10.1 24
[H3C-Vlan-interface10] quit

# 专线静态路由:掩码直接写位数 24
[H3C] ip route-static 10.200.1.0 24 172.16.1.1

# 主默认路由:掩码写 0,等于缺省优先级 60
[H3C] ip route-static 0.0.0.0 0 172.16.1.1 description HOLD:PRIMARY_ISP_A

# 备默认路由:优先级 80,做浮动备份
[H3C] ip route-static 0.0.0.0 0 172.16.2.1 preference 80 description HOLD:BACKUP_ISP_B

# 出接口 + 下一跳一起写(广播型接口必须带下一跳)
[H3C] ip route-static 192.168.20.0 24 Vlan-interface 10 192.168.10.254

# 黑洞路由:丢往 Null0
[H3C] ip route-static 172.16.200.0 24 NULL0

# 保存配置(save force 免交互确认)
[H3C] quit
<H3C> save force

10.3.3 H3C 的关键差异点

接口编号。 前面模板里 GigabitEthernet0/0 和 GigabitEthernet2/0 的写法在一点上和华为不同:H3C 路由器的接口编号是"槽位号/接口号",槽位号取决于板卡插在哪、以及主控自带哪些口,同一款型号在不同板卡配置下接口号可能不同。华为 AR6140-16G4XG 的主控自带业务口才是 0/0/0 这种写法,H3C MSR3610-X1 的扩展口更像 2/0。所以在真机上写配置前,一定先 display interface brief 看一眼有哪些接口、叫什么名字,别照着别人的截图硬抄。三层交换机(如 S5130S-28S-EI)则通常是 GigabitEthernet1/0/1 这种三段式编号,第一段是 IRF 成员编号,堆叠后 ≠1 的成员号会直接体现在接口名里。

掩码写法。 H3C 的 ip route-static 明确接受 mask | mask-length 两种形式,10.200.1.0 24 与 10.200.1.0 255.255.255.0 完全等价,日常更推荐位数写法,短、不易错。华为虽然也能写位数,但老版本教程普遍用点分十进制,跨厂商时别把两种记混。

出接口与下一跳的顺序。 H3C 是 ip route-static 目的网段 掩码 出接口 下一跳(先接口后地址),而只写下一跳时 ip route-static 目的网段 掩码 下一跳。也就是说第二个位置放"接口类型"还是"IP 地址",设备靠关键字自动识别。注意 9.3.2 里的 ip route-static 192.168.20.0 24 Vlan-interface 10 192.168.10.254 就是这个顺序:目的网段 → 掩码 → 出接口 → 下一跳。如果你把顺序写成 192.168.20.0 24 192.168.10.254 Vlan-interface 10,会直接报语法错误。

广播型接口必须带下一跳。 在 Vlan-interface、以太网物理口这类广播型接口上,如果只写出接口不写下一跳,H3C 明确要求"必须同时指定出接口和下一跳 IP 地址"。虽然部分版本会容忍"只写出接口"并把它当作"对端直连"处理,但这种写法既不可移植也不利于排错,统一按"广播口必须带下一跳"写最稳。

description 与 tag。 H3C 的 ip route-static 支持 description(1~60 个字符)和 tag(1~4294967295),用法与华为基本一致。ip route-static default-preference <值> 可以改"以后新配"的静态路由缺省优先级,同样只对之后新增的路由生效。注意 tag 是给路由策略用的"标签",它不影响选路,但和优先级同样写在命令尾部时,参数顺序最好照手册来,避免设备解析歧义。

为什么两条命令看起来几乎一样,迁移却还是容易翻车? 因为"一样的名字"背后藏着三点不同:接口命名体系(Vlanif vs Vlan-interface)、出接口与下一跳的位置语义、以及可选参数的支持范围。华为的教程直接复制到 H3C,最常见的三种报错是:Vlanif10 找不到接口、ip route-static 参数顺序错、用了对方不支持的可选参数。所以跨厂商移配置时,先改接口名,再改参数顺序,最后删掉对方不支持的可选参数,按这个顺序做,返工最少。

⚠ 版本差异:H3C ip route-static 的完整参数在不同产品线(交换机 S5130S-EI / 路由器 MSR3610-X1)与不同 Release 上有差异,例如 permanent(永久静态路由)、backup-interface/backup-nexthop(静态路由快速重路由)、recursive-lookup 系列等并非所有款型都支持。写配置前请用 ip route-static ? 在目标设备上确认,并以该产品对应 Release 的命令参考为准。

10.4 华为 / H3C 命令对照表

10.4.1 配置命令对照

功能 华为(VRP) H3C(Comware V7) 差异说明
进系统视图 system-view system-view 相同
配静态路由(掩码十进制) ip route-static 10.200.1.0 255.255.255.0 172.16.1.1 ip route-static 10.200.1.0 24 172.16.1.1 H3C 常用位数写法
配静态路由(掩码位数) ip route-static 10.200.1.0 24 172.16.1.1 ip route-static 10.200.1.0 24 172.16.1.1 均支持
默认路由 ip route-static 0.0.0.0 0 172.16.1.1 ip route-static 0.0.0.0 0 172.16.1.1 相同
指定优先级 ... preference 80 ... preference 80 相同,缺省均为 60
出接口 + 下一跳 ip route-static 10.0.0.0 24 GigabitEthernet0/0/1 172.16.2.1 ip route-static 10.0.0.0 24 Vlan-interface 10 172.16.1.1 都是先接口后地址
黑洞路由 ip route-static 10.0.0.0 24 NULL0 ip route-static 10.0.0.0 24 NULL0 相同
改缺省优先级 ip route-static default-preference 80 ip route-static default-preference 80 相同,只影响新增路由
删除静态路由 undo ip route-static 10.0.0.0 24 172.16.1.1 undo ip route-static 10.0.0.0 24 172.16.1.1 参数需写全
删全部静态路由 逐条 undo ip route-static <目的> <掩码> [下一跳] delete static-routes all(交互确认 Y) H3C 有专用命令;华为需逐条 undo
清路由表统计 reset ip routing-table statistics protocol all reset ip routing-table statistics protocol all 用于观察路由抖动

10.4.2 三层接口与查看命令对照

功能 华为(VRP) H3C(Comware V7) 差异说明
交换机三层口(物理) undo portswitch(视型号) port link-mode route S 系列支持情况不同
交换机三层口(VLANIF) interface Vlanif10 interface Vlan-interface 10 名称不同
看路由表 display ip routing-table display ip routing-table 字段基本相同
按协议看路由 display ip routing-table protocol static display ip routing-table protocol static 输出结构略有差异
看本机静态路由配置 display ip routing-table protocol static + display current-configuration | include route-static display running-config route H3C 有专用命令
看路由表统计 display ip routing-table statistics display ip routing-table statistics H3C 会区分 active/added/deleted
路由表详细(含非激活) display ip routing-table protocol static verbose display ip routing-table verbose 都能看到 Active/Inactive
查下一跳解析情况 display ip routing-table protocol static verbose(观察 NextHop 与 Interface 是否为真实出接口) display ip routing-table verbose(看 RelyNextHop / RealNextHop) 迭代观测方式不同
查 FIB 表 display ip fib(部分型号支持) 通常用路由表即可

10.5 配置验证

10.5.1 看路由表:五秒判断配没配对

配完路由第一件事是 display ip routing-table,先看目标网段在不在、下一跳和出接口对不对。

# 华为:查看全部活跃路由
<HUAWEI> display ip routing-table
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Tables: Public
         Destinations : 9        Routes : 10

Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface

        0.0.0.0/0   Static  60   0          RD   172.16.1.1      GigabitEthernet0/0/0
        0.0.0.0/0   Static  80   0          RD   172.16.2.1      GigabitEthernet0/0/1
     10.200.1.0/24  Static  60   0           D   172.16.1.1      GigabitEthernet0/0/0
     10.200.9.0/24  Static  60   0           D   172.16.1.1      GigabitEthernet0/0/0
                    Static  60   0           D   172.16.2.1      GigabitEthernet0/0/1
    172.16.1.0/24  Direct  0    0           D   172.16.1.2      GigabitEthernet0/0/0
    172.16.2.0/24  Direct  0    0           D   172.16.2.2      GigabitEthernet0/0/1
   192.168.10.0/24  Direct  0    0           D   192.168.10.1    Vlanif10

正常长什么样?直连路由的 Pre 一定是 0、Proto 是 Direct、下一跳就是本机接口地址;静态路由的 Pre 是 60(或你设的值),NextHop 是你写的下一跳,Interface 是设备迭代出来的真实出接口。Flags 列的 D 表示已经下发到转发信息库(FIB),也就是说真的在转发;如果某条路由只有 R 没有 D,说明它是迭代路由、还没落到具体的出接口上。

再看 H3C 的同一张表:

# H3C:查看全部活跃路由
<H3C> display ip routing-table
Routing Tables: Public
         Destinations : 9        Routes : 10

Destination/Mask    Proto  Pre  Cost      NextHop         Interface

0.0.0.0/0           Static 60   0         172.16.1.1      GE0/0
0.0.0.0/0           Static 80   0         172.16.2.1      GE2/0
10.200.1.0/24       Static 60   0         172.16.1.1      GE0/0
10.200.9.0/24       Static 60   0         172.16.1.1      GE0/0
10.200.9.0/24       Static 60   0         172.16.2.1      GE2/0
172.16.1.0/24       Direct 0    0         172.16.1.2      GE0/0
172.16.2.0/24       Direct 0    0         172.16.2.2      GE2/0
192.168.10.0/24     Direct 0    0         192.168.10.1    Vlan10

H3C 的输出更"素":没有 Flags 列,同一目的网段的等价路由会连续两行、各自带自己的下一跳和出接口(如 10.200.9.0/24 那两行)。0.0.0.0/0 也出现了两行,Pre 60 那条才是当前被选中的主默认路由;Pre 80 那条属于"同一目的网段的另一条候选",选路时优先级小的赢,Pre 80 只有在 Pre 60 失效后才会接手。想确认到底谁在"干活",下一步用 verbose 看 State 字段,而不是只看摘要。

10.5.2 看谁被选中:优先级是怎么裁决的

想确认主备真的生效,用 verbose 看详细状态:

# H3C:查看全部路由的详细信息,含激活与非激活
<H3C> display ip routing-table verbose
Routing Table : Public
         Destinations : 9        Routes : 10

  Destination: 0.0.0.0/0
     Protocol: Static          Process ID: 0
   Preference: 60                     Cost: 0
      NextHop: 172.16.1.1         Interface: GE0/0
  RelyNextHop: 0.0.0.0          Neighbour: 0.0.0.0
        State: Active Adv             Age: 00h12m40s
          Tag: 0

  Destination: 0.0.0.0/0
     Protocol: Static          Process ID: 0
   Preference: 80                     Cost: 0
      NextHop: 172.16.2.1         Interface: GE2/0
  RelyNextHop: 0.0.0.0          Neighbour: 0.0.0.0
        State: Invalid Adv             Age: 00h12m38s
          Tag: 0

这里能看到摘要视图看不到的东西。看 State 一栏:Active 表示这条路由真正在选路中使用,Invalid 表示配置存在但当前不被使用(被更高优先级的路由压制)。主路由断开后,你会看到第一条消失(接口 down 导致出接口不可用),第二条 State 从 Invalid 变成 Active——这就是浮动的发生过程。RelyNextHop 是"迭代下一跳",如果这里出现了具体地址,说明该路由经过了一次迭代解析。

华为侧对应的详细输出用按协议过滤的 verbose:

# 华为:查看静态路由的详细状态
<HUAWEI> display ip routing-table protocol static verbose
Routing Tables: _public_
         Destinations : 4        Routes : 5

Destination: 0.0.0.0/0
     Protocol: Static          Process ID: 0
   Preference: 60                    Cost: 0
      NextHop: 172.16.1.1        Neighbour: 0.0.0.0
        State: Active Adv             Age: 00h10m11s
          Tag: 0                 Priority: medium
   IndirectID: 0x0
 RelayNextHop: 0.0.0.0          Interface: GigabitEthernet0/0/0
     TunnelID: 0x0                  Flags:  D

10.5.3 看静态路由配了几条、活了几条

用统计命令能看到"配置了几条、活跃几条、删了几条",是判断路由抖动的利器:

# H3C:查看路由表统计
<H3C> display ip routing-table statistics
Total prefixes: 15        Active prefixes: 15

Proto      route       active      added       deleted
DIRECT     12          12          30          18
STATIC     3           3           5           2
RIP        0           0           0           0
OSPF       0           0           0           0
IS-IS      0           0           0           0
BGP        0           0           0           0
Total      15          15          35          20

STATIC 行的 route 是当前静态路由条数、active 是其中真正生效的条数、added/deleted 是从开机(或上次清零)以来增删的累计值。如果 deleted 一直在涨,说明有静态路由在反复失效重装,多半是下一跳抖动或接口 flapping。

10.5.4 用 ping / tracert 做端到端确认

路由表对了不代表能通,最后一步一定要用业务源地址做一次实测:在 PC 上 ping 专线对端、在核心交换机上 ping -a 192.168.10.1 10.200.1.200(指定源地址,避免从管理口出,测不到你要验证的那条路径),再 tracert 一次确认第一跳是主出口地址。

验证项 命令 期望结果
主默认路由生效 display ip routing-table 存在 0.0.0.0/0,Pre 为 60,NextHop 是主出口对端
备默认路由待命 display ip routing-table verbose Pre 为 80 那条 State 为 Invalid/非激活
静态路由已迭代 同上 Interface 是物理口或 VLANIF,不是空
路由真的转发 display ip routing-table 的 Flags 含 D(华为)
端到端互通 ping -a <源地址> <目的地址> 无丢包,TTL 递减合理

10.6 排错与故障树

10.6.1 故障树:按顺序往下走,别跳步

静态路由不通,永远按下面这个顺序查,前面一步不成立,后面全是白费:

[现象] PC ping 不通目标网段
   |
   +-- 第 1 步:目标网段在路由表里吗?
   |      |-- 不在  → 看 static-route 配置是否真的敲进去了(display current-configuration)
   |      |        → 看是不是被更高优先级路由压制(verbose 看 State)
   |      |        → 看下一跳能不能查得到(第 2 步)
   |      +-- 在   → 往下走
   |
   +-- 第 2 步:这条路由的 Interface 是真接口吗?
   |      |-- 空白/为 NULL → 下一跳不可达,查下一跳网段的直连路由
   |      +-- 正常          → 往下走
   |
   +-- 第 3 步:出接口 up 吗?
   |      |-- down → 查物理链路、光模块、VLAN、端口 shutdown
   |      +-- up   → 往下走
   |
   +-- 第 4 步:下一跳设备回得来吗?
   |      |-- 不回 → 对端缺少回程路由,或对端接口地址配错
   |      +-- 回   → 往下走
   |
   +-- 第 5 步:ARP 学得到吗?
          |-- 学不到 → 下一跳地址不属于该网段、或对端没开 ARP
          +-- 学得到 → 应用层/策略层问题(ACL、NAT、防火墙)

10.6.2 常见症状对照表

症状 可能原因 排查命令 定位方法
配了静态路由,路由表里根本没有 下一跳不可达,无法迭代 display ip routing-table、display ip routing-table protocol static 若 protocol static 里也没有,说明未生效;ping 一下下一跳,查它所在的直连路由是否存在
路由表里有,但 Interface 不对 下一跳跨网段,被迭代到了错误接口 display ip routing-table protocol static verbose 比较 NextHop 网段与你期望的接入网段是否一致
主备不切换 备用路由优先级写成了 60 或更小 display ip routing-table verbose 看 Pre 是否严格大于主路由
两条默认路由同时活跃 两条优先级相同,做成了负载分担 display ip routing-table 改成 preference 60/80 拉开
默认路由不兜底 掩码写成了非 0,成了 0.0.0.0/24 display ip routing-table 找 0.0.0.0/0 这个字符串,找不到就是没配默认路由
部分能通部分不通 某条精确路由缺失,落到了错误路径 display ip routing-table <目的IP> 用具体目的地址查表,看命中的是哪条
路由反复出现消失 出接口或链路 flapping display ip routing-table statistics 观察 deleted 计数持续增长,再查接口日志
路由表正常但业务不通 ACL / NAT / 防火墙策略拦截 display acl all、display nat session all 从路由问题切到策略问题

10.6.3 华为侧补充排查要点

# 先确认配置真的存在(有时是在错误的视图下敲的,命令根本没生效)
<HUAWEI> display current-configuration | include route-static

# 再确认下一跳网段的直连路由存在,这是迭代的前提
<HUAWEI> display ip routing-table 172.16.1.1

# 确认静态路由状态(Active / Inactive)
<HUAWEI> display ip routing-table protocol static verbose

如果 display current-configuration 里压根没有你敲的那条 ip route-static,九成是在用户视图 <HUAWEI> 下敲的——那个提示符下所有配置命令都不可用,只会报错,但很多人被海量输出刷过去没注意。

10.6.4 H3C 侧补充排查要点

# 确认静态路由配置
<H3C> display running-config route

# 确认路由是否激活,看 State 字段
<H3C> display ip routing-table verbose

# 确认下一跳直达
<H3C> display ip routing-table 172.16.1.1

# 三层接口是否 up(H3C 交换机上 Vlan-interface 要对应 VLAN 有 up 的口)
<H3C> display interface brief

H3C 上最常见的两个坑:Vlan-interface 是 down 的(VLAN 里没有 up 的物理口),以及 ip route-static 写得顺序不对导致根本没配进去(回显里能看到报错)。

10.6.5 用包计数验证"到底有没有发出去"

有时候路由一切正常,但数据就是出不去,这时要看接口有没有在发包:

# 华为:清空后再看接口入/出方向计数
<HUAWEI> reset counters interface GigabitEthernet0/0/0
<HUAWEI> display interface GigabitEthernet0/0/0 | include Total

如果"出方向"包数一直是 0,说明报文根本没到达这个出口——问题在路由或上层策略;如果出方向有包但入方向返回为 0,问题在对端或回程路由。

10.7 新手踩坑与注意事项

  1. 默认路由掩码写成 255.255.255.0 或 24。 症状:明明配了"默认路由",PC 却上不了网。避法:默认路由的目的地址和掩码必须都是 0,看到 0.0.0.0/0 才算配对。

  2. 备用路由优先级没拉开。 症状:主备切换不生效,或者双线同时跑流量。避法:备份路由统一用 80 起步,主路由保持 60,并在配置里写 description 标注主备。

  3. 下一跳写了但对端网段根本不存在。 症状:路由配了,表里没有。避法:配完立刻 display ip routing-table 看有没有,再看它的 Interface 是不是真接口。

  4. 在广播型接口上只写出接口不写下一跳。 症状:配置看着配上了,但路由不生效或下一跳解析不出来。避法:以太网口、VLANIF/Vlan-interface 上永远出接口 + 下一跳一起写。

  5. 接口 down 却怪路由不生效。 症状:VLANIF 是 down 的,直连路由消失,静态路由连带失效。避法:先 display interface brief 看三层口是否 up,再查路由。

  6. 忘了 save / save force。 症状:重启后路由全没了。避法:变更结束立即保存,华为 save、H3C save force。

  7. 只在 display ip routing-table 里找"非激活"路由。 症状:以为备份路由"没配上"。避法:非激活路由要用 verbose 专门去看,摘要视图默认只列活跃路由。

  8. 把静态路由和动态路由优先级搞反。 症状:OSPF 路由(Pre 10)永远压着静态路由(Pre 60),你以为静态路由能"强制指定路径"。避法:要让静态路由赢,必须把它的 preference 调到小于对端协议的值(如 5),并写清楚为什么。

  9. 黑洞路由抢了正常路由。 症状:某个网段全部不通。避法:黑洞汇总路由的优先级一定要比精确路由低优先(数值更大),常见做法是 80 或 250。

  10. 一条 undo 删错对象。 症状:删除某条静态路由时,发现把另一条也带走了。避法:删除时参数写全(目的网段 + 掩码 + 下一跳 + 优先级),删完 display current-configuration | include route-static 复核。

10.8 本章小结

10.8.1 要点清单

  • 路由表的五个核心字段:目的地址/掩码、Proto、Pre、Cost、NextHop/Interface;选路顺序是最长匹配 → 优先级(小者优)→ 开销(小者优)。
  • 直连路由由接口自己"长"出来,优先级 0,接口 up 才存在;它是静态路由能生效的地基。
  • 默认路由 0.0.0.0/0 的掩码必须真正为 0,它是最不精确的兜底条目,永远排在最长匹配最后。
  • 浮动静态路由靠优先级差实现主备:主 60、备 80,主失效时备份自动浮上来。
  • 下一跳迭代:只写下一跳的静态路由要拿下一跳再查一次路由表,查不到就不生效;广播口必须写下一跳,点到点口可以只写出接口。
  • 优先级数值:直连 0、OSPF 10、IS-IS 15、静态 60、RIP 100、OSPF ASE/NSSA 150、IBGP/EBGP 255,华为与 H3C 的缺省值一致;差异只在两处——华为有"内部优先级"这一层补充排序(OSPF 10 / IS-IS L1 15 / IS-IS L2 18 / 静态 60 / IBGP 200 / EBGP 20),而 H3C 的缺省表额外列出"组播静态 1"和"UNKNOWN 256"。
  • 等价路由(ECMP):同目的、同优先级、同开销的多条下一跳一起活跃,平分流量。
  • 黑洞路由指向 NULL0,用于汇总防环和逐条丢垃圾流量。
  • 验证三件套:display ip routing-table 看摘要、verbose 看状态、statistics 看抖动。

10.8.2 自测题

  1. 一台华为交换机的 Vlanif10 配了 192.168.10.1/24,同事又配了 ip route-static 10.200.1.0 255.255.255.0 192.168.10.1,为什么这条静态路由永远不生效?
  2. 目的是 10.200.1.0/24,路由表里同时有 Pre 60 的静态路由和 Pre 10 的 OSPF 路由,最终谁生效?要让静态路由赢该怎么做?
  3. 主默认路由指向 172.16.1.1(Pre 60),备份指向 172.16.2.1。如果备份也写成 Pre 60,会出什么现象?
  4. 在华为和 H3C 上分别写出"去往 10.200.1.0/24、下一跳 172.16.1.1、优先级 80"的配置,并说明两者掩码写法的差别。
  5. 为什么在 Vlan-interface 上只写出接口不写下一跳不行,而在 PPP 串口上却可以?
  1. 因为下一跳地址 192.168.10.1 是本机 Vlanif10 的接口地址。设备拿本机接口地址当下一跳无法迭代出"出去的路",这条静态路由不会被激活。正确的下一跳应该是同网段里对端的设备地址(如 192.168.10.254)。H3C 文档也明确"下一跳地址不能为本地接口 IP 地址,否则路由不会生效"。
  2. OSPF 生效,因为优先级 10 小于静态的 60。要让静态路由赢,需要给静态路由加 preference 5(小于 10),并在文档里写清为什么覆盖动态路由(例如临时引流、双线策略要求)。
  3. 两条默认路由同时活跃,形成按流/按包的负载分担,主备关系消失;且不同线路的带宽、运营商策略不一致,业务会出现时快时慢、部分网站访问异常。
  4. 华为:ip route-static 10.200.1.0 255.255.255.0 172.16.1.1 preference 80 或 ip route-static 10.200.1.0 24 172.16.1.1 preference 80;H3C:ip route-static 10.200.1.0 24 172.16.1.1 preference 80。H3C 习惯写掩码位数,华为两种都支持但老教程多用点分十进制。
  5. 因为 Vlan-interface 是以太网类型的广播型接口,同一个接口后面挂着多个邻居,只写接口无法唯一确定"交给谁",必须靠下一跳地址做地址解析(ARP);而 PPP 封装的串行链路是点到点,一个接口对面只有一个邻居,出接口本身就隐含了下一跳。

本章命令的官方核实结果(第二轮全量核实补充):

项目 核实结论 出处
H3C ip route-static 完整语法 dest-address { mask | mask-length } { next-hop-address | interface-type interface-number [ next-hop-address ] } [ preference ] [ tag ] [ permanent ] [ description ],官方原文确认 H3C 02-静态路由命令
接口+下一跳的搭配规则 官方原文:「对于 Null0 接口,配置了出接口就不再配置下一跳地址」「如果指定广播接口(如 VLAN 接口)为出接口,则必须同时指定其对应的下一跳地址」 同上
静态路由缺省优先级 两家的 ip route-static default-preference 取值 1~255,缺省 60;且「重新设置缺省优先级后,仅对新增的静态路由有效」 H3C 02-静态路由命令 、华为 ip route-static(S 系列)
下一跳不能是本机接口地址 官方原文:「下一跳地址不能为本地接口IP地址,否则路由不会生效」 同上
ip route-static selection-rule relay-depth 命令存在,缺省未使能;用于多条同前缀同优先级路由时按迭代深度优选,会改变活跃路由 华为 AR1000V V300R021 命令参考

⚠ 版本差异:本章所有命令以 VRP V200R019 及 Comware V7 为基准。H3C 各产品线(S5130S-EI 交换机 / MSR3610-X1 路由器)在静态路由的可选参数上存在差异(permanent、静态路由快速重路由、recursive-lookup 系列),华为 AR 与 S 系列同样有差异(BFD 联动、permanent、inherit-cost)。文中的 TODO-FIXME 项在核实前请改用文中的替代命令,并在真机上以 ip route-static ? 的输出为准。


关于本书:《华为 / H3C 网络设备典型功能配置详解》—— 面向国内高校/企业网络环境, 华为 VRP 与 H3C Comware 双厂商并排配置的实操教材,共 43 章。 全书所有命令尽量有官方出处,查不到的显式标注「待核实」。 返回系列目录