ラズパイにWireGuardでVPNを構築する
公開日:
カテゴリ: Raspberry Pi
ラズパイにWireGuardを構築してみました。今回はDockerを使用して構築します。
Dockerイメージの取得
公式ではDockerイメージは準備されていないので、自力でビルドするか公開イメージを使う必要があります。
今回はLinuxServer.ioが管理しているDockerイメージを使います。
compose.ymlファイルの作成
基本的にGitHubのリポジトリページに書かれている通りに作成すれば問題ありません。なるべく最小限の記述になるように意識しています。
services:
wireguard:
image: linuxserver/wireguard
restart: unless-stopped
environment:
PUID: "1000"
PGID: "1000"
TZ: "Asia/Tokyo"
SERVERURL: "グローバルIP"
PEERS: "接続する端末数"
# LOG_CONFS: false
volumes:
- ./config:/config
cap_add:
- NET_ADMIN
ports:
- 51820:51820/udp
以下、特筆すべき設定項目です。
環境変数: PEERS
PEERS
環境変数がセットされている場合はサーバモード、セットされていない場合はクライアントモードとして動作します。
今回はサーバとして動作させるため、必ずPEERS
のセットが必要です。PEERS
には接続する端末の数、もしくは接続端末名をカンマ区切りでセットします。ここにセットした数だけ接続設定(鍵など)が自動で生成されます。
# 数値で設定する例
PEERS: "3"
# 接続名で設定する例
PEERS: "desktop,phone1,phone2"
環境変数: LOG_CONFS
LOG_CONFS
環境変数がtrueの場合、Dockerのログに接続用のQRコードが出力されます。初回接続時は便利ですが以降は邪魔なので、初回接続完了時にコメントアウトを外します。この環境変数がセットされていない場合はtrue
とみなされます。
ボリュームのマウント
コンテナを再生成するたびに接続設定が変わっては困るため、設定ファイルの書き出し先をマウントします。コンテナ側の設定ファイルの保存パスは/config
となっています。
モジュール
ホスト側のWireGuardモジュールがロードされていない場合に、ロードを行う機能があります。Raspberry Pi OSでは初期状態でロードされているようなので基本的には不要です。ロードされていない環境ではロードするように設定するか、以下の記述を追記します。
cap_add:
- SYS_MODULE
volumes:
- /lib/modules:/lib/modules
ちなみにWireGuardはLinuxカーネル5.6から取り込まれており、以降は別途カーネルモジュールをインストールする必要はなくなりました(debian系ではbullseye以降)。
その他
sysctls
はサーバモードでは不要です
起動・接続
docker compose up -d
コンテナを立ち上げます。
docker logs wireguard
LOG_CONFS
環境変数がセットされていない場合は、Dockerのログに接続設定用のQRコードが出力されているので、それを用いて接続します。
正常に接続できることを確認したらcompose.yml
のLOG_CONFS
のコメントアウトを外して、QRコードがログに出力されないようにして一先ずは完了です。
カテゴリ: Raspberry Pi