在Linux中用nmcli配置带VLAN子接口的虚拟化桥接网络,本质是构建物理网卡→VLAN子接口→网桥→虚拟机/容器的三层嵌套结构,实现单物理端口承载多隔离二层网络,适用于KVM、Docker等场景。

在 Linux 中用 nmcli 配置“带 VLAN 子接口的虚拟化桥接网络”,本质是构建一个三层嵌套结构:物理网卡 → VLAN 子接口 → 网桥 → 虚拟机/容器。这种结构让单个物理端口能承载多个隔离的二层网络,特别适合 KVM、Docker 或 OpenStack 等场景。
确认基础支持与环境准备
确保系统已启用 VLAN 和 NetworkManager 持久化能力:
- 加载
8021q内核模块:sudo modprobe 8021q,并写入/etc/modules或/etc/modules-load.d/vlan.conf保证开机加载 - 安装必要工具:
sudo dnf install -y NetworkManager-vlan vlan ethtool(RHEL/Rocky)或sudo apt install -y vlan network-manager-dev(Debian/Ubuntu) - 检查物理网卡状态:
nmcli device status,确认目标接口(如eno1)处于connected或disconnected状态,但未被其他活跃连接占用
创建 VLAN 子接口并绑定到网桥
不要直接把物理网卡加进网桥;先建 VLAN 接口,再将其作为从属设备加入网桥:
- 添加 VLAN 连接(例如 VLAN ID 100):
sudo nmcli connection add type vlan con-name vlan100 dev eno1 id 100 - 禁用该 VLAN 接口的 IP 自动获取(避免冲突):
sudo nmcli connection modify vlan100 ipv4.method disabled ipv6.method ignore - 创建网桥(如
br-vlan100):sudo nmcli connection add type bridge con-name br-vlan100 ifname br-vlan100 stp no - 将 VLAN 接口设为网桥的从属设备:
sudo nmcli connection add type bridge-slave con-name vlan100-slave ifname eno1.100 master br-vlan100
注意:eno1.100 是 NetworkManager 自动创建的内核 VLAN 设备名,无需手动用 ip link add 创建。
配置网桥的网络参数与启用流程
网桥本身需要承担三层出口角色,因此要为其分配 IP 并启用 DHCP 或静态路由:
- 设置 IPv4 方式(如使用 DHCP):
sudo nmcli connection modify br-vlan100 ipv4.method auto - 若需静态地址:
sudo nmcli connection modify br-vlan100 ipv4.addresses "192.168.100.10/24" ipv4.gateway "192.168.100.1" ipv4.dns "8.8.8.8" ipv4.method manual - 关闭原物理连接(如 “Wired connection 1”):
sudo nmcli connection down "Wired connection 1" - 启用新桥接连接:
sudo nmcli connection up br-vlan100
执行后可通过 ip a show br-vlan100 和 bridge link 验证桥接关系与端口状态。
在虚拟化平台中使用该桥接网络
以 KVM libvirt 为例,虚拟机 XML 中指定桥接设备即可获得 VLAN 隔离的直通网络:
- 编辑虚拟机网络配置:
<interface type='bridge'><source bridge='br-vlan100'/><model type='virtio'/></interface> - 确保宿主机防火墙放行对应 VLAN 流量(如
firewalld中添加br-vlan100到 trusted zone) - 验证:启动虚拟机,在其内部配置同网段 IP(如
192.168.100.100/24),应能与宿主机br-vlan100地址互通,且无法跨 VLAN 通信(除非有三层路由)
该结构天然实现二层隔离——不同 VLAN 的虚拟机即使连在同一物理网卡上,也无法直接二层通信,满足多租户或业务分区需求。


















