#!/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" # 証明書チェーンを分割: 1枚目=リーフ、残り=中間CA awk '/BEGIN CERTIFICATE/{n++} n==1' "$CERT_DIR/server.crt" > "$CERT_DIR/server-leaf.crt" awk '/BEGIN CERTIFICATE/{n++} n>1' "$CERT_DIR/server.crt" > "$CERT_DIR/server-chain.crt" mv "$CERT_DIR/server-leaf.crt" "$CERT_DIR/server.crt" 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"