技術 約5分で読めます

WireGuard VPN サーバーの構築メモ

ShadowSocksV2RaySoftEther に続いて、WireGuard についてもまとめておく。これは当時使ってなかったので、2025年現在の情報をベースにしている。

WireGuard とは

WireGuard は 2018 年に登場した比較的新しい VPN プロトコル。Linux カーネルに組み込まれており(4.9以降)、シンプルで高速なのが特徴。

他のプロトコルとの比較:

  • OpenVPN: 歴史が長く安定しているが、設定が複雑で遅い
  • IPsec: 企業向け。設定が非常に複雑
  • WireGuard: コード量が少なく(約4,000行)、監査しやすい。高速

WireGuard は UDP ベースで動作し、デフォルトポートは 51820。

サーバー構築手順

Ubuntu 22.04 / 24.04 での手順。WireGuard はデフォルトリポジトリに含まれている。

インストール

sudo apt update
sudo apt install wireguard

鍵ペアの生成

サーバー用の秘密鍵と公開鍵を生成する。

cd /etc/wireguard
umask 077
wg genkey | tee server_private.key | wg pubkey > server_public.key

鍵の確認:

cat server_private.key
cat server_public.key

設定ファイルの作成

/etc/wireguard/wg0.conf を作成:

[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <server_private.key の内容>

# NAT設定(クライアントがインターネットにアクセスするため)
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

# クライアント設定(後で追加)
# [Peer]
# PublicKey = <client_public.key>
# AllowedIPs = 10.0.0.2/32

注意: eth0 はサーバーのネットワークインターフェース名に置き換える。ip a で確認できる。VPS によっては ens3enp0s3 など異なる名前の場合がある。

IP フォワーディングの有効化

echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

ファイアウォールの設定

UFW を使用している場合:

sudo ufw allow 51820/udp
sudo ufw reload

iptables を直接使う場合:

sudo iptables -A INPUT -p udp --dport 51820 -j ACCEPT

サービスの起動

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

状態確認:

sudo wg show

クライアントの追加

クライアント用の鍵ペア生成

クライアント側で実行するか、サーバーで生成してクライアントに渡す。

wg genkey | tee client_private.key | wg pubkey > client_public.key

サーバー設定にクライアントを追加

/etc/wireguard/wg0.conf に追記:

[Peer]
PublicKey = <client_public.key の内容>
AllowedIPs = 10.0.0.2/32

設定を反映(サービス再起動なしで追加可能):

sudo wg set wg0 peer <client_public.key> allowed-ips 10.0.0.2/32

または:

sudo systemctl restart wg-quick@wg0

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

クライアント側の /etc/wireguard/wg0.conf(Linux の場合)または WireGuard アプリに設定:

[Interface]
PrivateKey = <client_private.key の内容>
Address = 10.0.0.2/24
DNS = 1.1.1.1, 8.8.8.8

[Peer]
PublicKey = <server_public.key の内容>
Endpoint = <サーバーのIPアドレス>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

AllowedIPs の設定:

  • 0.0.0.0/0 - 全トラフィックを VPN 経由にする(フルトンネル)
  • 10.0.0.0/24 - VPN 内部のみ VPN 経由(スプリットトンネル)

複数クライアントの管理

クライアントごとに異なる IP を割り当てる:

# クライアント1
[Peer]
PublicKey = <client1_public.key>
AllowedIPs = 10.0.0.2/32

# クライアント2
[Peer]
PublicKey = <client2_public.key>
AllowedIPs = 10.0.0.3/32

# クライアント3
[Peer]
PublicKey = <client3_public.key>
AllowedIPs = 10.0.0.4/32

QRコードでのクライアント設定

スマートフォン向けに QR コードを生成できる。

sudo apt install qrencode
qrencode -t ansiutf8 < client.conf

WireGuard アプリで QR コードをスキャンすれば設定完了。

トラブルシューティング

接続できない場合

  1. ファイアウォール: UDP 51820 が開いているか確認
  2. IP フォワーディング: cat /proc/sys/net/ipv4/ip_forward1 か確認
  3. 鍵の不一致: サーバーとクライアントの公開鍵が正しく設定されているか確認
  4. ネットワークインターフェース名: PostUp/PostDown の eth0 が正しいか確認

ログの確認

sudo journalctl -u wg-quick@wg0 -f

接続状態の確認

sudo wg show

最後のハンドシェイク時刻が表示されていれば接続成功。

2025年現在の注意点

中国での使用について

WireGuard は単体では中国の GFW(Great Firewall)に検出される可能性がある。理由:

  • UDP ベースのトラフィックパターンが特徴的
  • 2024年後半から AI ベースの DPI(Deep Packet Inspection)が導入されている
  • 暗号化データのエントロピー分析も行われている

短時間・低トラフィックなら動くこともあるが、長時間の使用は検出リスクが高い。

対策

  1. TCP トンネルで包む: udp2raw などを使って UDP を TCP に偽装
  2. 難読化プロキシとの併用: WireGuard の前段に Shadowsocks や V2Ray を置く
  3. より検出されにくいプロトコルへの移行: VLESS + REALITY(Xray)、Hysteria2 など

VPS の選択

さくらインターネットなど一部の日本の VPS は、IP レンジ単位で中国からブロックされている場合がある。海外 VPS(Vultr、DigitalOcean、Linode など)の方が繋がりやすい傾向。

Vultr などを使う場合も、東京リージョンは避けた方がいい。シンガポールや香港など、中国に近いが日本ではないリージョンを選ぶとつながりやすい。

→ 続き: OpenConnect(ocserv)サーバーの構築メモ

→ まとめ: 対中国通信 VPN規格によるつながりやすさの比較

参考