はじめに
この記事を読む前に下記を確認した方がいいかもしれません。
なお OCI だと無料で試せるので OCI を使用しています。
Docker を使わずに WireGuard だけを建てるには(フロントエンドなし)
OCI で IPv6 対応インスタンスを建てるには
フロントエンド wg-easy Ver.15
WireGuard VPN サーバーを、フロントエンド付きで建てる方法です。
wg-easy の特徴
- 設定ファイルを簡単に量産できる
- QRコードを発行できる
- Android / iOS 用の WireGuard も簡単に設定できる
- その他の設定もすべて GUI 上で変更できる
使用した環境
- Enterprise Linux ( RHEL, CentOS, Rocky Linux, Alma Linux, Oracle Linux ) 9.5
- Docker Compose
- wg-easy Ver.15
- WireGuard を含む
- Ver.15 ではUIや内部構造が刷新
- IPv6 完全対応
- 過去のバージョンとの互換性はない
- 過去のバージョンが良い人は Ver.13 を使うといいです
導入
1. Docker コンテナを建てる
Docker が入っていない場合はコチラ(クリック)
1-0. Docker をインストール
# dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# systemctl enable --now docker
1-1. ディレクトリを作る
# mkdir -p /etc/docker/containers/wg-easy_wg0
複数建てることを考慮して"_wg0"を付けています。付けなくてもいいです。
1-2. ディレクトリへ移動する
# cd /etc/docker/containers/wg-easy_wg0
1-3. Docker Compose ファイルをダウンロードする
# curl -OL https://raw.githubusercontent.com/wg-easy/wg-easy/master/docker-compose.yml
1-4. docker-compose.yml を確認&編集する
volumes:
wg-easy_wg0: # ボリューム名(※)(★)
services:
wg-easy:
+ environment:
+ - INSECURE=ture # httpでのアクセスを許可(公式はHTTPSリバースプロキシを推奨)
image: ghcr.io/wg-easy/wg-easy:15
container_name: wg-easy_wg0 # コンテナ名(※)
networks:
wg:
ipv4_address: 10.42.42.42 # Docker コンテナのネットワーク(※)(*)
ipv6_address: fdcc:ad94:bacf:61a3::2a # Docker コンテナのネットワーク(※)(*)
volumes:
- wg-easy_wg0:/etc/wireguard # マッピングするボリューム名(※)左辺を★と合わせる
- /lib/modules:/lib/modules:ro
ports:
- "51820:51820/udp" # VPN ポートのマッピング(※)
- "51821:51821/tcp" # GUI 管理画面ポートのマッピング(※)
restart: unless-stopped
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1
- net.ipv6.conf.all.disable_ipv6=0
- net.ipv6.conf.all.forwarding=1
- net.ipv6.conf.default.forwarding=1
networks:
wg:
+ external: true # 既存の(自分で作った)ネットワークを使うことを明示
+ name: wg0 # ネットワーク名(※)
driver: bridge
enable_ipv6: true
- ipam:
- driver: default
- config:
- - subnet: 10.42.42.0/24
- - subnet: fdcc:ad94:bacf:61a3::/64
IPAMに任せて Docker ネットワークを作るとネットワーク名が起動する度にランダムに変わるので、この表記を消して自分で作ります。一つのホストマシンで2つ以上建てる場合は(※)項目が重複しないように変更します。
1-5. Docker ネットワークを作る(名前を固定するために必要)
# docker network create \
--driver=bridge \
--subnet=10.42.42.0/24 \
--ipv6 \
--subnet=fdcc:ad94:bacf:61a3::/64 \
--opt com.docker.network.bridge.name=wg0 \
wg0
ここではネットワーク名を wg0 としています。
docker-compose.yml の(*)項目と一致するように作ります。
既に同名のネットワークが存在していて削除する場合はコチラ(クリック)
1-5-1. ネットワークを確認する
# docker network ls
1-5-2. ネットワークを削除する
# docker network rm wg0
1-6. 起動する
# docker compose up -d
Docker Compose は docker-compose.yml がある場所でこのコマンドを使って起動します。
2. ネットワークの設定
2-1. 概要
[WireGuard クライアント] [WireGuard サーバー (wg-easy)] [外部ネットワーク]
10.8.0.x <----> 10.8.0.1 (仮想) | 10.42.42.42 (実IP) ----> Internet
↑仮想IF wg0 ↑Dockerブリッジネットワーク
ネットワークはこの様になっています。仮想 IF の CIDR のデフォルトは 10.8.0.0/10 ですが、管理画面で変更できます。
2-2. WAF
環境に応じてポートを開放します。
- 51820/UDP
- VPN 通信用
- 51821/TPC
- wg-easy フロントエンド用(GUI設定画面用)
- 見知らぬ人がアクセスできないよう、適切に設定してください
- wg-easy フロントエンド用(GUI設定画面用)
2-3. フォワーディングを有効にする
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.default.forwarding=1
2-4. 設定を反映させる
# sysctl -p /etc/sysctl.d/
2-5. Firewalld を設定する
# firewall-cmd --permanent --add-port=51820/udp
# firewall-cmd --permanent --zone=public --add-masquerade
# firewall-cmd --permanent --zone=trusted --add-interface=wg0
# firewall-cmd --permanent --zone=trusted --add-forward
上から
- ポート開放
- NAT(IPマスカレード)を有効にする
- wg0 を trusted ゾーンに(IF名は自信で設定したものに読み替えてください)
- trusted ゾーンからの forward を許可
firewall-cmd command not found (見つからない)と言われた場合はコチラ(クリック)
2-5-1. Firewalld をインストール
# dnf install firewalld -y
# systemctl enable --now firewalld
最小構成の Enterprise Linux(Rocky Linux など)だと入っていない場合があるので導入して立ち上げます。
2-6. firewalld を再読み込み
# firewall-cmd --reload
使ってみる
ブラウザから http://IPアドレス:51821/ へアクセスして管理者登録を済ませます。
VPN (仮想 IF )の CIDR を変更したい
- 管理画面の右上メニュー -> Admin Panel -> Interface -> Change CIDR ボタン
- Hooks の中に Firewall の設定が含まれるため、変更後は必ず Restert Instance をクリックすること
- 昔は yml ファイルの中で指定していたが、 Ver.15 では無効
Client の AllowedIPs を変更したい
- 管理画面の右上メニュー -> Admin Panel -> Config
その他の設定も、だいたい Admin Panel の中にあります。
Docker コンテナの初期化
docker-compose.yml に大きな変更を加えるなどしてやり直す場合は、次の手順で一度コンテナを削除します。
ボリューム名の確認
# docker volume ls
ボリューム削除
# docker volume rm ボリューム名
docker-compose.yml を再編集して建て直すときには、このコマンドで既存のコンテナを削除します。