背景:深夜2時、Site-to-Siteバックアップシステムが「ストライキ」を起こした時
深夜2時、私のスマートフォンが激しく震えました。監視システムからの不吉な通知:拠点(サイトB)のProxmoxクラスターが、メインサーバー(サイトA)へのバックアップ転送に失敗しているとのこと。急いで確認したところ、以前から使用していたOpenVPNがフリーズしていました。レイテンシは1,500msを超え、すべての接続がタイムアウトを繰り返していました。
その時、複雑な設定が必要で肥大化したVPNシステムを維持することの限界を感じました.もっと軽量で、高速、そして真に安定したものが必要でした。それが、インフラ全体をWireGuardに移行した理由です。
12台の仮想マシン(VM)を稼働させているラボ環境でテストしたところ、驚くべき結果が出ました。転送速度は45Mbps(OpenVPN)から回線上限の300Mbpsまで向上。一方で、CPU使用率は15%からわずか2%未満にまで低下しました。以下に、2つのProxmox内部ネットワークを完全に疎通させるための設定方法をまとめます。
ステップ1:準備とインストール
構成をイメージしやすいよう、実際のデプロイシナリオに基づいたパラメータを使用します:
- サイトA(本社): WAN IP:
1.2.3.4| 内部ネットワーク:192.168.10.0/24| WireGuard IP:10.0.0.1 - サイトB(支店): WAN IP:
5.6.7.8| 内部ネットワーク:192.168.20.0/24| WireGuard IP:10.0.0.2
ProxmoxはDebianベースで動作しているため、インストールは非常に簡単です。両方のノードで以下のコマンドを実行してください:
apt update && apt install wireguard -y
次に、IPフォワーディング機能を有効にします。このステップにより、Proxmoxがルーターとして機能し、VPNインターフェースと内部ネットワーク間でパケットを転送できるようになります。これが設定されていないと、内部の仮想マシン(VM)同士が通信できません。
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
ステップ2:キーペアの生成
WireGuardはセキュリティのために公開鍵方式を使用します。各ノードで独自のキーセットを作成し、安全に保管してください。秘密鍵(Private Key)は絶対に外部に漏らさないようにしてください。
mkdir -p /etc/wireguard && cd /etc/wireguard
umask 077
wg genkey | tee privatekey | wg pubkey > publickey
コマンド実行後、各サイトに privatekey と publickey ファイルが作成されます。
ステップ3:Site-to-Siteの実際の設定
サイトA(メインサーバー)の設定
以下の内容で /etc/wireguard/wg0.conf ファイルを作成します:
[Interface]
PrivateKey = <Private_Key_Site_A>
Address = 10.0.0.1/24
ListenPort = 51820
# サイトBの仮想マシンがサイトAの仮想マシンを認識できるようにするためのルーティング
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o vmbr0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o vmbr0 -j MASQUERADE
[Peer]
PublicKey = <Public_Key_Site_B>
AllowedIPs = 10.0.0.2/32, 192.168.20.0/24
Endpoint = 5.6.7.8:51820
PersistentKeepalive = 25
サイトB(支店)の設定
サイトBも同様に設定します:
[Interface]
PrivateKey = <Private_Key_Site_B>
Address = 10.0.0.2/24
ListenPort = 51820
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o vmbr0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o vmbr0 -j MASQUERADE
[Peer]
PublicKey = <Public_Key_Site_A>
AllowedIPs = 10.0.0.1/32, 192.168.10.0/24
Endpoint = 1.2.3.4:51820
PersistentKeepalive = 25
重要なポイント: AllowedIPs の行には、相手側のネットワークのIP範囲を含める必要があります。これにより、WireGuardはどのパケットをVPNトンネルに送るべきかを判断します。
ステップ4:有効化と結果の確認
いよいよシステムを起動します。両方のマシンで以下のコマンドを実行してください:
systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0
ステータスを確認するには、定番のコマンドを使用します:
wg show
もし latest handshake という行が表示され、データ転送量(transfer)がカウントされていれば、接続は成功しています。最後に、サイトAのVM(192.168.10.50)からサイトBのVM(192.168.20.100)へpingを試してみてください。地理的な距離にもよりますが、レスポンスが10ms以下であれば成功と言えるでしょう。
ステップ5:トラブルシューティングの経験則
トンネルが「UP」と表示されていても、データが通らないことがあります。私の経験上、まずは pve-firewall を確認すべきです。Proxmoxのデフォルトのファイアウォールはかなり厳格で、未知のIP範囲からのパケットをブロックすることがあります。
両方のルーターで 51820/UDP ポートが開放されていることを確認してください。また、以下のコマンドでルーティングテーブルを確認します:
ip route show
192.168.x.0/24 dev wg0 という行が表示されている必要があります。これがない場合、WireGuardが AllowedIPs の設定を読み込めていません。動的IPを使用している方へのヒント:DDNSを使用し、Endpoint 部分にドメイン名を入力してください。WireGuardは再接続時に新しいIPを自動的に解決します。
WireGuardの導入により、夜間の当番での不安が解消されただけでなく、サーバーリソースも大幅に最適化されました。複数の拠点を管理している場合、これは間違いなく現時点で最も安定し、かつ効率的なソリューションです。

