立ち話

興味があることを書いてます。正確な内容は公式ドキュメントや参考文献を確認してください。ブログに示された意見はすべて個人の見解であり、所属する組織の公式見解ではありません。

Proxmox の VLAN まわりの設定に関するメモと検証

はじめに

Proxmox の VLAN まわりの設定があまりわからなかったので、調査しつつ手元で試して理解を深めたいと思います。

色々確かめていたら少し長くなってしまいました。読みにくいかもしれませんが、ご容赦いただけますと幸いです。

また、十分調査・検証しながら書いているつもりですが、誤った記載や誤解を招く記載があるかもしれません。誤りを発見した場合は修正いたします。

簡単なまとめ

  • VLAN Aware 機能を使うと VLAN のトランクポートの設定ができる
    • アクセスポートを設定する1つの方法として、『Linux VLAN で Name に [bridge name].[tag] を設定する』方法がある
  • VLAN 対応のスイッチングハブを使うときは、VM の仮想NICスイッチングハブのアクセスポートの VLAN ID を揃える

VLAN 設定の方法

いくつか方法があるようですが、今回は『物理NICに VLAN-aware の Linux Bridge を作る』方法で設定します1

方法

以下動画を参考に設定します。

www.youtube.com

トランクポートの設定

Linux Bridge の "VLAN aware" にチェックを入れます。このように設定した場合、この Linux Bridge は VLAN のトランクポートに相当します。

VLAN トランクポートの設定

アクセスポートの設定

Create: Linux VLAN で Name に [bridge name].[tag] を設定すると、Vlan raw device が [bridge name] で VLANタグが [tag] の VLAN を設定できます。

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.100vmbr1.50)。

Proxmox の Node 1 のネットワーク設定

Proxmox の Node 2 のネットワーク設定

実験のため、以下3つの仮想マシンを図のように接続します。

VM 物理ホスト 補足
IDS uranus パケットキャプチャ用
Workstation uranus
Kali venus

検証 (1) ネットワーク構成

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でキャプチャするとどのようなパケットが採取できるかを確認します。

  1. Workstation も Kali も VLAN 100 に対応する仮想NIC192.168.100.0/24 に属するIPアドレスを割り当てる。
  2. Workstation の VLAN 100 と Kali の VLAN 50 に対応する仮想NIC192.168.100.0/24 に属するIPアドレスを割り当てる。
  3. Workstation の VLAN 100 に対応する仮想NIC192.168.100.0/24 に属するIPアドレスを割り当て、Kali の VLAN 50 に対応する仮想NIC192.168.50.0/24 に属するIPアドレスを割り当てる。

ただし、IDSでキャプチャ可能にするために、vmbr1 ではポートミラーリングと同等の設定をしています。

seekt.hatenablog.com

