在单物理网卡上划分多个隔离vlan子接口,核心是通过802.1q标签实现二层隔离:vconfig适用于无networkmanager的系统,仅创建带标签的虚拟设备;nmcli适用于启用networkmanager的现代系统,自动管理设备、ip及持久化;二者不可混用,且交换机端口必须配置为trunk并放行对应vlan id。

在单块物理网卡上划分多个隔离的VLAN子接口,核心是让同一物理链路承载不同VLAN ID的数据帧,并确保它们彼此二层隔离。vconfig 是传统工具,nmcli 是现代NetworkManager环境下的标准方式,二者适用场景不同,不能混用。
vconfig 创建 VLAN 子接口(适用于无 NetworkManager 的系统)
vconfig 本质是内核 802.1Q 模块的封装工具,只负责创建带 VLAN Tag 的虚拟设备,不处理 IP 或路由。
- 确认已安装并加载支持模块:运行 sudo modprobe 8021q;检查是否生效用 lsmod | grep 8021q
- 为 eth0 添加 VLAN 100:执行 sudo vconfig add eth0 100,生成接口 eth0.100
- 给该接口配置 IP 并启用:sudo ip addr add 192.168.100.10/24 dev eth0.100 && sudo ip link set eth0.100 up
- 验证:用 ip -d link show eth0.100 查看是否含 vlan id 100;用 ip addr show eth0.100 确认地址和 UP 状态
nmcli 配置 VLAN(适用于 CentOS/RHEL 7+、Ubuntu 18.04+、麒麟 V10 等启用 NetworkManager 的系统)
nmcli 不直接调用 vconfig,而是通过 NetworkManager 插件管理 VLAN 接口,自动处理模块加载、设备创建与地址分配,且支持开机自启。
- 先查主网卡名和当前连接名:nmcli device show 和 nmcli connection show
- 创建 VLAN 连接(例如基于 ens33 划分 VLAN 200):
sudo nmcli connection add type vlan con-name vlan200 dev ens33 id 200 - 配置 IPv4 地址和启用:
sudo nmcli connection modify vlan200 ipv4.method manual ipv4.addresses 192.168.200.5/24 ipv4.gateway 192.168.200.1
sudo nmcli connection modify vlan200 connection.autoconnect yes - 激活:sudo nmcli connection up vlan200
关键区别与注意事项
别名接口(如 eth0:0)不等于 VLAN 子接口——前者只是同网段多 IP,无标签;后者必须打 VLAN Tag,依赖交换机端口配置为 trunk 模式并放行对应 VLAN。
- vconfig 创建的接口名格式固定为 主设备名.VLAN_ID(如 eth0.100),重启后失效,需写入 /etc/sysconfig/network-scripts/ifcfg-eth0.100(RHEL系)或 /etc/network/interfaces(Debian系)实现持久化
- nmcli 创建的 VLAN 连接可直接通过 nmcli connection delete vlan200 删除,所有配置随连接一并清理,无需手动删文件
- 物理网卡本身(如 eth0)通常不配 IP,仅作“载体”;所有业务流量应走 VLAN 子接口,避免混用导致广播域混乱
交换机侧必须同步配置
VLAN 隔离生效的前提是网络路径两端都识别标签。若 Linux 侧已配好 eth0.100,但交换机连接端口仍是 access 模式且属于默认 VLAN,则数据包会被丢弃。
- 将连接 Linux 的交换机端口设为 trunk 模式
- 明确允许所需 VLAN ID(如 100、200)通过:switchport trunk allowed vlan 100,200
- 确保上联设备(如路由器或另一台交换机)也放行这些 VLAN,并有对应三层接口终结











