1. 从一次"跨网段不通"的排障说起:三层交换机到底解决什么问题
前阵子帮朋友收拾一个办公网络的烂摊子,现场情况很典型:一台华为三层交换机下面挂了两拨人,财务用 192.168.10.0/24,销售用 192.168.20.0/24,网线都插在同一台设备上,结果两边互相 ping 不通,打印机能被财务访问却搜不到销售同事共享的文件夹。朋友一脸疑惑地问我,不是说交换机插上就能通吗,为什么同一台机器下面的电脑还互相看不见。这个问题几乎每个刚接触华为三层交换机的朋友都会遇到,也正好是理解 VLAN、Trunk、Eth-Trunk 和三层路由这条完整链路的入口。
先把结论摆出来:普通二层交换机只认 MAC 地址,转发范围被限制在同一个广播域里;一旦你把两个网段划进不同的 VLAN,它们就变成了两个物理隔离的广播域,想互通必须借助三层转发能力。三层交换机就是在这个背景下出现的——它把路由器的路由能力和交换机的线速转发能力揉到了一台盒子里,用 ASIC 芯片做硬件转发,比传统"单臂路由"方案速度快、时延低,还能省下一台路由器。所以那台华为三层交换机本身没问题,问题在于没人告诉它:VLAN 10 和 VLAN 20 之间应该建立一个三层网关。
这篇文章面向的读者很明确:刚上手华为设备、准备考网络方向认证、或者需要独立搭一套中小型企业网络的工程师。我会把 VLAN 划分、Trunk 链路、Eth-Trunk 链路聚合、VLANIF 三层接口和静态路由表这几件事,按实际配置顺序串成一条线讲清楚,中间穿插命令、验证方法和这些年踩过的坑。你照着做,基本能独立跑通一套"多 VLAN + 跨设备 + 链路聚合 + 静态路由"的网络。
1.1 二层交换的边界:为什么同一台交换机下不同网段会互相"看不见"
要理解三层交换的价值,先得接受一个反直觉的事实:交换机在同一时刻只服务一个广播域。主机发 ARP 请求问"谁是 192.168.20.1",这个广播帧会在整个 VLAN 里泛洪。如果财务和销售的电脑都在默认 VLAN 1 里,那 ARP 广播会互相干扰,网络规模一大,广播风暴能把整台交换机拖垮。VLAN 的作用就是把一台物理交换机逻辑上切成多台"虚拟交换机",每个 VLAN 是一个独立广播域,广播帧出不了自己的圈子。
但 VLAN 带来了新的代价:不同 VLAN 之间天然不通。财务的电脑在 VLAN 10 里,网关是 192.168.10.1;销售的电脑在 VLAN 20 里,网关是 192.168.20.1。这两台电脑的 IP 不在同一网段,主机会直接把数据包交给自己的网关,而网关必须是一个能同时"看见"两个 VLAN 的三层接口。二层交换机没有 IP 转发能力,它看到目标 MAC 不是自己,只会继续按 MAC 表转发或丢弃,根本不会去改包、重新封装。这就是"同一台交换机下两个网段不通"的根本原因。
我习惯用一个比喻跟新人解释:二层交换机像小区里的保安,只认门牌号(MAC),把快递送到具体楼栋;三层交换机像小区物业,既知道每栋楼在哪,又知道整个小区分为几个区(VLAN),还能在区与区之间帮忙转交。保安不管你家住几号楼,物业才管跨区的事。
注意:如果两台主机 IP 在同一网段但被划进了不同 VLAN,它们同样不通。判断"能不能通"要看两层——三层看 IP 是否同网段,二层看 VLAN 是否可达,两个条件都满足才通。
1.2 三层交换和路由器的分工:谁更适合做 VLAN 间路由
既然要做 VLAN 间路由,那就面临一个选择:用路由器做单臂路由,还是用三层交换机。单臂路由的做法是在路由器上划子接口,每个子接口对应一个 VLAN,物理口配成 Trunk,所有跨 VLAN 流量都得挤这一根线绕到路由器再绕回来。这个方案设备便宜,实验室里够用,但物理链路是瓶颈,转发靠 CPU,量一大就卡。
三层交换机的 VLANIF 接口(虚拟三层接口)则是把路由功能内置到交换芯片里。它有一个关键优势:VLAN 间转发的第一跳和最后一跳都在同一台设备内完成,走的是硬件转发表,转发性能和二层交换几乎一样。中小型企业、学校机房、园区网络里,三层交换机做汇聚和核心已经是标准做法。
那什么时候还需要路由器?一般是这几类场景:要接运营商专线做 NAT 和出口安全策略、要做复杂的策略路由和流分类、要跑 MPLS 或者 BGP 这类高端协议。日常的 VLAN 间互访,三层交换机就够了。所以回到开头那个案例,正确做法不是加路由器,而是在三层交换机上给每个 VLAN 建一个 VLANIF 接口当网关,再打开 IP 路由功能。
1.3 拿到一台新设备后,我习惯先确认的三件事
在敲任何一条配置之前,我会先做三件看似琐碎但能省掉大量返工的事。
第一件是确认设备型号和软件版本。不同系列对某些特性的支持差异不小,比如 Eth-Trunk 的 LACP 模式、Hybrid 口的支持度、VLANIF 的数量上限。执行display version看 VRP 版本,display device看板卡和端口,心里先有数。S5700、S5720 这类千兆接入/汇聚设备,跑本文的配置完全没问题。
第二件是保存一份出厂配置快照。如果是新设备或者接手别人的设备,display current-configuration看一眼现状,有条件的话导出备份。你永远不知道上一任管理员在设备上留了什么定时任务或者 ACL,改了配置出问题再回头找原因,代价会很大。
第三件是画一张逻辑拓扑草图,标清楚哪台设备做核心、每个 VLAN 的网段和网关、哪些口是 Access、哪些口是 Trunk、哪几根线要做聚合。这张图不用精美,手画就行,但一定要有。网络配置出问题,八成是因为脑子里没有清晰的拓扑,全凭记忆敲命令,越配越乱。
2. VLAN划分:不是把端口分个组那么简单
很多教程讲 VLAN 划分就一句"进接口,port link-type access,port default vlan 10",看起来很简单。但实际项目中真正花时间的不是敲命令,而是编号规划。VLAN 编号一旦定了,后期扩容、跨设备对接、和防火墙/出口设备联调都要跟着走,规划乱一次,后面处处别扭。
2.1 Access口与PVID:端口怎么知道包属于哪个VLAN
先讲清一个概念:PVID(Port VLAN ID)是端口的"默认 VLAN 号"。当交换机从某个端口收到一个不带标签(untagged)的普通以太网帧时,它会自动把这个帧打上该端口 PVID 对应的 VLAN 标签,再在内网转发。Access 口的 PVID 就是它所属的 VLAN,所以接在 Access 口上的电脑发出的无标签包,会被交换机"认为"属于该 VLAN。
配置 Access 口的标准写法是这样:
system-view vlan 10 quit interface GigabitEthernet0/0/1 port link-type access port default vlan 10 quit其中port default vlan 10这条命令其实同时做了两件事:把端口的 PVID 设为 10,并把该端口加入 VLAN 10 的成员列表。这里有个新人容易忽略的点:修改 Access 口的默认 VLAN 会改变 PVID,如果之前已经给端口配了别的 VLAN,直接改port default vlan就会覆盖。用display port vlan能看到每个端口的 PVID 和允许通过的 VLAN,这个命令我几乎每次排查都先敲一遍。
还有一个坑是端口的链路类型。华为交换机的端口默认是 Access 类型,这没问题;但如果一个端口被改成了 Hybrid 或 Trunk,再想让它变回 Access 就必须显式执行port link-type access,否则port default vlan会报错。我见过同事在 Hybrid 口上反复敲port default vlan敲不出来,折腾了十几分钟才发现是链路类型不对。
2.2 批量创建与批量入VLAN:省时间的写法
项目里 VLAN 少说十几个,多则几十个,一条条vlan 10敲太磨人。华为 VRP 支持批量创建:
vlan batch 10 20 30 40 50也可以创建一段连续 VLAN:
vlan batch 100 to 110端口批量加入 VLAN 用端口组(port-group)更高效,尤其在接入层交换机上,一栋楼几十个信息点都要划进同一个 VLAN:
port-group office1 group-member GigabitEthernet0/0/1 to GigabitEthernet0/0/10 port link-type access port default vlan 10 quitgroup-member后面可以跟连续范围,也可以空格分隔多个不连续的端口。端口组的好处是一次性配置、批量生效,改起来也方便。需要注意的是,端口组里配的命令会逐个下发到成员端口,如果某个端口链路类型不兼容,只有那个端口报错,其他端口照样生效,所以要仔细看回显,别以为整组都成功了。
提示:
display vlan能看到每个 VLAN 的成员端口列表,display port vlan能看到端口的 PVID 和允许 VLAN。配完一批端口,我习惯用这两条命令交叉核对一遍,确认没有漏配或错配。
2.3 VLAN编号规划:一套能撑三年不返工的规则
说点文档里不会详细讲的实战规划经验。我一般按"功能分区 + 预留段"来编号,而不是按部门顺序随便排。一个可以参考的分配方式:
| VLAN 段 | 用途 | 示例 |
|---|---|---|
| 1 | 系统默认,尽量不用 | 保留 |
| 2-9 | 设备管理、互联 | VLAN 8 做设备管理 |
| 10-49 | 办公终端 | VLAN 10 财务、VLAN 20 销售 |
| 50-99 | 服务器与业务系统 | VLAN 50 数据库、VLAN 60 应用 |
| 100-149 | 无线、访客 | VLAN 100 员工 WiFi、VLAN 120 访客 |
| 150-199 | 监控、门禁、IoT | VLAN 150 摄像头 |
| 200-299 | 预留扩容 | 新业务 |
| 300-399 | 跨设备互联 | VLAN 300 三层互联 |
为什么要留这么宽的间隔?因为项目一旦上线,新增部门、新增业务系统是常态。如果你一开始把 10、11、12 连着排办公,后面来了新部门就没地方插了,只能往后挪,网段和 VLAN 全变,所有静态路由和 ACL 都要改。留间隔本质上是给自己留退路。另外,VLAN 号和 IP 网段尽量做成对应关系,比如 VLAN 10 用 192.168.10.0/24,VLAN 20 用 192.168.20.0/24,这样看 IP 就能猜出 VLAN,排障效率高很多。
3. Trunk链路:让VLAN跨设备延伸的关键配置
单台交换机内部划 VLAN 只能解决局部问题。现实中一栋楼一台接入交换机,接入交换机再上联到核心,一台设备上不同 VLAN 的流量要跨设备走,就必须用 Trunk。Trunk 的本质是一条物理链路上承载多个 VLAN 的流量,靠给数据帧打 VLAN 标签(802.1Q Tag)来区分。
3.1 Trunk口收发帧的完整逻辑
这个地方我一向建议新人彻底搞明白,因为配置错十有八九是出在这里。Trunk 口处理帧的规则分"收"和"发"两个方向:
发方向(从交换机内部往外发):
- 如果帧的 VLAN 是 Trunk 允许列表里的 VLAN,且不等于 PVID,则带标签发出。
- 如果帧的 VLAN 等于端口的 PVID,则去掉标签发出(untagged)。
收方向(从外部进来):
- 如果帧自带标签,检查该 VLAN 是否在允许列表里,在就收,不在就丢。
- 如果帧不带标签,则打上本端口 PVID 的标签收进来。
所以 PVID 在 Trunk 口上有一个特殊含义:它定义了"不打标签的那个 VLAN"。这也就是 Native VLAN(华为叫 PVID)概念的由来。我见过很多人把 Trunk 两端的 PVID 配得不一致,一端是 1,另一端是 10,结果那个 PVID=10 的 VLAN 流量在链路上裸奔(不带标签),对端按自己的 PVID=1 收进来,直接串到 VLAN 1 里去了,广播域被污染,问题还不容易发现。
3.2 Trunk配置实操与两端一致性检查
标准 Trunk 配置:
interface GigabitEthernet0/0/24 port link-type trunk port trunk allow-pass vlan 10 20 30 quit如果上联核心要放通所有业务 VLAN,可以用:
port trunk allow-pass vlan all但我在生产环境里不建议图省事用vlan all。原因有两点:一是安全,允许所有 VLAN 通过,万一有 VLAN 规划外的流量或者广播帧也会被带过去,扩大了故障域;二是排障,明确列出允许的 VLAN,出问题时一眼能看出是不是漏放通。我通常的做法是显式写清楚:
port trunk allow-pass vlan 10 20 30 50 100 120 150 300如果只想排除个别 VLAN 而放通其余的,可以用undo port trunk allow-pass vlan 111这种"反向"操作。
配置完必须做的一件事是核对两端。链路两边设备的 Trunk 口允许列表要能覆盖所有需要通过的 VLAN,PVID 最好保持一致(一般都用默认 VLAN 1,或者统一指定一个专用的互联 VLAN)。用display port vlan interface GigabitEthernet0/0/24看本端,两端都对一遍,比事后 ping 不通再回头查要高效。
注意:Trunk 口两端 PVID 不一致是隐蔽性很强的故障。表现往往是"大部分 VLAN 正常,只有某一个 VLAN 时通时不通或者直接串网"。遇到无法解释的诡异现象,先把两端 PVID 拉出来对一遍。
3.3 Hybrid口:华为设备上更灵活的第三种链路类型
虽然标题问的是 Trunk,但既然讲华为设备,Hybrid 口绕不开。它比 Access 和 Trunk 都灵活,可以精确控制每个 VLAN 的帧是带标签还是不带标签发出。一条命令就能实现"某些 VLAN 打标签、某些 VLAN 不打标签"的混合需求。
典型场景是:一个端口既要承载某个 VLAN 的 untagged 报文(比如给 IP 电话的语音 VLAN),又要同时承载其他 VLAN 的 tagged 报文(比如给下挂交换机做上联)。配置如下:
interface GigabitEthernet0/0/1 port link-type hybrid port hybrid pvid vlan 10 port hybrid untagged vlan 10 20 port hybrid tagged vlan 30 40 quit含义是:PVID 是 10,VLAN 10 和 20 的帧不带标签发出,VLAN 30 和 40 带标签发出。华为的很多设备默认端口类型就是 Hybrid(部分型号),这也是为什么新手在华为设备上直接配 Trunk 之前,往往需要先port link-type trunk显式切换。相比之下,Trunk 只能做到"PVID 那一个 VLAN 不带标签,其余允许的 VLAN 都带标签",灵活性不如 Hybrid,所以华为在接入侧场景更喜欢用 Hybrid。
3.4 一条Trunk链路上的VLAN裁剪
Trunk 还有一个容易忽略的优化叫 VLAN 裁剪。默认情况下,一个 VLAN 会在所有 Trunk 口上放通,即使这条链路下面根本没有该 VLAN 的成员。结果就是没必要的广播帧也沿着链路传过去了。在大规模网络里,给上行 Trunk 口做裁剪能显著减少广播域范围。
具体做法就是只允许本端真正需要的 VLAN 通过。比如一栋楼的接入交换机只服务 VLAN 10、20,那它上联核心的 Trunk 就只放通 10、20 和互联 VLAN,其余一律不放。这样即使核心侧有广播,也传不到这栋楼里。裁剪和前面说的"不用 vlan all"是同一件事的两个角度,配的时候顺手就能做。
4. Eth-Trunk链路聚合:带宽叠加与冗余的取舍
设备之间单根网线,带宽是死的,一根断了业务就断。链路聚合(华为叫 Eth-Trunk,标准叫 LAG)把多条物理链路捆成一个逻辑接口,既有带宽叠加,又有冗余。但它的坑也是最多的,我处理过的"聚合配了没生效"的案例没有二十也有十几个。
4.1 手工模式与LACP模式的选择依据
华为 Eth-Trunk 有两种工作模式:
- 手工负载分担模式(manual):默认模式,纯静态,两端只要都配了 Eth-Trunk 就能起来,不协商。优点是简单兼容,缺点是没有链路故障检测机制——如果中间经过传输设备,本端端口物理 Up 但对端实际不通,手工模式察觉不到,可能把流量送到黑洞里。
- LACP 模式(lacp-static):基于 IEEE 802.3ad,两端通过 LACPDU 报文协商,能检测链路状态,还能做备份链路。生产环境我优先推荐 LACP。
配置命令:
interface Eth-Trunk 1 mode lacp-static quit注意这个模式必须在聚合口创建后、成员口加入前设置,而且两端必须都配成 LACP,一端手工一端 LACP 是建立不起来的。LACP 还有个参数叫活动链路数上限,默认是 8 条,超过就从备份链路里补。
4.2 成员口加入的硬性条件与配置顺序
Eth-Trunk 成员口的加入有很多"必须满足",我把常见的整理成一张表:
| 条件 | 说明 |
|---|---|
| 速率和双工一致 | 千兆口不能和百兆口混聚,全双工必须一致 |
| 链路类型一致 | Access/Trunk/Hybrid 要和逻辑口一致 |
| 不能配 IP | 成员物理口不能有 IP 地址 |
| VLAN 配置一致 | 成员口的 VLAN 相关配置要和 Eth-Trunk 口一致 |
| 同一设备 | 成员口必须属于同一台设备 |
| 加入前清空 | 建议先clear configuration interface清掉残留配置 |
加入成员口有两种写法。一种是在 Eth-Trunk 视图里批量加:
interface Eth-Trunk 1 trunkport GigabitEthernet0/0/1 to GigabitEthernet0/0/4 quit另一种是逐个端口指定:
interface GigabitEthernet0/0/1 eth-trunk 1 quit我个人的习惯是先清空成员口配置,再逐个加入,顺序上更可控。批量trunkport虽然快,但如果某个端口没清干净,报错信息混在批量回显里容易漏看。
注意:成员口加入 Eth-Trunk 后,原先直接配在物理口上的 VLAN、IP、ACL 会失效,所有业务配置要改成配在 Eth-Trunk 逻辑口上。这个坑极其常见——有人聚合配好了,VLAN 却还配在物理口上,结果流量根本不通。
4.3 聚合口上的VLAN与Trunk配置
Eth-Trunk 口配好之后,它就是一个逻辑口,业务配置全在这上面做。比如上联核心做 Trunk:
interface Eth-Trunk 1 port link-type trunk port trunk allow-pass vlan 10 20 30 50 300 mode lacp-static quit验证聚合状态用这几条:
display eth-trunk 1 display interface Eth-Trunk 1 display lacp peerdisplay eth-trunk 1会列出成员口和它们的状态(Selected/Unselected),只有状态是 Selected 的才是活动链路。如果某条成员口是 Unselected,多半是速率双工不一致、链路类型不一致,或者对端没加入同一个聚合。"聚合配了但带宽没涨"的典型原因就是只 Select 了一条成员口。
4.4 我遇到过的几个Eth-Trunk故障
有一个案例印象很深:客户配了 4 条链路聚合,display eth-trunk显示两个 Selected、两个 Unselected。查了半天,发现是光纤模块型号混用,两条单模两条多模,速率都是千兆,但底层物理参数不一致,LACP 协商后只选了两条。换回统一型号就全 Selected 了。这类问题日志里通常有蛛丝马迹,display logbuffer能看到 LACP 协商的告警。
第二个坑是哈希不均。Eth-Trunk 的负载分担默认按源 MAC 或源/目的 MAC 组合做哈希,如果场景里流量高度集中(比如一个服务器和一台存储之间跑大流量),哈希可能全压到一条链路上,其他链路闲着,聚合带宽形同虚设。这时需要调整哈希算法,比如按源/目的 IP 或按流来分担:
interface Eth-Trunk 1 load-balance src-dst-ip quit具体可选参数与设备型号有关,用load-balance ?看支持项。哈希算法没有万能最优解,要结合实际流量特征来选,改完用display interface Eth-Trunk 1看各成员口的流量是否均衡。
第三个坑最隐蔽:单边配置。一端配了 Eth-Trunk,另一端还是独立物理口,LACP 模式下会协商失败,链路可能直接不通;手工模式下则可能出现环路或者随机丢包。排查时我的习惯是先确认两端配置对称,再去看物理层和 LACP 报文。
5. 三层接口与路由表:VLAN间通信与静态路由落地
VLAN、Trunk、聚合都搞定之后,就到了最关键的三层部分:怎么让不同 VLAN 互通,怎么让整个网络找到去往外部的路。
5.1 VLANIF接口:三层交换机做网关的核心
要给一个 VLAN 提供网关,就在三层交换机上创建对应的 VLANIF 接口并配 IP:
interface Vlanif 10 ip address 192.168.10.1 255.255.255.0 quit这个 IP 就是 VLAN 10 内主机的默认网关。三层交换机会自动生成一条直连路由,指向这个网段。此时 VLAN 10 内部主机互访走二层,跨 VLAN 访问时把包交给网关 192.168.10.1,由三层交换机的硬件路由表完成转发。
这里有一个必须记住的前提:VLANIF 接口的状态依赖该 VLAN 内存在处于 Up 状态的成员端口。如果 VLAN 10 里一个物理口都没 Up(比如所有接 VLAN 10 的电脑都关机了,或者端口没连设备),VLANIF 10 就会变成 Down,路由失效。所以排障时如果发现某个 VLAN 间不通,先display ip interface brief看一眼对应的 Vlanif 是不是 Down 的。
另一个常见误区是 VLAN 没创建就直接建 VLANIF。必须先有 VLAN,VLANIF 才能创建成功。批量创建 VLAN 再批量建 VLANIF,是标准顺序。
5.2 静态路由配置与路由表怎么看
两个三层交换机对接时,除了各自的直连网段,还需要告诉对方"去你那边网段的路怎么走"。这就是静态路由:
ip route-static 192.168.20.0 255.255.255.0 192.168.10.2含义是:去 192.168.20.0/24 的包,下一跳交给 192.168.10.2(对端三层互联地址)。掩码也可以写成位数形式:
ip route-static 192.168.20.0 24 192.168.10.2指向外部网络(比如出口路由器)的默认路由:
ip route-static 0.0.0.0 0.0.0.0 192.168.1.1配完必须验证,核心命令是display ip routing-table,输出里几个字段要会读:
| 字段 | 含义 |
|---|---|
| Destination/Mask | 目的网段和掩码 |
| Proto | 路由来源(Direct 直连、Static 静态、OSPF 等) |
| Pre | 优先级(数值越小越优先) |
| Cost | 开销 |
| NextHop | 下一跳地址 |
| Interface | 出接口 |
直连路由优先级是 0,静态路由默认 60。所以同一目的网段既有直连又有静态时,直连获胜。如果静态路由写了却不出现在路由表里,先检查下一跳地址是不是可达——下一跳本身不通,静态路由不会被激活。
还可以用display ip routing-table 192.168.20.0精确查某条路由,或者display ip routing-table protocol static只看静态路由。路由表大起来的时候,后者能大幅缩短排障时间。
5.3 一个完整的落地示例:双三层交换机 + 聚合链路
把前面所有内容串起来,给一个贴近真实项目的示例。拓扑是这样:核心交换机 A 和汇聚交换机 B 之间走两条链路聚合,中间用互联 VLAN 300 做三层对接。核心侧有 VLAN 10、20、50,汇聚侧有 VLAN 100、120。
核心 A 上:
vlan batch 10 20 50 300 interface Eth-Trunk 1 mode lacp-static port link-type trunk port trunk allow-pass vlan 10 20 50 100 120 300 trunkport GigabitEthernet0/0/1 to GigabitEthernet0/0/2 quit interface Vlanif 10 ip address 192.168.10.1 24 interface Vlanif 20 ip address 192.168.20.1 24 interface Vlanif 50 ip address 192.168.50.1 24 interface Vlanif 300 ip address 10.0.0.1 30 quit ip route-static 192.168.100.0 24 10.0.0.2 ip route-static 192.168.120.0 24 10.0.0.2汇聚 B 上:
vlan batch 100 120 300 interface Eth-Trunk 1 mode lacp-static port link-type trunk port trunk allow-pass vlan 100 120 300 trunkport GigabitEthernet0/0/1 to GigabitEthernet0/0/2 quit interface Vlanif 100 ip address 192.168.100.1 24 interface Vlanif 120 ip address 192.168.120.1 24 interface Vlanif 300 ip address 10.0.0.2 30 quit ip route-static 192.168.0.0 16 10.0.0.1这里互联网段用了 /30 或者 /29 掩码,只为省地址。核心侧把去汇聚侧网段的静态路由指向 10.0.0.2,汇聚侧把去核心侧所有业务网段的路由汇总成192.168.0.0 16指向 10.0.0.1。能汇总就汇总,这是减少路由条数、降低维护成本的基本功,尤其是网段规划时按连续地址分配,汇总起来特别方便。
配完之后,从 VLAN 10 的一台主机ping 192.168.100.1,能通就说明整条链路(Access → 聚合 → Trunk → VLANIF → 路由)都通了。如果不通,按层往下排:先看物理口和聚合状态,再看 Trunk 允许 VLAN,再看 VLANIF 是否 Up,最后看路由表。
5.4 路由优先级与备份路径
静态路由支持指定优先级做备份。比如主链路是聚合,备链路是单根线,可以这样配:
ip route-static 192.168.100.0 24 10.0.0.2 ip route-static 192.168.100.0 24 10.0.1.2 preference 100优先级数值越小越优先,第二条 preference 100 高于默认 60,所以当第一条的下一跳不可达时(接口 Down 或者探测失败),第二条才会生效。静态路由本身不带链路检测,只依赖出接口和下一跳的状态。如果中间经过传输设备,接口还是 Up 但实际路径断了,静态路由不会自动切换,这种情况需要配合 BFD 或 NQA 做联动。这部分内容展开又是一大块,对于中小型网络,一般用不到,先把基础静态路由跑顺更重要。
6. 上线前必做的验证清单与几个我踩过的坑
配置敲完只是开始,真正决定这套网络能不能扛住业务的是验证。我给自己定了一套固定的检查顺序,从底层往上层走,这样出问题时能快速定位是哪一层的问题。
6.1 逐层验证的顺序与关键命令
我的检查顺序和对应命令是这样的:
第一步是物理层。display interface brief看所有端口状态,重点关注 Up/Down 和错误计数器。如果有端口 Up 但 CRC 错误持续增长,说明线路或光模块有问题,先解决物理问题再谈配置。
第二步是 VLAN 和端口类型。display vlan看 VLAN 成员,display port vlan看端口 PVID 和允许列表,确认 Access 口都进了正确的 VLAN,Trunk 口放通的 VLAN 和规划一致。
第三步是聚合链路。display eth-trunk看所有成员口是否为 Selected,display interface Eth-Trunk 1看聚合口的流量分布是否均匀。
第四步是三层接口。display ip interface brief看所有 Vlanif 是否 Up、IP 是否正确,这一步能揪出"VLAN 里没有 Up 端口导致 VLANIF Down"这类问题。
第五步是路由。display ip routing-table看是否所有该有的路由都在,静态路由的下一跳是否可达。分网段 ping 一遍是最直接的验证。
第六步是连通性。从每个 VLAN 各找一台代表性主机,ping 自己的网关、ping 其他 VLAN 的网关、ping 远端网段、ping 出口,四步全通才算基本合格。
6.2 我踩过的几个典型坑
第一个坑:VLANIF 建了但 VLAN 里没有 Up 端口。有次给一个新 VLAN 配了网关,怎么 ping 都不通,路由表里也看不到直连路由。查了半天发现这个 VLAN 只在 Trunk 口上放通了,接入侧还没有任何主机上线,所以 VLANIF 一直是 Down。VLANIF 的状态跟着 VLAN 走,这个特性一定要记住。临时验证可以先把一个端口划进这个 VLAN 并接台设备,VLANIF 就会 Up。
第二个坑:Trunk 允许 VLAN 列表和 Access 口所属 VLAN 对不上。场景是核心到接入的 Trunk 上,漏放通了某个新加的 VLAN。主机同 VLAN 内互 ping 通,跨设备就是不通,因为包在 Trunk 上被丢了。现在我加新 VLAN 的固定动作是:三处一起检查——接入口的 Access VLAN、Trunk 的允许列表、三层的 VLANIF,缺一不可。
第三个坑:Eth-Trunk 成员口上残留了 VLAN 配置。有个朋友的聚合一直只有一条链路 Selected,查出来是其中一根成员口上还配着port default vlan 10,导致它和逻辑口的配置不一致,LACP 协商不通过。解决办法就是前面说的,加入聚合前先clear configuration interface把物理口清干净。
第四个坑:静态路由的掩码写错。一个 /24 的网段写成了 /16,结果把其他网段也匹配进去了,造成部分网段路由错误。静态路由看起来简单,但掩码和下一跳这两项一定要反复核对。display ip routing-table的Destination/Mask那一列,配完必看。
6.3 配置保存与备份的习惯
最后说个很多人不在意但迟早会吃亏的事。华为设备的配置要手动保存才能写入启动文件,命令是:
save如果不保存,设备重启配置就没了。我见过客户调了一下午的配置,忘记save,晚上断电全都白干。现在我养成一个习惯:每完成一个阶段性配置就 save 一次,不要等全部配完再存。另外,用display current-configuration导出配置存档,重命名带上日期,出问题时能对比。
配置备份的方式,简单点用终端软件记录回显导出成文本,规范点用设备自带的备份工具或者网管平台定期抓取。规模不大的网络,人工导出就够了,关键是要有留档的习惯。
整体走下来,华为三层交换机的这套配置链路其实并不复杂:VLAN 定广播域,Access 接入终端,Trunk 跨设备承载多 VLAN,Eth-Trunk 做链路聚合和冗余,VLANIF 提供网关,静态路由打通网段之间的路。每一层都有它明确的分工,也都有各自的坑。我个人的体会是,命令本身很好背,真正难的是在动手之前把拓扑和编号想清楚,在配完之后按层去验证。把这两件事做到位,绝大多数"配了不通"的问题都能在几分钟内定位。