交换机之间带VLAN的通信,是所有网络运维和数通初学者绕不开的问题。在单台交换机上划分VLAN、配置Access口,很多人能很快完成;一旦改成两台交换机互联,就很容易出现跨交换机同VLAN主机互相不通、Trunk看起来配对了但Ping不通、三层VLANIF地址配了却无法访问其他VLAN等奇怪现象。大多数问题的根源并不在某个孤立端口,而在VLAN标记(Tag)、Trunk允许列表、PVID(Port-based VLAN ID)以及三层网关这几层规则没有配合好。
本文从二层入手,用华为eNSP模拟两台交换机互联,先让两个VLAN跨交换机互通,再通过三层交换机实现VLAN间通信。配置过程中会解释Access与Trunk的本质区别、PVID对Untagged帧的影响,并给出从物理端口到三层路由的排查链路。读完可以独立完成多交换机VLAN互联的配置,也能针对“同VLAN不通、跨VLAN不通”快速定位原因。
1. 先理解VLAN通信的两种场景和一条Trunk链路上的关键规则
1.1 单台交换机划分VLAN时,通信规则到底是什么
VLAN可以把一台物理交换机划分成多个互相隔离的二层广播域。设备加入VLAN后,交换机会在MAC地址表和转发逻辑上给数据帧打上VLAN标签,转发只在相同VLAN的端口之间进行。这里的“隔离”是二层隔离:不同VLAN的帧不会互相广播,也不会直接转发。
在这种场景里,一个Access端口只属于一个VLAN。进入Access口的普通以太网帧没有VLAN标签,交换机会按该端口所属VLAN处理。所以Access端口上“允许通过VLAN列表”不是重点,“这个口属于哪个VLAN”才是重点。VLAN 10里的PC1与同交换机下的PC2通信,走的是二层交换路径,不需要配置网关。
1.2 跨交换机通信为什么会把问题放大
当两台交换机用一条物理链路互联,而这条互联链路上同时承载VLAN 10和VLAN 20时,问题就不再是“一个口属于哪个VLAN”,而是“一条链路上怎么能让多个VLAN的数据同时通行且互不混淆”。
答案依赖IEEE 802.1Q。交换机在把数据帧发送到Trunk链路之前,会在以太网头部加入VLAN Tag,用于标识这个帧属于哪个VLAN;对端交换机根据Tag知道该帧应该进入哪个VLAN,再转发给对应Access端口时,把Tag去掉。这样一条物理链路就能同时传输多个VLAN的数据。
1.3 真正决定通信结果的三个规则
- Tagged:帧带VLAN标签。
- Untagged:帧不带标签。
- PVID:端口对无标签帧默认划分到的VLAN。
Access口发出去的帧通常是Untagged,因为它面向终端设备。Trunk口除了Native VLAN(本征VLAN)对应的帧外,其他VLAN的帧通常是Tagged。PVID决定了一个无标签帧进入端口后会被划分到哪个VLAN,也决定Trunk口上哪个VLAN以Untagged方式发送。
| 端口类型 | 入方向无标签帧 | 出方向行为 | 典型场景 |
|---|---|---|---|
| Access | 归入PVID,PVID等于default vlan | 无标签出 | 接PC、服务器、AP |
| Trunk | 归入PVID,默认PVID=1 | VLAN 1默认无标签出,放行的其他VLAN打标签出 | 交换机互联、上行核心 |
| Hybrid | 归入PVID | 按用户配置决定打标或不打标 | 灵活业务口,如同时接用户和上行 |
实际故障中,很多问题都出在这三个规则的组合。比如Trunk两端PVID不一致时,无标签帧会被错误划分到另一个VLAN;Trunk没有放行业务VLAN时,再正确的Access配置也无法跨交换机转发。
2. 搭建实验环境:两台交换机、两个VLAN、一条Trunk
2.1 用eNSP搭建拓扑
学习环境推荐使用eNSP。它模拟华为VRP命令行,帮助在没有真实交换机的情况下验证VLAN、Trunk和VLANIF配置。不同系列设备、不同版本命令存在差异,落地真实设备前先确认设备型号和命令兼容性。
实验拓扑设计如下:
- LSW1:承担三层网关,配置VLANIF 10和VLANIF 20。
- LSW2:作为接入交换机,只做二层转发。
- PC1:接LSW1 GE0/0/1,属于VLAN 10。
- PC3:接LSW1 GE0/0/2,属于VLAN 20。
- LSW1 GE0/0/0与LSW2 GE0/0/0互联,配置为Trunk。
- PC2:接LSW2 GE0/0/1,属于VLAN 10。
- PC4:接LSW2 GE0/0/2,属于VLAN 20。
| 设备 | 端口 | 连接对象 | 端口类型 | VLAN |
|---|---|---|---|---|
| LSW1 | GE0/0/1 | PC1 | Access | VLAN 10 |
| LSW1 | GE0/0/2 | PC3 | Access | VLAN 20 |
| LSW1 | GE0/0/0 | LSW2 GE0/0/0 | Trunk | 放行VLAN 10、20 |
| LSW2 | GE0/0/1 | PC2 | Access | VLAN 10 |
| LSW2 | GE0/0/2 | PC4 | Access | VLAN 20 |
| LSW2 | GE0/0/0 | LSW1 GE0/0/0 | Trunk | 放行VLAN 10、20 |
2.2 IP与VLAN规划
| VLAN ID | 网段 | PC地址 | 网关 |
|---|---|---|---|
| VLAN 10 | 192.168.10.0/24 | PC1 192.168.10.1,PC2 192.168.10.2 | 192.168.10.254 |
| VLAN 20 | 192.168.20.0/24 | PC3 192.168.20.1,PC4 192.168.20.2 | 192.168.20.254 |
网关只放在LSW1上。LSW2不配置VLANIF,也不把PC的网关指向LSW2。实际生产环境中,网关通常放在核心交换机或汇聚交换机上,接入层做二层转发。
2.3 端口类型规划:Access、Trunk分别在哪些位置
端口类型不是随便选的。面向PC、服务器、打印机这类终端设备的口,使用Access最合适,因为终端发出的帧不带Tag,也期望收到的帧不带Tag。交换机之间的互联口,如果需要同时承载多个VLAN,必须使用Trunk或Hybrid。Access口即使配置了port default vlan 10,也只能在一个VLAN内工作,无法把VLAN 10和VLAN 20同时传出去。
因此,这个实验里:
- PC侧全部用Access。
- LSW1与LSW2互联口全部用Trunk。
如果互联口误配成Access,VLAN 10可以通,VLAN 20一定不通,因为Access口只能承载一个VLAN。
2.4 为什么先规划再动手配置
很多人上来就敲配置,敲完发现各种不对。先规划端口类型和IP地址,可以把二层和三层分开验证:第一步只验证同VLAN跨交换机互通,第二步再打开VLAN间路由。先做第一步,如果不通就检查Trunk和Access;第一步通了再配置VLANIF,否则排查时会同时面对二层和三层的问题,多一层干扰。
注意:规划阶段可以画一张简单拓扑图,标记每条链路两端端口、端口类型、VLAN和IP。排障时这张图比记忆可靠得多。
3. Access与Trunk的配置逻辑:先让同一个VLAN跨交换机互通
3.1 设备基础配置:创建VLAN
在LSW1和LSW2上都创建VLAN 10、20。
LSW1:
system-view sysname LSW1 vlan batch 10 20LSW2:
system-view sysname LSW2 vlan batch 10 20sysname用于区分设备,尤其在查看日志和远程管理时,能直接知道当前操作的是哪一台设备。vlan batch 10 20一条命令创建多个VLAN,比逐条vlan 10、vlan 20更高效。
3.2 配置Access端口
LSW1上配置PC所属端口:
interface GigabitEthernet0/0/1 port link-type access port default vlan 10 quit interface GigabitEthernet0/0/2 port link-type access port default vlan 20 quitLSW2上配置对应端口:
interface GigabitEthernet0/0/1 port link-type access port default vlan 10 quit interface GigabitEthernet0/0/2 port link-type access port default vlan 20 quitAccess口只能属于一个VLAN。port default vlan 10定义了该端口的PVID,也决定Access口归属的VLAN。PC发出的帧无标签,进入端口后被分配VLAN 10,交换机根据MAC表把帧转发到目标端口,出Access口前去掉Tag。终端设备不感知VLAN Tag。
3.3 配置Trunk互联口
LSW1与LSW2的互联口GE0/0/0配置为Trunk:
interface GigabitEthernet0/0/0 port link-type trunk port trunk allow-pass vlan 10 20 quitLSW2同样配置:
interface GigabitEthernet0/0/0 port link-type trunk port trunk allow-pass vlan 10 20 quitport link-type trunk让端口进入Trunk模式。华为VRP中,Trunk口默认只放行VLAN 1,所以业务VLAN 10、20必须用port trunk allow-pass vlan 10 20显式放行。不同版本命令可能有差异,部分版本也支持port trunk allowed vlan 10 20,以设备帮助信息为准。
这里没有修改PVID,因此VLAN 1作为Native VLAN保持Untagged,VLAN 10、20在Trunk上以Tagged方式传输。
3.4 验证跨交换机同VLAN通信
启动设备后,先给PC配置IP。PC1地址192.168.10.1/24,PC2地址192.168.10.2/24,PC3地址192.168.20.1/24,PC4地址192.168.20.2/24。
在LSW1上执行:
display vlan display port vlan关注display port vlan的输出。正常结果是:GE0/0/0上VLAN 10、20为Tagged状态,GE0/0/1上VLAN 10为Untagged,GE0/0/2上VLAN 20为Untagged。如果GE0/0/0上业务VLAN显示为Untagged,说明PVID被修改过,需要重点检查。
然后测试:
- PC1 ping PC2,应该通。
- PC3 ping PC4,应该通。
- PC1 ping PC3,此时不通是正常的,因为还没有三层网关。
eNSP中刚启动设备时STP需要收敛,第一次ping超时非常常见。等接口状态稳定后再测试。
4. 通过三层交换机和VLANIF实现VLAN间通信
4.1 为什么二层交换机不能直接实现VLAN间通信
同一VLAN内的PC通信,依靠MAC地址表完成二层转发。不同VLAN间的PC要通信,数据帧的目标MAC地址不在本地二层域内,必须提交给网关做三层路由,再根据路由表决定从哪个VLAN转发出去。二层交换机没有路由能力,因此必须引入三层设备。
VLAN间路由也被称为路由VLAN。核心思路是给每个VLAN配置一个三层接口当作网关,三层设备根据目的IP做路由。实验中使用LSW1作为三层交换机,通过VLANIF实现。
4.2 在核心设备上创建VLANIF
在LSW1上执行:
interface Vlanif10 ip address 192.168.10.254 255.255.255.0 quit interface Vlanif20 ip address 192.168.20.254 255.255.255.0 quit然后给PC配置网关:
- PC1:192.168.10.254
- PC2:192.168.10.254
- PC3:192.168.20.254
- PC4:192.168.20.254
配置完成后,PC1与PC3之间应能通信。
4.3 VLANIF和物理端口的关系
VLANIF不是物理端口,而是逻辑接口。只要交换机上存在VLAN 10,并且至少有一个端口属于VLAN 10,VLANIF 10就能转发该VLAN的报文。VLANIF上的IP地址就是该VLAN内终端的网关。
这里有一个常见坑:LSW2也会学习到VLAN 10、20,如果为了“图方便”在LSW2上也配置VLANIF 10地址192.168.10.254,就会与LSW1的网关地址冲突。终端通过ARP学习网关MAC时,可能学到LSW2的MAC,也可能学到LSW1的MAC,结果是流量时通时断。
实际生产环境中,如果做双网关高可用,通常用VRRP或堆叠做主备,而不是简单地在两台设备上重复配置同一个IP。
4.4 关于port trunk pvid vlan的常见误区
网上经常能看到port trunk pvid vlan 10这类配置片段。它到底做什么?
PVID作用于Trunk口识别无标签帧。默认所有端口PVID都是1,Trunk口把VLAN 1作为Native VLAN,出口不打Tag。如果执行port trunk pvid vlan 10,那么这个Trunk口收到无标签帧后归入VLAN 10,并且VLAN 10的帧从该口输出时不再打Tag。
这会导致两个后果:
- 对端Trunk口如果PVID仍是1,收到这些不带Tag的VLAN 10帧后,会当成VLAN 1的帧处理,VLAN归属直接错乱。
- 如果两端都改成pvid vlan 10,VLAN 10帧在Trunk上全部不打Tag,抓包时看到VLAN 10流量没有Tag,和预期不符。
注意:在没有明确Native VLAN需求时,不建议随意修改Trunk的PVID。如果确实要改,至少保证链路两端PVID一致,并且不要把需要跨交换机传输的业务VLAN设为PVID。
4.5 验证VLANIF和VLAN间路由
在LSW1上执行:
display vlan brief display ip interface brief ping -a 192.168.10.254 192.168.20.1display ip interface brief可以看到VLANIF 10和VLANIF 20的IP地址和UP状态。display vlan brief可以看到VLAN状态为Enable。然后从PC1 ping PC3,结果应该通。
有些资料会把命令记混写成display int vlan brief。华为VRP中更常见的查看三层接口命令是display ip interface brief,查看VLAN状态是display vlan brief。不同设备版本存在差异,无法确认命令时可以使用display ?查看支持的命令列表。
5. 交换机带VLAN通信的排错链路
5.1 排错顺序:先二层后三层,先本端再对端
遇到带VLAN的通信问题,不建议随机敲命令。按以下顺序检查:
- 物理链路是否UP,双工和速率是否协商一致。
- 端口link-type是否两端一致。
- 两端Trunk放行的VLAN列表是否一致。
- Trunk的Tag/Untagged状态和PVID是否一致。
- 三层接口(VLANIF)是否创建,IP是否正确。
- 终端IP、掩码、网关是否正确。
- 路由表、ACL和安全策略是否放行。
先确认二层问题,再查三层。如果PC1 ping PC3不通,直接去查ACL,很可能前面的Trunk根本没放行VLAN 20,只会白费时间。
5.2 场景一:同交换机下能通,跨交换机同VLAN不通
现象:PC1 ping PC2不通,但PC1 ping LSW1下其他同VLAN设备能通。
可能原因:
- 互联口被误配成Access,无法承载多个VLAN。
- Trunk没放行VLAN 10。
- 对端Trunk放行列表不一致。
- 线缆接错端口或接口没有UP。
- STP阻塞了互联端口。
检查命令:
display interface GigabitEthernet0/0/0 display port vlan display stp brief处理方式:
- 确认互联口是Trunk,并执行port trunk allow-pass vlan 10 20。
- 两端放行列表必须一致。
- STP收敛需要时间,如果端口一直阻塞,检查是否存在环路。不要为解决问题直接关闭STP,生产环境下关闭STP风险很高。
5.3 场景二:VLANIF配置了,跨VLAN还是不通
现象:同VLAN互通正常,但PC1 ping PC3不通。
按下面顺序检查:
- 先ping自己的网关192.168.10.254。不通说明二层或VLANIF有问题。
- 再ping LSW1上的VLANIF 20地址192.168.20.254。不通说明VLANIF20或VLAN20三层转发有问题。
- 最后ping PC3地址192.168.20.2。不通检查PC3网关是否配置正确。
常见原因包括:
- PC没有配置网关。
- LSW1不是三层交换机,不支持VLANIF。
- VLANIF 20没有创建。
- 中间接入层设备把Tag剥掉,导致VLAN归属变化。
- 设备间使用Access口互联,VLAN 20流量无法穿过链路。
- ACL或安全策略拦截了VLAN间的报文。
5.4 场景三:PVID不一致导致的Tag/Untagged错乱
现象:Trunk抓包时看到VLAN 10的帧没有Tag,或者对端交换机把VLAN 10流量当成VLAN 1处理。
原因:一端Trunk执行了port trunk pvid vlan 10,另一端没有;或者两端PVID配置不一致。
检查方式:display port vlan,关注Untagged列。正常情况下,Trunk放行的业务VLAN应该是Tagged,只有VLAN 1或人为设置为Native VLAN的VLAN是Untagged。
处理建议:
- 两端PVID保持一致。
- 不要把业务VLAN设为PVID。
- 如果必须使用不同Native VLAN,要做好这条链路两侧的流量隔离,不要混用业务VLAN。
5.5 场景四:核心交换机Telnet正常,PC远程登录却失败
这个场景在真实运维中很典型:从核心交换机Telnet任何一台接入交换机都正常,但从某个PC远程登录就失败。
排查方向:
- 管理VLAN是否可达。管理地址所在VLAN的VLANIF是否配置了路由,Trunk是否放行了该管理VLAN。
- PC与管理VLAN是否在同一广播域或同一路由域。
- 远程管理服务是否启用了源地址白名单策略。ACL如果只允许管理网段访问,PC所在业务VLAN自然会被拒绝,这属于安全策略设计,不是配置错误。
远程管理服务本来就应当只对管理网段开放。确认管理面ACL、SSH或Telnet服务和VTY权限即可。不要为了“让PC能登录”而放宽所有源地址限制。
5.6 通用排错表
| 问题现象 | 常见原因 | 验证命令 | 解决方向 |
|---|---|---|---|
| 同VLAN跨交换机不通 | Trunk未放行该VLAN | display port vlan | 两端加入allow-pass |
| 业务VLAN抓包无Tag | 该VLAN成为Native VLAN | display port vlan、抓包 | 恢复PVID一致 |
| 跨VLAN不通 | 缺VLANIF或网关错误 | display ip interface brief、ipconfig | 创建VLANIF并配网关 |
| 时通时断 | STP收敛、环路、双工不匹配 | display stp brief、display interface | 检查环路和链路协商 |
| 远程管理失败 | ACL限制、管理VLAN不可达 | display acl、display ip routing-table | 按源地址放行或修正路由 |
6. 生产环境建议、快速参考与扩展方向
6.1 学习环境与生产环境的差异
eNSP中配置成功,不代表生产环境可以原样照搬。真实交换机还要关注以下几点:
- 生成树协议:Trunk链路上要确认STP不会阻塞。存在环路风险时,端口全部放行后,一个广播帧可能在环路里反复复制,引发广播风暴。
- 链路冗余:单条Trunk是单点,建议用Eth-Trunk(链路聚合)承载VLAN,提高带宽,同时保证链路可靠性。
- 三层架构:接入层通常只做二层,网关放在核心交换机。不要在每台接入交换机上都配置同一网段的VLANIF。
- 安全策略:VLAN间通信、远程管理都要有ACL策略,不能只依赖VLAN做隔离。
- 配置备份:操作前保存当前配置、备份版本文件,配置错误时能够回滚。
保存配置命令:
save6.2 参数快速参考表
| 功能 | 华为VRP常用命令 | 作用 |
|---|---|---|
| 创建多个VLAN | vlan batch 10 20 | 一次性创建VLAN 10、20 |
| Access口划入VLAN | port link-type access / port default vlan 10 | 端口归属VLAN 10 |
| Trunk口放行VLAN | port link-type trunk / port trunk allow-pass vlan 10 20 | Trunk承载VLAN 10、20 |
| 设置Trunk PVID | port trunk pvid vlan 10 | 设置无标签帧默认VLAN |
| 创建VLANIF | interface Vlanif10 / ip address ... | 创建三层网关 |
| 查看VLAN状态 | display vlan brief | 确认VLAN存在且端口已加入 |
| 查看端口VLAN | display port vlan | 确认Tag/Untagged状态 |
| 查看三层接口 | display ip interface brief | 确认VLANIF状态和IP |
不同厂商设备命令不同。锐捷、思科等设备的命令关键字和查询方式有差异,但Access/Trunk/PVID的处理逻辑一致。切换厂商设备前,先查看对应厂商文档。
6.3 发布前检查清单
- [ ] 所有互联口两端link-type一致。
- [ ] Trunk两端放行VLAN列表一致。
- [ ] Trunk两端PVID一致,业务VLAN保持Tagged。
- [ ] VLANIF只在一台三层设备配置,或按高可用方案统一配置。
- [ ] 终端PC地址、掩码、网关正确。
- [ ] 路由可达,ACL放行必要流量。
- [ ] STP状态正常,无环路。
- [ ] 配置已保存,版本有备份。
6.4 扩展方向
带VLAN的通信不只在传统交换机里出现。后续可以围绕下面几个方向继续深入。
基于IP子网的VLAN划分:不按端口划分VLAN,而是根据报文源IP自动分类,适合终端频繁移动的场景。
虚拟化与容器网络:K8s中Multus多网络插件会创建多套网络接口,不同Pod可以挂到不同VLAN或叠加网络,底层依然依赖VLAN Tag完成隔离。
分布式交换机:在虚拟化环境中,分布式交换机把多台宿主机虚拟端口统一管理,VLAN策略集中在控制面维护,转发面在各宿主机实现。
多VLAN网卡:让一块物理网卡同时承载多个VLAN,通常做法是在Linux上配置VLAN子接口或把网卡加入桥接设备后打Tag,适合虚拟化宿主机和带VLAN的业务服务器。
单臂路由与VRRP:如果只有二层交换机,VLAN间通信可以通过路由器子接口完成,也就是路由器上创建多个子接口分别对应不同VLAN并做802.1Q封装,这是理解“VLAN Tag在路由场景下如何再打标和剥标”的好实验。
要从根本上掌握交换机之间的VLAN通信,关键不是背命令,而是建立一条判断链路:先确认一根物理链路上的数据帧如何打Tag、Trunk放行了哪些VLAN、无标签帧归到哪个VLAN,再进入三层路由。把本文的Trunk实验完整做完后,建议用Wireshark或eNSP自带抓包功能抓一次Trunk链路,亲眼对比VLAN 10和VLAN 20帧的Tag差异。理解了这个过程,后面再学VRRP双网关、Eth-Trunk、虚拟化多VLAN,都会顺畅很多。