【図解】プライベートVLANの仕組みと動作~trunkの種類,Cisco/VMwareの設定,エッジ(protected)について~

プライベート VLAN とは

例えば以下のような NW 構成の VLAN があるとします。

この構成のまま、『PC 間の通信だけをブロックしたい(PC ⇔ プリンタ/NAS への通信はブロックしたくない)』という要件が出た場合、どのようにすればよいでしょうか。

やり方の 1 つとして、VLAN をデバイスの数だけ分割し、それに併せて NW アドレスも分割し、さらにコアスイッチで ACL による制御を行う、というのがあります。

ですがこれは非常に力任せで手間の掛かるやり方です。また、NW セグメントの消費も効率が悪くなります。

このようなケースでは『プライベート VLAN』でスマートに解決できます。

プライベート VLAN を使うと、PC 間の通信をブロックしつつ、必要に応じてプリンタや NAS 等の共有資産には全 PC がアクセス可とする設定が、『VLAN や NW セグメントを分割することなく』実現できます。

このように、プライベート VLAN とは 1 つの NW アドレスを効率的に利用しつつ、セキュリティを高めることができる技術なのです。

プライベート VLAN の概要

プライベート VLAN を使うためにはまず、『1 つのプライマリ VLAN』と、それに紐付く『複数のセカンダリ VLAN』を作ります。

プライマリ VLAN は 1 種類ですが、セカンダリ VLAN は『コミュニティ VLAN』と『隔離 VLAN』の 2 種類があります。

プライマリ VLAN がアサインされたポートを『混合ポート (無差別ポート, プロミスキャスポート)』、隔離 VLAN がアサインされたポートを『隔離ポート』、コミュニティ VLAN がアサインされたポートを『コミュニティポート』と呼びます。

VLAN の種類VLAN アサイン時
のポート名
効果
プライベート VLAN混合ポート
(Promiscuous Port,
無差別ポート)
混合ポート、
隔離ポート、コミュニティ
ポートの全てと通信可
セカンダリ
VLAN
隔離VLAN隔離ポート
(Isolated Port)
混合ポート
のみと通信可
コミュニティVLANコミュニティポート
(Community Port)
混合ポート
および同一コミュニティ
VLAN ID のポートと
通信可

混合ポートに接続された機器は、混合ポート、隔離ポート、コミュニティポート全てと通信ができます。

コミュニティポートに接続された機器は、自身と同じコミュニティ VLAN のポート、および、混合ポートと通信ができます。

隔離ポートに接続された機器は、混合ポートのみと通信ができます。

以下に一般的なプライベート VLAN の構成例と、各ポートでの通信可否を示します。

プライベート VLAN の仕組みと動作

プライベート VLAN は『1つの VLAN 内のブロードキャストドメインをさらに分割する技術』という解説もありますが、実は厳密には間違いです

プライベート VLAN は『MAC アドレステーブルによる、L2 アクセス制御を行う技術』です。

そしてそれを実現するために、以下のような特殊なことをしています。

  1. プライマリ VLAN、各セカンダリ VLAN は各々 MAC アドレステーブルを個別に持つ
  2. プライマリ VLAN とセカンダリ VLAN は互いに MAC アドレステーブルの学習情報を教え合う
  3. プライマリ VLAN は(通常の VLAN と異なり、)単方向通信となる
  4. 隔離 VLAN は送信専用となり、受信については全通信をブロックする

以下の構成例で具体的な仕組みを見ていきましょう。

まずはセカンダリ VLAN の MAC アドレステーブルの挙動です。コミュニティ VLAN 102 と隔離 VLAN 103 の PC の MAC アドレスが学習されたときは以下のようになります。

コミュニティ VLAN 102 のポート 3, 4 で MAC アドレスが学習されると、(通常の VLAN と同様)VLAN 102 の MAC アドレステーブルに『Dynamic』ステータスで学習されます。すると、プライマリ VLAN 100 の MAC アドレステーブルにもポート 3, 4 で『Dynamic pv』というステータスで通信可能な状態として学習情報がコピーされます。

