VLAN
仮想LAN(VLAN、IEEE 802.1Q)は、1つの物理ネットワークを複数の独立したレイヤー2ネットワークに分割します。各フレームは1〜4094のVLAN IDを持ち、スイッチはそのVLANに属するポートにのみフレームを配信します。これにより、1つの物理NICでホストの管理トラフィックと多数の仮想マシンネットワークのトラフィックを、それぞれ互いに分離した状態で伝送できます。
Vaporでは、VLANを使用する2つの方法が提供されています。
- Open vSwitch (OVS) — 仮想マシンネットワーキングに推奨。VLANはOVSポート(vPort)およびlibvirtネットワークのポートグループで設定され、1つのブリッジで任意の数のVLANを伝送できます。
- Linux VLANインターフェース — VLANごとに
eth0.10などのサブインターフェースを作成します。ホストにVLAN上のアドレスを割り当てる場合や、ブリッジごとに1つのVLANを割り当てるシンプルなLinuxブリッジ構成に適しています。Linux VLANインターフェース を参照してください。
このページの以降の内容ではOVSについて説明します。
Open vSwitchでのVLANの仕組み
OVSブリッジでは、VLANはブリッジ自体のプロパティではなく、各ポートのプロパティです。3種類のポートが関係します。
| ポート | 概要 | VLANの設定場所 |
|---|---|---|
| アップリンク | 物理NIC(例:eno1)用の system vPort | Network > Virtual Switch > vPorts |
| ホストポート | 管理アドレスなど、ホストのIPアドレスを保持する internal vPort | Network > Virtual Switch > vPorts |
| VMポート | VMの実行中にlibvirtが各VM NIC用に作成する vnetN ポート | NICが接続されているlibvirtネットワークの ポートグループ(portgroup) |
各ポートには VLANモード があります。
| VLANモード | 項目 | 動作 |
|---|---|---|
| access | Tag | 1つのVLANをタグなし(untagged)で伝送します。ポートに入るフレームはタグのVLANに属し、ポートを出るフレームからはタグが削除されます。すでにタグが付いた状態で到着したフレームは破棄されます。 |
| trunk | Trunks | 指定されたVLANをタグ付き(tagged)で伝送します。リストが空の場合はすべてのVLANを意味します。 |
| native-untagged | Tag および Trunks | Tag のVLANをタグなし(untagged)でも伝送するトランクです。ポートに入るタグなしフレームはそのVLANに属します。 |
| native-tagged | Tag および Trunks | native-untaggedと同様ですが、ネイティブVLANのフレームはタグ付き(tagged)でポートから送出されます。 |
| Auto (default) | Tag または Trunks | タグが設定されている場合はaccess、それ以外の場合はtrunkになります。 |
タグもトランクも設定されていないポートは、すべてのVLANに対するトランクとして動作します。受信したタグなしフレームはVLAN 0に属しますが、タグ付きポートはいずれもVLAN 0に属していません。これが、VLANが割り当てられていないVM NICがVLAN上の通信先に到達できない理由です。
ポートのVLANモードを変更すると、新しいモードで使用されない設定値はVaporによってクリアされます。trunk に切り替えるとタグが削除され、access に切り替えるとトランク一覧が削除されます。
アップリンクモードの選択
アップリンクは、物理スイッチポートの構成と一致している必要があります。開始する前にネットワークチームと確認・合意してください。
| 物理スイッチポート | アップリンクvPort (eno1) | ホストが使用できるVLAN |
|---|---|---|
| アクセスポート、VLAN 104(タグなし) | access、Tag 104 | 104のみ |
| 802.1Qトランク、VLAN 104, 105, 106(タグ付き) | trunk、Trunks 104,105,106 | 104, 105, 106 |
| ネイティブVLAN 104(タグなし)、105および106(タグ付き)のトランク | native-untagged、Tag 104、Trunks 104,105,106 | 104, 105, 106 |
アクセスアップリンクは最もシンプルな構成ですが、ホストが1つのVLANに制限され、後から2つ目のVLANを追加する際にはスイッチとホストの両方を再構成する必要があります。将来的に複数のVLANが必要になる可能性がある場合は、最初からトランクを使用してください。
ホストのIPアドレスをアップリンクNICまたはブリッジ自体に直接設定しないでください。NICがブリッジのメンバーになるとレイヤー2でのみ動作し、ブリッジ自体のポートにはタグがないためVLAN 0に位置します。後述のように、ホストのアドレスは内部(internal)vPortに設定してください。
例:同一VLAN上に管理とVMを配置する
これは最も一般的な本番構成です。1つのNICを使用し、Vapor Web UIとVMの両方にVLAN 104を割り当て、後からVLANを追加できる余地を残しています。
awbr0 (VS Bridge)
├─ eno1 system vPort trunk, trunks 104 (IPなし)
├─ mgmt0 internal vPort tag 104, "management" ← ホスト管理IP
└─ vnetN VM ports tag 104 ← ネットワークのポートグループからコンソールから実行してください
管理アドレスを新しいポートに移動すると、現在作業中の接続が切断されます。手順2〜4では、サーバーのコンソールまたはアウトオブバンド管理(iDRAC、iLO、IPMI)を使用するか、ホストへの別の接続手段を確保してください。
1. スイッチポートの構成
ホストが接続されているスイッチポートを、VLAN 104をタグ付きで伝送する802.1Qトランクに設定するようネットワークチームに依頼してください。スイッチ側でVLAN 104をタグなしで送信する必要がある場合は、手順3で trunk の代わりに native-untagged を使用します。
2. ブリッジの作成
- Network > Virtual Switch に移動します。
- Create VS Bridge をクリックし、例えば
awbr0と名前を付けます。
3. アップリンクの追加
- vPorts の下にある Create vPort をクリックします。
- VS Bridge を
awbr0に、vPort Type をsystemに設定し、Interfaces でeno1を選択します。vPort名はインターフェース名になります。 - VLAN Mode を
trunkに、Trunks を104に設定します。Tag は空のままにします。 - Remove IP addresses from these interfaces にチェックを入れたままにして、
eno1にIPアドレスが残らないようにします。
4. 管理ポートの追加
- 再度 Create vPort をクリックします。
- VS Bridge を
awbr0に、vPort Type をinternalに、vPort Name をmgmt0に設定します。 - VLAN Mode を
accessに、Tag を104に設定します。 - Service Tags で
managementにチェックを入れます。 - Network > Interfaces に移動して
mgmt0を開き、Add IP を使用してホストの管理アドレスとゲートウェイを割り当てます。
VaporはポートのVLAN設定をポートとともに保存します。強制電源オフなどの後にホストがポートを見失った場合でも、起動サービスがネットワーク起動前にタグ付きで再作成するため、管理アドレスはVLAN 104に保持されます。
5. VMネットワークの作成
- Virtualization > Networks に移動し、例えば
vlan104という名前のネットワークを作成します。 - Backend Type を Open vSwitch (OVS) に、Forwarding Mode を Bridge に、Host Bridge Name を
awbr0に設定します。 - VLAN Tags に
104を指定したpg-104というポートグループを追加し、Set as default for this network にチェックを入れます。
ポートグループをデフォルトとしてマークすることで安全性が確保されます。vlan104 に接続されたすべてのVM NICは、ポートグループを手動で選択することなくVLAN 104を取得します。
6. VMの接続
VM作成ウィザードで、vlan104 ネットワーク上にNICを追加します。Portgroup (optional) フィールドには、希望通りの設定である Network default (pg-104) が表示されます。このままにしておいて問題ありません。
7. 設定の確認
設定の確認 を参照してください。
例:1つのNICに複数のVLANを構成する
VMにVLANの選択肢を提供するには、上記の構成を拡張します。
- スイッチポートで必要なすべてのVLAN(例:104、105、106)を伝送するようにします。
eno1のvPortを編集し、Trunks を104,105,106に設定します。- 各VLAN用のlibvirtネットワークをそれぞれ
awbr0上に作成し、それぞれに1つのデフォルトポートグループを設定します。
| ネットワーク | デフォルトポートグループ | VLANタグ |
|---|---|---|
vlan104 | pg-104 | 104 |
vlan105 | pg-105 | 105 |
vlan106 | pg-106 | 106 |
ネットワークを選択するだけで、自動的にVLANが選択されるようになります。ストレージネットワークなど、ホストが別のVLAN上のアドレスも必要とする場合は、そのタグと対応するサービスタグを持つ別の内部vPortを追加します。
複数のポートグループを持つ単一ネットワーク
VLANごとにネットワークを作成する代わりに、VLANごとに1つのポートグループを持つ単一のネットワークを作成することもできます:pg-104(デフォルト)、pg-105、pg-106。各VM NICはポートグループを選択する必要があり、何も選択しないNICはデフォルトVLANに入ります。これによりネットワーク一覧は短く保てますが、VMを誤ったVLANに配置しやすくなるため、VLANの数が非常に多くない限りはVLANごとに1つのネットワークを作成することをお勧めします。
複数のVLANを必要とするVM
VLANタギングを独自に処理するルーターまたはファイアウォールVMには、トランクが必要です。Enable VLAN trunking にチェックを入れ、VLAN Tags に 104,105,106 を指定したポートグループを追加し、VMのNICをそこに接続します。これにより、VMはそれらのVLANをタグ付きで受信します。
ポートグループと実行中のVM
VM NICのVLANは、次のうち最初に定義されているものから取得されます。
- VMの定義内でNIC自体に設定されたVLAN
- NICが選択したポートグループ、または何も選択されていない場合はネットワークのデフォルトポートグループ
- ネットワーク自体のVLAN
ネットワークを編集したり、ポートグループを作成・編集・削除したりすると、Vaporは実行中のVMのNICを変更によって割り当てられた新しいVLANへ移動します。VMを再起動する必要はありません。以下の点に留意してください。
- デフォルトポートグループを削除する と、それに依存していたVMは直ちにそのVLANから外れます。先に別のポートグループをデフォルトとしてマークしてください。
- ポートグループの名前を変更する と、古い名前で選択していたNICは現在のVLANに残りますが、NICが存在するポートグループに指定されるまでそれらのVMは起動に失敗します。
- 独自のVLANを持つNIC は、ポートグループの変更による影響を受けません。
vnetN vPortに手動でタグを設定しないでください。VMが起動、停止、または移行するたびにlibvirtがこれらのポートを削除して再作成するため、手動で設定したタグは次回の操作時に失われ、ポート名が変わる可能性があります。VLANはポートグループで設定してください。
ライブマイグレーション
VMが移行しても、ネットワーク名とポートグループ名は維持され、移行先ホストが自身の定義を適用します。移行後もVMが適切なVLANに留まるためには、以下を満たす必要があります。
- すべてのホストに、同じ名前のネットワーク、同じポートグループ、および同じVLANタグが存在すること。
- すべてのホストのアップリンクが、それらのポートグループで使用されるVLANを伝送していること。
ポートグループが存在しない場合、移行は停止します。移行先ホストで異なるタグを持つポートグループがある場合、警告なしでVMがそのVLANに移動します。
設定の確認
ホスト上で、ブリッジ上のすべてのポートのVLAN設定を確認します。
ovs-vsctl --columns=name,tag,trunks,vlan_mode list Port上記の構成の場合、eno1 は trunks [104] かつ vlan_mode trunk、mgmt0 は tag 104、実行中の各VMの vnetN は tag 104 と表示されます。
どのポートがどのVMに属し、libvirtがどのVLANを割り当てたかを確認するには、次のようにします。
virsh domiflist <vm-name>
virsh dumpxml <vm-name> | grep -A3 "<vlan>"その後、両端からテストします。VLAN 104上の別のマシンからVMのアドレスへpingを実行し、VM内部からVLANのゲートウェイへpingを実行します。
トラブルシューティング
VMはネットワークにアクセスできないが、ホストはアクセスできる。 NICがタグなし(untagged)になっている可能性があります。vnetN ポートを確認してください。tag と trunks が空の場合、NICにVLANが設定されていません。VMのネットワークでポートグループをデフォルトとしてマークするか、NICでポートグループを選択してください。VM作成ウィザードでは、Open vSwitchネットワーク上のNICがタグなしで接続される場合に警告が表示されます。
vnetN ポートに手動で設定したタグが消えた。 これは正常な動作です。ポートグループと実行中のVM を参照してください。
管理アドレスを移動した後にホストへアクセスできなくなった。 コンソールから、スイッチポートがVLANをタグ付き(または native-untagged によるネイティブ)で伝送していること、アップリンクのトランクにそれが含まれていること、内部vPortに正しいタグが設定されてアドレスを保持していることを確認してください。アップリンクNICまたはブリッジに残されたアドレスは機能しません。
同一VLAN上にある2台のホスト上のVM同士が通信できない。 両方のアップリンクがそのVLANを伝送していること、およびホスト間のスイッチポートでそれが許可されていることを確認してください。
ポートのVLAN変更が拒否される。 トランクポートにはタグを設定できず、アクセスポートにはトランクを設定できません。タグなしVLANも伝送するトランクの場合は、native-untagged または native-tagged を使用してください。
Linux VLANインターフェース
ホストのスイッチポートがトランクであり、OVSを使用していない場合は、VLANごとにVLANサブインターフェースを作成できます。
- Network > VLANs に移動します。
- Create VLAN をクリックします。
- 親インターフェース(例:
eth0またはボンド)を選択します。 - VLAN ID(1〜4094)を入力します。
VaporはVLAN 10に対して eth0.10 などのサブインターフェースを作成します。これにIPアドレスを割り当てたり、Linuxブリッジのメンバーにすることで、そのブリッジに接続されたVMをVLAN 10に配置できます。各VLANには独自のサブインターフェースとブリッジが必要なため、VLANが複数以上ある場合は、OVSの方が管理が容易です。