#
interface GigabitEthernet1/0/1
port link-mode bridge
port link-type trunk
port trunk permit vlan 1 20
qinq enable
vlan mapping untagged nested-outer-vlan 20 nested-inner-vlan 10
combo enable fiber
#端口配置如上,接口进来的报文不带任何标签,希望用vlan mapping0:2模式在这个接口打上双层标签,但是配置上之后抓包看,并没有打上标签。如何解决,求大神解答
H3C 交换机 vlan‑mapping 0:2(untagged 报文打双层标签)不生效排查
需求:接口收到untagged(无标签)报文,直接封装外层 VLAN20 + 内层 VLAN10,生成双层标签报文出去。
你当前命令:
plaintext
vlan mapping untagged nested‑outer‑vlan 20 nested‑inner‑vlan 10
现象:untagged 进来,抓包看到依旧不带标签,双层标签没有打上。
核心问题 1:配置语法错误(最主要原因)
vlan mapping untagged nested‑outer‑vlan X nested‑inner‑vlan Y 这条不是 0:2 映射的正确写法。
0:2含义:收到不带标签 (0 标签)报文,转换输出两层标签 (2 层)。
正确命令格式(QINQ 接口下做 0‑to‑2 映射):
shell
# 在G1/0/1接口视图
vlan mapping 0 nested‑outer‑vlan 20 nested‑inner‑vlan 10
❌错误:vlan mapping untagged nested‑outer‑vlan 20 nested‑inner‑vlan 10
✅正确:vlan mapping 0 nested‑outer‑vlan 20 nested‑inner‑vlan 10
注意关键字:不是untagged,匹配无标签报文用数字0。
untagged关键词用于替换已有 untagged‑vlan,不是匹配入站无标签报文,很多人踩这个坑。
修改之后完整接口参考配置
shell
interface GigabitEthernet1/0/1
port link‑mode bridge
port link‑type trunk
port trunk permit vlan 1 20
qinq enable
# 0 = 匹配入站不带标签报文;输出外层20,内层10双层标签
vlan mapping 0 nested‑outer‑vlan 20 nested‑inner‑vlan 10
combo enable fiber
核心问题 2:接口 PVID 干扰(非常容易忽略)
接口是 trunk,默认 PVID=1。
当收到 untagged 帧,交换机首先会把 untagged 帧划归 PVID 所属 VLAN,再去匹配 vlan‑mapping。
如果 PVID=1,untagged 报文先被打上 VLAN1 单层标签,此时报文已经不是 0 标签,你的vlan mapping 0 ...就匹配不到,映射失效!
两种处理方案(二选一)
方案 A:修改本接口 PVID 为不在业务使用的 VLAN,同时 trunk 允许该 PVID 通过
shell
port trunk pvid vlan 4094
port trunk permit vlan 4094
vlan mapping 0 nested‑outer‑vlan 20 nested‑inner‑vlan 10
untagged 进来,不会被识别为 VLAN1,报文保持 0 标签,才能命中vlan mapping 0规则。
⚠️重点原理:
Trunk 口收到 untagged 帧处理顺序:
匹配 PVID,给报文打上 PVID 标签;
之后再执行 vlan‑mapping/QinQ 动作。
所以如果 PVID=1,入 untagged 报文立刻变成 VLAN1 单层标签,0 标签消失,0:2 映射完全不会触发。
方案 B:如果你不想改 PVID,可以改成1:2 映射:匹配 PVID 的 VLAN1 单层标签报文转换成双层标签 20 (外)/10 (内)
shell
# 入站带VLAN1标签,转换成外层20,内层10
vlan mapping 1 nested‑outer‑vlan 20 nested‑inner‑vlan 10
但是这个不能处理真正完全 untagged 原始报文,不适合你的需求。
检查确认命令
shell
display current‑configuration interface GigabitEthernet 1/0/1
display vlan‑mapping interface GigabitEthernet 1/0/1
display qinq interface GigabitEthernet 1/0/1
display vlan‑mapping interface输出里要看到 0 --> nested‑outer 20 nested‑inner 10,才代表 0‑to‑2 映射加载成功。
其它约束条件(不满足也会失效)
接口必须配置 qinq enable,已经配置没问题;
接口模式必须 bridge 二层,不能 route 三层;
接口 trunk 必须允许映射生成的外层 VLAN 通过,你配置port trunk permit vlan 1 20,外层 vlan20 已经放行没问题;
不要同时配置 dot1q termination;vlan‑mapping 与终结不能混用;
本功能需要硬件芯片支持,部分老款芯片不支持 0‑to‑2 双层映射,如果配置下发成功但是抓包依旧无双层标签,说明硬件不支持 0:2。
排错步骤总结
把错误的 vlan mapping untagged ... 删除,替换为 vlan mapping 0 nested‑outer‑vlan 20 nested‑inner‑vlan 10
修改接口 trunk pvid vlan 4094,同时 port trunk permit vlan 4094
display vlan‑mapping interface确认映射表项加载
测试抓包,看报文是否携带两层标签:外层 vid 20,内层 vid10
补充反向:2‑to‑0(剥双层标签)
如果后续需要对端接口收到双层标签剥掉全部标签,命令:
shell
vlan mapping nested‑outer‑vlan 20 nested‑inner‑vlan 10 0
常见误区提醒:很多文档示例写vlan mapping untagged,这个是用于基于 untagged vlan 做替换,不是匹配入站无标签报文,匹配入站不带标签报文必须用数字0。
亲~登录后才可以操作哦!
确定你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作
举报
×
侵犯我的权益
×
侵犯了我企业的权益
×
抄袭了我的内容
×
原文链接或出处
诽谤我
×
对根叔社区有害的内容
×
不规范转载
×
举报说明
把qinq enable删掉