From 58f7917662ff92a3712289acccff8310c8f1baff Mon Sep 17 00:00:00 2001 From: yyamashita Date: Tue, 30 Jun 2026 22:29:07 +0900 Subject: Add strongSwan IKEv2 VPN service MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - vpn/: Dockerfile, docker-compose.yml, swanctl.conf.tpl, entrypoint.sh - install.sh: Caddy 証明書流用 + コンテナ起動 - renew-cert.sh: 証明書更新 + swanctl ホットリロード - caddy/Caddyfile: vpn.yyamashita.com 追加(Let's Encrypt 証明書取得用) - post-receive: vpn/deploy.sh を追加 - setup-route53.py: WEB_SUBDOMAINS に vpn を追加 Co-Authored-By: Claude Sonnet 4.6 --- vpn/install.sh | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 vpn/install.sh (limited to 'vpn/install.sh') diff --git a/vpn/install.sh b/vpn/install.sh new file mode 100644 index 0000000..9a2f33d --- /dev/null +++ b/vpn/install.sh @@ -0,0 +1,59 @@ +#!/usr/bin/env bash +set -euo pipefail +cd "$(dirname "$0")" + +DOMAIN="vpn.yyamashita.com" +CADDY_DIR="/app/infra/caddy" +CERT_DIR="./certs" +CADDY_CERT_BASE="/data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/${DOMAIN}/${DOMAIN}" + +echo "=== VPN Install: ${DOMAIN} ===" + +# users.conf チェック +if [ ! -f users.conf ]; then + echo "" + echo "Error: users.conf が見つかりません。先に作成してください:" + echo " echo 'username password' > /app/infra/vpn/users.conf" + echo " chmod 600 /app/infra/vpn/users.conf" + echo "" + echo "複数ユーザーは1行ずつ追加:" + echo " user1 pass1" + echo " user2 pass2" + exit 1 +fi + +mkdir -p "$CERT_DIR" + +# Caddy コンテナから証明書を取得 +echo "Caddy から証明書を取得中..." +if ! docker compose -f "$CADDY_DIR/docker-compose.yml" exec -T caddy \ + cat "${CADDY_CERT_BASE}.crt" > "$CERT_DIR/server.crt"; then + echo "" + echo "Error: 証明書の取得に失敗しました。" + echo "Caddyfile に ${DOMAIN} が追加されているか確認してください。" + echo "追加後 'git push origin master' してから再実行してください。" + exit 1 +fi + +docker compose -f "$CADDY_DIR/docker-compose.yml" exec -T caddy \ + cat "${CADDY_CERT_BASE}.key" > "$CERT_DIR/server.key" + +chmod 600 "$CERT_DIR/server.key" +echo "証明書を $CERT_DIR/ に保存しました。" + +# VPN コンテナ起動 +echo "VPN サービスを起動中..." +docker compose up -d --build + +echo "" +echo "=== VPN 起動完了 ===" +echo "" +echo "クライアント接続情報:" +echo " サーバー: ${DOMAIN}" +echo " 種別: IKEv2" +echo " 認証: EAP (ユーザー名/パスワード)" +echo "" +echo "iOS/macOS: 設定 > VPN > VPN 構成を追加 > IKEv2" +echo "Android (Quest/FireTV): strongSwan VPN Client アプリをインストール" +echo "" +echo "証明書の更新: bash /app/infra/vpn/renew-cert.sh" -- cgit v1.2.3