Dateien nach "scripts" hochladen
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
# Authentifizierungsfehler → sofort abbrechen
|
|
||||||
if echo "$log_snippet" | grep -qi "AUTH_FAILED\|auth.*fail\|wrong.*password\|incorrect.*password\|authentication failed"; then
|
|
||||||
echo
|
echo
|
||||||
echo -e "
|
|
||||||
${RED}✗ Authentifizierung fehlgeschlagen!${NC}"
|
# Nach Timeout: Log prüfen für Fehlerdiagnose
|
||||||
echo -e " ${YELLOW}Falsche NordVPN Service-Credentials.${NC}"
|
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 -e " ${RED}✗ Authentifizierung fehlgeschlagen!${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"
|
pct exec "$SEL_ID" -- bash -c "cd ${FT_DIR} && docker compose down 2>/dev/null || true"
|
||||||
write_vpn_config; tries=0; tls_error=false
|
error "Hostname nicht in Gluetun-DB. Custom Build prüfen."
|
||||||
pct exec "$SEL_ID" -- bash -c "cd ${FT_DIR} && docker compose up -d 2>&1" || true
|
else
|
||||||
continue
|
echo -e " ${YELLOW}Letztes Gluetun-Log:${NC}"
|
||||||
fi
|
echo "$log_out" | grep -E "INFO|WARN|ERROR|openvpn" | tail -8 | while IFS= read -r l; do
|
||||||
fi
|
echo -e " ${YELLOW}│${NC} $l"
|
||||||
pct exec "$SEL_ID" -- bash -c "cd ${FT_DIR} && docker compose down 2>/dev/null || true"
|
|
||||||
error "Abgebrochen."
|
|
||||||
fi
|
|
||||||
|
|
||||||
# TLS-Fehler → sofort auf nächstes Protokoll wechseln
|
|
||||||
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
|
done
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo
|
||||||
echo
|
echo
|
||||||
|
|
||||||
[[ "$vpn_ok" == "true" ]] && break
|
[[ "$vpn_ok" == "true" ]] && break
|
||||||
|
|||||||
Reference in New Issue
Block a user