イーサネットの深淵:トランクとタグが織りなすパケットの「解釈学」
ネットワークエンジニアの諸君、今日もパケットの海を泳いでいるだろうか。
現代のネットワーク設計において、VLANは空気のように当たり前の存在だ。だが、その根幹である「トランクポート」と「アクセスポート」、そして「ネイティブVLAN」の振る舞いを、パケットレベルの解釈まで踏み込んで語れる者は意外に少ない。
今回は、スイッチというブラックボックスの中でパケットがどのように「タグ」を剥がされ、あるいは刻印され、そしてなぜネイティブVLANがセキュリティの穴になり得るのか、その深淵を覗いてみよう。
—
1. タグ付き vs タグなし:物理ポートの「境界線」
まず、スイッチのポートにおけるフレーム処理の基本を再定義する。アクセスポートとトランクポートの境界線は、単なる設定の差異ではない。それは、イーサネットフレームの「解釈ルール」そのものだ。
- アクセスポート (Access Port): このポートに到達するフレームは、本質的に「VLANの存在を知らない」ものだ。スイッチは ingress 時に PVID (Port VLAN ID) を付与し、内部で VLAN ID を紐付ける。そして egress 時には、そのタグを剥ぎ取り(Stripping)、再び VLAN の存在しない裸のフレームとして送り出す。
- トランクポート (Trunk Port): 802.1Q タグを維持したまま、複数の VLAN を多重化する。ここで重要なのは「フレームがタグを保持しているか否か」という状態管理だ。
ネイティブVLANという「例外」の正体
ここで多くのエンジニアが躓くのが「ネイティブVLAN (Native VLAN)」の挙動だ。IEEE 802.1Qにおいて、ネイティブVLANに属するフレームは「タグを付けずにトランクリンクを通過する」。
なぜこのような仕様が必要なのか? 歴史的には、VLAN非対応のレガシーデバイスとの互換性を保つためだ。しかし、この「タグなしフレームがトランクを流れる」という挙動は、パケット解析において致命的な曖昧さを生む。
2. セキュリティの死角:ネイティブVLANホッピング
このネイティブVLANの仕様は、攻撃者にとって格好の踏み台になる。いわゆる「VLANホッピング」攻撃だ。
攻撃者は、わざとネイティブVLANのタグを付与した「二重タグパケット」を送り込む。最初のスイッチは外側のタグを剥ぎ取り、ネイティブVLANへフレームを転送する。次のスイッチは残された内側のタグを見て、本来到達できないはずの管理用VLANへとパケットを流し込む。
防御策:
最も確実な対策は、ネイティブVLANを未使用のダミーVLANに設定し、かつトランクポート上で native vlan tag を強制することだ。Cisco IOSであれば、以下の設定が必須である。
# トランクポート設定のベストプラクティス
interface GigabitEthernet0/1
switchport trunk encapsulation dot1q
switchport mode trunk
# 未使用のVLANをネイティブとして割り当てる
switchport trunk native vlan 999
# ネイティブVLANのフレームにもタグを強制する(重要)
vlan dot1q tag native
3. パフォーマンスとTCPスタックの最適化
インフラアーキテクトとしては、このスイッチング処理が上位レイヤーに与える影響も無視できない。
トランクポートを通過する際、パケットサイズが4バイト(802.1Qタグ分)増加することに注意が必要だ。MTU(Maximum Transmission Unit)の設計が甘いと、微小なパケットサイズ超過により、トランクの先でフラグメンテーションが発生し、RTT(Round-Trip Time)が劇的に悪化する。
特に、TLS 1.3のハンドシェイク中にこの断片化が起きると、TCPの再送制御によってハンドシェイクの遅延が発生し、ユーザーの体感速度を大きく損なう。データセンターの構成では、トランクリンクの MTU は最低でも 1504 バイト以上(推奨は Jumbo Frame の 9000 バイト)を確保し、カーネルレベルで TCP バッファを最適化すべきだ。
# LinuxカーネルでのTCPバッファチューニング例
# ネットワーク帯域が太い環境でのスループット最大化
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216"
sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"
4. 結び:エンジニアの直観を磨く
パケットは嘘をつかない。スイッチの CLI が見せる表面的なステータスよりも、tcpdump や Wireshark で捉えた raw フレームが示す事実こそが、ネットワークの真実だ。
タグの付与・剥離という単純なプロセスの中に、ネットワーク全体のパフォーマンスとセキュリティの要諦が詰まっている。トランクポートの設定一つをとっても、「なぜその設定が必要なのか」というプロトコルの仕様(RFC 802.1Q)を理解していれば、盲目的な設定よりも遥かに堅牢なインフラを構築できるはずだ。
諸君、明日のトラブルシューティングでは、ぜひパケットの中身を覗き、その「タグ」の行方に思いを馳せてみてほしい。そこには、エンジニアとしての一歩先を照らすヒントが必ず隠されているはずだ。
コメント