QinQ 筆記

bfhyqy發表於2024-11-25

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 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;

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 -- 單向通訊

## 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,沒有回包
img

在 Link B 處抓包,雙向都有,由於 PE2 不能正確轉發回包,資料無法在 Link A 處出現。
img

這種方式可以用於組播這種單向通訊的方式。