0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Proxmox 9.2のWireGuard FabricでVXLAN over WireGuardを構築する

0
Posted at

はじめに

  • 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
    • 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をクリック

ここはややこしいですが、少なくとも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や対象通信が許可されているか確認する。

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つあります。
  1. pve1でSNAT/MASQUERADEする
  2. 上流ルータに 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の構成判断を、できるだけ再現性のある形で扱えるようにすることを目指しています。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?