Cisco IOSでQ-in-Qを設定する

この記事は約7分で読めます。

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を付与していることがわかる。

R1⇒R3へのPing

R2⇒R4へのPingも同様に、R2が生成したC-VLAN10に対してSW1がS-VLAN200を付与している。

R2⇒R4へのPing

Q-in-Qを使用することにより(キャリアが契約回線単位でS-VLANを付与することにより)、使用するVLANやプライベートIPアドレスが重複していても、通信が混ざることなく通信できることがわかる。

以上

コメント

タイトルとURLをコピーしました