QinQ 笔记
QinQ 笔记
QinQ 技术是在 4096 个 vlan 不够使用的情况下非常符合直觉的解决方案,通过多层 802.1Q Tag 扩展 vlan ;实现起来也简单,甚至可以和不支持QinQ功能的网络设备对接,同时不影响数据的转发。
企业网络中单个园区 4096 个vlan大多数情况是够用的,但是如果是涉及到多园区互联或者运营商环境,4096 就有些捉襟见肘了,QinQ直接采用多层802.1q tag方式扩展,其中内层叫C-VLAN(Customer Vlan)外层叫S-VLAN(Service Vlan),使得逻辑上可以有 4096*4096 个广播域可用。
Ethernet Frame 中 type 字段对于不同的上层协议有不同的 id(EthernetType),比如:0x0800
是 IPv4,0x8100
是802.1Q VLAN-tagged frame ,0x8863
是 PPPoE;QinQ 其实没有定义单独的ID,也就是说 QinQ 没有被视作一种独立的协议,而是把它作为一类的Tagged vlan 数据处理。从这个角度看,QinQ 是一种以太网补丁或者说是对 Ethernet Frame 的官方 Hack 行为,有过渡意义,没有也不会大力发展。
QinQ 功能仅仅是在接口的入方向根据策略给进入的帧打上相应的tag,没有额外的控制信息产生。可以说 QinQ 这个概念是 local 的,仅是描述了给Ethernet Frame 外层添加上tag;如果设备本身没有防呆校验,其实通过 qinq 接口可以给数据包添加多个tag(现今设备基本都有防呆校验,只允许 Ethernet Frame 最多两层 802.1Q tag);
H3C 设备通过vlan mapping 方式可以添加到三层tag。
实验
实验使用H3C HCL 模拟器中的 S6850 完成;
PE1/2 模拟运营商的接入设备,CE1/2 模拟两个院区,Internet 不启用 QinQ 功能,
## CE1 ##
sysname CE1
#
lldp global enable
#
vlan 100
vlan 200
vlan 3000
#
interface Vlan-interface100
ip address 192.168.100.1 255.255.255.0
#
interface Vlan-interface200
ip address 192.168.200.1 255.255.255.0
#
interface Vlan-interface3000
ip address 192.168.3.1 255.255.255.0
#
interface GigabitEthernet1/0/1
port link-mode bridge
port link-type trunk
undo port trunk permit vlan 1
port trunk permit vlan 100 200 3000
combo enable fiber
## 启用LLDP nearest-customer agent 方便观察到对端customer
lldp agent nearest-customer admin-status txrx
## CE2 ##
sysname CE2
#
lldp global enable
#
vlan 100
vlan 200
vlan 3000
#
interface Vlan-interface100
ip address 192.168.100.2 255.255.255.0
#
interface Vlan-interface200
ip address 192.168.200.2 255.255.255.0
#
interface Vlan-interface3000
ip address 192.168.3.2 255.255.255.0
#
interface GigabitEthernet1/0/1
port link-mode bridge
port link-type trunk
undo port trunk permit vlan 1
port trunk permit vlan 100 200 3000
combo enable fiber
lldp agent nearest-customer admin-status txrx
#
## PE1 ##
sysname PE1
#
## 为了 Customer 的 LLDP agent 能够发现对方 Customer,开启 Service Bridge 模式。
lldp mode service-bridge
lldp global enable
#
vlan 1000
vlan 3000
#
interface GigabitEthernet1/0/1
port link-mode bridge
port link-type trunk
undo port trunk permit vlan 1
port trunk permit vlan 1000 3000
port trunk pvid vlan 1000
## 用户以不同的VLAN接入到同一个端口时,QinQ会为所有用户的VLAN报文都添加相同的外层VLAN Tag,即端口缺省VLAN的Tag。
qinq enable
## 透明透传 vlan 3000,不封装qinq外层tag。
qinq transparent-vlan 3000
combo enable fiber
#
interface GigabitEthernet1/0/2
port link-mode bridge
port link-type trunk
undo port trunk permit vlan 1
port trunk permit vlan 1000 3000
combo enable fiber
#
## PE2 ##
sysname PE2
#
lldp mode service-bridge
lldp global enable
#
vlan 1000
vlan 3000
#
interface GigabitEthernet1/0/1
port link-mode bridge
port link-type trunk
undo port trunk permit vlan 1
port trunk permit vlan 1000 3000
port trunk pvid vlan 1000
qinq enable
qinq transparent-vlan 3000
combo enable fiber
#
interface GigabitEthernet1/0/2
port link-mode bridge
port link-type trunk
undo port trunk permit vlan 1
port trunk permit vlan 1000 3000
combo enable fiber
#
## Internet ##
sysname Internet
#
lldp mode service-bridge
lldp global enable
#
vlan 1000
#
vlan 3000
#
interface GigabitEthernet1/0/1
port link-mode bridge
port link-type trunk
undo port trunk permit vlan 1
port trunk permit vlan 1000 3000
combo enable fiber
#
interface GigabitEthernet1/0/2
port link-mode bridge
port link-type trunk
undo port trunk permit vlan 1
port trunk permit vlan 1000 3000
combo enable fiber
抓包
c-vlan 100/200 双层tag,vlan 3000 直接透传
其他接入方式
上面提到了QinQ只是给数据外加上一层 802.1Q tag,没有状态信息发布给其他网络设备或者终端,其他可以添加tag的技术(比如 vlan 映射)给数据包添加多层Ethernet tag也是可以的,vlan 映射的1:2 方式可以更灵活的配置策略,可以为不同的 C-VLAN 配置不同的 S-VLAN;灵活 QinQ 是基于 QoS 流分类的 QinQ 策略,可以实现更精细的分类。
vlan 映射 1:2 方式添加tag
下面的配置方式和上述的配置实现上述相同功能
## PE1/2 ##
interface gigabitethernet 1/0/1
vlan mapping nest single 100 nested-vlan 1000
## Hybrid端口且允许VLAN 100的报文不携带VLAN Tag通过,即出的时候剥离外层tag。
## 由于可以将不同c-vlan映射为不同s-vlan所以接口要使用 Hybrid 类型,使得多种 s-vlan tag 均可以在接口出方向剥离;如果仅有一个s-vlan 使用trunk + pvid方式也可以。
port link-type hybrid
port hybrid vlan 1000 untagged
port hybrid vlan 3000 tagged
灵活QinQ
灵活 QinQ (这是华为和华三的叫法)和常规的没有本质区别,区别在于接入策略更灵活,常规 QinQ 进能够封装默认s-vlan tag ,即使使用 vlan 映射方式也只能基于 c-vlan tag 做策略,而灵活 QinQ 能够匹配分类等更多参数:
如下使用H3C S6850 示范:
## 基于traffic classifier ##
## 基于不同内层tag分配不通外层tag
traffic classifier aaa operator or
if-match service-vlan-id 100 200
traffic behavior aaa
nest top-most vlan-id 1000
qos policy nest
classifier aaa behavior aaa
intface GigabitEthernet 1/0/1
port link-type hybrid
port hybrid vlan 1000 untagged
qos apply policy aaa inbound
## 基于更多流分类
traffic classifier bbb operator and
if-match destination-mac 0001-0001-0001
if-match source-mac 0002-0002-0002
if-match protocol ipv6
if-match not control-plane protocol telnet
traffic behavior bbb
nest top-most vlan 1000
qos policy bbb
classifier bbb behavior bbb
intface GigabitEthernet 1/0/1
port link-type hybrid
port hybrid vlan 1000 untagged
qos apply policy bbb inbound
l2vpn 环境下AC QinQ 接入(仅演示接入部分)
在 service instance 中封装多次vlan tag
#
undo vxlan ip-forwarding
#
l2vpn enable
#
vsi aaa
vxlan 10000
tunnel x
#
vsi bbb
vxlan 20000
tunnel x
## 接入(入向数据为tagged)
interface GigabitEthernet1/0/1
port link-mode bridge
port link-type trunk
undo port trunk permit vlan 1
port trunk permit vlan 100 200
service-instance 1
encapsulation s-vid 100 # 匹配条件
rewrite inbound tag nest s-vid 1000 # 入向由匹配条件过滤,打上外层tag
rewrite outbound tag strip s-vid # 出向删除来自vsi aaa 帧的外层tag
xconnect vsi aaa access-mode ethernet
service-instance 2
encapsulation s-vid 200 # 匹配条件
rewrite inbound tag nest s-vid 1000
rewrite outbound tag strip s-vid
xconnect vsi bbb access-mode ethernet
## 接入(入向数据为untag)
interface GigabitEthernet1/0/1
port link-mode bridge
service-instance 1
encapsulation s-vid 1 # 1 代表 untagged
rewrite inbound tag nest s-vid 1000 c-vid 100 # 封装双重tag
rewrite outbound tag remark 2-to-1 c-vid 1 # 出向remark tag 为一层,1代表无tag,即出向无tag
xconnect vsi aaa access-mode ethernet
## QinQ 互联接口(入向数据为 QinQ)
interface GigabitEthernet1/0/2
port link-mode bridge
port link-type trunk
undo port trunk permit vlan 1
port trunk permit vlan 1000
service-instance 1
encapsulation s-vid 1000 c-vid 100 # 匹配条件
xconnect vsi aaa access-mode ethernet
service-instance 2
encapsulation s-vid 1000 c-vid 200 # 匹配条件
xconnect vsi bbb access-mode ethernet
以下参考来自H3C文档
接入模式分为VLAN接入模式和Ethernet接入模式两种。
VLAN接入模式
在该模式下,从本地站点接收到的和发送给本地站点的以太网帧必须带有VLAN Tag。
VTEP从本地站点接收到以太网帧后,删除该帧的所有VLAN Tag,再转发该数据帧;
VTEP发送以太网帧到本地站点时,为其添加本地站点的VLAN Tag。
采用该模式时,VTEP不会传递VLAN Tag信息,不同站点可以独立地规划自己的VLAN,不同站点的不同VLAN之间可以互通。Ethernet接入模式
在该模式下,从本地站点接收到的和发送给本地站点的以太网帧可以携带VLAN Tag,也可以不携带VLAN Tag。
VTEP从本地站点接收到以太网帧后,保持该帧的VLAN Tag信息不变,转发该数据帧;
VTEP发送以太网帧到本地站点时,不会为其添加VLAN Tag。
采用该模式时,VTEP会在不同站点间传递VLAN Tag信息,不同站点的VLAN需要统一规划,否则无法互通。
出接口不启用QinQ -- 单向通信
## PE2 ##
sysname PE2
#
lldp mode service-bridge
lldp global enable
#
vlan 1000
vlan 3000
#
interface GigabitEthernet1/0/1
port link-mode bridge
port link-type trunk
undo port trunk permit vlan 1
port trunk permit vlan 1000
port trunk pvid vlan 1000
## 删除qinq相关配置
##
#
interface GigabitEthernet1/0/2
port link-mode bridge
port link-type trunk
undo port trunk permit vlan 1
port trunk permit vlan 1000
combo enable fiber
#
在 CE1 上 ping CE2
在 Link A 处抓包,只有request,没有回包
arp表项是在上面配置时候学习到的,变更配置后arp表相没有老化。
在 Link B 处抓包,双向都有,由于 PE2 不能正确转发回包,数据无法在 Link A 处出现。
对于这种单向通信的场景,通常是由于安全策略,或者类似这种往返vlan 不一致导致的,PVLAN 环境下也会有类似情况。