スイッチポートの裏側:アクセスポートとトランクポートが織りなすVLANの魔法
こんにちは、インフラアーキテクトのシニアエンジニアです。
Web APIの設計やモダンなクラウドインフラの構築に日々奔走しているあなたなら、「VLAN(Virtual LAN)」という言葉を無視することはできないでしょう。アプリケーション層やAPIがどれほど美しく設計されていても、その下を支える物理・レイヤー2ネットワークの挙動が怪しければ、システム全体がスローダウンしたり、謎のパケットロスに悩まされたりします。
今回は、スイッチングハブの根幹をなす「アクセスポート」と「トランクポート」の動作原理について、パケットの動きを追いながら徹底的に解説します。教科書通りの「タグを付ける・外す」という説明だけでなく、実際の現場で遭遇するトラブルシューティングの勘所も含めてお伝えしましょう。
—
1. なぜVLANとポートの区別が必要なのか?
現代のネットワークにおいて、物理的なスイッチを部署やシステムごとに何台も用意するのは、コストの無駄であり運用上の悪夢です。1台の物理スイッチの中に論理的なネットワークを複数構築し、それぞれを完全に隔離するのがVLANの目的です。
しかし、異なるVLANに属する端末同士が通信するには、ルーターを介したL3ルーティングが必要です。ここで問題になるのが、「1本の物理ケーブル(リンク)で、どうやって複数のVLANに属するフレームを識別して流すのか?」という点です。
これを解決するのが、IEEE 802.1Q規格に基づく「タグ付きフレーム」であり、そのフレームをさばくのがアクセスポートとトランクポートの役割分担なのです。
—
2. アクセスポートとトランクポートの基本概念
まずは、それぞれのポートがフレームに対してどのような責任を持つのかを整理しておきましょう。
アクセスポート(Access Port)
- 対象: エンド端末(PC、IP電話、ベアメタルサーバー、ハイパーバイザーの物理NICなど)が接続されるポート。
- 挙動: 原則としてタグなし(Untagged)フレームのみを扱います。
- 処理:
- 受信時:タグなしフレームを受け取り、ポートに割り当てられたVLAN ID(PVID: Port VLAN ID)の内部タグを付与してスイッチ内部へ送り出します。
- 送信時:自VLANのタグを剥ぎ取り、純粋なタグなしフレームとして端末へ送り出します。
トランクポート(Trunk Port)
- 対象: スイッチ同士、あるいはスイッチとルーター、仮想化基盤のトランク用仮想スイッチが接続されるポート。
- 挙動: 複数VLANのタグ付き(Tagged)フレームを多重化して送受信します。
- 処理:
- 受信時:IEEE 802.1Qの4バイトのタグを読み取り、指定されたVLANにフレームを転送します。(※例外的に設定によりタグなしフレームを受け取る「ネイティブVLAN」の概念もあります)
- 送信時:フレームに適切なVLAN IDのタグを付与したまま対向へ送り出します。
—
3. パケットの旅:IEEE 802.1Q タグの仕組み
ここで、イーサネットフレームの構造とIEEE 802.1Qタギングの挙動を確認しておきましょう。
通常のイーサネットフレーム(Ethernet II)の中に、L2スイッチが宛先を判断するための「VLAN ID」を挟み込むのが802.1Qの仕組みです。Source MACとType/Lengthの間に、TPID(0x8100)とTCI(Tag Control Information:PRI, DEI, VLAN IDを含む12ビットの識別子)の合計4バイトが挿入されます。
[標準イーサネットフレーム]
+-------------------+-------------------+-------------------+-------------------+
| Dest MAC (6Bytes) | Source MAC (6Bytes) | Type / Len (2Bytes) | Payload ... |
+-------------------+-------------------+-------------------+-------------------+
[802.1Q タグ付きフレーム]
+-------------------+-------------------+-----------------+-----------------+-------------------+-------------------+
| Dest MAC (6Bytes) | Source MAC (6Bytes) | TPID (0x8100) | TCI (VLAN ID等) | Type / Len (2Bytes) | Payload ... |
+-------------------+-------------------+-----------------+-----------------+-------------------+-------------------+
トランクポートを通過するパケットには必ずこの4バイトのタグが存在し、アクセスポートから外へ出ていく(あるいは入ってくる)瞬間に、このタグが着脱されます。この「見えないところでタグを付け外しするマジック」こそが、L2スイッチの真骨頂です。
—
4. 実際のネットワーク機器設定例(Cisco IOS)
実務で最も遭遇するCisco Catalystシリーズを例に、アクセスポートとトランクポートの設定を見ていきます。インフラエンジニアとして、設定の意図をコメントに残す習慣を忘れないようにしましょう。
! --- アクセスポートの設定 ---
! サーバーAが接続されているポート(VLAN 10に所属)
interface GigabitEthernet0/1
description === Web Server A (Access Port) ===
switchport mode access
switchport access vlan 10
spanning-tree portfast
no shutdown
! --- トランクポートの設定 ---
! アップリンクのL3スイッチやファイアウォールへ接続するポート
interface GigabitEthernet0/24
description === Uplink to Core Switch (Trunk Port) ===
switchport trunk encapsulation dot1q
switchport mode trunk
! セキュリティ上のベストプラクティス:不要なVLANの通過を制限する
switchport trunk allowed vlan 10,20,30
no shutdown
実務の現場からのTips:ネイティブVLAN(Native VLAN)の罠
トランクポートには「タグなしフレーム」をどのVLANとして扱うかを決めるネイティブVLANという概念があります。デフォルトではVLAN 1がネイティブVLANですが、セキュリティ(VLANホッピング攻撃の防止)の観点から、プロダクション環境では使用しないVLAN ID(例: vlan 999など)に変更し、さらにタグをつける設定(vlan dot1q tag native)を施すのがシニアエンジニアの常識です。
—
5. 障害シューティング:なぜ通信できないのか?
現場で最も多いL2トラブルの一つが、「物理リンクはUpしているのに、なぜかPingが通らない、APIの疎通ができない」という現象です。ここで、パケットキャプチャ(Wiresharkやtcpdump)を取ると、次のような原因が浮かび上がります。
トラブルケース:トランクのミスマッチ
対向するスイッチAとスイッチBの間で、ネイティブVLANのIDが一致していない場合や、一方のポートがアクセスポート、もう一方がトランクポートになっている場合、パケットはサイレントドロップ(ログに残らず破棄)されます。
# Pythonのscapy等を用いた簡単なL2パケット送受信テストの概念
# 実際にはインフラ層のデバッグではtcpdumpやWiresharkを用います。
from scapy.all import sniff, Ether, Dot1Q
def packet_callback(packet):
# パケットに802.1Qタグが付いているか(VLAN IDが乗っているか)をリアルタイムに確認
if packet.haslayer(Dot1Q):
print(f"[TAGGED] VLAN ID: {packet.vlan} | Src: {packet.src} -> Dst: {packet.dst}")
else:
print(f"[UNTAGGED] Src: {packet.src} -> Dst: {packet.dst}")
# インターフェースを指定してキャプチャ開始
print("Listening on trunk port interface...")
sniff(iface="eth0", prn=packet_callback, count=10)
もし、あなたが「トランクポートから送出されたはずのパケット」をキャプチャした際にタグが見当たらない、あるいは意図しないVLAN IDがついている場合、スイッチのコンフィグ(show interfaces trunkなど)を確認し、ポートモードとカプセル化方式(dot1q)を再チェックしてください。
—
まとめ
アクセスポートとトランクポートの挙動は、一見すると単純なスイッチの設定に見えますが、その裏ではIEEE 802.1Q規格に基づいた緻密なタグの付与・剥離が行われています。
- アクセスポートは、エンド端末のためにタグを隠蔽し、単一のVLAN世界を提供す る。
- トランクポートは、タグという「共通言語」を維持したまま、複数のVLANを1本の物理回線に相乗りさせる。
この基本原則を頭に叩き込んでおけば、クラウドの仮想ネットワーク(AWSのVPC、VLANインターフェース、KubernetesのCNIなど)の挙動を深く理解するための強固な土台となります。
トラブルシューティングの際は、焦らずパケットの「タグ」に着目してみてください。ネットワークの神様は、必ずその細部に宿っています。
コメント