虚拟化环境的 VLAN 落在哪一层
在虚拟化主机上,VLAN 标记由虚拟交换机在端口组或虚拟网卡上完成,物理交换机只负责把带标签的流量透传过去。因此同一批 VLAN 需要在三处对齐:虚拟交换机的 VLAN 配置、主机物理上行口的 Trunk 放行列表、物理交换机的放行列表。任何一处对不上,症状都是「虚机网卡看起来正常但完全不通」。
基本信息
| ESXi 语义 | VLAN ID 0 不标记,1-4094 由虚拟交换机打标签,4095 为全中继 |
|---|---|
| Hyper-V | Set-VMNetworkAdapterVlan 的 Access 与 Trunk 模式 |
| KVM/Linux | Linux bridge 的 VLAN 过滤规则 |
| 物理侧前提 | 上行口为 Trunk,且放行了全部需要的 VLAN |
ESXi VLAN ID 语义
| VLAN ID | 模式 | 说明 |
|---|---|---|
| 0 | 无标记 | 物理口需为 Access 或对应 native VLAN |
| 1-4094 | 虚拟交换机打标签 | 物理口需放行对应 VLAN |
| 4095 | 全中继 | 虚机自行打标签,物理口需为 Trunk |
典型使用场景
- 新建端口组时确认 VLAN ID 与物理上行放行列表一致
- 虚机迁移到其他物理主机前,核对目标主机的上行是否放行同一批 VLAN
- 虚拟防火墙或软路由需要全中继时,使用 4095 并保持物理口为 Trunk
- 排查虚机不通:先看虚拟交换机配置,再看物理上行与物理设备的放行列表
- 双上行链路场景中,确认两块物理网卡上的 VLAN 放行列表一致
配置核对
配置核对
esxcli network vswitch standard portgroup list # ESXi:查看端口组与 VLAN ID
esxcli network vswitch standard portgroup set -p VLAN100 -v 100 # 设置端口组 VLAN
# Hyper-V:接入模式(等价于虚拟交换机打标签)
Set-VMNetworkAdapterVlan -VMName web01 -Access -VlanId 100
# Hyper-V:中继模式(等价于全中继)
Set-VMNetworkAdapterVlan -VMName fw01 -Trunk -AllowedVlanIdList 100,200 -NativeVlanId 1
# KVM:在 Linux bridge 上放行指定 VLAN
bridge vlan add dev eth0 vid 100Hyper-V 与 KVM 侧的思路与 ESXi 一致:Access 对应不打标签或少打标签,Trunk 对应全中继。核对时以物理上行口的放行列表为准,虚拟侧只决定标签由谁打。
全中继模式(ESXi 的 4095、Hyper-V 的 Trunk)下标签由虚机自己封,主机与物理交换机都不再校验 VLAN。这类端口一旦接到不该接的 VLAN 上,隔离边界会被绕过,需要与安全策略一并确认。