1. VLAN 隔离做完了才发现"通不了",问题到底出在哪
刚接触 VLAN 的朋友大多经历过这样一幕:在 ENSP 里辛辛苦苦把交换机端口划进 VLAN 10 和 VLAN 20,display vlan一看,端口归属清清楚楚,心里挺得意。结果用 PC1 去 ping PC2,超时。再切回同 VLAN 内的另一台 PC,通了。于是开始怀疑是不是模拟器有 bug、是不是镜像有问题、是不是网线没插好——其实都不是。
VLAN 的本质就是在二层把一个物理交换机切成多个互相看不见的广播域,这是它的价值,也正是它带来的麻烦。你按下回车划完 VLAN 的那一刻,VLAN 10 的广播帧不会再泛洪到 VLAN 20,这是特性,不是缺陷。但业务上要求它们能互相访问,这就必须把流量"抬"到第三层去绕一圈。所以华为 ENSP 交换机实现不同 VLAN 间的通信这件事,说到底不是"怎么配",而是"你要在哪一层、用哪种设备作为网关来承担跨网段转发"。
这篇内容我会沿着一条完整的实操链路走:先讲清楚三种主流方案(单臂路由、三层交换机 VLANIF、路由口直连)背后各自的取舍逻辑,再落到 ENSP 里从零搭一套可复现的拓扑,把二层打通、把三层网关建起来,最后把我在实际配置里踩过的坑一个个摊开讲——尤其是那些文档里一笔带过、但真正会让你卡住半小时的细节,比如子接口为什么要开arp broadcast enable、Trunk 的 PVID 不匹配为什么会导致"配对了也不通"、三层交换机为什么不建议用路由器那套思路做网关。
适合谁看:刚学完 VLAN 划分、正在做跨网段实验的入门同学;也适合有点基础、但排错总是靠"删了重配"的从业者——后面的排查思路那部分,我从物理层、二层、三层一路列到了策略层,碰到"就是不通"的时候可以直接照着走。命令基于设备的通用命令体系,在 ENSP 里可以直接敲,逻辑同样适用于真机。
2. 方案选型:单臂路由、VLANIF、路由口到底怎么挑
2.1 先用一句话说透跨网段转发的本质
PC1 在 192.168.10.0/24,PC2 在 192.168.20.0/24,PC1 发 ping 的时候会先做一件事:拿自己的掩码和目标地址做与运算,发现目标不在同一网段,于是不会发 ARP 去问 PC2 的 MAC,而是发 ARP 去问网关的 MAC。拿到网关 MAC 后,它把 IP 包封进一个目的 MAC 是网关、源 MAC 是自己的二层帧里送出去。网关收到,拆掉二层头,发现目的 IP 是 192.168.20.x,查路由表知道这个网段挂在另一个接口上,于是重新封装一个目的 MAC 为 PC2、源 MAC 为网关另一侧接口的二层帧发出去。
记住这条链路:二层封装的源和目的在每一跳都会变,IP 地址从头到尾不变。理解这一点,后面所有"不通"的现象你都能对应到具体是哪个环节断了——要么 ARP 没问到网关,要么网关没路由,要么回程包找不到路。很多新手习惯性认为"配了 VLAN 就能通",其实是漏掉了"网关"这个角色,而三种方案的差别,就在于这个网关由谁来做、放在哪台设备上。
2.2 三种方案的取舍逻辑与代价对比
单臂路由的思路最朴素:找一台路由器,用一根网线连到交换机的 Trunk 口,然后在路由器这一个物理接口上划出若干子接口,每个子接口终结一个 VLAN 的标签,配一个该网段的地址当网关。优点是路由器本来就干路由的活儿,ACL、NAT、策略路由这些功能现成;缺点也很硬——所有 VLAN 间的流量都要挤这一根物理链路,一个千兆口就是天花板,而且路由器一般是软件转发,包一多 CPU 就上去了。
三层交换机 VLANIF是现在的主流做法:交换机内部给每个 VLAN 创建一个虚拟三层接口(VLANIF,别的厂商叫 SVI),配上这个网段的地址当网关。数据进了交换机,ASIC 芯片直接查表转发,不经过 CPU,线速没问题,也不存在"一根线被挤爆"的问题,因为跨 VLAN 转发在交换背板内部就完成了。代价是这台交换机必须具备三层能力,而且它离"路由器"还有一些功能差距。
路由口直连(把三层交换机或路由器的一个物理口用undo portswitch变成三层口,直接接一个 VLAN 或一个网段)适用于点对点互联、出口对接这类场景,用在"多个 VLAN 都需要网关"的场合就很别扭,端口利用率低。
| 对比维度 | 单臂路由(子接口) | 三层交换机 VLANIF | 路由口直连 |
|---|---|---|---|
| 网关位置 | 路由器物理口上的子接口 | 交换机内部虚拟接口 | 物理接口 |
| 转发性能 | 受单链路与软件转发限制 | 芯片转发,近似线速 | 取决于设备 |
| 是否需要 Trunk | 需要,且要带标签 | 不需要,网关就在本机 | 不需要 |
| 端口消耗 | 1 个物理口承载全部 VLAN | 0(虚拟接口) | 每网段 1 口 |
| 典型场景 | 小型网络、临时实验、需要 NAT | 园区网核心/汇聚 | 设备互联、出口 |
| 配置量 | 中(子接口逐个建) | 低(VLAN 建好顺手配) | 低 |
选型我的建议很直接:只要交换机支持三层,就优先上 VLANIF,别为了"看起来更像路由"去刻意绕单臂路由,除非你需要在这台设备上做 NAT 或者你有现成的路由器闲着。单臂路由更适合当学习手段——它能让你非常直观地看到 802.1Q 标签是怎么被终结的,这个理解对后面做 Trunk 排错很有帮助。
2.3 一个容易被忽略的前提:三层交换机得"允许路由"
这点吃过亏。有些型号的三层交换机出厂时全局路由功能是关着的,VLANIF 配了地址、状态也是 UP,但display ip routing-table里只有直连网段,跨网段死活不通。排查半天以为是网关配错,其实是根本没开转发。配置前先在系统视图敲display current-configuration | include routing看一眼,没有ip routing就补上。另外,VLANIF 能否 UP,取决于这个 VLAN 里是否有处于 UP 状态的物理端口——VLAN 建了但一个端口都没加入、或者加入的端口全 down,VLANIF 就是 down 的,网关地址配了也不生效。这个现象在 ENSP 里特别常见,因为很多同学先建 VLAN、配 VLANIF,最后才去接 PC,中间那段时间display ip interface brief一看全是 down,就开始怀疑人生。
3. 在 ENSP 里把实验环境搭起来
3.1 拓扑规划与地址分配表
我用的是一套最小可验证的三层架构:一台三层交换机作为核心(承担所有 VLAN 的网关),一台二层交换机作为接入(只做 VLAN 划分和 Trunk 上联),四台 PC 分属两个 VLAN,每组两台方便验证"同 VLAN 通、跨 VLAN 也要通"。
拓扑连接关系如下:核心交换机的 GE0/0/1 接接入交换机的 GE0/0/24,链路配成 Trunk;接入交换机的 GE0/0/1、GE0/0/2 划进 VLAN 10 接 PC1、PC2,GE0/0/3、GE0/0/4 划进 VLAN 20 接 PC3、PC4。
| 设备 | 接口 | 类型 / VLAN | IP 地址 | 网关 |
|---|---|---|---|---|
| 核心交换机 | VLANIF10 | 三层网关 | 192.168.10.254/24 | - |
| 核心交换机 | VLANIF20 | 三层网关 | 192.168.20.254/24 | - |
| 核心交换机 | GE0/0/1 | Trunk,放行 10、20 | - | - |
| 接入交换机 | GE0/0/24 | Trunk,放行 10、20 | - | - |
| 接入交换机 | GE0/0/1、0/0/2 | Access,VLAN 10 | - | - |
| 接入交换机 | GE0/0/3、0/0/4 | Access,VLAN 20 | - | - |
| PC1 | - | VLAN 10 | 192.168.10.1/24 | 192.168.10.254 |
| PC2 | - | VLAN 10 | 192.168.10.2/24 | 192.168.10.254 |
| PC3 | - | VLAN 20 | 192.168.20.1/24 | 192.168.20.254 |
| PC4 | - | VLAN 20 | 192.168.20.2/24 | 192.168.20.254 |
地址规划这里有个细节值得说:网关地址我用的是.254而不是.1。这不是硬性规定,纯粹是运维习惯——把.1留给服务器或者将来可能加的 VRRP 虚拟地址,网关统一往高位放,看配置文件的时候一眼能区分"这是设备地址还是终端地址"。你在自己项目里定好一套规则并坚持下去,比规则本身是什么重要得多。
3.2 ENSP 本身的几个坑,先避开能省一小时
ENSP 是依赖虚拟机跑设备镜像的,很多"配置没错但就是不通"的诡异问题其实出在模拟器层。第一,设备启动是有顺序的:先把所有设备拖到工作区,再统一启动,等全部变绿再开始配置。我见过太多次先启动交换机、后启动 PC,结果 PC 的虚拟网卡没挂上,ping网关永远超时,重启 PC 立刻就好。第二,PC 配置改完要点"应用",只填数字不点应用等于没改,这个低级错误我至今偶尔还会犯。第三,设备多了之后内存吃紧,交换机会随机"假死",表现为命令行能敲但转发不生效,这时候把设备关掉重开比继续排查更高效。第四,如果先前装过其他虚拟化软件,虚拟网卡可能冲突,导致 ENSP 里设备起不来或 Cloud 连不通,这种情况先把虚拟网卡清理干净再装。
提示:配置前先给每台设备改个名字(
sysname Core-SW之类)。ENSP 打开多个命令行窗口时,标题栏只显示设备型号,不看名字极容易在两个窗口之间敲错命令,把核心的配置敲到接入上——这个错误排查起来特别费劲,因为两边单看都没毛病。
3.3 终端侧配置:别小看网关这一栏
ENSP 里的 PC 是个简化终端,双击打开后在"基础配置"里填 IP、掩码、网关。这一步最大的坑是只填了 IP 和掩码,忘了填网关。现象非常好辨认:同 VLAN 内互 ping 通,跨 VLAN 一律超时,而且在交换机上display arp看不到这台 PC 的 ARP 记录——因为它压根没发过问网关的 ARP 请求。
还有一个细节:PC 的 MAC 地址在 ENSP 里是可以手动改的,做 MAC 绑定、端口安全的实验时用得上。默认情况下它是随机生成的,所以重启设备后 MAC 会变,别拿上次抓包里的 MAC 去对照这次的转发结果,会白折腾。
4. 二层先打通:Access 与 Trunk 的完整配置
4.1 接入层:VLAN 创建与端口划分
接入交换机的活儿很纯粹:建 VLAN,把端口塞进去。这里推荐用批量创建命令而不是一条条敲,省事还不容易漏。
<Access-SW> system-view [Access-SW] sysname Access-SW [Access-SW] vlan batch 10 20 [Access-SW] interface GigabitEthernet 0/0/1 [Access-SW-GigabitEthernet0/0/1] port link-type access [Access-SW-GigabitEthernet0/0/1] port default vlan 10 [Access-SW-GigabitEthernet0/0/1] quitGE0/0/2 同样处理。VLAN 20 的两个口把port default vlan改成 20。这里有个操作顺序问题:port link-type access必须在port default vlan之前敲,因为默认端口类型是 Hybrid,Hybrid 下用的是port hybrid pvid vlan,超过默认 VLAN 1 的 PVID 在某些版本上要先切类型才能设。反过来敲会报错,报错信息还挺含糊,新手容易卡在这儿。
port default vlan这个命令同时干了两件事:把端口加入该 VLAN 的 untagged 列表,以及把端口的 PVID 设成该 VLAN。这就是为什么接 PC 的口必须是 Access——PC 发出来的帧不带标签,交换机收到后按 PVID 打上 VLAN 10 的标签,PC 自己完全不知道有标签这回事。
4.2 Trunk 上联:放行列表与 PVID 的双重校验
两台交换机之间的互联口必须配 Trunk,而且两端都要放行 VLAN 10 和 20。默认情况下 Trunk 只放行 VLAN 1,你不写allow-pass,跨交换机的同 VLAN 通信都不通,更别说跨 VLAN 了。
[Access-SW] interface GigabitEthernet 0/0/24 [Access-SW-GigabitEthernet0/0/24] port link-type trunk [Access-SW-GigabitEthernet0/0/24] port trunk allow-pass vlan 10 20 [Core-SW] interface GigabitEthernet 0/0/1 [Core-SW-GigabitEthernet0/0/1] port link-type trunk [Core-SW-GigabitEthernet0/0/1] port trunk allow-pass vlan 10 20这里要重点讲PVID(也就是 native VLAN),这是 Trunk 排错里最容易翻车的地方。Trunk 口对每个帧的处理逻辑是:如果帧带的标签等于本口的 PVID,出方向就剥掉标签发出去;如果带了别的 VLAN 标签,就原样带着发。反方向收到无标签帧,就打上 PVID 的标签。两端 PVID 不一致会怎样?假设 A 端 PVID 是 1,B 端 PVID 是 10,A 发一个 VLAN 10 的帧时因为 PVID 是 1 所以带着标签发出去,B 收到带标签的 VLAN 10 帧,正常;但如果是 B 往 A 发,B 认为 VLAN 10 是 native,剥了标签发出去,A 收到无标签帧按 PVID 1 打标签,直接进了 VLAN 1——于是 VLAN 10 的流量在 A 端全跑错地方了。
所以我的习惯是:互联 Trunk 的 PVID 保持默认的 1,两端一致,永远不要为了"省标签"去改它。真要做 PVID 修改(比如对接某些只发无标签帧的设备),两端必须同步改,改完立刻用display port vlan核对。这条命令会列出每个端口的 PVID 和允许通过的 VLAN 列表,是二层排错的第一现场。
4.3 二层打通了没有:三个验证命令
配置完先别急着配三层,把二层验证到位,否则后面出问题你分不清是二层还是三层。
[Access-SW] display vlan [Access-SW] display port vlan [Access-SW] display mac-addressdisplay vlan看每个 VLAN 里有哪些端口,重点确认 Trunk 口在 VLAN 10、20 的列表里都出现了,且类型标着 tagged。display port vlan看 PVID 和 Trunk 的允许列表。display mac-address是最有说服力的一条:让 PC1 ping 一下 PC2(同 VLAN 跨交换机),如果 MAC 表里能同时学到两台 PC 的 MAC 且都绑在正确的 VLAN 上,说明二层转发链路完全正常。学不到就只有两种可能——PC 没发帧(网卡没配置好),或者帧被丢在了半路(Trunk 没放行)。
注意:ENSP 里的 MAC 表有老化时间,默认 300 秒。你去查的时候可能刚好老化掉了,看起来像"没学到"。可以先 ping 一次再去查,或者干脆在 PC 上持续 ping 着查。
5. 三层网关落地:VLANIF 配置与转发验证
5.1 核心交换机上的 VLAN 与 VLANIF
核心交换机要做的第一件事是建 VLAN——注意,即使核心上没有任何物理端口属于 VLAN 10,你也必须建这个 VLAN,因为 VLANIF 接口是依附于 VLAN 存在的,VLAN 不存在接口就建不出来。这是很多新手转不过弯的地方:以为"我这儿没接这个 VLAN 的口,干嘛要建",结果是逻辑接口而非物理连接的思维没建立起来。
<Core-SW> system-view [Core-SW] sysname Core-SW [Core-SW] vlan batch 10 20 [Core-SW] interface Vlanif 10 [Core-SW-Vlanif10] ip address 192.168.10.254 24 [Core-SW-Vlanif10] quit [Core-SW] interface Vlanif 20 [Core-SW-Vlanif20] ip address 192.168.20.254 24 [Core-SW-Vlanif20] quit配完立刻验证接口状态:
[Core-SW] display ip interface brief [Core-SW] display ip routing-tabledisplay ip interface brief里 VLANIF10 和 VLANIF20 的状态应该是 UP(前提是前面 Trunk 已配好,VLAN 里有活动端口)。如果显示 DOWN,回到第 2.3 节说的两点:VLAN 里有没有 UP 的物理口,全局路由功能开没开。路由表里应该能看到 192.168.10.0/24 和 192.168.20.0/24 两条 Direct 路由,这是网关能转发的前提。
5.2 转发过程验证:从 ARP 到 ping 的完整链路
所有 PC 的网关都指向对应网段的.254,然后从 PC1 ping PC3。这一次的转发路径是:PC1 发现目标跨网段,ARP 请求 192.168.10.254 的 MAC;核心交换机 VLANIF10 回复自己的 MAC;PC1 把包发给核心;核心查路由发现 192.168.20.0/24 在 VLANIF20,重新封装从 VLANIF20 发出去,同时 ARP 请求 192.168.20.1 的 MAC;PC3 回复;回程包对称地走一遍。
验证的时候我一般分三步看,这样出问题能立刻定位:
[Core-SW] display arp [Core-SW] display mac-address vlan 10 [Core-SW] ping -a 192.168.10.254 192.168.20.1display arp是判断"网关有没有被问到"的关键。正常情况下你能看到 VLANIF10 下有 PC1、PC2 的 ARP 条目,VLANIF20 下有 PC3、PC4 的,而且类型是动态。如果只有一边有,说明另一边的终端没在发 ARP,八成是网关没配或者配错段了。ping -a带源地址 ping 是设备上最常用的自测手段,从 192.168.10.254 去 ping 192.168.20.1,能通就说明三层转发和两边的 ARP 都正常,问题一定在终端侧。
这里插一句容易忽略的:VLANIF 的地址不要和终端地址冲突,也不要重复规划。ENSP 里复制粘贴配置的时候很容易把 20 段的地址粘到 10 段的 VLANIF 上,display ip interface brief会提示地址冲突,但如果你没看,现象就是跨网段 ping 有时通有时不通——因为 ARP 表里同一个 IP 对应了两个 MAC 在打架。这种"时通时不通"的问题最难查,所以配完一定过一遍地址表。
5.3 一个进阶但很实用的配置:让终端自动拿地址
真实网络里不可能每台 PC 手动配 IP。三层交换机上开 DHCP,可以按 VLANIF 分配不同网段的地址,接上就能用。用接口地址池的方式最省事:
[Core-SW] dhcp enable [Core-SW] interface Vlanif 10 [Core-SW-Vlanif10] dhcp select interface [Core-SW-Vlanif10] dhcp server dns-list 114.114.114.114 [Core-SW-Vlanif10] dhcp server excluded-ip-address 192.168.10.250 192.168.10.253 [Core-SW-Vlanif10] quitdhcp select interface的意思是"用这个接口的网段和掩码作为地址池",网关自动就是接口地址,不用额外指定。excluded-ip-address把高位区间排除掉,留给交换机自己的管理地址、AP 或者以后要加的 VRRP 虚拟地址,这个习惯很值得养成——不留预留段,将来想在网段里加设备只能改规划。VLAN 20 照做一遍即可。
如果 DHCP 服务器在别的地方(不在这个三层交换机上),就需要在 VLANIF 上配中继:先全局dhcp enable,接口下dhcp select relay,再dhcp-server-ip 服务器地址。中继的原理是把 PC 的广播 DHCP 请求转成单播发给服务器,服务器根据giaddr字段判断该从哪个池子分配——所以服务器上的地址池必须能匹配到网关所在网段,这一步配错,现象是 PC 一直显示"正在获取 IP"但拿不到。
6. 对照组:单臂路由方案怎么配,以及那些绕不开的细节
6.1 子接口配置与 dot1q 终结
想直观感受 802.1Q 标签被终结的过程,单臂路由是最好的教材。把核心交换机换成一个路由器,路由器 GE0/0/0 接接入交换机的 Trunk 口,然后在这个物理口上起两个子接口:
[Router] interface GigabitEthernet 0/0/0.10 [Router-GigabitEthernet0/0/0.10] dot1q termination vid 10 [Router-GigabitEthernet0/0/0.10] ip address 192.168.10.254 24 [Router-GigabitEthernet0/0/0.10] arp broadcast enable [Router-GigabitEthernet0/0/0.10] quit [Router] interface GigabitEthernet 0/0/0.20 [Router-GigabitEthernet0/0/0.20] dot1q termination vid 20 [Router-GigabitEthernet0/0/0.20] ip address 192.168.20.254 24 [Router-GigabitEthernet0/0/0.20] arp broadcast enabledot1q termination vid 10告诉这个子接口:收到带 VLAN 10 标签的帧,把标签剥掉交给我;发出去的时候自动打上 VLAN 10 的标签。子接口本身没有物理形态,所以它的状态跟随父接口,父接口 up 它就 up。
6.2 那个必须敲的命令:arp broadcast enable
arp broadcast enable这条命令是我见过最多人漏掉的。子接口默认不处理广播报文,而 ARP 请求恰恰是广播(目的 MAC 全 F)。你不开这个开关,路由器收到 PC 的 ARP 请求直接丢了,网关永远不回 ARP,PC 那边就一直显示解析失败,报错通常是"请求超时"或者"无法访问目标主机"。
这个现象和"网关地址配错"的表现几乎一样,但区分方法很简单:在路由器子接口上display arp看不到任何终端条目,同时在交换机上抓包能看到 ARP 请求确实发到了 Trunk 口。确认到这一步,基本就是这条命令没敲。原理性的解释是:子接口作为逻辑接口,默认只关心单播,广播被当作无关流量处理掉,必须显式开启才放行。
6.3 两种方案的实测差异与选用建议
同样的拓扑、同样的终端配置,只换网关设备,我做过对比:几十个包的时候两者差别看不出来,但如果做压力测试(ENSP 里可以用终端持续大包 ping 或者在真机上打流),单臂路由的 CPU 占用会明显上升,延迟抖动也更大,瓶颈就在那根上联链路和软件转发上;VLANIF 方案基本是平的,因为转发在芯片里完成。
| 场景特征 | 推荐方案 | 理由 |
|---|---|---|
| 园区网、VLAN 数量多 | 三层交换机 VLANIF | 芯片转发,容量不受单链路限制 |
| 需要 NAT / 出口上网 | 单臂路由或专用出口设备 | 三层交换机的 NAT 能力有限 |
| 教学演示、想看清标签处理 | 单臂路由 | 802.1Q 终结过程直观可见 |
| 临时实验、设备有限 | 单臂路由 | 一台路由器就能撑起多个网段 |
| 对可靠性有要求 | VLANIF + VRRP | 网关可以双机冗余 |
说句实在话,单臂路由在真实项目里的出场率已经很低了,更多是作为过渡方案或者学习手段。但它的配置经验并不会浪费——你理解了子接口怎么终结标签、ARP 为什么需要显式放行,回头看 VLANIF 的行为就一目了然:VLANIF 天然知道自己属于哪个 VLAN,不需要"终结"这个动作,也不需要额外开广播,因为它是 VLAN 原生的三层接口。这种对比式的理解,比死记命令牢固得多。
7. 排查实录:从"完全不通"到"通但很慢"
7.1 分层排查的固定套路
配置出问题的时候最忌乱改。我的习惯是按 OSI 从下往上,每层用固定命令确认,绝不跳步:
| 层级 | 检查动作 | 判断标准 | 常见问题 |
|---|---|---|---|
| 物理/接口 | display interface brief | 端口 UP、双工速率正常 | 线没接、端口被 shutdown |
| 二层 VLAN | display vlan/display port vlan | 端口归入正确 VLAN、Trunk 放行 | Access 误配、Trunk 未放行 |
| 二层 MAC | display mac-address | 终端 MAC 学在正确 VLAN | PVID 不一致导致跑错 VLAN |
| 三层接口 | display ip interface brief | VLANIF UP 且有地址 | VLAN 内无活动端口、路由未开 |
| 三层 ARP | display arp | 有终端的动态条目 | 终端没配网关、子接口未开广播 |
| 三层路由 | display ip routing-table | 直连网段存在 | 地址规划重叠、掩码错 |
| 策略层 | 检查 ACL / 端口隔离 | 无拦截规则 | ACL 误命中、端口隔离 |
按这个表走一遍,95% 的问题能在五分钟内锁定。真正难的是那些"每层都正常但就是不通"的情况,往下看。
7.2 高频问题速查表
| 现象 | 最可能的原因 | 快速验证与处理 |
|---|---|---|
| 同 VLAN 通,跨 VLAN 全超时 | 终端未配网关 | 看 PC 配置页网关栏是否填了 |
跨 VLAN 超时,交换机display arp无条目 | 终端根本没发 ARP | 检查网关地址是否与终端同网段 |
| VLANIF 显示 DOWN | VLAN 内无 UP 端口 / 未开路由 | display vlan核对;补ip routing |
| 单臂路由下发 ARP 一直解析失败 | 子接口未开arp broadcast enable | 补命令,立即生效 |
| 跨交换机同 VLAN 不通 | Trunk 未放行该 VLAN | port trunk allow-pass vlan xx |
| 部分 VLAN 通、部分不通 | Trunk PVID 两端不一致 | display port vlan对比两端 |
| ping 前几个通后全丢 | MAC 表或 ARP 老化 / 地址冲突 | display arp看有无重复 IP |
| 能 ping 通但传文件很慢 | 单臂路由瓶颈、MTU 不一致 | 换 VLANIF 方案;核对 MTU |
| 换个终端就不通 | ACL、端口安全、端口隔离 | 查接口下的策略配置 |
| ENSP 里配置全对但完全不转发 | 设备假死 / PC 网卡未挂载 | 关设备重开,重新点"应用" |
7.3 几个文档里不会写的独家经验
关于"通但慢":遇到跨 VLAN 能 ping 通、但业务卡顿的,先看是不是走了单臂路由,再看链路是不是协商成了半双工。ENSP 里有时候手工指定的速率双工和实际不符,display interface里写着 Half 就会发现。真机上更常见的是网线质量或者光模块问题,表现为大量 CRC 错误,display interface的 error 计数会涨。
关于 ACL 误伤:三层交换机上如果配了 ACL 挂在 VLANIF 的入方向,很容易把网关自己的 ARP 或者终端之间的流量拦掉。现象是"配 ACL 之前好的,配完就不通了"。排查方法是在 VLANIF 下先undo traffic-filter inbound试一下,能通就是 ACL 的问题,再逐条加回去定位是哪条规则太宽或者顺序不对。ACL 是从上往下匹配,第一条匹配就执行,很多人把 permit 写在 deny 后面,等于没写。
关于掩码的坑:ip address 192.168.10.254 24和ip address 192.168.10.254 255.255.255.0在设备上等价,但如果你手滑写成192.168.10.254 255.255.0.0,这个 VLANIF 就会认为 192.168.0.0/16 都是直连,跨网段的包全被当成同网段做 ARP 去了,现象极其诡异。配完一定用display ip interface brief扫一眼掩码长度。
关于验证顺序:我的固定流程是先用ping -a在设备上测(排除终端问题),再用 PC 测(验证端到端)。设备上通了 PC 不通,问题一定在终端或接入链路;设备上就不通,问题在网关或路由。这个二分法能把排查范围瞬间砍一半。
8. 往上再走一步:多 VLAN、跨设备与冗余网关
8.1 从两个 VLAN 扩到几十个 VLAN 时的组织方式
两个 VLAN 手配还行,几十个就得上点方法了。第一,VLAN 编号和网段做映射规则,比如 VLAN 10 对应 192.168.10.0/24,VLAN 20 对应 192.168.20.0/24,第三段和 VLAN ID 保持一致,看地址就知道属于哪个 VLAN,排错时省大量时间。第二,Trunk 上用port trunk allow-pass vlan all还是逐个列出?实验环境无所谓,生产环境我更倾向明确列出,因为 all 会把所有 VLAN 的广播都带过去,VLAN 多了以后不必要的泛洪很可观。
第三,接入交换机上的端口配置可以用端口组批量下发,省得一个个敲:
[Access-SW] port-group group-member GigabitEthernet 0/0/1 to GigabitEthernet 0/0/4 [Access-SW-port-group] port link-type access [Access-SW-port-group] port default vlan 10批量操作的风险是"一错全错",所以下发前先display current-configuration interface确认这些口原来是干净的,别把上联口误加进去——上联口被改成 Access 然后塞进 VLAN 10,整网就断了,这种事故我亲眼见过。
8.2 双上行与链路聚合:避免单点
核心和接入之间如果只连一根线,这根线或者对应端口出问题,整个接入层就失联了。真机项目里通常做双上行加链路聚合(Eth-Trunk),把两根物理线捆成一条逻辑链路,既有带宽叠加,也有冗余。ENSP 里的配置大概是:
[Core-SW] interface Eth-Trunk 1 [Core-SW-Eth-Trunk1] port link-type trunk [Core-SW-Eth-Trunk1] port trunk allow-pass vlan 10 20 [Core-SW-Eth-Trunk1] mode lacp-static [Core-SW-Eth-Trunk1] quit [Core-SW] interface GigabitEthernet 0/0/1 [Core-SW-GigabitEthernet0/0/1] eth-trunk 1两端都要建 Eth-Trunk、加入成员口,模式保持一致(静态 LACP 或手工负载分担)。这里的关键是成员口的速率、双工、VLAN 配置必须一致,不一致的端口不会被选进聚合组,display eth-trunk 1能看到每个成员口的状态是 Selected 还是 Unselect。如果只 Selected 了一个,先去查两端的速率双工是不是一样。
8.3 网关冗余:VRRP 让跨 VLAN 通信不怕单机故障
单台三层交换机做网关,它挂了所有 VLAN 都出不去。VRRP 的思路是两台交换机都配同一网段的地址作为真实地址,再共同维护一个虚拟 IP 和虚拟 MAC,终端把网关指向虚拟 IP。主设备正常时由它响应 ARP 并转发,主设备故障时备设备在几秒内接管。
[Core-SW-A] interface Vlanif 10 [Core-SW-A-Vlanif10] vrrp vrid 10 virtual-ip 192.168.10.1 [Core-SW-A-Vlanif10] vrrp vrid 10 priority 120 [Core-SW-A-Vlanif10] vrrp vrid 10 preempt-mode timer delay 20 [Core-SW-B] interface Vlanif 10 [Core-SW-B-Vlanif10] vrrp vrid 10 virtual-ip 192.168.10.1 [Core-SW-B-Vlanif10] vrrp vrid 10 priority 100优先级默认 100,大的当主。preempt-mode timer delay 20是延迟抢占,防止设备反复重启导致主备来回切换——这个延时在链路不稳定的场景里非常必要。验证用display vrrp,能看到 Master/Backup 角色和状态切换记录。设计时把两组 VLAN 的主备角色交叉开(VLAN 10 以 A 为主、VLAN 20 以 B 为主),这样两台设备都在干活,不是一台闲着——这就是常说的负载分担式冗余。
把这一套都想明白之后,回头看"不同 VLAN 间通信"这件事,它其实是一条从二层隔离到三层转发、从单机配置到冗余设计的完整链条。我自己的体会是:配置命令从来不是难点,真正的门槛在于你脑子里有没有那张"包从 PC1 出发到 PC3 收到,中间经历了什么"的图。这张图建起来,看到任何不通的现象,你都能推演出它断在哪一环。