こんにちは。インフラアーキテクトの私です。
Web APIの設計やモダンなクラウドインフラの構築において、私たちは日々「アプリケーション層」のセキュリティに頭を悩ませています。WAFの導入、JWTによる認証認可、レートリミット……。しかし、どれほど上位レイヤーを堅牢に固めても、足元であるレイヤー2(L2)の足回りがガラ空きだったとしたらどうでしょう?
特に、同一セグメント(同一VLAN)内に信頼性の異なる複数のサーバーやテナントが混在する環境、あるいはマルチテナント型の仮想化基盤において、「L2のブロードキャストドメインは共有したいが、意図しない端末間の通信(横方向の移動:Lateral Movement)は完全に遮断したい」という要件は、実務の現場で幾度となく直面する難題です。
今回は、このL2のセキュリティを美しく、かつハードウェアレベルで解決する技術「プライベートVLAN(Private VLAN: PVLAN)」のアーキテクチャについて、パケットの挙動から実務での設定例、そして現場で役立つデバッグの勘所まで、徹底的に解説していきたいと思います。
—
1. プライベートVLANとは何か? なぜ標準VLANでは不十分なのか
通常のIEEE 802.1Q VLANは、ブロードキャストドメインを分割するための強力なツールです。しかし、一つのVLANを切ってしまうと、その中に入ったホスト同士はL2(MACアドレスベース)で自由にお見合い(通信)ができてしまいます。
「WebサーバーからDBサーバーへは通信させたいが、同一セグメントにぶら下がる別のWebサーバー同士や、検証環境の踏み台サーバー同士が通信するのはセキュリティ上、絶対に許容できない」
このようなケースで、従来のVLANだけでこれを実現しようとすると、サーバー1台ごとにVLANを切り、ルーターやレイヤー3スイッチで細かくACL(アクセスコントロールリスト)を書くという、運用地獄が待っています。IPアドレスの枯渇も早まりますし、何よりルーティングを挟むことで無駄なオーバーヘッドが生じます。
そこで登場するのが Private VLAN です。PVLANは、1つのVLAN(Primary VLAN)を内部的に細分化し、スイッチのポート単位で通信の可視性を物理/論理的に制御します。VLANIDの枯渇に悩むことなく、同一サブネット内でのL2アイソレーションを完全に担保できるのが最大の魅力です。
—
2. PVLANの3つのポート役割とアーキテクチャ
PVLANを理解するための鍵は、VLANを「Primary VLAN(プライマリVLAN)」と「Secondary VLAN(セカンダリVLAN)」の2つに分解し、スイッチのポートに以下の3つの「役割(Role)」を割り当てることにあります。
[External Router / Gateway]
| (Promiscuous Port)
+---------------------------------------+
| Primary VLAN |
| |
| +-----------------+ +------------+ |
| | Isolated Port | | Community | |
| | (Web Node A) | | Port Group | |
| +-----------------+ +------------+ |
| (互いに通信不可) (グループ内のみ可)|
+---------------------------------------+
① プロミスキュアスポート(Promiscuous Port: Pポート)
- 役割: プライマリVLANに所属し、他のすべてのポート(アイソレーテッド、コミュニティ)と通信が可能です。
- 実務での用途: ルーター、ファイアウォール、あるいは全サーバーのトラフィックを収容するアップリンクやゲートウェイに接続されるポートです。外の世界と内側の隔離された世界を繋ぐ「玄関口」として機能します。
② アイソレーテッドポート(Isolated Port: Iポート)
- 役割: セカンダリVLAN(Isolated VLAN)に所属するポートです。徹底的な「孤立」を強制されます。
- 実務での用途: 同じIsolatedポート同士の通信は、同一スイッチ内であっても完全にブロックされます。 通信が許されるのは、プロミスキュアスポート(ゲートウェイ)との間だけです。マルチテナント環境の各顧客サーバーや、踏み台として外部公開されるWebフロントエンドなど、「お互いの存在すら知られたくない(横の繋がりを絶ちたい)」サーバー群を収容するのに最適です。
③ コミュニティポート(Community Port: Cポート)
- 役割: セカンダリVLAN(Community VLAN)に所属するポートです。同じコミュニティに属するポート同士の通信は許可されますが、他のコミュニティポートやアイソレーテッドポートとは通信できません。
- 実務での用途: 例えば、同じWebアプリケーションクラスターに属する複数のノード間ではキャッシュの共有やInternalな通信が必要だが、別のプロジェクトのWebサーバー群とは完全に切り離したい、といった「グループ単位での協調動作」が必要な場合に用います。
—
3. 実機(Cisco Catalyst系スイッチ)での設定例
それでは、シスコシステムズのCatalystスイッチを想定した具体的なコンフィギュレーションを見ていきましょう。現場でそのままコピー&ペーストして使えるよう、コメント付きで記述します。
今回は以下の構成を想定します。
- Primary VLAN:
100(プライマリ) - Isolated VLAN:
101(セカンダリ / 孤立用) - Community VLAN:
102(セカンダリ / コミュニティ用) GigabitEthernet0/1: ルーター接続(Promiscuous)GigabitEthernet0/2: 孤立させたいWebサーバーA(Isolated)GigabitEthernet0/3: 孤立させたいWebサーバーB(Isolated)GigabitEthernet0/4: クラスタ用サーバーC(Community)GigabitEthernet0/5: クラスタ用サーバーD(Community)
! --- 1. VLANの作成とプライマリ・セカンダリの紐付け ---
vlan 100
name PVLAN-PRIMARY-100
private-vlan primary
vlan 101
name PVLAN-ISOLATED-101
private-vlan isolated
vlan 102
name PVLAN-COMMUNITY-102
private-vlan community
! --- 2. プライマリVLANにセカンダリVLANを関連付け ---
vlan 100
private-vlan association 101,102
! --- 3. プロミスキュアスポートの設定 (ルーター接続) ---
interface GigabitEthernet0/1
description === Uplink to L3 Gateway ===
switchport mode private-vlan promiscuous
switchport private-vlan mapping 100 add 101,102
no shutdown
! --- 4. アイソレーテッドポートの設定 (Webサーバー群) ---
interface range GigabitEthernet0/2 - 0/3
description === Isolated Web Servers ===
switchport mode private-vlan host
switchport private-vlan host-association 100 101
no shutdown
! --- 5. コミュニティポートの設定 (クラスタサーバー群) ---
interface range GigabitEthernet0/4 - 0/5
description === Community Cluster Servers ===
switchport mode private-vlan host
switchport private-vlan host-association 100 102
no shutdown
この設定により、Gi0/2とビミョーに通信させたくないGi0/3は、同じサブネット(プライマリVLAN 100の範囲)にありながら、L2レイヤーで完全に隔離されます。 pingを打っても応答はなく、ARPすら解決しません。
—
4. トラブルシューティングとデバッグの勘所
PVLANは強力ですが、設計や運用の現場では「あれ、通信できないはずのポート間で通信できてしまう」「アップリンクのルーターでパケットがループする」といったハマりどころが存在します。シニアエンジニアが現場で使うデバッグコマンドと確認のポイントを伝授します。
トラブル1: Isolatedポート同士なのに通信できてしまう?
- 原因と確認: スイッチのVTPモードが
transparentになっていない、あるいはセカンダリVLANのマッピングが正しく同期されていないケースが多いです。 - 確認コマンド:
# PVLANの全体像とマッピングが正しく意図通りか確認する
show vlan private-vlan
このコマンドで、Primaryに正しいSecondaryがぶら下がっているか、ポートが正しくアサインされているかを必ず確認してください。
トラブル2: 外部(ルーター)との通信ができない
- 原因と確認: プロミスキュアスポート側のマッピング(
switchport private-vlan mapping)で、許可すべきセカンダリVLANがaddされているかを確認します。ここが抜けていると、ゲートウェイからの戻りパケットがスイッチでドロップされます。 - 確認コマンド:
# 特定のインターフェースのPVLANステータスを詳細表示
show interfaces GigabitEthernet0/1 switchport
出力結果の中に Operational Mode: private-vlan promiscuous と表示されていること、およびマッピングリストに期待するセカンダリVLANが含まれていることをチェックします。
—
5. まとめ:モダンインフラにおけるPVLANの価値
クラウド環境(AWSのVPCやGCPのVPCなど)が当たり前になった現代、物理スイッチを直接叩く機会は減ったかもしれません。しかし、オンプレミスのハイパーバイザー基盤(VMware ESXiの vNetwork Distributed Switch など)や、セキュアなベアメタルサーバーのマルチテナント収容においては、今なおPVLANの概念は生き続けています(VMwareの世界ではこれを「Private VLAN」または「PVLAN」としてそのまま実装しています)。
APIサーバーやマイクロサービス群を安全に配置するための土台として、L2レベルでのトラフィック制御の引き出しをどれだけ持っているか。それが、障害に強く、監査要件にも一発でクリアできるインフラエンジニアの強みとなります。
ネットワークの奥底でパケットがどのように曲がり、どこでドロップされるのか。その「見えない道筋」を頭の中に描きながら、ぜひ皆さんの設計現場にもPVLANを取り入れてみてください。
コメント