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-stopped2. サーバーの準備(重要)
WireGuardはカーネルレベルで動作するため、VPSのOS(Ubuntu/Debianなど)でWireGuardモジュールが利用可能である必要があります。
- ホスト側でインストール
sudo apt update && sudo apt install -y wireguard- UDPポートの開放
VPSのファイアウォール(UFWや、クラウド事業者の管理パネル)で51820/UDPを許可してください。
3. 起動とクライアント設定の取得
コンテナを起動します。
docker compose up -dLinuxServer.ioのイメージは、起動時にクライアント用のQRコードと設定ファイルを自動生成してくれます。
- スマホ(QRコード)で設定する場合
以下のコマンドを実行すると、ターミナルにQRコードが表示されます。WireGuardアプリでスキャンするだけです。
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 を開放しておけば問題なく動作します。