skip to content
barorin&?

Docker ComposeでWireGuard VPNをVPSに構築する方法【LinuxServer.io版】

/ 3 min read

Table of Contents

はじめに

WireGuardをVPS上でdocker-composeを使って構築する際の、最も標準的かつメンテナンス性の高いLinuxServer.io版の構成を紹介します。 OpenVPNと比べてシンプルな設定・高速な通信が特徴で、スマホからPCまで幅広いクライアントに対応しています。

手順

1. docker-compose.yml の作成

ディレクトリを作成して、以下の内容でdocker-compose.ymlを作成してください。

services:
wireguard:
image: lscr.io/linuxserver/wireguard:latest
container_name: wireguard
cap_add:
- NET_ADMIN
- SYS_MODULE # ホストのカーネルモジュールを使用するために必要
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Tokyo
- SERVERURL=your.vps.ip.address # VPSのパブリックIPまたはドメイン名
- SERVERPORT=51820 # 使用するUDPポート
- PEERS=pc1,phone1,laptop1 # 作成したいクライアント名(カンマ区切り)
- PEERDNS=auto # クライアントが使用するDNS
- INTERNAL_NETWORK=10.13.13.0 # VPN内のネットワークセグメント
volumes:
- ./config:/config
- /lib/modules:/lib/modules # ホストのカーネルと連携
ports:
- "51820:51820/udp"
sysctls:
- net.ipv4.conf.all.src_valid_mark=1
restart: unless-stopped

2. サーバーの準備(重要)

WireGuardはカーネルレベルで動作するため、VPSのOS(Ubuntu/Debianなど)でWireGuardモジュールが利用可能である必要があります。

  1. ホスト側でインストール
Terminal window
sudo apt update && sudo apt install -y wireguard
  1. UDPポートの開放
    VPSのファイアウォール(UFWや、クラウド事業者の管理パネル)で51820/UDPを許可してください。

3. 起動とクライアント設定の取得

コンテナを起動します。

Terminal window
docker compose up -d

LinuxServer.ioのイメージは、起動時にクライアント用のQRコードと設定ファイルを自動生成してくれます。

  • スマホ(QRコード)で設定する場合

以下のコマンドを実行すると、ターミナルにQRコードが表示されます。WireGuardアプリでスキャンするだけです。

Terminal window
docker logs -f wireguard
  • PC用設定ファイル(.conf)を取り出す場合

./config/peer_pc1/などのディレクトリ内にpeer_pc1.confが生成されています。これをPCのWireGuardアプリに読み込ませます。

補足:TCP接続が必要な場合

WireGuardは公式にはUDPのみをサポートしています。ホテルのWi-FiなどでUDPがブロックされている環境では、UDP2RAWやWarp-plusなどのトンネリングツールをWireGuardの前段に挟む必要があります。 ただし、多くの環境では 51820/UDP を開放しておけば問題なく動作します。