注意事項
クライアントにおけるVLANの利用可否はNICのドライバに依存します。 VirtualBoxを動かしているホストマシン(Windows)のNICがVLANに対応していない場合、ブリッジを通じてVLANタグ付きのパケットを送受信することは出来ません。
前置き
組織が大きくなると全てのホストを一つのブロードキャストドメインで管理することは難しくなります。 サーバセグメント、社員セグメント、ゲストセグメントなどネットワークを区切って管理していくことになります。 ブロードキャストドメインを分割する技術の一つがVLANです。 VLANはLayer2で動作します。
VLAN on Windows
Windowsクライアント同士でVLAN間通信をするためにはお互いのクライアントのNICがタグVLAN (802.1Q)に対応している必要があります。 富士通 LifeBook S936/Mのような古い端末ではオンボードNICがタグVLANに対応していません。 StarTech USB31000Sのような拡張NICを利用しましょう。
タグVLANに対応したNICを追加したらデバイスマネージャからVLANが有効になっている事を確認してください。 次の画像の例ではクライアントの拡張NICをVLAN 100に所属させています。
この状態のクライアントはVLAN 100に属するパケットを送受信できるようになります。 VLAN 100に属するパケットを受け取ったNICはパケットに付与されたVLANタグを除去してからクライアントに受け渡します。 パケットを送信する時はその逆を行います。
VLAN on Virtual Machine
Virtual Machineに802.1Qパケットを渡そうとする時には注意が必要です。 前述の通りタグVLANに対応したNICは802.1QパケットからVLANタグを除去してクライアントに受け渡します。 すなわちVirtual Machineに渡されるパケットはプレーンな状態でありVirtual Machine同士でVLAN間通信を行うことが出来ません。
この事態を回避するためにはホストOS側でVLANを有効化せず、パケットをそのままクライアントに渡す必要があります。 次の2つの画像はVLANを有効化した状態と無効化した状態でパケットを受信したものです。 VLAN有効な時には802.1Qの情報が除去されています。 VLAN無効な時には802.1Qの情報がそのまま残っている事が確認できます。
VLAN構成例
さて、1つのL2スイッチに同一IPネットワークのホストを4台接続します。 IPレベルでは全てのホストが通信可能な構成ですが、VLANで分割されているためVLAN10とVLAN20に属するホストはお互いに通信は出来ません。
VLANを使う事で複数のL2ネットワークを1つのスイッチに集約することが出来ます。 物理的には1つのスイッチでもVLANで区切られたネットワークはお互いに通信することは出来ません。 VLANはLayer2で動作するのでブロードキャストも届きません。
CentOS7ホストの設定手順
共通手順
# ロードされているモジュールを確認する
lsmod | grep 8021q
# VLANを有効化する
modprobe 8021q
# 8021qモジュールがロードされた事を確認する
lsmod | grep 8021q
VLAN10-1
# enp0s8インタフェース上に仮想的なvlanインタフェース(vlan-id = 10)を作成する
nmcli connection add type vlan ifname vlan10 con-name vlan10 dev enp0s8 id 10
# vlanインタフェースにIPアドレスを割り当ててリンクアップさせる
nmcli connection modify vlan10 ipv4.method manual ipv4.addresses 172.16.0.10/24
nmcli connection up vlan10
VLAN10-2
# enp0s8インタフェース上に仮想的なvlanインタフェース(vlan-id = 10)を作成する
nmcli connection add type vlan ifname vlan10 con-name vlan10 dev enp0s8 id 10
# vlanインタフェースにIPアドレスを割り当ててリンクアップさせる
nmcli connection modify vlan10 ipv4.method manual ipv4.addresses 172.16.0.11/24
nmcli connection up vlan10
VLAN20-1
# enp0s8インタフェース上に仮想的なvlanインタフェース(vlan-id = 20)を作成する
nmcli connection add type vlan ifname vlan20 con-name vlan20 dev enp0s8 id 20
# vlanインタフェースにIPアドレスを割り当ててリンクアップさせる
nmcli connection modify vlan20 ipv4.method manual ipv4.addresses 172.16.0.20/24
nmcli connection up vlan20
VLAN20-2
# enp0s8インタフェース上に仮想的なvlanインタフェース(vlan-id = 20)を作成する
nmcli connection add type vlan ifname vlan20 con-name vlan20 dev enp0s8 id 20
# vlanインタフェースにIPアドレスを割り当ててリンクアップさせる
nmcli connection modify vlan20 ipv4.method manual ipv4.addresses 172.16.0.21/24
nmcli connection up vlan20
Switchの設定
スイッチの設定を変更してVLAN情報が付与されたパケットを流せるようにします。
- ポート 1-2 を VLAN20 に所属させる
- ポート 3-4 を VLAN10 に所属させる
トランクポート/アクセスポート
一つのポートを複数のVLANに所属させることも出来ます。 次の例ではポート1にVLAN10とVLAN20のパケットを流すことが出来ます。 このように複数のVLAN情報が流れるポートのことをトランクポートと呼びます。 それに対して唯一つのVLANに所属しているポートのことをアクセスポートと呼びます。