diff options
Diffstat (limited to 'vpn/entrypoint.sh')
| -rw-r--r-- | vpn/entrypoint.sh | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/vpn/entrypoint.sh b/vpn/entrypoint.sh new file mode 100644 index 0000000..4efe500 --- /dev/null +++ b/vpn/entrypoint.sh @@ -0,0 +1,54 @@ +#!/bin/sh +set -e + +# IP フォワーディング有効化 +sysctl -w net.ipv4.ip_forward=1 +sysctl -w net.ipv6.conf.all.forwarding=1 + +# VPN クライアントのトラフィックを MASQUERADE +IFACE=$(ip route show default | awk '/default/ {print $5}' | head -1) +iptables -t nat -C POSTROUTING -s 10.10.0.0/24 -o "${IFACE}" -j MASQUERADE 2>/dev/null || \ + iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -o "${IFACE}" -j MASQUERADE +iptables -C FORWARD -s 10.10.0.0/24 -j ACCEPT 2>/dev/null || \ + iptables -A FORWARD -s 10.10.0.0/24 -j ACCEPT +iptables -C FORWARD -d 10.10.0.0/24 -j ACCEPT 2>/dev/null || \ + iptables -A FORWARD -d 10.10.0.0/24 -j ACCEPT + +# users.conf から EAP シークレットセクションを生成 +VPN_SECRETS="" +while IFS=' ' read -r user pass || [ -n "$user" ]; do + [ -z "$user" ] && continue + case "$user" in \#*) continue ;; esac + VPN_SECRETS="${VPN_SECRETS} + eap-${user} { + id = ${user} + secret = \"${pass}\" + }" +done < /etc/strongswan/users.conf + +export VPN_SECRETS +export VPN_DOMAIN="${VPN_DOMAIN:-vpn.yyamashita.com}" + +# テンプレートから swanctl.conf を生成 +envsubst < /etc/swanctl/swanctl.conf.tpl > /etc/swanctl/swanctl.conf + +# charon (IKE デーモン) 起動 +ipsec start + +# 初期化待ち +sleep 2 + +# 設定ロード +swanctl --load-conns +swanctl --load-creds --noprompt +swanctl --load-pools + +echo "VPN ready. Domain: ${VPN_DOMAIN}" + +# シグナルハンドラ +trap 'ipsec stop; exit 0' TERM INT + +# charon が生きている間ループ +while ipsec status > /dev/null 2>&1; do + sleep 10 +done |
