Q-in-Q(IEEE802.1Q Tunneling)はVLANタグを2つ使用することで、同一のVLANタグを持つ顧客を別々の顧客として識別するための仕組みである。
構成図
上記構成図ではA社・B社が同じVLAN(VLAN10)を使用している。この例ではQ-in-Qを使用しなければA社・B社のトラフィックは混ざり合ってしまい(且つIPアドレスが重複してしまい)、通信できない。今回はSW1・SW3においてS-VLANを付与することにより、A社・B社のトラフィックを論理分割する。
エンドユーザが付与したタグVLANのことをC-VLAN(Customer VLAN)と呼ぶ。この例ではR1~R4はC-VLAN10を付与している。
キャリアが付与するタグVLANのことをS-VLAN(Service VLAN)と呼ぶ。この例ではSW1・SW3は、A社用にS-VLAN100、B社用にS-VLAN200を付与する。キャリア網内(SW2)ではC-VLANは参照せず、S-VLANのみを見てパケットをスイッチングする。SW1が付与したS-VLANはSW3が取り外して顧客に転送する。
使用する機器はCisco CMLを使用し、R1~R4:15.9(3)M4、SW1~SW3:15.2(20200924:215240)を使用する。
Q-in-Qの設定
Q-in-Qを設定する箇所はSW1,SW3(キャリアエッジ機器)のみとなる。
##### R1 #####
int gi0/0
no shut
int gi0/0.10
encapsulation dot1q 10
ip address 10.0.10.1 255.255.255.0
##### R2 #####
int gi0/0
no shut
int gi0/0.10
encapsulation dot1q 10
ip address 10.0.10.1 255.255.255.0
##### R3 #####
int gi0/0
no shut
int gi0/0.10
encapsulation dot1q 10
ip address 10.0.10.2 255.255.255.0
##### R4 #####
int gi0/0
no shut
int gi0/0.10
encapsulation dot1q 10
ip address 10.0.10.2 255.255.255.0
##### SW1 #####
vlan 100 <-----C-VLAN(VLAN10)の作成は不要。S-VLANのみ作成する。
name Customer_A
vlan 200
name Customer_B
int Gi0/1
switchport access vlan 100 <-----S-VLAN100を使用してQ-in-Q(dot1q-tunnel)でカプセル化
switchport mode dot1q-tunnel
int Gi0/2
switchport access vlan 200
switchport mode dot1q-tunnel
int Gi0/0
switchport trunk encapsulation dot1q
switchport mode trunk
##### SW2 #####
vlan 100
name Customer_A <-----キャリア網内ではC-VLANを参照しないため、C-VLAN(VLAN10)は作成不要。
vlan 200
name Customer_B
int range Gi0/0-1
switchport trunk encapsulation dot1q
switchport mode trunk
##### SW3 #####
vlan 100
name Customer_A
vlan 200
name Customer_B
int Gi0/0
switchport access vlan 100
switchport mode dot1q-tunnel
int Gi0/2
switchport access vlan 200
switchport mode dot1q-tunnel
int Gi0/1
switchport trunk encapsulation dot1q
switchport mode trunk
Q-in-Qの設定確認
Q-in-Qが有効なポートを確認するコマンド(S-VLANを付与するポートの確認)はshow dot1q-tunnelコマンドとなる。この例ではSW1のGi0/1, Gi0/2でQ-in-Qが有効であることがわかる。
SW1#show dot1q-tunnel
dot1q-tunnel mode LAN Port(s)
-----------------------------
Gi0/1
Gi0/2
上記コマンドではS-VLANの値がわからない。show int trunkコマンドを実行し、キャリア網内向けのTrunkリンクで有効にするS-VLANの値を確認する。
キャリア網内のTrunkリンクではOuter VLAN(S-VLAN)のみを識別する。Outer VLAN(S-VLAN)がallowedされていることと、Inner VLAN(C-VLAN)がallowdされていないことを確認する。
SW1#show int trunk
Port Mode Encapsulation Status Native vlan
Gi0/0 on 802.1q trunking 1
Port Vlans allowed on trunk
Gi0/0 1-4094
Port Vlans allowed and active in management domain
Gi0/0 1,100,200 <-----S-VLAN100,200が有効。C-VLAN10は存在しない。
Port Vlans in spanning tree forwarding state and not pruned
Gi0/0 1,100,200
実際にQ-in-Qが期待通りに動作していることを確認するには、疎通試験及びパケットキャプチャを実行するしかない。R1⇒R3、R2⇒R4に対してpingを実行し、SW1とSW2の間でICMPパケットをキャプチャする。
R1#ping 10.0.10.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.10.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/4/6 ms
⇒10.0.10.2はR2/R4が使用しているIPアドレスだが、アドレス重複することなくR2と通信できている。
R2#ping 10.0.10.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.10.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/4/5 ms
⇒10.0.10.2はR2/R4が使用しているIPアドレスだが、アドレス重複することなくR4と通信できている。
パケットキャプチャデータは以下の通り。R1⇒R3へのPingではR1が生成したC-VLAN10に対してSW1がS-VLAN100を付与していることがわかる。
R2⇒R4へのPingも同様に、R2が生成したC-VLAN10に対してSW1がS-VLAN200を付与している。
Q-in-Qを使用することにより(キャリアが契約回線単位でS-VLANを付与することにより)、使用するVLANやプライベートIPアドレスが重複していても、通信が混ざることなく通信できることがわかる。
以上
コメント