【テクニカル・上級編】 IEEE 802.1ad(Q-in-Q / 802.1Qトンネリング)のフレーム構造とTPIDの役割 – インフラ・物理&L2/L3ネットワーク基礎実践ガイド

剥き出しのEthernetに「もう一枚の皮」を:IEEE 802.1ad (Q-in-Q) が担う現代のトンネリング美学

ネットワークエンジニアの諸君、今日もパケットの断末魔(ドロップ)に頭を悩ませているだろうか。

現代のデータセンターやキャリア網において、L2網の拡張性は永遠の課題だ。VLAN IDの枯渇問題、あるいはマルチテナント環境における「顧客VLANの隠蔽」という要件に対し、我々が持ち出す最終兵器が IEEE 802.1ad、いわゆる Q-in-Q である。

今日は、教科書を閉じて、この「二重タギング」の深淵に潜ってみよう。なぜ 0x8100 ではなく 0x8a88 なのか。そして、なぜこれが単なる「タグの詰め込み」以上の意味を持つのかを紐解く。

—

1. パケット構造の解剖:802.1Q vs 802.1ad

通常の 802.1Q(Dot1Q)では、EtherTypeとして 0x8100 が使用される。だが、プロバイダ網において顧客の 802.1Q フレームをそのままカプセル化しようとすると、スイッチのASICは「内側のタグ」を誤認し、レイヤ2ループやMACアドレステーブルの汚染を引き起こす。

ここで登場するのが 0x8a88(Service Tag / S-Tag)だ。

[ DMAC | SMAC | TPID(0x8a88) | TCI | TPID(0x8100) | TCI | EtherType | Payload ... ]
                 ^^^^^^^^^^^^^       ^^^^^^^^^^^^^
                 S-Tag (外側)        C-Tag (内側/顧客)

この 0x8a88 を受け取ったスイッチは、これを「ネットワーク制御用」と見なし、内側の 0x8100 を単なるデータの一部として透過的に扱う。この「タグの分離」こそが、キャリアイーサネットの信頼性を担保する生命線だ。

—

2. 実装の現場:LinuxカーネルでのQ-in-Q構築

仮想化サーバーやNFV(Network Functions Virtualization)環境でQ-in-Qを扱う際、iproute2 を用いた構成は非常にエレガントだ。以下の例は、物理インターフェース eth0 上にS-Tagとして VLAN 100 を、その内側に顧客の VLAN 200 を乗せる設定である。

# 1. S-Tag用インターフェースの作成(TPID 0x8a88を指定)
ip link add link eth0 name eth0.100 type vlan proto 802.1ad id 100

# 2. 内側のC-Tag用インターフェースをS-Tagインターフェースに紐付け
ip link add link eth0.100 name eth0.100.200 type vlan proto 802.1Q id 200

# 3. リンクの有効化
ip link set up eth0
ip link set up eth0.100
ip link set up eth0.100.200

ここで重要なのは、proto 802.1ad を明示することだ。これを忘れるとデフォルトの 0x8100 が使われ、対向のスイッチと「タグの解釈」で不一致が起き、パケットがブラックホールに消える。

—

3. パフォーマンスとセキュリティの深層

Q-in-Q環境におけるパフォーマンスチューニングで避けて通れないのが、MTU(Maximum Transmission Unit)のオーバーヘッドだ。

二重タグによってヘッダーが4バイト増える。もし顧客が標準の1500バイトを送り込んできたら、外側のタグが付与された時点で1504バイトとなり、物理ポートのMTU設定が標準のままだと破棄される。

トランスポート層への影響と最適化

特に TLS ハンドシェイクを行う際、パケットサイズがギリギリの環境では断片化(Fragment)が多発し、RTT(Round Trip Time)が悪化する。

1. MTUの調整: ip link set mtu 1504 dev eth0 のように、S-Tag分のオーバーヘッドを必ず加算する。
2. MSS Clamping: TCPの SYN パケットを監視し、MSS(Maximum Segment Size)を調整することで、ネットワーク機器のバッファ溢れを防ぐ。

# iptablesでMSSを強制的に1456にクランプする(1504 - 20 - 20 - 8)
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1456

—

4. セキュリティの死角:MACアドレステーブル汚染

Q-in-Qを採用する最大の理由は「顧客分離」だが、設定ミスは致命的だ。もしプロバイダ側のスイッチで TPID のフィルタリングが不十分だと、顧客が故意に 0x8a88 を付与したパケットを送り、プロバイダ網のコアを越境する「VLANホッピング攻撃」が可能になる。

鉄則:

  • TPIDの厳密な指定: エッジポートでは、顧客からの 0x8a88 パケットを必ず拒否する(Drop)設定を行うこと。
  • BPDU Guardの徹底: Q-in-Q越しに顧客のSTP(Spanning Tree Protocol)BPDUが流れてこないよう、ポート単位で BPDU Guard を有効にする。

—

結びに:プロトコルの美学

ネットワークとは、結局のところ「いかにヘッダーを制御し、宛先に真実を届けるか」という芸術だ。0x8a88 という小さな4バイトの魔法は、インターネットという広大な迷宮において、我々に「テナント」という概念を具現化させてくれる。

だが忘れないでほしい。どんなに高度なプロトコルも、パケットの先にあるのは「ユーザーの体験」だ。MTUの計算一つ、MSSのチューニング一つで、エンドユーザーのWeb閲覧の体感速度は変わる。

諸君、今夜も tcpdump を片手に、パケットの行方を見守ろうではないか。そのヘッダーの向こう側に、エンジニアとしての誇りがあるはずだ。

コメント

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