华为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 新手踩坑与注意事项
-
默认路由掩码写成
255.255.255.0或24。 症状:明明配了"默认路由",PC 却上不了网。避法:默认路由的目的地址和掩码必须都是 0,看到0.0.0.0/0才算配对。 -
备用路由优先级没拉开。 症状:主备切换不生效,或者双线同时跑流量。避法:备份路由统一用 80 起步,主路由保持 60,并在配置里写
description标注主备。 -
下一跳写了但对端网段根本不存在。 症状:路由配了,表里没有。避法:配完立刻
display ip routing-table看有没有,再看它的Interface是不是真接口。 -
在广播型接口上只写出接口不写下一跳。 症状:配置看着配上了,但路由不生效或下一跳解析不出来。避法:以太网口、VLANIF/Vlan-interface 上永远出接口 + 下一跳一起写。
-
接口 down 却怪路由不生效。 症状:VLANIF 是 down 的,直连路由消失,静态路由连带失效。避法:先
display interface brief看三层口是否 up,再查路由。 -
忘了
save/save force。 症状:重启后路由全没了。避法:变更结束立即保存,华为save、H3Csave force。 -
只在
display ip routing-table里找"非激活"路由。 症状:以为备份路由"没配上"。避法:非激活路由要用verbose专门去看,摘要视图默认只列活跃路由。 -
把静态路由和动态路由优先级搞反。 症状:OSPF 路由(Pre 10)永远压着静态路由(Pre 60),你以为静态路由能"强制指定路径"。避法:要让静态路由赢,必须把它的
preference调到小于对端协议的值(如 5),并写清楚为什么。 -
黑洞路由抢了正常路由。 症状:某个网段全部不通。避法:黑洞汇总路由的优先级一定要比精确路由低优先(数值更大),常见做法是 80 或 250。
-
一条
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 自测题
- 一台华为交换机的
Vlanif10配了192.168.10.1/24,同事又配了ip route-static 10.200.1.0 255.255.255.0 192.168.10.1,为什么这条静态路由永远不生效? - 目的是
10.200.1.0/24,路由表里同时有Pre 60的静态路由和Pre 10的 OSPF 路由,最终谁生效?要让静态路由赢该怎么做? - 主默认路由指向
172.16.1.1(Pre 60),备份指向172.16.2.1。如果备份也写成Pre 60,会出什么现象? - 在华为和 H3C 上分别写出"去往
10.200.1.0/24、下一跳172.16.1.1、优先级 80"的配置,并说明两者掩码写法的差别。 - 为什么在
Vlan-interface上只写出接口不写下一跳不行,而在 PPP 串口上却可以?
- 因为下一跳地址
192.168.10.1是本机 Vlanif10 的接口地址。设备拿本机接口地址当下一跳无法迭代出"出去的路",这条静态路由不会被激活。正确的下一跳应该是同网段里对端的设备地址(如192.168.10.254)。H3C 文档也明确"下一跳地址不能为本地接口 IP 地址,否则路由不会生效"。 - OSPF 生效,因为优先级 10 小于静态的 60。要让静态路由赢,需要给静态路由加
preference 5(小于 10),并在文档里写清为什么覆盖动态路由(例如临时引流、双线策略要求)。 - 两条默认路由同时活跃,形成按流/按包的负载分担,主备关系消失;且不同线路的带宽、运营商策略不一致,业务会出现时快时慢、部分网站访问异常。
- 华为:
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 习惯写掩码位数,华为两种都支持但老教程多用点分十进制。 - 因为
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 章。 全书所有命令尽量有官方出处,查不到的显式标注「待核实」。 返回系列目录
本人保留对侵权者及其全家发动因果律武器的权利
版权提醒
如无特殊申明,本站所有文章均是本人原创。转载请务必附上原文链接:https://www.elliot98.top/post/huawei-h3c-book/10/。
如有其它需要,请邮件联系!版权所有,违者必究!