nmcli 配置 VLAN 子接口必须先用 nmcli con add type vlan 显式创建并托管 VLAN 连接(如 vlan100),再配 IP 和 autoconnect;直接使用内核生成的 eno1.100 会导致桥接失败、DHCP 异常或 MAC 学习错误。

用 nmcli 配置带 VLAN 标签的虚拟化子接口(即 VLAN 子接口),关键不是“直接加标签”,而是让 NetworkManager 完整托管 VLAN 设备本身——它必须是显式创建的连接(connection),而不是靠内核命令临时生成的接口。否则,后续绑定桥接、DHCP 获取、MAC 学习都会出问题。
先确保基础支持就绪
检查 8021q 模块是否已加载:
- 运行 lsmod | grep 8021q,无输出则需执行 sudo modprobe 8021q
- 为永久生效,把 8021q 写入 /etc/modules(Debian/Ubuntu)或 /etc/sysconfig/modules/vlan.modules(RHEL/Rocky)
- 确认已安装 vlan 工具包:sudo apt install vlan 或 sudo dnf install vlan
用 nmcli 创建 VLAN 子接口连接
这是最易错的一步:不能用 ip link add 或 vconfig 临时建好 eno1.100 就去调用 nmcli,NetworkManager 必须“认识”这个接口。
- 假设物理口是 eno1,要建 VLAN ID 100 的子接口,运行:
sudo nmcli con add type vlan con-name vlan100 ifname eno1.100 dev eno1 id 100 - 给它配静态 IP(示例地址):
sudo nmcli con mod vlan100 ipv4.addresses 192.168.100.10/24
sudo nmcli con mod vlan100 ipv4.gateway 192.168.100.1
sudo nmcli con mod vlan100 ipv4.method manual - 或设为 DHCP:
sudo nmcli con mod vlan100 ipv4.method auto - 启用自动连接(重启后仍生效):
sudo nmcli con mod vlan100 connection.autoconnect yes
启用并验证 VLAN 接口
启用后,接口名(eno1.100)才真正被 NM 管理,ip link show eno1.100 应显示 UP 状态,且 cat /proc/net/vlan/config 能查到对应条目。
- 启动连接:sudo nmcli con up vlan100
- 查看状态:nmcli con show vlan100 和 nmcli device show eno1.100
- 若失败,检查日志:journalctl -u NetworkManager -n 50 --no-pager,常见错误是物理口被其他连接占用(如 “Wired connection 1”),需先 nmcli con down "Wired connection 1"
对接虚拟化场景(如 KVM 桥接)
若目标是供虚拟机使用,通常需将该 VLAN 接口作为 slave 加入网桥(而非直接给虚拟机用 eno1.100):
- 新建网桥:sudo nmcli con add type bridge con-name br-vlan ifname br-vlan
- 添加 VLAN 接口为从属:sudo nmcli con add type bridge-slave con-name br-vlan-slave ifname eno1.100 master br-vlan
- 配置网桥 IP(可选,取决于是否需宿主机通信):
sudo nmcli con mod br-vlan ipv4.method auto - 启用网桥:sudo nmcli con up br-vlan
此时虚拟机网络设备可直连 br-vlan,流量经该桥转发至 eno1.100,并携带 VLAN 100 标签进出交换机 trunk 口。


















