はじめに
Proxmox VE 9.2 では、SDN Fabric に WireGuard が追加されました。
これにより、Proxmox SDN の Fabric 機能として WireGuard インターフェースを構成できるようになり、VXLAN の underlay 通信を WireGuard 経由にする構成が取りやすくなりました。
本記事では、Proxmox 9.2 の WireGuard Fabric を使い、VXLAN over WireGuard 構成を作成して、純VXLANと比較したパフォーマンスを測定します。
結論から言うと、今回の2.5GbE級の検証環境では、VXLAN over WireGuard でも帯域低下は約7〜8%程度に収まりました。一方で、ホスト側CPU使用率は純VXLANより明確に増えました。
なお、構築手順はこちらの記事にまとめています。
検証環境
今回の検証環境は以下です。
| 項目 | 内容 |
|---|---|
| Proxmox VE | 9.2.2 |
| pve1 | Intel Core i7-1360P |
| pve2 | Intel Core i7-12700K |
| 物理ネットワーク | 2.5GbE |
| 検証対象1 | devpj09: VXLAN over WireGuard |
| 検証対象2 | devpj08: 純VXLAN |
| 測定ツール | iperf3 / mpstat |
今回の比較では、pve1上のCTからpve2上のCTへ通信させています。
構成概要
devpj09: VXLAN over WireGuard
devpj09 は、VXLAN Zone の peer に WireGuard インターフェース上のIPを指定しています。
例:
pve1 wg0: 198.51.100.1
pve2 wg0: 198.51.100.2
VXLAN Zone devpj09 peers:
198.51.100.1,198.51.100.2
VNet は以下です。
vnetpj09
zone: devpj09
tag : 11000
CTは以下のように配置しました。
CT105 on pve1
bridge: vnetpj09
IP : 172.16.24.1/24
CT106 on pve2
bridge: vnetpj09
IP : 172.16.24.2/24
CT105からCT106へのpingは成功しており、VXLAN over WireGuard のL2通信は成立しています。
devpj08: 純VXLAN
比較対象として、WireGuardを使わない通常のVXLAN構成も作成しました。
CT107 on pve1
bridge: vnetpj08
IP : 172.16.23.1/24
CT108 on pve2
bridge: vnetpj08
IP : 172.16.23.2/24
こちらはProxmox SDNの通常VXLANとして動作します。
測定方法
iperf3を使ってCT間の通信速度を測定しました。
サーバ側:
iperf3 -s
クライアント側:
iperf3 -c <server-ip>
iperf3 -c <server-ip> -P 4
iperf3 -c <server-ip> -P 8
CPU使用率は、Proxmoxホスト側で mpstat を使って取得しました。
mpstat -P ALL 1 15
測定結果:帯域
VXLAN over WireGuard
devpj09、つまり VXLAN over WireGuard の測定結果は以下です。
| 測定 | 結果 |
|---|---|
| single stream | 約 2.11 Gbits/sec |
-P 4 |
約 2.11 Gbits/sec |
-P 8 |
約 2.11 Gbits/sec |
単一ストリームでも並列ストリームでも、ほぼ 2.11Gbps 付近で頭打ちになりました。
純VXLAN
devpj08、つまり通常のVXLANの測定結果は以下です。
| 測定 | 結果 |
|---|---|
| single stream | 約 2.27 Gbits/sec |
-P 4 |
約 2.27〜2.28 Gbits/sec |
-P 8 |
約 2.27〜2.28 Gbits/sec |
純VXLANでは、2.5GbE環境の実効上限に近いところまで出ています。
帯域比較
| 測定 | VXLAN over WireGuard | 純VXLAN | 差分 | 低下率 |
|---|---|---|---|---|
| single stream | 2.11 Gbits/sec | 2.27 Gbits/sec | -0.16 Gbits/sec | 約7.0% |
-P 4 |
2.11 Gbits/sec | 2.28 Gbits/sec | -0.17 Gbits/sec | 約7.5% |
-P 8 |
2.11 Gbits/sec | 2.28 Gbits/sec | -0.17 Gbits/sec | 約7.5% |
帯域だけを見ると、WireGuardを挟んでも低下は約7〜8%程度でした。
WireGuardによる暗号化、VXLANカプセル化、さらにUDP/IPヘッダの追加を考えると、もっと大きく落ちる可能性もあると考えていましたが、2.5GbE級の環境では実用上かなり良好でした。
測定結果:CPU使用率
次にホスト側CPU使用率です。
pve1側で測定しました。
VXLAN over WireGuard
devpj09で iperf3 実行中のpve1ホスト側CPU使用率は、おおよそ以下でした。
| 項目 | 概算 |
|---|---|
| ホスト全体CPU使用率 | 約14%前後 |
%sys + %soft |
約13%前後 |
傾向:カーネル処理・softirqが増えている
WireGuard暗号化、VXLAN処理、bridge処理、virtio/veth周辺の処理が重なり、CPU使用率は明確に上がりました。
純VXLAN
devpj08でのpve1ホスト側CPU使用率はかなり低く、mpstat全体平均では以下でした。
| 項目 | 結果 |
|---|---|
%usr |
0.43% |
%sys |
0.37% |
%soft |
0.27% |
%idle |
98.49% |
| ホスト全体CPU使用率 | 約1.51% |
純VXLANでは、2.27Gbps以上出ているにもかかわらず、ホスト側CPU使用率は非常に低い結果になりました。
CPU使用率比較
| 項目 | VXLAN over WireGuard | 純VXLAN |
|---|---|---|
| 帯域 | 約2.11 Gbits/sec | 約2.27〜2.28 Gbits/sec |
| pve1ホストCPU使用率 | 約14%前後 | 約1.5%前後 |
| 主な負荷 | WireGuard暗号化、VXLAN、softirq | VXLAN、bridge処理のみ |
| CPUコスト | 高い | かなり低い |
帯域差は小さいですが、CPU使用率の差は大きいです。
このため、WireGuard Fabricを使ったVXLAN over WireGuardは、単一テナントや低〜中程度のトラフィックでは十分実用的ですが、多数テナントが同時に高帯域通信する場合はCPUコストを考慮する必要があります。
考察
WireGuard Fabricのメリット
WireGuard Fabricを使う最大のメリットは、VXLANのunderlay通信を暗号化できることです。
通常のVXLANでは、underlayネットワーク上をUDP/4789のVXLANパケットが流れます。
一方、VXLAN over WireGuardでは、VXLANパケットがWireGuardトンネル内を流れるため、underlay側から見るとWireGuardの暗号化通信として見えます。
つまり、underlayネットワークを完全には信頼できない場合や、拠点間をまたいでProxmoxノードを接続する場合には、WireGuard Fabricは有効な選択肢になります。
一方で、内部クラスタ用途では注意が必要
同一拠点内のProxmoxクラスタで、underlayネットワークが管理者の制御下にある場合、WireGuard Fabricを常に使うメリットは限定的です。
特にマルチテナント基盤では、基盤管理者は各テナントネットワークの構成、仮想NIC、仮想スイッチ、ファイアウォール、ホスト側の通信経路を管理できます。
そのため、基盤管理者から各テナント内通信を完全に秘匿する、という目的でWireGuard Fabricを使うのは現実的ではありません。
この場合、WireGuard Fabricの主な価値は「基盤管理者からの秘匿」ではなく、以下になります。
- underlayネットワーク上でVXLANパケットを平文のまま流したくない
- 拠点間や非信頼ネットワークをまたぐ
- 物理ネットワーク側の観測者からoverlay通信を守りたい
- UDP/4789を直接見せず、WireGuardトンネル内に閉じ込めたい
逆に、完全に管理された内部ネットワークで使う場合は、純VXLANの方がCPU効率はかなり良いです。
今回の結論
今回の検証結果は以下です。
| 項目 | 結論 |
|---|---|
| VXLAN over WireGuard の帯域 | 純VXLAN比で約7〜8%低下 |
| VXLAN over WireGuard のCPU使用率 | 純VXLANより大きく増加 |
| 純VXLAN | 非常に軽い |
| WireGuard Fabric | 暗号化transportとして有効 |
| 内部クラスタ用途 | CPUコストを考えると純VXLANが有利 |
| 拠点間・非信頼underlay | WireGuard Fabricの価値が高い |
Proxmox 9.2 の WireGuard Fabric は、非常に面白い機能です。
ただし、少なくとも今回の検証結果では、同一拠点内の管理されたProxmoxクラスタで常時使う機能というより、underlayを信頼できない環境や、拠点間接続でVXLAN transportを暗号化したい場合に使う機能と考えるのが自然です。
帯域低下は思ったより小さい一方で、CPUコストは明確に増えるため、特に8テナント、16テナントといった複数テナントが同時に高帯域通信する環境では、CPU余力を見て設計する必要があります。
補足:MSL Setupでの考え方
私が開発している MSL Setup では、Proxmox上に複数の分離されたプロジェクトネットワークを作成します。
MSL Setup: https://github.com/zelogx/msl-setup
このようなマルチテナント基盤では、基盤管理者は各テナントの仮想ネットワークを管理する立場にあります。そのため、基盤管理者からテナント内部通信を完全に秘匿することを目的にWireGuard Fabricを使うのは、現実的な目的としてはあまり意味がありません。
一方で、underlayネットワーク側でVXLANを直接見せたくない場合や、拠点間接続を行う場合には、WireGuard Fabricは有効な選択肢になります。
そのため、MSL Setupとしては以下のような整理が自然だと考えています。
| モード | 位置づけ |
|---|---|
| 純VXLAN | 標準モード。軽く、高速。内部クラスタ向け |
| VXLAN over WireGuard | Secure Transport Mode。CPUコストは増えるが、underlay上の通信を暗号化できる |
今回の実測結果を見る限り、WireGuard Fabricは「常にONにするもの」というより、用途に応じて選択する機能として扱うのが良さそうです。
参考:物理ネットワーク直通の上限
比較のため、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%低下しました。
これは VNet側MTUが1450になることによる有効ペイロード低下に近い値です。
一方、VXLAN over WireGuardでは物理直通比で約10〜11%低下しました。
したがって、今回の環境では WireGuard を追加したことによる追加低下は約7%前後と見られます。