1. 实验背景与整体设计思路
做网络工程这行,跟交换机打交道是躲不开的日常。VLAN 配置看似基础,但几乎所有稍上规模的企业网络、校园网、数据中心接入层都离不开它。这篇博客我就拿一个完整的 VLAN 配置实验来拆开讲透,从为什么划分 VLAN、怎么规划 VLAN ID 和端口角色,到 eNSP 里一步步敲命令实现同 VLAN 通信、跨交换机 Trunk 透传、以及 VLAN 间路由互通,全部走一遍。
很多刚入行的朋友在培训机构或者学校机房做过 VLAN 实验,但往往停留在"照着实验指导书敲命令、看到 Ping 通就完事"的层面。真正到了生产环境,你会发现出问题的从来不是那几条 vlan batch 和 port link-type access,而是对 PVID、Trunk 放通范围、Native VLAN 的默认行为、以及不同厂家交换机默认参数差异的理解。这篇文章我会把实验做完,同时把命令背后那些"为什么"一并讲清楚,适合两类读者:一是刚学数通基础、准备考 HCIA/CCNA 的入门者,二是已经能配通 VLAN 但总在某些诡异现象上卡壳的现场运维。
实验拓扑我用华为 eNSP 来搭,这是目前国内学习华为数通最方便的模拟器,免费、内置设备型号齐全、支持抓包,完全够用。核心实验分三步走:第一步是单交换机上的 VLAN 划分与同网段通信验证;第二步是两台交换机通过 Trunk 链路实现跨设备同 VLAN 互通;第三步是引入路由,分别用单臂路由和三层交换机 SVI 两种方式打通 VLAN 间通信。最后我会补充一些生产环境里常见的 VLAN 规划误区和故障排查命令速查表,这些才是真正值钱的部分。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 实验环境准备与 VLAN 核心原理解析
2.1 eNSP 环境搭建与基础检查
eNSP 模拟器虽然叫"模拟器",但它的交换模块和真实华为交换机的命令风格、转发行为基本一致。我用的版本是 eNSP V100R003C00SPC100,搭配 WinPcap 或 Npcap 驱动,注意安装顺序:先装驱动和 VirtualBox,再装 eNSP 本体,否则容易出现设备启动失败或 ARP 报文抓不到的问题。
设备选型方面,实验里我用了三台 S5700 交换机,这台设备在 eNSP 里功能比较全,支持常用的 VLAN、Trunk、Hybrid、VLANIF、路由协议等功能,比 S3700 更接近真实企业接入/汇聚设备的行为。路由器用了一台 AR2220,用来做单臂路由实验。PC 直接用 eNSP 自带的 PC 节点,配置 IP 和网关即可,不需要额外起真机。
注意:如果你用的 eNSP 版本太老(比如 V100R002 之前),S5700 上有些命令会不兼容,建议直接装最新版本。另外 eNSP 偶尔会出现路由器启动后一直
#####的情况,解决办法是检查 VirtualBox 的 Host-Only 网卡是否被禁用了。
2.2 VLAN 究竟是什么:从广播域隔离说起
VLAN(Virtual Local Area Network,虚拟局域网)的核心作用,是把一台物理交换机从逻辑上切成多个互相隔离的"虚拟交换机"。二层广播帧(比如 ARP 请求、DHCP Discover)只会在同一个 VLAN 内传播,不同 VLAN 之间默认是完全隔离的,必须通过三层路由才能互通。
用一个生活化的类比:一栋写字楼里有 A、B、C 三家公司的办公室,它们在同一个楼层(同一台交换机),但各自有独立的玻璃隔断(VLAN)。A 公司的员工喊一嗓子(广播帧),隔断内的同事听见了,B、C 公司的员工完全没反应。这样既避免了广播互相干扰,也天然隔离了各公司的流量,安全性也更好。
VLAN 有好几种划分方式,最常用的是基于端口:给交换机的某个端口指定 Access VLAN,这个端口下的设备就自动属于该 VLAN。其它方式还包括基于 MAC 地址、基于 IP 子网、基于协议等,这些多为特殊场景使用,比如办公网里一台 PC 可能根据 IP 子网自动进入对应 VLAN,但配置复杂度高,一般园区网还是以基于端口为主。
VLAN ID 的范围是 0 到 4095,其中 0 和 4095 保留,可正常使用的是 1 到 4094。VLAN 1 是缺省 VLAN,所有端口默认都在 VLAN 1 里。生产环境里我强烈建议不要把业务直接放 VLAN 1,因为管理面、默认生成树根桥选举、部分厂家协议报文都会和 VLAN 1 有特殊关系,业务和默认 VLAN 混在一起容易出奇奇怪怪的故障。
2.3 Access、Trunk 与 PVID:端口角色的关键在于"标签"
理解 VLAN 实验,必须把端口类型和帧标签机制彻底搞明白。二层交换机在转发帧的时候,区分不同 VLAN 靠的是在以太网帧头里插入 4 字节的 802.1Q Tag,其中包含 12 位的 VLAN ID。但并非所有帧都带 Tag,交换机到底怎么知道一个无 Tag 的帧属于哪个 VLAN?答案就是 PVID(Port-base VLAN ID,端口缺省 VLAN)。
- Access 端口:连接终端设备(PC、打印机、IP 电话等),只能属于一个 VLAN。Access 口发出的帧是不带 Tag 的,因为终端设备通常不认 802.1Q Tag,如果有 Tag 反而会被网卡丢弃或无法识别。Access 口收到无 Tag 帧时,会打上 PVID 对应的 Tag 进入交换芯片。
- Trunk 端口:连接交换机与交换机、或交换机与路由器,可以放通多个 VLAN 的流量。Trunk 口对不同 VLAN 的帧处理规则是:对于允许列表内的 VLAN,转发时帧保留 Tag;对于与 Trunk 口 PVID 相同的 VLAN,默认会剥离 Tag 再转发。这个"剥离与不剥离"的机制是初学者的重灾区,后面实验里我会重点演示。
在华为交换机上,Trunk 口默认 PVID 是 1,默认只放通 VLAN 1(即缺省只允许带 Tag 的 VLAN 1 帧通过?实际上华为缺省 Trunk 只放通 VLAN 1)。所以你在配 Trunk 时必须显式执行 port trunk allow-pass vlan 10 20 来放通业务 VLAN,否则跨交换机的 VLAN 10、20 流量会被静默丢弃——注意,这个丢弃不会给你报任何错误,抓包也看不到,只能通过排查发现。
Hybrid 端口是华为特有的一种端口类型,可以理解成 Access 和 Trunk 的结合体,可以放通多个 VLAN,并且可以针对不同 VLAN 配置是打 Tag 还是剥 Tag。实际工程里 Hybrid 用得很多(比如连接路由器的子接口、某些特殊终端场景),但为了保证实验主线清晰,我先以 Access 和 Trunk 为主,Hybrid 在后面的扩展实验里单独说。
2.4 实验拓扑规划与 VLAN/网段划分
整个实验拓扑规划如下:
- SW1 和 SW2 之间用两条链路连接,其中一条做 Trunk(GigabitEthernet 0/0/24),另一条先留着备用,用来演示链路故障与恢复。
- PC1 连接 SW1 的 GigabitEthernet 0/0/1,属于 VLAN 10,IP 网段
192.168.10.0/24,网关192.168.10.1。 - PC2 连接 SW1 的 GigabitEthernet 0/0/2,属于 VLAN 20,IP 网段
192.168.20.0/24,网关192.168.20.1。 - PC3 连接 SW2 的 GigabitEthernet 0/0/1,属于 VLAN 10,IP 网段
192.168.10.0/24,网关192.168.10.1。 - PC4 连接 SW2 的 GigabitEthernet 0/0/2,属于 VLAN 20,IP 网段
192.168.20.0/24,网关192.168.20.1。
网关放在哪?第一步实验我先把三层网关放在路由器 AR1 上,分别用两个子接口关联 VLAN 10 和 VLAN 20,这种方式就是单臂路由。第二步实验我会把网关改成在三层交换机 SW1 上通过 VLANIF 接口实现,这样更贴近实际生产(三层交换机终结网关比单臂路由性能好得多)。
实际规划里,VLAN 网段的网关地址一般建议用 .1 或 .254,避免和 DHCP 地址池、管理地址冲突。这里我统一用 .1 作为网关。
3. 单交换机 VLAN 划分实验:最小可行验证
3.1 创建 VLAN 并配置 Access 接口
先在 SW1 上做基础配置。进入系统视图,批量创建 VLAN:
bash复制<Huawei>system-view
[Huawei]sysname SW1
[SW1]vlan batch 10 20
Info: This operation may take a few seconds, please wait for a moment...done.
vlan batch 10 20 这条命令的意思是同时创建 VLAN 10 和 VLAN 20。如果要创建连续的 VLAN,可以写成 vlan batch 10 to 20,一次性创建从 10 到 20 的连续区间。很多人在一个大型网络里创建几十个 VLAN,如果逐个 vlan 10、vlan 20 地敲,效率极低。不过需要注意的是,vlan batch 里不能混用 to 和逗号分隔的组合,例如 vlan batch 10 to 20 30 40 是允许的,但 vlan batch 10 to 20 to 30 不行。
接下来把连接 PC 的接口设为 Access 并划入对应 VLAN。以 GigabitEthernet 0/0/1 为例:
bash复制[SW1]interface GigabitEthernet 0/0/1
[SW1-GigabitEthernet0/0/1]port link-type access
[SW1-GigabitEthernet0/0/1]port default vlan 10
[SW1-GigabitEthernet0/0/1]quit
同样配置 GigabitEthernet 0/0/2 为 Access 并划入 VLAN 20。
这里有个细节值得展开:port link-type access 默认会把端口的 PVID 设置成 1(也就是默认 VLAN 1),当你执行 port default vlan 10 时,华为交换机会自动把该端口的 PVID 改为 10,同时将该端口从 VLAN 1 中移除并加入 VLAN 10。在查看配置时可以用 display port vlan 来确认,这个命令比 display current-configuration 更直观地展示端口类型、PVID、允许通过的 VLAN 列表。
3.2 同 VLAN 通信验证与广播隔离验证
给 PC1 配置 IP 192.168.10.10/24,PC2 配置 192.168.20.10/24。此时在 PC1 上 Ping PC2,预期结果是不通——因为它们在两个不同 VLAN,二层完全隔离,也没有三层接口。而 PC1 Ping PC3(如果 PC3 接在 SW1 上且属于 VLAN 10)应该通。
注意 PC 节点配置 IP 的流程:双击 PC 图标,在弹窗的"基础配置"选项卡里写 IP 地址、子网掩码和网关。很多初学者容易直接改 IPv4 地址而忘了写网关,导致跨网段通信测试时怎么都通不了。
不过单交换机上做广播隔离的验证,最直观的方法是开启 eNSP 的抓包工具,在交换机端口上抓 PC1 发出去的 ARP 广播请求,你会发现相同 VLAN 的 PC 会回应 ARP,不同 VLAN 的 PC 根本收不到这个请求。这个"广播域隔离"的效果就是划分 VLAN 最原始也是最重要的意义。
3.3 查看 VLAN 信息与端口成员:display vlan 和 display port vlan
配置完成后,用下面三条命令核对:
bash复制[SW1]display vlan
这条命令会列出所有已创建的 VLAN、VLAN 描述、以及每个 VLAN 下包含的端口。输出里你会看到 VLAN 10 下包含 GE0/0/1,VLAN 20 下包含 GE0/0/2,而 GE0/0/1 等端口在 VLAN 1 的成员列表里已经消失了。
另一条命令:
bash复制[SW1]display port vlan
这个命令逐端口显示端口类型、PVID、以及该端口允许通过的 VLAN 列表。比如 Access 口会显示 Port Link Type PVID Trunk/VLAN ...,Access 口的 VLAN 列表里只有它所在的 VLAN 编号。如果是 Trunk 口,这里会有一个详细列表,一眼就能看出你放通了哪些 VLAN,排查"为什么这个 VLAN 不通"时极其有用。
命令技巧:
display vlan看到的是 VLAN 维度,display port vlan看到的是端口维度。两个命令配合使用,能快速定位"这个端口到底划到哪个 VLAN 了"以及"这个 VLAN 里到底有哪些端口"。
4. 跨交换机 Trunk 配置实验:让 VLAN 跨越物理边界
4.1 Trunk 链路设计与放通配置
单交换机能满足的小规模场景很有限,实际网络里一台接入交换机只有 24 口或 48 口,接了 50 台 PC 就满了,必须向上级联。跨交换机的同 VLAN 通信,靠的就是交换机之间的 Trunk 链路。
在 SW1 和 SW2 之间选择 GigabitEthernet 0/0/24 作为 Trunk 口。配置命令:
bash复制[SW1]interface GigabitEthernet 0/0/24
[SW1-GigabitEthernet0/0/24]port link-type trunk
[SW1-GigabitEthernet0/0/24]port trunk allow-pass vlan 10 20
[SW1-GigabitEthernet0/0/24]quit
SW2 同样配置。注意,华为交换机上 Trunk 口的 PVID 默认是 1,业务 VLAN 是 10 和 20,跟默认 PVID 不冲突。到此,VLAN 10 和 VLAN 20 的帧就可以带着 Tag 穿过这条 Trunk 链路了。
有朋友可能会问:allow-pass vlan 10 20 是不是把 VLAN 1 的放通也关了?答案是否定的。华为交换机 Trunk 口默认放通 VLAN 1,你执行 allow-pass vlan 10 20 是在原有基础上追加放通,不会删除 VLAN 1。如果你希望只放通特定 VLAN,需要先执行 undo port trunk allow-pass vlan 1,再放通其它 VLAN。这是不少老手也会忽略的默认行为差异。
4.2 验证跨交换机同 VLAN 互通
在两台交换机配置完毕后,把 PC1(VLAN 10,192.168.10.10)和 PC3(VLAN 10,192.168.10.30)连通,此时 Ping 应该是通的。同理 PC2 和 PC4 也应该通。
这里我想强调一个特别容易踩坑的点:PC 的 IP 地址必须和交换机接口的 Access VLAN 匹配。比如你 PC3 的 Access VLAN 是 10,但 IP 配成了 192.168.20.30,那么它 Ping PC1(192.168.10.10)是不通的,因为 IP 不在同一个网段,而交换机又不做三层转发。这是新手排障时最容易浪费时间的地方。
跨交换机同 VLAN 通信路径是这样的:PC1 发出无 Tag 帧 -> SW1 GE0/0/1 收到后打上 VLAN 10 的 Tag -> 交换芯片查 MAC 地址表,发现去往 PC3 的 MAC 要从 Trunk 口转发 -> 帧带着 VLAN 10 Tag 从 GE0/0/24 发出 -> SW2 GE0/0/24 收到带 Tag 的帧 -> SW2 查 MAC 地址表发现目标 MAC 在 VLAN 10 的 GE0/0/1 -> 从 GE0/0/1 发出时剥离 Tag -> PC3 收到无 Tag 帧。整个过程对终端完全透明。
为了更直观,可以在 SW1 的 GE0/0/24 端口抓包。你会发现 PC1 发往 PC3 的 ICMP 报文里,以太网帧头带了一个 802.1Q Virtual LAN 字段,里面的 VLAN ID 就是 10。如果抓不到 Tag,说明你的帧从 Access 口出来之前就被剥离了,这是正常的;但如果从 Trunk 口出来的帧没有 Tag,那就要检查是不是 PVID 和 allow-pass 配错了。
4.3 Trunk 的 Tag 剥离规则:理解 PVID 才是理解 Trunk 的关键
我在前面埋了个伏笔:Trunk 口对于和 PVID 相同的 VLAN,默认会剥离 Tag。这意味着什么?假设你把 Trunk 口的 PVID 改成 10(通过 port trunk pvid vlan 10),那么从 SW1 GE0/0/24 发出的 VLAN 10 帧是不带 Tag 的,而 VLAN 20 帧是带 Tag 的。此时如果对端 SW2 GE0/0/24 的 PVID 是默认的 1,那么 VLAN 10 的无 Tag 帧到达 SW2 后,SW2 会认为它属于 PVID 1(即 VLAN 1),于是这个帧就"莫名其妙"跑到 VLAN 1 去了,而这实际上并不是你想要的行为——最终结果是 VLAN 10 的跨交换机通信失败。
那什么时候会用到非默认 PVID 的 Trunk 口?典型场景是交换机与路由器子接口对接做单臂路由时,路由器子接口的 dot1q termination vid 必须和交换机 Trunk 口的 PVID 一致,此时往往会特意设置 Trunk 口的 PVID。另一个典型场景是网络里存在 Native VLAN(即不打 Tag 的 VLAN),某些厂家的交换机默认把所有 Trunk 帧都打 Tag(思科交换机默认不打 Tag 的 Native VLAN 是 1),而华为默认是剥 Tag,两者行为不一致,跨厂商对接时务必注意。
所以我在生产环境配置 Trunk 的口诀是:先确定 PVID 再确定 allow-pass 列表。PVID 决定哪些帧是"裸奔"的,allow-pass 决定哪些 Tag 帧能通过。绝大多数情况下,PVID 保持默认 1 即可,不需要动。
4.4 交换机生成树对 Trunk 的影响:一个小实验
实验做到这,有经验的朋友可能会想到:两台交换机用一条链路互联时,STP(生成树协议)会把这条链路最终置为 Forwarding 状态,所以要等 30 到 50 秒(取决于 STP 模式)才能通。如果你刚配完 Trunk 立刻去 Ping,不通是很正常的,等 STP 收敛完就好了。
有朋友会问,能不能关掉 STP 让它秒通?可以,但强烈不建议在生产环境关闭 STP,因为二层环路一旦出现就是广播风暴级别的故障。在实验环境里,如果你想加快验证速度,可以在接口下配置 stp disable,但这只是权宜之计,别养成习惯。
另外,如果你的 eNSP 里 SW1 和 SW2 之间还连了一条冗余链路(比如 GE0/0/23 也互联了但没配 Trunk),STP 可能把其中一条阻塞掉。这里先不展开生成树的细节,留个思考题:为什么冗余链路存在时,即使你只配了一条 Trunk,也能正常通信?——答案写在后面的常见问题章节里。
5. VLAN 间通信实验:单臂路由与三层交换机 SVI
5.1 为什么 VLAN 间需要三层路由:广播域的天然边界
VLAN 隔离了广播域,但带来了新的问题:不同 VLAN 之间的设备怎么通信?答案是路由。这一步需要三层设备参与,可以是路由器、三层交换机,也可以是防火墙的虚拟子接口。在小型网络里,单臂路由完全够用;在中大型园区网里,性能更好的是三层交换机上的 VLANIF 接口。
需要注意的一点是,VLAN 间通信的前提是:终端设备配置了网关 IP,并且网关 IP 就在对应 VLAN 的三层接口上。否则即使交换机有路由能力,终端发出的帧目标 MAC 是网关 MAC,如果没有网关,ARP 请求发不出去,跨网段永远不通。
5.2 方案一:单臂路由(Router-on-a-Stick)
所谓"单臂路由",就是交换机上连路由器只用了一条物理链路,但这条链路上跑着多个 VLAN 的流量,路由器通过子接口 + 802.1Q Tag 终结来区分不同 VLAN。
配置步骤分为两部分。
第一步,把 SW1 连接路由器的接口(假设 GE0/0/24 改成连接路由器,实际上前面已经把它配成 Trunk 了,我换个思路:重新规划拓扑,把 SW1 的 GE0/0/23 接到 AR1 的 GE0/0/0)设为 Trunk 并放通 VLAN 10 和 20:
bash复制[SW1]interface GigabitEthernet 0/0/23
[SW1-GigabitEthernet0/0/23]port link-type trunk
[SW1-GigabitEthernet0/0/23]port trunk allow-pass vlan 10 20
[SW1-GigabitEthernet0/0/23]quit
第二步,在路由器上创建两个子接口(GE0/0/0.10 和 GE0/0/0.20),分别终结 VLAN 10 和 VLAN 20 的 Tag,并配置 IP 地址作为各 VLAN 的网关:
bash复制[AR1]interface GigabitEthernet 0/0/0.10
[AR1-GigabitEthernet0/0/0.10]dot1q termination vid 10
[AR1-GigabitEthernet0/0/0.10]ip address 192.168.10.1 24
[AR1-GigabitEthernet0/0/0.10]arp broadcast enable
[AR1-GigabitEthernet0/0/0.10]quit
[AR1]interface GigabitEthernet 0/0/0.20
[AR1-GigabitEthernet0/0/0.20]dot1q termination vid 20
[AR1-GigabitEthernet0/0/0.20]ip address 192.168.20.1 24
[AR1-GigabitEthernet0/0/0.20]arp broadcast enable
[AR1-GigabitEthernet0/0/0.20]quit
这里的 dot1q termination vid 10 是让子接口识别带 VLAN 10 Tag 的帧,而 arp broadcast enable 必须开启——因为子接口默认不处理广播帧,如果你想从 PC1 Ping 网关 192.168.10.1,PC 会发 ARP 广播请求,如果子接口不响应,跨网段通信直接瘫痪。这个 arp broadcast enable 是华为特有的命令,思科路由器上不需要,因为思科子接口默认就响应 ARP。
配置完成后,PC1(VLAN 10)Ping PC2(VLAN 20)应该能通。数据路径是:PC1 -> SW1 Access 口 -> SW1 查 MAC 表把帧从 GE0/0/23 Trunk 口发给路由器 -> 路由器子接口 .10 终结 VLAN 10 帧,查路由表发现 192.168.20.0/24 网段在子接口 .20 上 -> 把报文从子接口 .20 发出,带着 VLAN 20 Tag 送回 SW1 -> SW1 查 MAC 表从 GE0/0/2 Access 口发给 PC2。
单臂路由的优点是配置简单、成本低,缺点是所有跨 VLAN 流量都必须经过单条物理链路,带宽瓶颈明显,所以只适用于小流量场景。这也是"单臂"二字的含义——一条路由臂承担了所有 VLAN 间流量。
5.3 方案二:三层交换机 VLANIF(SVI)接口
生产环境里更常见的是用三层交换机终结网关。把网关做在交换机上,跨 VLAN 流量直接在交换机内部通过硬件转发,速度和性能远超单臂路由。这里我们改造拓扑:把 AR1 从 SW1 上摘掉,VLAN 10 和 VLAN 20 的网关直接在 SW1 上用 VLANIF 接口实现。
配置步骤就三步:
第一步,确保 SW1 上已创建 VLAN 10 和 20,并且对应接口已经划分好 Access VLAN(前面已经做了)。
第二步,创建 VLANIF 接口并配置 IP:
bash复制[SW1]interface Vlanif 10
[SW1-Vlanif10]ip address 192.168.10.1 24
[SW1-Vlanif10]quit
[SW1]interface Vlanif 20
[SW1-Vlanif20]ip address 192.168.20.1 24
[SW1-Vlanif20]quit
第三步,确保 PC 的网关分别指向 192.168.10.1 和 192.168.20.1。
注意:只有先把 VLAN 创建出来,才能创建对应的 Vlanif 接口。如果你没有创建 VLAN 10 就直接 interface Vlanif 10,系统会报错或者自动创建该 VLAN,不同版本行为略有差异,建议按规范先建 VLAN。
此时 PC1 Ping PC2,理论上能通。SW1 的转发过程是:PC1 发来的帧在 Access 口打上 VLAN 10 Tag -> SW1 收到后发现目标 MAC 是网关 MAC(Vlanif10 的 MAC)-> 交给三层转发引擎 -> 查路由表发现 192.168.20.0/24 直连在 Vlanif20 -> 三层引擎改写源/目的 MAC,将报文从 Vlanif20 对应的 VLAN 20 域内转发给 PC2。整个过程全程硬件转发,效率极高。
这里顺带解释一下大家都熟悉的"同网段二层通信"和"跨网段三层通信"的 MAC 地址变化:同 VLAN 内通信,帧的源 MAC 和目的 MAC 都是终端网卡的 MAC;跨 VLAN 通信时,交换机/路由器会把目的 MAC 改成目标设备的 MAC,源 MAC 改成网关接口的 MAC。这就是为什么 Ping 通后你在 PC 上 arp -a 能看到网关 MAC 的原因。
5.4 单臂路由 vs VLANIF:什么时候用哪个?
我用一个表格把两种方案的核心差异列出来,方便对比决策:
| 对比维度 | 单臂路由 | 三层交换机 VLANIF |
|---|---|---|
| 适用设备 | 路由器(AR/防火墙) | 三层交换机 |
| 转发性能 | 软件转发,带宽受限于物理链路 | 硬件转发,性能高 |
| 配置复杂度 | 需要子接口 + dot1q termination + arp broadcast enable | 直接创建 Vlanif 接口配置 IP |
| 适合规模 | 小型网络、临时拓扑 | 中大型园区网、数据中心接入 |
| 排障体验 | 涉及子接口封装,抓包看 Tag 更直观 | 直接 ping 网关,排障更简单 |
个人建议:实验阶段两种都做一遍,理解数据流转差异;生产环境除非设备确实没有三层交换能力,否则一律优先用 VLANIF。
6. 进阶实验:基于 IP 子网的 VLAN 划分与 VLAN Pool 的联想
6.1 基于 IP 子网的 VLAN 划分是什么场景
单纯的基于端口 VLAN,要求网络管理员手动把每个端口划到对应 VLAN,终端移动后非常痛苦。有些场景里,一个终端可能会动态获取到不同网段的 IP,但交换机希望能根据终端的 IP 子网来自动决定它属于哪个 VLAN,这就是基于 IP 子网的 VLAN 划分(IP-Subnet-Based VLAN)。
这个功能在企业办公网里用得比较多:比如一台笔记本在办公区插上网线,DHCP 给它分配了 192.168.10.x 的地址,交换机识别到这个源 IP 属于 192.168.10.0/24,就自动把它分配到 VLAN 10。这样即使笔记本插在了一个原本划给 VLAN 20 的端口上,它还是能进入 VLAN 10 的广播域。
在华为交换机上配置示例:
bash复制[SW1]vlan 10
[SW1-vlan10]ip-subnet-vlan 1 ip 192.168.10.0 24
[SW1-vlan10]quit
[SW1]vlan 20
[SW1-vlan20]ip-subnet-vlan 2 ip 192.168.20.0 24
[SW1-vlan20]quit
[SW1]interface GigabitEthernet 0/0/3
[SW1-GigabitEthernet0/0/3]port link-type hybrid
[SW1-GigabitEthernet0/0/3]port hybrid ip-subnet-vlan enable
注意,这个功能要求端口是 Hybrid 类型,并开启 port hybrid ip-subnet-vlan enable。它和基于端口的传统 VLAN 不是替代关系,而是叠加:端口先根据 PVID 进入默认 VLAN,如果收到的报文源 IP 命中了某个 IP 子网 VLAN 的匹配规则,就会切换为对应 VLAN。
这个实验在实际环境中容易踩的坑是:设备必须发送 ARP 报文或 IP 报文时,交换机才能识别源 IP。如果终端静默不发包,端口就一直处于默认 VLAN,所以最好配合 DHCP 或让终端主动 Ping 一次网关。加上 DHCP 场景还得考虑 DHCP 报文是否带源 IP 的问题——DHCP Discover 是广播报文,源 IP 是 0.0.0.0,有可能不会被匹配到 IP 子网 VLAN,因此生产上这类方案需要配合 DHCP Option 82 或者基于 MAC 的 VLAN 一起设计,复杂度较高。
6.2 从 VLAN Pool 看多 VLAN 网段的地址分配思路
热词里出现了 vlan pool,这是 Huawei 企业无线场景里比较常见的概念。简单说,VLAN Pool 是一个 VLAN 集合,AP 上配置的 SSID 可以关联一个 VLAN Pool,终端接入时由 AC(无线控制器)从 Pool 里动态挑选一个 VLAN 给终端,实现终端负载均衡和广播域的合理划分。比如某商场 Wi-Fi 的 SSID "Shopping-Free" 关联了 VLAN Pool [10, 20, 30],每台接入终端哈希运算后分配其中一个 VLAN,从而避免几万台终端挤在一个广播域里。
虽然咱们这篇博文是围绕交换机 VLAN 配置实验,但大家应该注意:VLAN 不只是交换机配置命令,它是整张园区网的设计语言。VLAN Pool 本质是"把大量终端分散到多个 VLAN",单台交换机上的 Access/Trunk 配置只是实现这个设计的基础工具。
我个人的理解是:如果你能想明白"为什么无线网络需要 VLAN Pool",你就更能理解 VLAN 划分的本质——不是为了划分而划分,而是为了控制广播域大小、安全隔离和便于管理。终端一多,一个大 VLAN 里几万台设备的 ARP 广播风暴会直接打满 CPU,那时候你就会明白 VLAN 和 VLAN Pool 存在的价值了。
6.3 管理 VLAN 与带外管理:一个容易被忽略的配置点
热词里还有 管理vlan。很多初学者容易把"管理 VLAN"理解成给交换机配置 IP 的那个 VLAN。实际上,管理 VLAN 是指你远程登录交换机(SSH/Telnet/SNMP)时,管理报文所属的 VLAN。默认情况下交换机所有 VLAN 1 的接口都可以管理(VLAN 1 就是默认管理 VLAN),但如果把管理 VLAN 改了,只有属于该 VLAN 的接口才能响应管理报文。
以华为交换机为例,配置:
bash复制[SW1]vlan 100
[SW1-vlan100]quit
[SW1]management-vlan 100
然后把连接网管系统的端口划入 VLAN 100。这样做的好处是:业务 VLAN 和管理 VLAN 完全隔离,即使业务网络被攻击者打满广播流量,管理通道依然可用。生产环境里我强烈建议给每台交换机专门划一个管理 VLAN,并且管理网段不要和业务网段混用,这是一条基本的安全基线。
7. 常见问题与故障排查技巧实录
7.1 "明明配置了 VLAN 和 Trunk,为什么跨交换机不通?"
这类问题在实验和现场出现频率最高,我把自己常走的排查顺序列出来:
- 检查 PC 的 IP 和网关:是不是 IP 网段和 VLAN 不匹配?网关写对了吗?很多人第一步就死在这。
- 检查端口 VLAN:用
display port vlan确认 Access 口的 PVID 对不对,Trunk 口的 allow-pass 列表里有没有放通目标 VLAN。 - 检查 Trunk PVID:如果两台交换机 Trunk 口 PVID 不一致,且有一个 VLAN 正好等于某台交换机的 PVID,那这个 VLAN 的帧到达对端后会被当作对端 PVID 对应的 VLAN 处理,直接错乱。
- 检查 STP 状态:
display stp interface GigabitEthernet 0/0/24确认端口是 Forwarding 还是 Blocking。如果拓扑里有环,STP 阻塞了你的口,通信自然失败。 - 抓包确认 Tag:在 Trunk 口两侧分别抓包,看帧是否带 Tag、Tag 的 VID 是不是你想的 VLAN。如果从 Trunk 口发出的帧没带 Tag,查一下这个 VLAN 是否等于 Trunk 口的 PVID。
7.2 华为交换机默认配置与思科的差异:跨厂商排障的坑
热词里出现了"华为交换机划vlan都是一样的吗?"这个提问,我的回答是:不是。华为的默认行为和思科有几个关键差异,对接的时候特别容易出问题。
- 华为 Access 口默认 VLAN 是 1,思科 Access 口默认 VLAN 也是 1,这个一致。
- 华为 Trunk 口默认 PVID 为 1,但不主动放通任何非 1 的 VLAN;思科 Trunk 口默认放通所有 VLAN(
switchport trunk allowed vlan all)。如果你把思科的配置文件直接移植到华为交换机会发现,原本在思科上正常的 VLAN 10、20 流量到华为全断了,因为华为 Trunk 没放通。 - 华为 Trunk 口对与 PVID 相同的 VLAN 默认剥离 Tag;思科默认也是 Native VLAN 1 不打 Tag。这个逻辑类似。
- 华为混合端口(Hybrid)能实现更灵活的 Tag/Untag 组合,思科没有直接对应概念(更接近私有 VLAN + Trunk 的结合)。
所以如果你们公司网络是华为和思科混合组网,Trunk 对接时一定要先在脑子里过一遍"对端到底怎么处理 Tag 的",别拿一边的配置思维硬套。
7.3 VLANIF 网关 Ping 不通:排查方向指南
在三层交换机上配了 Vlanif 但终端 Ping 不通网关,按顺序排查:
- VLANIF 接口是否 UP:
display ip interface brief查看 Vlanif10 是否 Up/Up。如果接口 Down,说明该 VLAN 下没有任何物理端口 UP,VLANIF 即使配了 IP 也是 Down 的。 - 终端是否在 VLAN 内:再次确认终端的 Access VLAN 是不是 10,IP 是不是 192.168.10.x。
- VLANIF 是否配置了 IP:
display current-configuration interface Vlanif 10确认 IP 地址是否生效。 - ARP 是否能解析:在终端上 Ping 网关,然后在交换机上敲
display arp | include 192.168.10.1,如果 ARP 表项不存在,说明 VLAN 内广播报文的转发有问题,回到第 1 步查物理端口 UP 状态和端口 VLAN 配置。 - ACL/防火墙策略:三层交换机上可能配置了 ACL 过滤,或者端口开启了端口安全,会静默丢包。
7.4 实验排障经验速查表
| 故障现象 | 可能原因 | 快速排查命令 |
|---|---|---|
| 同 VLAN PC 互相 Ping 不通 | Access 口 VLAN 未配 / IP 网段不一致 | display port vlan, ping 检查 IP |
| 跨交换机同 VLAN Ping 不通 | Trunk 未放通 / PVID 冲突 / STP 阻塞 | display port vlan, display stp |
| 跨 VLAN Ping 不通 | 缺网关 / 三层接口未配 / 单臂路由 arp broadcast enable 没开 | display ip interface brief, display arp |
| PC 能通但抓包看不到 Tag | 该 VLAN 等于 Trunk PVID,帧在 Trunk 口被剥 Tag | display port vlan 查看 PVID |
| VLANIF 接口 Down | 该 VLAN 下无物理端口 UP / 端口划到错误 VLAN | display vlan, display interface brief |
| 远程登录管理失败 | 管理 VLAN 放通错误 / 网关不通 | display management-vlan, ping 管理地址 |
7.5 一条容易忽略的命令:display int vlan brief
热词里有 display int vlan brief,这实际是 display interface Vlanif brief 的简写形式,用来快速查看所有 VLANIF 接口的 IP 和状态。很多人在排查网关问题时会敲 display ip interface brief,但更针对性的是这条:
bash复制[SW1]display int vlan brief
*down: administratively down
!down: FDDI-down
^down: down-and-out
Interface IP Address/Mask Physical Protocol
Vlanif1 192.168.1.1/24 up up
Vlanif10 192.168.10.1/24 up up
Vlanif20 192.168.20.1/24 up up
这一眼就能看到所有 VLANIF 的 IP 和物理/协议状态,排障效率极高。如果 Vlanif20 是 down 状态,那就是 VLAN 20 内没有活动的物理端口,不用再去翻接口配置了。
我个人在实际操作中还有一个习惯:每完成一个阶段的配置就立刻保存配置并截图留档。实验环境里无所谓,但生产环境里每一次变更都要有回退方案。VLAN 配置看似简单,真正出问题时往往是因为某人改了某个端口的 PVID 或者放通列表没同步到对端交换机,这种"低级的错"在凌晨割接时最让人头疼。
最后再分享一个经验:VLAN 实验做完之后,记得把交换机恢复出厂配置(reset saved-configuration 然后 reboot),别让上一轮实验的配置干扰下一轮测试。我见过太多人在 eNSP 里排障排了半天,最后发现是上一轮实验的某个 Trunk 口 PVID 没改回来。实验环境可以随意折腾,但每轮开始前清一次配置,能帮你把注意力集中在当前实验本身,而不是被历史遗留问题带走。这个习惯,到了真实设备操作时,能救命。
