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 功能,
img

## 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 直接透传
img
img

其他接入方式

上面提到了QinQ只是给数据外加上一层 802.1Q tag,没有状态信息发布给其他网络设备或者终端,其他可以添加tag的技术(比如 vlan 映射)给数据包添加多层Ethernet tag也是可以的,vlan 映射的1:2 方式可以更灵活的配置策略,可以为不同的 C-VLAN 配置不同的 S-VLAN;灵活 QinQ 是基于 QoS 流分类的 QinQ 策略,可以实现更精细的分类。

img

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接入模式两种。

  1. VLAN接入模式
    在该模式下,从本地站点接收到的和发送给本地站点的以太网帧必须带有VLAN Tag。
    VTEP从本地站点接收到以太网帧后,删除该帧的所有VLAN Tag,再转发该数据帧;
    VTEP发送以太网帧到本地站点时,为其添加本地站点的VLAN Tag。
    采用该模式时,VTEP不会传递VLAN Tag信息,不同站点可以独立地规划自己的VLAN,不同站点的不同VLAN之间可以互通。

  2. 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
img

在 Link A 处抓包,只有request,没有回包
arp表项是在上面配置时候学习到的,变更配置后arp表相没有老化。
img

在 Link B 处抓包,双向都有,由于 PE2 不能正确转发回包,数据无法在 Link A 处出现。
img

对于这种单向通信的场景,通常是由于安全策略,或者类似这种往返vlan 不一致导致的,PVLAN 环境下也会有类似情况。

posted @ 2024-11-25 11:13  bfhyqy  阅读(45)  评论(0编辑  收藏  举报