From c18922c3b4d307f37433a2b4e11e37e11db92dc4 Mon Sep 17 00:00:00 2001 From: Oliver Braasch Date: Tue, 21 Apr 2026 18:00:40 +0200 Subject: [PATCH] Dateien nach "scripts" hochladen --- scripts/proxmox-vpn-install.sh | 90 +++++++++++----------------------- 1 file changed, 28 insertions(+), 62 deletions(-) diff --git a/scripts/proxmox-vpn-install.sh b/scripts/proxmox-vpn-install.sh index 1ea0b7a..b8aed5c 100644 --- a/scripts/proxmox-vpn-install.sh +++ b/scripts/proxmox-vpn-install.sh @@ -453,35 +453,32 @@ PYEOF info "Warte auf VPN-Verbindung via ${proto^^}..." 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)) local elapsed=$(( tries * 5 )) - echo -ne " - ${CYAN}[INFO]${NC} ${proto^^} – ${elapsed}s..." + echo -ne "\r ${CYAN}[INFO]${NC} ${proto^^} – ${elapsed}s... " - local log_snippet - log_snippet=$(timeout 8 pct exec "$SEL_ID" -- bash -c "docker logs gluetun 2>&1 | tail -80" 2>/dev/null || echo "") - - # 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 + # Verbindungstest (schnell, kein docker logs) + 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 fi + done + echo - # Authentifizierungsfehler → sofort abbrechen - if echo "$log_snippet" | grep -qi "AUTH_FAILED\|auth.*fail\|wrong.*password\|incorrect.*password\|authentication failed"; then + # Nach Timeout: Log prüfen für Fehlerdiagnose + 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 " ${YELLOW}Falsche NordVPN Service-Credentials.${NC}" + echo -e " ${RED}✗ Authentifizierung fehlgeschlagen!${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" if confirm "Neue Credentials eingeben?"; then @@ -489,49 +486,18 @@ PYEOF else error "Abgebrochen." fi - fi - - # 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 + elif echo "$log_out" | grep -qiE "hostname.*not valid|not one of the possible choices"; then 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" - 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 - - # 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 + fi + echo echo [[ "$vpn_ok" == "true" ]] && break