🦊
docker composeで作るVPN (WireGuard)
はじめに
出先で自宅鯖へアクセスしたいことがあり、docker compose + WireGuardで簡易的にVPNを構築。
やり方よく忘れるので忘備録として。
システム構成
- サーバー
- Linuxマシン (Windows/Macでの動作未確認)
- docker
- WireGuard ( linuxserver/wireguradイメージ )
- Linuxマシン (Windows/Macでの動作未確認)
- クライアント
- WireGuardクライアントアプリを入れた任意の端末
ディレクトリ構成
compose.ymlに必要な設定をし、 docker compose up
するとconfigディレクトリが自動生成される。
.
├── compose.yml ...................... # 事前に作成
└── config ........................... # 自動生成
├── coredns
│ └── Corefile
├── peer_AAAAA ................... # Peer(接続先)名
│ ├── peer_AAAAA.conf .......... # WireGuardクライアント用設定ファイル
│ ├── peer_AAAAA.png ........... # WireGuardクライアント用設定(QRコード)
│ ├── presharedkey-peer_AAAAA
│ ├── privatekey-peer_AAAAA
│ └── publickey-peer_AAAAA
├── peer_BBBBB ................... # Peer(接続先)名
│ ├── peer_BBBBB.conf
│ ├── peer_BBBBB.png
│ ├── ...
├── server
│ ├── privatekey-server
│ └── publickey-server
├── templates
│ ├── peer.conf
│ └── server.conf
└── wg_confs
└── wg0.conf
構築方法
- compose.yml定義
- compose起動
- クライアントアプリの設定
compose.yml定義
services:
wireguard:
image: lscr.io/linuxserver/wireguard:latest
cap_add:
- NET_ADMIN
- SYS_MODULE
environment:
- TZ=Asia/Tokyo
- SERVERURL=example.org # WireGuardサーバのグローバルIP/ホスト名
- SERVERPORT=51820 # WireGuardサーバの待受ポート
- PEERS=AAAAA,BBBBB # Peer名 (それぞれ鍵が発行される)
- PEERDNS=192.168.0.2 # [省略可]: クライアントに割り当てるDNS (アドレスは自宅鯖のDNS)
volumes:
- ./config:/config
- /lib/modules:/lib/modules
ports:
- 51820:51820/udp
sysctls:
- net.ipv4.conf.all.src_valid_mark=1
restart: unless-stopped
他パラメータはこちらを参照。
compose起動
docker compose up -d
起動するとconfigディレクトリが自動生成される。
(再起動時は作成済みのconfigディレクトリと設定ファイルをそのまま使用する)
└── config ........................... # 自動生成
├── coredns
│ └── Corefile
├── peer_AAAAA ................... # Peer(接続先)名
│ ├── peer_AAAAA.conf .......... # WireGuardクライアント用設定ファイル
│ ├── peer_AAAAA.png ........... # WireGuardクライアント用設定(QRコード)
│ ├── presharedkey-peer_AAAAA
│ ├── privatekey-peer_AAAAA
│ └── publickey-peer_AAAAA
├── peer_BBBBB ................... # Peer(接続先)名
│ ├── peer_BBBBB.conf
│ ├── peer_BBBBB.png
│ ├── presharedkey-peer_BBBBB
│ ├── privatekey-peer_BBBBB
│ └── publickey-peer_BBBBB
├── server
│ ├── privatekey-server
│ └── publickey-server
├── templates
│ ├── peer.conf
│ └── server.conf
└── wg_confs
└── wg0.conf
クライアントアプリの設定
※Pear (AAAAA)の例で説明
├── peer_AAAAA ................... # Peer(接続先)名
│ ├── peer_AAAAA.conf .......... # WireGuardクライアント用設定ファイル
│ ├── peer_AAAAA.png ........... # WireGuardクライアント用設定(QRコード)
いずれかでクライアントアプリの接続設定をする
- peer_AAAAA.confをクライアントアプリで読み込む
- peer_AAAAA.pngのQRコードをクライアントアプリで読み込む
Discussion