WireGuard 構築・運用ログ|VPS 上に業務用 VPN を作って「暗号化」と「運用楽」を同時に手に入れた話

前回の記事では、なぜ WireGuard を選んだか という判断の背景を書きました。

今回はその続きとして、
実際に VPS 上に WireGuard を構築して、業務で運用してみた記録 をまとめます。

Web 公開用途ではなく、業務専用 VPN という前提なので、
「最低限・シンプル・安定」を軸にしています。


今回の構成イメージ

今回の VPN 構成はこんな感じです。

  • VPS(Ubuntu 24.04)上に WireGuard サーバ
  • VPN 内部ネットワーク:10.0.0.0/24
  • サーバ:10.0.0.1
  • クライアント:10.0.0.2 以降
  • スマホからは VPN 経由のみ利用

あくまで 業務システム用途限定 で、Web サービスを外に公開する目的ではありません。

SQL Server、Metabase、VPN を 1 台の VPS に同居させていますが、
業務用途としては特に問題なく安定しています。

この構成を動かしている VPS は、
実際に業務検証・運用している Xserver VPS です。
メモリ 12GB のビジネスプランで、DB と BI と VPN を同居させても、体感的に余裕があります。


VPS で WireGuard は問題なかったか?

結論としては、特に問題なし でした。

  • CPU 使用率:ほぼ変化なし
  • 常時接続:安定
  • 再起動後:systemd で自動復旧
  • 通信:体感的にかなり軽快

SQL Server + Metabase + VPN という構成なので、
最初は負荷面を少し心配していましたが、
業務用途レベルでは余裕があります。

むしろ、SQL Server Express のメモリ制限がブレーキになっている分、
全体としてバランスが取れている
という印象でした。


WireGuard のインストール

必要なパッケージのみインストールします。

apt update
apt install wireguard qrencode

qrencode は QR コード生成用です。
あとでスマホ設定でかなり役に立ちます。


鍵の生成

まずサーバー側で鍵を作成。

wg genkey | tee server_private.key | wg pubkey > server_public.key

クライアント用も同様に生成します。

wg genkey | tee client1_private.key | wg pubkey > client1_public.key

鍵ファイルは、
第三者に読まれない場所で管理 するのが前提です。


サーバー設定例(wg0.conf)

/etc/wireguard/wg0.conf

[Interface]
Address = 10.0.0.1/24
ListenPort = 30274
PrivateKey = <server_private.key の中身>

PostUp   = sysctl -w net.ipv4.ip_forward=1
PostDown = sysctl -w net.ipv4.ip_forward=0

[Peer]
PublicKey = <client1_public.key の中身>
AllowedIPs = 10.0.0.2/32

ポイントとしては、

  • ポート番号は高番ポートを使用
  • ルーティングが不要な場合は PostUp 行は省略可能

専用用途なので、できるだけ 余計な設定を入れない 方針です。


クライアント設定例(client1.conf)

[Interface]
PrivateKey = <client1_private.key の中身>
Address = 10.0.0.2/32
DNS = 8.8.8.8

[Peer]
PublicKey = <server_public.key の中身>
Endpoint = <VPSのIPアドレス>:30274
AllowedIPs = 10.0.0.0/24
PersistentKeepalive = 25

PersistentKeepalive = 25 は、
モバイル回線利用時の接続維持用です。

これを入れておくと、
スマホ利用時の安定度がかなり上がりました。


QRコードでスマホ設定が一気に楽になった

ここが WireGuard の一番ありがたいポイント でした。

qrencode -t ansiutf8 < client1.conf

ターミナルに QR が表示されるので、
スマホの WireGuard アプリでそのまま読み取れます。

設定ファイルを配布する必要がなく、
業務用スマホが複数ある場合でも 圧倒的に運用が楽 です。

正直、
「VPN 設定って面倒」
というイメージを一気に覆されました。


起動と自動起動設定

systemctl start wg-quick@wg0
systemctl enable wg-quick@wg0

状態確認:

wg

Peer が表示されていれば正常です。

再起動後も自動で立ち上がるので、
運用面で気にすることはほぼなくなりました。


実際に使ってみて感じたこと

一番心配だったのは、スマホのバッテリー消費 でした。

VPN 常時接続だと、
電池の減りが激しいんじゃないかと正直ビビっていました。

結果としては、

  • 体感レベルでは ほぼ影響なし
  • 常時接続でも特に不満なし

という感じです。

QR 設定の手軽さと合わせて、
導入前に想像していたよりずっと楽 でした。


スマホアクセスを VPN に閉じた効果

この構成にして一番良かったのは、

  • 管理系ポートを外部公開しなくてよくなった
  • SQL Server や BI を VPN 内に閉じられた
  • 自己署名証明書の制約を気にせず安全に利用できた

という点です。

「SSL 化しなきゃ」「証明書どうする?」と悩む時間が、
ほぼゼロになりました。

結果として、

頑張って個別に暗号化対応するより、
VPN で丸ごと包んでしまった方が圧倒的に楽

という結論になりました。


VPS 構成について少しだけ

今回のように、

  • DB
  • BI
  • VPN

を 1 台に集約する構成では、
ある程度スペックに余裕のある VPS が扱いやすいです。

業務用途で VPS を選ぶ場合は、

  • SLA
  • ネットワーク仕様
  • バックアップ手段

このあたりを、
公式情報で一度しっかり確認しておくと安心です。

私は業務用途として Xserver VPS を使っていますが、
このあたりの判断理由や選定ポイントは、
なぜ Xserver VPS を選んだか」の記事でまとめています。


まとめ

  • WireGuard は VPS 環境でも安定
  • スマホ VPN との相性がとても良い
  • QR 設定が想像以上に楽
  • 管理系アクセスを閉じる用途に向いている
  • 思っていたより構築はずっと簡単だった

正直、
もっと早くやっておけばよかった と思いました。


次回は、
WireGuard + SQL Server + Metabase を同居させた全体構成 について、
運用視点でまとめています。


次の記事

WireGuard + SQL Server + Metabase を同居させた全体構成
― 現場判断ベースで作った業務環境の実例ログ ―業務環境を刷新しよう、という大きな構想が最初からあったわけではない。目の前にあったのは、何となく残り続けていたFTP構成Excelベースの集計運用老朽化したオンプレサーバという、よくある 「現...