検証 (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 の疎通が確認できます。

(1)-1 疎通確認

IDS の各仮想NICでキャプチャした結果を以下に示します。今の環境では DNS サーバをデフォルトで動かしているので DNS パケットが流れていますが、見やすさのために DNS のパケットは除外しています。

  • ens19 (NO VLAN: トランクポートに対応) には、タグ付けされたパケットが流れる
    • ping request も ping reply も VLAN ID 100
  • ens20 (VLAN 100) には、VLAN ID 100 のパケット (タグが外されたもの) が流れる
    • ping request も ping reply も ens20 で取得される
  • ens21 (VLAN 50) には、VLAN ID 50 のパケット (タグが外されたもの) が流れる
    • ICMP パケットは流れない

ens19で取得されるパケット

ens20で取得されるパケット

ens21で取得されるパケット

検証 (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 の疎通が確認できます (後述の物理スイッチを用いたときの通常の挙動と異なる)。

(1)-2 疎通確認

IDS の各仮想NICでキャプチャした結果を以下に示します。見やすさのために DNS のパケットは除外しています。

  • ens19 (NO VLAN: トランクポートに対応) には、タグ付けされたパケットが流れる
    • ping request は VLAN ID 50 で ping reply は VLAN ID 100
  • ens20 (VLAN 100) には、VLAN ID 100 のパケット (タグが外されたもの) が流れる
    • ping reply が ens20 で取得される
  • ens21 (VLAN 50) には、VLAN ID 50 のパケット (タグが外されたもの) が流れる
    • ping request が ens21 で取得される

ens19で取得されるパケット

ens20で取得されるパケット

ens21で取得されるパケット

通常は 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スイッチとして、以下製品を用いました。

www.netgear.com

構成

検証 (1) 環境にL3スイッチを追加し、VLAN 100 のアクセスポートにノートPC (Windows 11) を接続しました。

検証 (2) ネットワーク構成

ただし、L3スイッチは以下のようにVLAN設定をしました。

L3スイッチ VLAN設定

L3スイッチ ポート VLAN ID 設定

なお、上記設定は NETGEAR タグ VLAN を設定したスイッチ同士の接続 を参考にしています。

検証項目

以下のようにIPアドレスを設定したときに、疎通可能であるか、また、IDSの各仮想NICでキャプチャするとどのようなパケットが採取できるかを確認します。

  1. Workstation の VLAN 100 に対応する仮想NICと、L3スイッチの VLAN 100 のアクセスポートに接続したノートPCに 192.168.100.0/24 に属するIPアドレスを割り当てる
  2. 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の疎通が確認できます。

(2)-1 疎通確認

IDS の各仮想NICでキャプチャした結果を以下に示します。見やすさのために DNS のパケットは除外しています。

  • ens19 (NO VLAN: トランクポートに対応) には、タグ付けされたパケットが流れる
    • ping request も ping reply も VLAN ID 100
  • ens20 (VLAN 100) には、VLAN ID 100 のパケット (タグが外されたもの) が流れる
    • ping request も ping reply も ens20 で取得される
  • ens21 (VLAN 50) には、VLAN ID 50 のパケット (タグが外されたもの) が流れる
    • ICMP パケットは流れない

ens19で取得されるパケット

ens20で取得されるパケット

ens21で取得されるパケット

検証 (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は疎通できません。

(2)-2 疎通確認

IDS の各仮想NICでキャプチャした結果を以下に示します。見やすさのために DNS のパケットは除外しています。

  • ens19 (NO VLAN: トランクポートに対応) には、タグ付けされたパケットが流れる
  • ens20 (VLAN 100) には、VLAN ID 100 のパケット (タグが外されたもの) が流れる
    • VLAN 100 のアクセスポートに接続するノートPCは、Kali (のIPアドレスを持つホストのMACアドレス) を探そうと ARP Request を投げる
    • しかし、VLAN 100 には Kali のIPアドレスを持つホストが存在しないので、ARP Reply が返ってこない
  • ens21 (VLAN 50) には、VLAN ID 50 のパケット (タグが外されたもの) が流れる
    • VLAN 50 のアクセスポートに接続する Kali は、ノートPC (のIPアドレスを持つホストのMACアドレス) を探そうと ARP Request を投げる
    • しかし、VLAN 50 にはノートPCのIPアドレスを持つホストが存在しないので、ARP Reply が返ってこない

ens19で取得されるパケット

ens20で取得されるパケット

ens21で取得されるパケット

検証 (2) のまとめ

  • VLAN ID を揃えると VM と物理マシンの間で疎通できる
    • VM 側では、該当する VLAN ID を持つ仮想NICに接続する
    • 物理マシン側では、該当する VLAN ID のアクセスポートに接続する

まとめ

Proxmox の VLAN まわりの設定を確認しました。実際使うときは、VM の仮想NICと L3スイッチに接続した物理機器の VLAN を合わせるのが良いのかなと思いました。


  1. 他の方法として、『物理インタフェースにVLANインタフェースを作ってその上にブリッジインタフェースを作る方法』があります。参考:Proxmox VE 7.x(3)- VLANの使い方