linux不原生支持nmcli配置q-in-q(802.1ad),需用nmcli管理第一层vlan(如ens3.200),再用ip link手动创建第二层qinq接口(如ens3.200.100 protocol 802.1ad),并通过systemd持久化,同时注意mtu、抓包验证及防火墙规则。

Linux 本身不直接通过 nmcli 原生支持 Q-in-Q(802.1ad)隧道模式,因为 NetworkManager(及其 nmcli 工具)长期仅原生支持单层 802.1Q VLAN(即 vlan 设备类型),不支持嵌套 VLAN 接口(如 eth0.100.200)或指定 protocol 802.1ad。这是由 NetworkManager 架构限制决定的——它未暴露 ip link add ... type vlan protocol 802.1ad 这一底层能力。
但你仍可在 NetworkManager 管理的系统中安全、可靠地实现 Q-in-Q 二层透传,关键是:用 nmcli 管理底层物理接口和第一层 VLAN,再用原生命令创建第二层 QinQ 接口,并确保 NetworkManager 不接管该接口。
以下是分步实操方案:
确保内核与基础支持就绪
- 内核 ≥ 3.10,已加载
8021q模块(lsmod | grep 8021q,无输出则运行sudo modprobe 8021q) -
iproute2版本 ≥ 4.0(ip -V查看,主流发行版均满足) - 物理网卡驱动支持硬件 VLAN offload(非必需,但推荐)
用 nmcli 配置第一层接入 VLAN(中间网络侧)
假设物理接口为 ens3,中间网络使用 VLAN ID 200:
# 禁用 NetworkManager 对 ens3 的自动 IP 配置(避免冲突) sudo nmcli connection modify "System ens3" ipv4.method disabled ipv6.method ignore # 创建第一层 VLAN 接口 ens3.200(用于接入运营商/骨干网) sudo nmcli connection add type vlan con-name "vlan200" dev ens3 id 200 sudo nmcli connection modify "vlan200" ipv4.method disabled ipv6.method ignore sudo nmcli connection up "vlan200"
此时 ens3.200 已存在,且 NetworkManager 管理它——这是安全的起点。
手动创建第二层 QinQ 接口(客户 VLAN 封装)
在 ens3.200 上叠加客户 VLAN(如 100),使用 802.1ad 协议:
# 创建 QinQ 接口:ens3.200.100,外层 200,内层 100,协议为 802.1ad sudo ip link add link ens3.200 name ens3.200.100 type vlan id 100 protocol 802.1ad # 启用该接口(二层透传无需 IP 地址) sudo ip link set ens3.200.100 up # (可选)启用 MAC 学习与泛洪(确保桥接或交换行为正常) sudo ip link set ens3.200.100 address $(cat /sys/class/net/ens3/address)
⚠️ 注意:NetworkManager 不会识别或管理
ens3.200.100。你需自行确保它开机启动,例如写入/etc/rc.local或创建 systemd service。
开机持久化 QinQ 接口(关键步骤)
NetworkManager 不管它,所以必须手动固化:
# 创建 systemd 单元文件 sudo tee /etc/systemd/system/qinq-ens3.200.100.service <h3>验证与排错要点</h3>
- 查看接口:
ip -d link show ens3.200.100→ 应显示vlan protocol 802.1ad - 抓包确认双标签:
sudo tcpdump -i ens3 -nn -e vlan and vlan,应看到两层802.1Q标签(实际 QinQ 使用802.1ad,但抓包仍显示为两个802.1Q字段) - MTU 调整:QinQ 增加 4 字节开销,建议将
ens3.200.100MTU 设为1500(若骨干网支持),并同步调整交换机端口 MTU ≥1504 - 防火墙:确保
iptables/nftables未过滤vlan类型报文(默认通常放行二层帧)
不复杂但容易忽略











