WireGuard VPN サーバーの構築メモ
ShadowSocks、V2Ray、SoftEther に続いて、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 によっては ens3 や enp0s3 など異なる名前の場合がある。
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 コードをスキャンすれば設定完了。
トラブルシューティング
接続できない場合
- ファイアウォール: UDP 51820 が開いているか確認
- IP フォワーディング:
cat /proc/sys/net/ipv4/ip_forwardが1か確認 - 鍵の不一致: サーバーとクライアントの公開鍵が正しく設定されているか確認
- ネットワークインターフェース名: 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)が導入されている
- 暗号化データのエントロピー分析も行われている
短時間・低トラフィックなら動くこともあるが、長時間の使用は検出リスクが高い。
対策
- TCP トンネルで包む:
udp2rawなどを使って UDP を TCP に偽装 - 難読化プロキシとの併用: WireGuard の前段に Shadowsocks や V2Ray を置く
- より検出されにくいプロトコルへの移行: VLESS + REALITY(Xray)、Hysteria2 など
VPS の選択
さくらインターネットなど一部の日本の VPS は、IP レンジ単位で中国からブロックされている場合がある。海外 VPS(Vultr、DigitalOcean、Linode など)の方が繋がりやすい傾向。
Vultr などを使う場合も、東京リージョンは避けた方がいい。シンガポールや香港など、中国に近いが日本ではないリージョンを選ぶとつながりやすい。
→ 続き: OpenConnect(ocserv)サーバーの構築メモ
→ まとめ: 対中国通信 VPN規格によるつながりやすさの比較