WireGuardをプロのように管理:HomeLab向けにwg-easyをDockerでデプロイする

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

課題:なぜ手動設定は面倒なのか

WireGuardは、その圧倒的な効率性から、IPsecやOpenVPNといった古いプロトコルに急速に取って代わりました。例えばRaspberry Pi 4では、WireGuardはしばしば600〜800 Mbpsの暗号化トラフィックを処理できますが、OpenVPNでは100 Mbpsに達するのにも苦労することがあります。しかし、一つ難点があります。それはコマンドラインでの管理が煩雑なことです。キーペアを手動で生成し、新しいスマートフォンやノートPCごとに.confファイルを作成し、それらのファイルを安全に移動させる作業は、まるで1995年の作業のように感じられます。

HomeLab愛好家にとって、セキュリティ対策が「第二の仕事」のように感じられては本末転倒です。そこで登場するのがwg-easyです。これはWireGuardを単一のDockerコンテナにパッケージ化し、洗練されたレスポンシブなWebダッシュボードを追加したものです。テキストファイルを編集する代わりに、ボタンをクリックしてデバイスに名前を付け、QRコードをスキャンするだけで完了します。筆者もいくつかの環境をこの方法に移行しましたが、数十のアクティブなピア(接続端末)がある状態でも、安定性は非常に強固です。

wg-easyを使用することで、商用VPNプロバイダーのような使い勝手の良さを手に入れつつ、データに対する完全なコントロールを維持できます。

インストール:Docker環境のセットアップ

イメージをプルする前に、ホスト(Ubuntu、Debian、またはNASなど)にDocker och Docker Composeが準備されていることを確認してください。また、外出先からデバイスが自宅サーバーを見つけられるように、パブリックIPまたはダイナミックDNS(DDNS)アドレスも必要です。

1. ゲートを開放する(ポートフォワーディング)

WireGuardはUDP経由で通信します。ルーターにログインし、UDPポート 51820をサーバーの内部IPに転送(ポートフォワーディング)する必要があります。これを忘れると、クライアントがパケットを送信してもサーバーに届かず、「ハンドシェイク」が成立しません。

2. Docker Composeの設定

クリーンなHomeLabを維持するには整理整頓が鍵となります。まずは設定ファイルと鍵を保管するための専用フォルダを作成しましょう。

mkdir ~/wireguard-vpn && cd ~/wireguard-vpn
nano docker-compose.yml

以下の設定をコピーして貼り付けます。この設定では公式のwg-easyイメージを使用し、コンテナにネットワークトラフィックを管理するために必要な権限を付与します。

services:
  wg-easy:
    environment:
      # 必須:パブリックIPまたはDDNS(例:home.yourdomain.com)
      - WG_HOST=vpn.yourdomain.com
      
      # 必須:ダッシュボード用の強力なパスワード
      - PASSWORD=強力なパスワードをここに123!
      
      # オプション:広告ブロックのためにPi-holeやAdGuardを指定可能
      # - WG_DEFAULT_DNS=192.168.1.10
      
      - PORT=51821
      - WG_PORT=51820
    image: ghcr.io/wg-easy/wg-easy
    container_name: wg-easy
    volumes:
      - ./config:/etc/wireguard
    ports:
      - "51820:51820/udp"
      - "51821:51821/tcp"
    restart: unless-stopped
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.conf.all.src_valid_mark=1
      - net.ipv4.ip_forward=1

3. 起動する

ファイルを保存したら、サービスを開始します。Dockerがイメージをプルし、仮想ネットワークインターフェースを自動的に構成します。

docker compose up -d

設定:詳細を正しく整える

コンテナは動作していますが、スムーズな運用のためにいくつかの微調整が必要です。接続に関する問題の多くは、WG_HOST変数の設定ミスに起因します。

WG_HOSTの重要性

この変数は、クライアントがどこに接続すべきかを指定します。192.168.1.50のようなローカルIPを使用すると、VPNは自宅のリビングにいる時しか機能しません。パブリックIPまたはDuckDNSのようなサービスを使用してください。これにより、カフェにいても海外にいても、スマートフォンがサーバーを見つけられるようになります。

Web UIのセキュリティ強化

Webインターフェースは便利ですが、攻撃の標的にもなり得ます。PASSWORDフィールドを空のままにしないでください。さらに上を目指すなら、Nginx Proxy Managerのようなリバースプロキシの背後にこのUIを配置しましょう。SSL証明書を追加することで、管理者の認証情報がインターネット上をプレーンテキストで流れるのを防ぐことができます。

カーネルモジュールに関する注意

WireGuardは速度を最大限に引き出すため、Linuxカーネル内で動作します。コンテナの起動に失敗する場合、ホストに必要なヘッダーが不足している可能性があります。最新のほとんどのLinuxディストリビューションでは、以下のコマンドで更新することで解決します。

sudo apt update && sudo apt install wireguard

最初のデバイスを接続する

いよいよお楽しみのステップです。ブラウザでhttp://your-server-ip:51821にアクセスし、ログインしてください。インターフェースは驚くほどシンプルです。

ピア(接続先)の追加

  1. “+ New Client”をクリックします。
  2. “Pixel-7-Pro”や”MacBook-Air”など、具体的な名前を付けます。
  3. “Create”を押します。

即座に新しいエントリが表示されます。スマートフォンを接続するには、QRコードアイコンをクリックし、WireGuardアプリでスキャンします。ノートPCの場合は、.confファイルをダウンロードしてWireGuardクライアントにインポートするだけです。10秒もかかりません。

リアルタイム監視

wg-easyのダッシュボードは、単なる設定ツール以上の機能を備えています。緑色のステータスインジケーターで、誰が接続しているかを正確に把握できます。また、データ転送量も監視できるため、自宅のアップロード帯域を消費しているバックグラウンドのバックアッププロセスなどを特定するのにも便利です。

スプリットトンネル vs フルトンネル

デフォルトでは、wg-easyはスマートフォンのすべてのトラフィック(0.0.0.0/0)をVPN経由でルーティングします。これは公共Wi-Fiでのセキュリティ確保に最適です。しかし、現在の場所のインターネット回線でNetflixを視聴しつつ、HomeLab内のリソース(192.168.1.100にあるNASなど)にだけアクセスしたい場合は、クライアントアプリの「Allowed IPs」を自宅のサブネット(例:192.168.1.0/24)に変更してください。

このDockerベースのワークフローに切り替えて以来、数ヶ月間設定ファイルに触れる必要がなくなりました。ただ動く、それだけです。カーネルレベルのプロトコルによる圧倒的な速度と、モダンなWebアプリの利便性を両立させることができます。

Share: