💻

VPN wireguard構築 Ubuntu 25.04 Windows11

に公開

VPSに WireGuard を使ったVPNを構築する手順をまとめます。
以下は サーバーはUbuntu/Debian 系、クライアントはWindows 11を想定しています。

確認コマンド

lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 25.04
Release:        25.04
Codename:       plucky

  1. VPS 側の準備

まず VPS にログインして以下を実行します。

sudo apt update && sudo apt upgrade -y
sudo apt install wireguard -y

  1. VPS 側で鍵の生成

WireGuard は公開鍵暗号方式を使います。

サーバーの鍵の作成

sudo wg genkey | sudo tee /etc/wireguard/server_private.key
sudo cat /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key

権限の調整

sudo chmod 600 /etc/wireguard/server_private.key
sudo chmod 644 /etc/wireguard/server_public.key

オーナーを root ユーザー に、グループも root に変更

sudo chown root:root /etc/wireguard/server_private.key /etc/wireguard/server_public.key

クライアントの鍵の作成

sudo wg genkey | sudo tee /etc/wireguard/client_private.key
sudo cat /etc/wireguard/client_private.key | wg pubkey | sudo tee /etc/wireguard/client_public.key

オーナーを root ユーザー に、グループも root に変更

sudo chown root:root /etc/wireguard/client_private.k
ey /etc/wireguard/client_public.key

確認

sudo ls -l /etc/wireguard/
-rw------- 1 root root  45  926 05:23 client_private.key
-rw-r--r-- 1 root root  45  926 05:24 client_public.key
-rw------- 1 root root  45  926 05:09 server_private.key
-rw-r--r-- 1 root root  45  926 05:10 server_public.key

鍵の中身を見るコマンド

sudo cat /etc/wireguard/server_private.key
sudo cat /etc/wireguard/server_public.key
sudo cat /etc/wireguard/client_private.key
sudo cat /etc/wireguard/client_public.key

  1. WireGuard サーバーの設定

/etc/wireguard/wg0.conf を作成します。

sudo nano /etc/wireguard/wg0.conf
[Interface]
# サーバーのVPN内アドレス
Address = 10.0.0.1/24

# サーバーの秘密鍵(生成済みのものを貼り付け)
PrivateKey = <サーバー秘密鍵>

# WireGuard が待ち受けるポート
ListenPort = 51820

# 外にパケットを転送できるように
PostUp = nft add rule ip nat POSTROUTING oif "ens3" ip saddr 10.0.0.0/24 counter masquerade
PostDown = nft delete rule ip nat POSTROUTING oif "ens3" ip saddr 10.0.0.0/24 counter masquerade

[Peer]
# クライアントの公開鍵
PublicKey = <クライアント公開鍵>

# クライアントのVPN内アドレス
AllowedIPs = 10.0.0.2/32

  1. LinuxカーネルのIPフォワード設定
    有効化する方法
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

確認

sudo sysctl net.ipv4.ip_forward

  1. 自分の環境が iptables なのか nftables なのかを見分けるコマンド
    iptables が互換モードか確認
sudo iptables -V
iptables v1.8.11 (nf_tables)

これは「iptables コマンドを叩いてはいるけど、中身は nftables を使っている」状態

次にVPS の外向きインターフェースを確認するコマンド

ip a

外向きインターフェース(インターネット側のNIC) ens3 に inet 210.131.210.107/24 が割り当てられているので ens3

WireGuard 用 NAT ルールを追加する

sudo nft add rule ip nat POSTROUTING oif "ens3" ip saddr 10.0.0.0/24 counter masquerade

nftables のルール一覧を見る

sudo nft list ruleset | grep -A5 'chain POSTROUTING'
chain POSTROUTING {
    type nat hook postrouting priority srcnat; policy accept;
    ip saddr 10.0.0.0/24 oif "ens3" counter masquerade
}

永続化(再起動しても残す)

sudo nft list ruleset | sudo tee /etc/nftables.conf > /dev/null
sudo systemctl enable nftables

  1. サーバー側 NAT を明示的に設定

UFW が有効な場合、wg-quick の自動 NAT ルールが効かないことがあります。
UFW の before.rules に NAT を追加するのが安定策です。

sudo nano /etc/ufw/before.rules

ファイルの最初の方に(コメントの直下くらい)以下を追加

# START WIREGUARD
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.0.0.0/24 -o ens3 -j MASQUERADE
COMMIT
# END WIREGUARD

保存して UFW を再起動

sudo ufw disable
sudo ufw enable

  1. WireGuard 起動 & 自動起動

サーバー側で有効化

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

ステータス確認

sudo wg show

  1. ポートを開ける
sudo ufw allow 51820/udp
sudo ufw reload

  1. クライアント設定ファイル

10.0.0.2 を使うクライアントの wg0.conf はこうなります

[Interface]
Address = 10.0.0.2/24
PrivateKey = <クライアント1の秘密鍵>
DNS = 1.1.1.1

[Peer]
PublicKey = # サーバーの公開鍵
Endpoint = 210.131.210.107:51820
AllowedIPs = 0.0.0.0/0, ::/0

  1. クライアント接続

Windowsのwireguardアプリで有効化


  1. 動作確認

VPN 接続後に自分の IP を確認して、VPS の IP に変わっていれば成功です。


補足:systemd ジャーナルで WireGuard のログを見るコマンド

sudo journalctl -u wg-quick@wg0 -f

Discussion