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
- VPS 側の準備
まず VPS にログインして以下を実行します。
sudo apt update && sudo apt upgrade -y
sudo apt install wireguard -y
- 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 9月 26 05:23 client_private.key
-rw-r--r-- 1 root root 45 9月 26 05:24 client_public.key
-rw------- 1 root root 45 9月 26 05:09 server_private.key
-rw-r--r-- 1 root root 45 9月 26 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
- 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
- LinuxカーネルのIPフォワード設定
有効化する方法
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
確認
sudo sysctl net.ipv4.ip_forward
- 自分の環境が 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
- サーバー側 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
- WireGuard 起動 & 自動起動
サーバー側で有効化
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0
ステータス確認
sudo wg show
- ポートを開ける
sudo ufw allow 51820/udp
sudo ufw reload
- クライアント設定ファイル
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
- クライアント接続
Windowsのwireguardアプリで有効化
- 動作確認
VPN 接続後に自分の IP を確認して、VPS の IP に変わっていれば成功です。
補足:systemd ジャーナルで WireGuard のログを見るコマンド
sudo journalctl -u wg-quick@wg0 -f
Discussion