隔離 VLAN 103 のポート 5, 6 で MAC アドレスが学習されると、VLAN 103 の MAC アドレステーブルにはポート 5,6での MAC アドレスが『BLOCKED(通信不可)』というステータスで学習されますが、プライマリ VLAN 100 の MAC アドレステーブルにはポート 5, 6 で『Dynamic pv』ステータスで通信可能な状態として学習情報がコピーされます。

次に、プライマリ VLAN の MAC アドレステーブルの挙動です。プライマリ VLAN 100 の NAS やプリンタの MAC アドレスが学習されたときは以下のようになります。

プライマリ VLAN 100 のポート 7, 8 で MAC アドレスが学習されると VLAN 100 の MAC アドレステーブルには『Dynamic』ステータスで学習されます。この情報はプロミスキャスポート同士の通信で使われます。

一方、この学習情報は関連付けされているセカンダリ VLAN にも反映されます。なので VLAN 102, 103 の MAC アドレステーブルにもポート 7, 8 の MAC アドレスが『DYNAMIC pv』ステータスで学習されます。

この学習により、隔離ポート/コミュニティポート⇒プロミスキャスポートの通信が可能となります。

特に、隔離ポートについては、送信は VLAN 103受信は VLAN 100 という、共に単方向通信となっていることに注意してください。

なお、ブロードキャスト、およびマルチキャストは MAC アドレスがユニキャストと異なるものの、『BLOCKED』ステータスのポートには通信ができません。

プライベート VLAN の trunk の種類

プライベート VLAN では trunk の種類が 2 種類あります。

1つ目は通常の trunk です。この設定ではセカンダリ VLAN ID (この記事の例だと 101, 102, 103) をそのままタグ付けして通信します。プライマリ VLAN も 100 のままタグ付けして通信します。この設定は主に接続先も同様のプライベート VLAN 設定が為されているときに使われます。

2つ目は trunk promiscuous です。この設定ではセカンダリ VLAN に入力され、プライマリ VLAN のポート (つまり混合ポート) から出力される際に、プライマリ VLAN に変換した上でタグ付けして通信します。この設定は主に接続先がプライベート VLAN を設定していない(設定できない)ときに使われます。

VMware の設定

VMware の仮想スイッチ (vSwitch/Distributed vSwitch) でもプライベート VLAN の利用が可能です。

vCenter 上の仮想スイッチのオブジェクトを選択し、中央ペインの『Configure』タブ、左ペインの『Private VLAN』を選択します。

初期状態は何もありません。『Add』をクリックします。

Primary VLAN ID を決めます。ここでは 100 にします。赤枠を 100 に変更して Enter をクリックします。

以下のようになります。右側は Secondary VLAN ですが、Primary VLAN ID の VLAN Type は『Promiscuous』になります。これは混合ポート(無差別ポート)のことです。

次はセカンダリ VLAN (Community / Isolated)を作成します。右下の『Add』をクリックします。

今度は VLAN ID を 101 にします。VLAN Type は『Community』(コミュニティポート) にします。さらに右下の『Add』をクリックします。

VLAN ID を 102 にします。今度は VLAN Type を『Isolated』(隔離ポート) にします。そして『OK』をクリックします。

以下のように表示されればセットアップ完了です。あとは仮想マシンのポートに該当の VLAN を割り当てるだけです。

プライベート VLAN エッジ (Protected) について

プライベート VLAN の設定は結構ややこしいです。もしコミュニティ設定が不要、つまり『特定ポートは非特定ポート以外と通信できないようにしたい』というのであれば、代わりに『プライベート VLAN エッジ』という設定が使えます。

(config-if)# switchport protected

という設定を入れると、この設定が入っていないポートとのみ通信ができるようになります。

ただし、この設定は trunk によるプライベート VLAN の延長が使えません。

例えば以下の構成で、PC#1 と PC#3 は protected を設定していますが、通信は可能になります。