はじめに
- Proxmox 9.2でSDN FabricにWireGuardが追加された
- VXLANのunderlayをWireGuardに乗せることで、UDP/4789を物理LANに直接流さずに済む
- 今回は2ノード構成で実際にCT間通信まで確認する
検証環境
2ノードクラスタ
- pve1: 192.168.77.2
- pve2: 192.168.77.7
- WireGuard tunnel IP:
- pve1 wg0: 198.51.100.1/24
- pve2 wg0: 198.51.100.2/24
- VXLAN Zone: devpj09
- VNet: vnetpj09
- CT105: 172.16.24.1/24
- CT106: 172.16.24.2/24
WireGuard Fabricを作成する
-
Fabric作成
Datacenter -> SDN -> Fabrics -> Add Fabric -> WireGuard
Name: pj01wg(任意の名前) -
Node追加+Interface wg0設定+Peer設定
-
Datacenter -> SDN -> Fabrics -> pj01wg -> Add Node
Role: Internal(cluster member)
Node: pve1
Endpoint: 192.168.77.2
Allowed IPs: 192.168.77.7/32- Add Interface(wg0)
Listen Port:51820
IPv4 Address: 198.51.100.1/24
- Add Interface(wg0)
-
Datacenter -> SDN -> Fabrics -> pj01wg -> Add Node
Role: Internal(cluster member)
Node: pve2
Endpoint: 192.168.77.7
Allowed IPs: 192.168.77.2/32-
Add Interface(wg0)
Listen Port:51820
IPv4 Address: 198.51.100.2/24 -
Peers:(上記インターフェース設定のIPv6 Address:の下に表示される)
Name:pve1, Interface:wg0, Type:internal, Endpoint:192.168.77.2に✓をつける。
Skip Route Generation:✓
OKをクリック
-
-
-
上記が終わったら、もう一度ノードpve1の設定に戻って
-
Datacenter -> SDN -> Fabrics -> pj01wg -> pve1 -> Edit
- Peers:(上記インターフェース設定のIPv6 Address:の下に表示される)
Name:pve2, Interface:wg0, Type:internal, Endpoint:192.168.77.7に✓をつける。
Skip Route Generation:✓
OKをクリック
- Peers:(上記インターフェース設定のIPv6 Address:の下に表示される)
ここはややこしいですが、少なくともProxmox 9.2.2ではpve2のノード設定を行わないと、pve1側のpeerが指定できないので、もう一度pve1のノード設定に戻る必要があるようです。
注意:本記事は Proxmox VE 9.2.2 時点の検証結果です。WireGuard Fabric は比較的新しい機能のため、GUIやSDN Fabricからのpeer自動解決まわりの挙動は今後変わる可能性があります。
- SDN Apply
Datacenter -> SDN -> Apply - もしDC FirewallをonにしているならDC firewallでUDP/51820を許可
Datacenter -> Firewall -> Add
Type: in
Action: ACCEPT
Enable: Yes
Protocol: udp
Source: 192.168.77.2/32, 192.168.77.7/32
Destination: 192.168.77.2/32, 192.168.77.7/32
Port: 51820
必要ならIPSETを作ってsource,destinationを登録し、1行のFWルールで書くか、source/destination毎にルールを分けて登録
- もしDC FirewallをonにしているならDC firewallでICMPを許可(PING確認用で必須ではない)
Datacenter -> Firewall -> Add
Type: in
Action: ACCEPT
Enable: Yes
Protocol: ICMP
Source: 192.168.77.2/32, 192.168.77.7/32
Destination: 192.168.77.2/32, 192.168.77.7/32
必要ならIPSETを作ってsource,destinationを登録し、1行のFWルールで書くか、source/destination毎にルールを分けて登録
- もしDC FirewallをonにしているならDC firewallでUDP/4789を許可
Datacenter -> Firewall -> Add
Type: in
Action: ACCEPT
Enable: Yes
Protocol: udp
Source: 198.51.100.0/24 (*1)
Destination: 198.51.100.0/24 (*1)
Port: 4789
*1:テスト用に簡略化して指定しています。厳しく書くなら198.51.100.1/32, 198.51.100.2/32と記載した方が良いです。
wg0インターフェース上のトラフィックにもFirewallが効いてしまうため、4789も開けてあげる必要があるようです。
WireGuard疎通確認
- wg show
pve1のホスト上で実行
root@pve1:~# wg show
interface: wg0
public key: URb...koC0=
private key: (hidden)
listening port: 51820
peer: mOX...Aw4=
endpoint: 192.168.77.7:51820
allowed ips: 198.51.100.2/32, 192.168.77.2/32
latest handshake: 1 minute, 58 seconds ago
transfer: 881.30 MiB received, 21.53 GiB sent
latest handshakeの時間やtransferでreceive, sentの値が0になってなければOK
逆にpve2上からも同様にチェックしてください。
-
peer:行が表示されない場合、
Node追加+Interface wg0設定+Peer設定でpeersにチェックをしているか確認して下さい。 -
ping 198.51.100.2で疎通確認
pve1上からpve2のwgインターフェースにpingしてみて下さい。- handshakeが出るがpingできない場合の確認点
wg show で handshake が出ていても、ping が通らない場合がある。
その場合は Proxmox Firewall 側で UDP/51820 だけでなく、WG内側CIDRや対象通信が許可されているか確認する。
- handshakeが出るがpingできない場合の確認点
VXLAN Zoneを作成する
-
devpj09を作成
Datacenter -> SDN -> Zones -> Add -> VXLAN- ID: devpj09
- Peer Address List: 198.51.100.1, 198.51.100.2
- ここでwg0のIPを指定しているので、Wireguard fabric経由になる。
- ここでpveのvmbr0のIPを指定すると、Wireguard fabricを通さない設定になる
- SDN Fabric: 未指定
VXLAN Zone の SDN Fabric 欄は「WireGuard interfaceをunderlayにする」という単純な指定ではなく、
Fabric設定からpeerを自動解決するための指定に見える。
少なくとも今回の検証では、VXLAN Zoneのpeersにwg0のIPを直接指定する方が確実だった。
-
VNet vnetpj09を作成
Datacenter -> SDN -> VNets -> Create
Name: vnetpj09
Zone: devpj09
Create -
Subnetsを作成
Datacenter -> SDN -> VNets -> vnetpj09 -> Subnets -> Create
Subnet: 172.16.24.0/24
Gateway: 172.16.24.254
CTを配置して通信確認
CTテンプレートのダウンロードは別途実施しておいてください。
-
CT105 on pve1
Node: pve1
Bridge: vnetpj09
IP: 172.16.24.1/24
GW: 172.16.24.254
DNS: 1.1.1.1 -
CT106 on pve2
Node: pve2
Bridge: vnetpj09
IP: 172.16.24.2/24
GW: 172.16.24.254
DNS: 1.1.1.1 -
ping 172.16.24.2
- CT105を起動し、CT105内から、ping 172.16.24.2を実行
- CT106を起動し、CT106内から、ping 172.16.24.1を実行
CTからインターネットへ接続する場合
- vnetpj09にGWを作る
- pve1上で以下を実行
ip addr add 172.16.24.254/24 dev vnetpj09
- /32にするとハマる
上記コマンドで/24をつけ忘れると/32が自動設定されてGWとして動作しなくなります。 - ip_forward
FWでForwardなど設定が必要になるかもしれません - static routeまたはSNAT
インターネットへ出す方法は大きく2つあります。
- pve1でSNAT/MASQUERADEする
- 上流ルータに 172.16.24.0/24 via 192.168.77.2 のstatic routeを入れる
Subnetsの設定で上記どおりSNATをONにしなかった場合、以下のstatic route設定がルーターに必要になります。
宛先:172.16.24.0/24
GW: pve1のIPアドレス
WireGuard Fabricの注意点
- VXLAN Zoneのpeersとfabricは排他
- Fabricからpeers自動取得は現時点では挙動が分かりにくい
- ip_prefix / node ip / interface ip の関係がやや複雑
- まずはVXLAN Zone peersにwg0 IPを直接指定する方が分かりやすい
性能測定
比較のため、pve1 から pve2 の物理LAN側IPへ直接 iperf3 を実行しました。
| 経路 | 実測帯域 |
|---|---|
| pve1 → pve2 直通 | 約 2.35〜2.36 Gbits/sec |
| 純VXLAN | 約 2.27〜2.28 Gbits/sec |
| VXLAN over WireGuard | 約 2.11 Gbits/sec |
純VXLANは物理直通と比較して約3〜4%低下しました。
これは VXLAN によるカプセル化と、VNet側MTUが1500から1450になることによる有効ペイロード低下に近い値です。
一方、VXLAN over WireGuardでは物理直通比で約10〜11%低下しました。
pve1ホスト全体のCPU使用率は、純VXLANでは約1.5%程度だったのに対し、VXLAN over WireGuardでは約14%前後まで上がりました。
詳細はこちらの記事を参照ください。
まとめ
- VXLAN over WireGuardは構成可能
- 物理LAN上にUDP/4789を直接流さずに済む
- 帯域低下は小さいがCPUコストは増える
- 内部クラスタなら純VXLAN、非信頼underlayや拠点間ならWireGuard Fabricが候補
MSL Setupでの位置づけ
MSL Setupは、こうしたProxmox SDN、VXLAN、Firewall、VPNまわりの設計・構成を、手作業の積み重ねではなく、再現性のあるマルチテナント基盤として扱うためのツールです。
今回の検証では、Proxmox 9.2 の WireGuard Fabric を使うことで、VXLAN over WireGuard 構成が実際に動作することを確認できました。
一方で、性能面では以下の傾向が見えました。
| 構成 | 特徴 |
|---|---|
| 純VXLAN | 軽量で高速。内部クラスタ向け |
| VXLAN over WireGuard | underlay上のVXLAN通信を暗号化できるが、CPUコストは増える |
同一管理ドメイン内のクラスタでは、純VXLANは非常に軽く、標準構成として合理的です。一方で、有料テナント提供、拠点間接続、共有ネットワーク、またはunderlayを完全には信頼できない環境では、WireGuard Fabricを使った Secure Transport Mode が選択肢になります。
重要なのは、WireGuard Fabricは「基盤管理者からテナント通信を完全に秘匿する機能」ではないという点です。Proxmox基盤の管理者は、仮想ネットワーク、仮想NIC、ファイアウォール、ストレージ、バックアップなどを管理できる立場にあります。そのため、WireGuard Fabricの主な価値は、基盤管理者からの秘匿ではなく、物理ネットワークや拠点間経路など、underlay側でVXLAN通信を直接露出させないことにあります。
MSL Setupでは、このような前提を踏まえ、用途に応じて以下のように使い分けるのが自然だと考えています。
| モード | 想定用途 |
|---|---|
| Plain VXLAN | 同一拠点・同一管理ドメイン内の標準構成 |
| VXLAN over WireGuard | 非信頼underlay、拠点間接続、有料テナント提供などでのSecure Transport Option |
つまり、WireGuard Fabricは「常にONにすればよい機能」ではなく、CPUコストを支払ってでもunderlay上の通信保護を強化したい場合に使う選択肢です。
MSL Setupでは、こうしたProxmox SDNの構成判断を、できるだけ再現性のある形で扱えるようにすることを目指しています。