Dateien nach "scripts" hochladen

This commit is contained in:
2026-04-21 18:00:40 +02:00
parent 705e1a223c
commit c18922c3b4
+28 -62
View File
@@ -453,35 +453,32 @@ PYEOF
info "Warte auf VPN-Verbindung via ${proto^^}..." info "Warte auf VPN-Verbindung via ${proto^^}..."
local tries=0 local tries=0
local tls_error=false local max_wait=75 # UDP: 75s reicht (TLS-Timeout ist 60s + retry)
[[ "$proto" == "tcp" ]] && max_wait=90
while [[ $tries -lt 18 ]]; do while [[ $((tries * 5)) -lt $max_wait ]]; do
sleep 5; tries=$((tries+1)) sleep 5; tries=$((tries+1))
local elapsed=$(( tries * 5 )) local elapsed=$(( tries * 5 ))
echo -ne " echo -ne "\r ${CYAN}[INFO]${NC} ${proto^^} ${elapsed}s... "
${CYAN}[INFO]${NC} ${proto^^} ${elapsed}s..."
local log_snippet # Verbindungstest (schnell, kein docker logs)
log_snippet=$(timeout 8 pct exec "$SEL_ID" -- bash -c "docker logs gluetun 2>&1 | tail -80" 2>/dev/null || echo "") if pct exec "$SEL_ID" -- bash -c "docker exec gluetun wget -qO- --timeout=3 https://ipinfo.io/ip 2>/dev/null" &>/dev/null; then
vpn_ok=true; break
# Jeden 3. Zyklus (15s) relevante Log-Zeilen anzeigen
if (( tries % 3 == 0 )); then
local recent_lines
recent_lines=$(echo "$log_snippet" | grep -E "INFO|WARN|ERROR|openvpn|vpn|connecting|connected|TLS|auth|SIGTERM" | tail -4)
if [[ -n "$recent_lines" ]]; then
echo
while IFS= read -r line; do
echo -e " ${YELLOW}${NC} $line"
done <<< "$recent_lines"
fi
fi fi
done
echo
# Authentifizierungsfehler → sofort abbrechen # Nach Timeout: Log prüfen für Fehlerdiagnose
if echo "$log_snippet" | grep -qi "AUTH_FAILED\|auth.*fail\|wrong.*password\|incorrect.*password\|authentication failed"; then if [[ "$vpn_ok" != "true" ]]; then
local log_out
log_out=$(timeout 10 pct exec "$SEL_ID" -- bash -c "docker logs gluetun 2>&1 | tail -30" 2>/dev/null || echo "")
if echo "$log_out" | grep -qiE "TLS Error|TLS key negotiation|TLS handshake"; then
echo; warn "TLS-Fehler nach ${proto^^}-Timeout UDP geblockt, wechsle auf TCP..."
tls_error=true
elif echo "$log_out" | grep -qiE "AUTH_FAILED|auth.*fail|wrong.*password|authentication failed"; then
echo echo
echo -e " echo -e " ${RED}✗ Authentifizierung fehlgeschlagen!${NC}"
${RED}✗ Authentifizierung fehlgeschlagen!${NC}"
echo -e " ${YELLOW}Falsche NordVPN Service-Credentials.${NC}"
echo -e " ${CYAN}→ https://my.nordaccount.com → NordVPN → Set up NordVPN manually${NC}" echo -e " ${CYAN}→ https://my.nordaccount.com → NordVPN → Set up NordVPN manually${NC}"
pct exec "$SEL_ID" -- bash -c "cd ${FT_DIR} && docker compose down 2>/dev/null || true" pct exec "$SEL_ID" -- bash -c "cd ${FT_DIR} && docker compose down 2>/dev/null || true"
if confirm "Neue Credentials eingeben?"; then if confirm "Neue Credentials eingeben?"; then
@@ -489,49 +486,18 @@ PYEOF
else else
error "Abgebrochen." error "Abgebrochen."
fi fi
fi elif echo "$log_out" | grep -qiE "hostname.*not valid|not one of the possible choices"; then
# Hostname ungültig (nur bei normalem Gluetun, nicht bei custom build)
if echo "$log_snippet" | grep -qi "hostname.*not valid\|not one of the possible choices"; then
echo
echo -e " ${RED}✗ Ungültiger Hostname: ${VPN_HOSTNAME}${NC}" echo -e " ${RED}✗ Ungültiger Hostname: ${VPN_HOSTNAME}${NC}"
local full_log valid_servers
full_log=$(pct exec "$SEL_ID" -- bash -c "docker logs gluetun 2>&1" 2>/dev/null || echo "")
valid_servers=$(echo "$full_log" | grep -oP 'de[0-9]+\.nordvpn\.com' | sort -uV | head -20)
[[ -z "$valid_servers" ]] && valid_servers=$(echo "$full_log" | grep -oP '[a-z]{2}[0-9]+\.nordvpn\.com' | sort -u | head -20)
if [[ -n "$valid_servers" ]]; then
local i=1
while IFS= read -r srv; do
printf " ${CYAN}%2s)${NC} %s
" "$i" "$srv"; i=$((i+1))
done <<< "$valid_servers"
echo
echo -ne "${YELLOW}${NC}Nummer wählen oder Hostname eingeben: "
read -r sel
[[ "$sel" =~ ^[0-9]+$ ]] && VPN_HOSTNAME=$(echo "$valid_servers" | sed -n "${sel}p") || VPN_HOSTNAME="$sel"
if [[ -n "$VPN_HOSTNAME" ]]; then
pct exec "$SEL_ID" -- bash -c "cd ${FT_DIR} && docker compose down 2>/dev/null || true"
write_vpn_config; tries=0; tls_error=false
pct exec "$SEL_ID" -- bash -c "cd ${FT_DIR} && docker compose up -d 2>&1" || true
continue
fi
fi
pct exec "$SEL_ID" -- bash -c "cd ${FT_DIR} && docker compose down 2>/dev/null || true" pct exec "$SEL_ID" -- bash -c "cd ${FT_DIR} && docker compose down 2>/dev/null || true"
error "Abgebrochen." error "Hostname nicht in Gluetun-DB. Custom Build prüfen."
else
echo -e " ${YELLOW}Letztes Gluetun-Log:${NC}"
echo "$log_out" | grep -E "INFO|WARN|ERROR|openvpn" | tail -8 | while IFS= read -r l; do
echo -e " ${YELLOW}${NC} $l"
done
fi fi
fi
# TLS-Fehler → sofort auf nächstes Protokoll wechseln echo
if echo "$log_snippet" | grep -qE "TLS Error|TLS key negotiation|TLS handshake failed"; then
echo
warn "TLS-Fehler erkannt wechsle Protokoll..."
tls_error=true; break
fi
# Verbunden?
if pct exec "$SEL_ID" -- bash -c "docker exec gluetun wget -qO- https://ipinfo.io/ip 2>/dev/null" &>/dev/null; then
vpn_ok=true; break
fi
done
echo echo
[[ "$vpn_ok" == "true" ]] && break [[ "$vpn_ok" == "true" ]] && break