はじめに
Proxmox の VLAN まわりの設定があまりわからなかったので、調査しつつ手元で試して理解を深めたいと思います。
色々確かめていたら少し長くなってしまいました。読みにくいかもしれませんが、ご容赦いただけますと幸いです。
また、十分調査・検証しながら書いているつもりですが、誤った記載や誤解を招く記載があるかもしれません。誤りを発見した場合は修正いたします。
簡単なまとめ
- VLAN Aware 機能を使うと VLAN のトランクポートの設定ができる
- アクセスポートを設定する1つの方法として、『Linux VLAN で Name に
[bridge name].[tag]
を設定する』方法がある
- アクセスポートを設定する1つの方法として、『Linux VLAN で Name に
- VLAN 対応のスイッチングハブを使うときは、VM の仮想NIC とスイッチングハブのアクセスポートの VLAN ID を揃える
VLAN 設定の方法
いくつか方法があるようですが、今回は『物理NICに VLAN-aware の Linux Bridge を作る』方法で設定します1。
方法
以下動画を参考に設定します。
トランクポートの設定
Linux Bridge の "VLAN aware" にチェックを入れます。このように設定した場合、この Linux Bridge は VLAN のトランクポートに相当します。
アクセスポートの設定
Create: Linux VLAN で Name に [bridge name].[tag]
を設定すると、Vlan raw device が [bridge name]
で VLANタグが [tag]
の VLAN を設定できます。
上の図では、vmbr1
に対して VLANタグ 200
の VLAN を設定しようとしています。
検証
(1) VLAN の動作検証
ここでは Proxmox のクラスタを構成する2つのノードに対して VLAN の設定をして、同一の VLAN タグを持つアクセスポートに接続する VM 同士 (異なる物理ノードに存在) で疎通できることを確認します。
構成
Proxmox の Node 1 (uranus) および Node 2 (venus) で、以下のように VLAN を設定します。ここでは、vmbr1
という Linux Bridge の下にVLANタグが100と50のVLANを設定しました (vmbr1.100
と vmbr1.50
)。
実験のため、以下3つの仮想マシンを図のように接続します。
VM | 物理ホスト | 補足 |
---|---|---|
IDS | uranus | パケットキャプチャ用 |
Workstation | uranus | |
Kali | venus |
各VM (IDS, Workstation, Kali) の仮想NICとVLANの対応を以下の表で示します。
NO VLAN | VLAN 100 | VLAN 50 | |
---|---|---|---|
IDS | ens19 |
ens20 |
ens21 |
Workstation | - | ens19 |
ens20 |
Kali | - | eth1 |
eth2 |
検証項目
以下のようにIPアドレスを設定したときに、疎通可能であるか、また、IDSの各仮想NICでキャプチャするとどのようなパケットが採取できるかを確認します。
- Workstation も Kali も VLAN 100 に対応する仮想NICに
192.168.100.0/24
に属するIPアドレスを割り当てる。 - Workstation の VLAN 100 と Kali の VLAN 50 に対応する仮想NICに
192.168.100.0/24
に属するIPアドレスを割り当てる。 - Workstation の VLAN 100 に対応する仮想NICに
192.168.100.0/24
に属するIPアドレスを割り当て、Kali の VLAN 50 に対応する仮想NICに192.168.50.0/24
に属するIPアドレスを割り当てる。
ただし、IDSでキャプチャ可能にするために、vmbr1
ではポートミラーリングと同等の設定をしています。
検証 (1)-1
Workstation と Kali の VLAN 100 に対応する仮想NICに対して、以下のIPアドレスを割り当てます。
VM | device | IP |
---|---|---|
Workstation | ens19 (VLAN 100) |
192.168.100.85/24 |
Kali | eth1 (VLAN 100) |
192.168.100.99/24 |
この状態では、Kali と Workstation の疎通が確認できます。
IDS の各仮想NICでキャプチャした結果を以下に示します。今の環境では DNS サーバをデフォルトで動かしているので DNS パケットが流れていますが、見やすさのために DNS のパケットは除外しています。
ens19
(NO VLAN: トランクポートに対応) には、タグ付けされたパケットが流れるens20
(VLAN 100) には、VLAN ID 100 のパケット (タグが外されたもの) が流れるens21
(VLAN 50) には、VLAN ID 50 のパケット (タグが外されたもの) が流れる- ICMP パケットは流れない
検証 (1)-2
Workstation の VLAN 100 と Kali の VLAN 50 に対応する仮想NICに対して、以下のIPアドレスを割り当てます。
VM | device | IP |
---|---|---|
Workstation | ens19 (VLAN 100) |
192.168.100.85/24 |
Kali | eth2 (VLAN 50) |
192.168.100.99/24 |
この状態でも、Kali と Workstation の疎通が確認できます (後述の物理スイッチを用いたときの通常の挙動と異なる)。
IDS の各仮想NICでキャプチャした結果を以下に示します。見やすさのために DNS のパケットは除外しています。
ens19
(NO VLAN: トランクポートに対応) には、タグ付けされたパケットが流れるens20
(VLAN 100) には、VLAN ID 100 のパケット (タグが外されたもの) が流れる- ping reply が
ens20
で取得される
- ping reply が
ens21
(VLAN 50) には、VLAN ID 50 のパケット (タグが外されたもの) が流れる- ping request が
ens21
で取得される
- ping request が
通常は VLAN ID が異なると疎通できないと思うのですが、今回の設定では疎通できています。おそらく1つの物理NIC に VLAN のトランクポートとアクセスポートが割り当てられているからと考えられますが、断言はできません。こちらについても確認する必要があるかと思います。
検証 (1)-3
Workstation の VLAN 100 と Kali の VLAN 50 に対応する仮想NICに対して、以下のIPアドレスを割り当てます。
VM | device | IP |
---|---|---|
Workstation | ens19 (VLAN 100) |
192.168.100.85/24 |
Kali | eth2 (VLAN 50) |
192.168.50.99/24 |
このときは (当たり前ですが) Kali から Workstation への ping は通りません。
検証 (1) のまとめ
- トランクポートから出ていく (に入る) パケットにはVLANタグが付与されている
- 物理スイッチ側でVLANの設定がなされていない場合、同一セグメント内のホスト間は、仮想NICのVLANタグが異なっても疎通できる (通常の挙動とは異なる)
- これは今回の設定 (1つの物理NICにトランクポートとアクセスポートが割り当てられていること) に起因する?
(2) L3スイッチを使った検証
ここでは、タグVLANを設定可能なL3スイッチを用いて、VLANタグを付与したポートに接続した物理マシンと疎通可能かを確認します。
L3スイッチとして、以下製品を用いました。
構成
検証 (1) 環境にL3スイッチを追加し、VLAN 100 のアクセスポートにノートPC (Windows 11) を接続しました。
ただし、L3スイッチは以下のようにVLAN設定をしました。
なお、上記設定は NETGEAR タグ VLAN を設定したスイッチ同士の接続 を参考にしています。
検証項目
以下のようにIPアドレスを設定したときに、疎通可能であるか、また、IDSの各仮想NICでキャプチャするとどのようなパケットが採取できるかを確認します。
- Workstation の VLAN 100 に対応する仮想NICと、L3スイッチの VLAN 100 のアクセスポートに接続したノートPCに
192.168.100.0/24
に属するIPアドレスを割り当てる - Kali の VLAN 50 に対応する仮想NICと、L3スイッチの VLAN 100 のアクセスポートに接続したノートPCに
192.168.50.0/24
に属するIPアドレスを割り当てる
検証 (2)-1
Workstation の ens19
とノートPCの有線LANに以下のIPアドレスを割り当てます。
VM | device | IP |
---|---|---|
Workstation | ens19 (VLAN 100) |
192.168.100.85/24 |
ノートPC | (VLAN 100) | 192.168.100.111/24 |
この状態では、Workstation とノートPCの疎通が確認できます。
IDS の各仮想NICでキャプチャした結果を以下に示します。見やすさのために DNS のパケットは除外しています。
ens19
(NO VLAN: トランクポートに対応) には、タグ付けされたパケットが流れるens20
(VLAN 100) には、VLAN ID 100 のパケット (タグが外されたもの) が流れるens21
(VLAN 50) には、VLAN ID 50 のパケット (タグが外されたもの) が流れる- ICMP パケットは流れない
検証 (2)-2
Kali の eth2
とノートPCの有線LANに以下のIPアドレスを割り当てます。
VM | device | IP |
---|---|---|
Kali | eth2 (VLAN 50) |
192.168.50.99/24 |
ノートPC | (VLAN 100) | 192.168.50.111/24 |
この状態では、Kali とノートPCは疎通できません。
IDS の各仮想NICでキャプチャした結果を以下に示します。見やすさのために DNS のパケットは除外しています。
ens19
(NO VLAN: トランクポートに対応) には、タグ付けされたパケットが流れるens20
(VLAN 100) には、VLAN ID 100 のパケット (タグが外されたもの) が流れるens21
(VLAN 50) には、VLAN ID 50 のパケット (タグが外されたもの) が流れる
検証 (2) のまとめ
- VLAN ID を揃えると VM と物理マシンの間で疎通できる
まとめ
Proxmox の VLAN まわりの設定を確認しました。実際使うときは、VM の仮想NICと L3スイッチに接続した物理機器の VLAN を合わせるのが良いのかなと思いました。
- 他の方法として、『物理インタフェースにVLANインタフェースを作ってその上にブリッジインタフェースを作る方法』があります。参考:Proxmox VE 7.x(3)- VLANの使い方↩