Dateien nach "scripts" hochladen
This commit is contained in:
@@ -193,6 +193,8 @@ collect_vpn_config() {
|
|||||||
ask "Auswahl [1/2]" "1"
|
ask "Auswahl [1/2]" "1"
|
||||||
VPN_MODE="$REPLY"
|
VPN_MODE="$REPLY"
|
||||||
|
|
||||||
|
VPN_PROTO="udp" # Start mit UDP, automatischer Fallback auf TCP bei TLS-Fehler
|
||||||
|
|
||||||
if [[ "$VPN_MODE" == "2" ]]; then
|
if [[ "$VPN_MODE" == "2" ]]; then
|
||||||
echo -e "\n ${YELLOW}Gültige Hostnamen haben das Format: de507.nordvpn.com, de654.nordvpn.com etc.${NC}"
|
echo -e "\n ${YELLOW}Gültige Hostnamen haben das Format: de507.nordvpn.com, de654.nordvpn.com etc.${NC}"
|
||||||
echo -e " ${YELLOW}Beispiele für Deutschland: de507, de654, de675 ... de1118${NC}"
|
echo -e " ${YELLOW}Beispiele für Deutschland: de507, de654, de675 ... de1118${NC}"
|
||||||
@@ -335,80 +337,112 @@ COMPOSEEOF"
|
|||||||
success "docker-compose.yml geschrieben"
|
success "docker-compose.yml geschrieben"
|
||||||
}
|
}
|
||||||
|
|
||||||
# ── Stack starten mit Fehlerbehandlung ─────────────────────────────────────────
|
# ── Stack starten mit automatischem UDP→TCP Fallback ──────────────────────────
|
||||||
start_and_verify() {
|
start_and_verify() {
|
||||||
step "VPN-Stack starten"
|
step "VPN-Stack starten"
|
||||||
|
|
||||||
local FT_DIR="/opt/docker-projekte/freqtrade"
|
local FT_DIR="/opt/docker-projekte/freqtrade"
|
||||||
local MAX_ATTEMPTS=3
|
local vpn_ok=false
|
||||||
local attempt=1
|
VPN_IP=""
|
||||||
|
|
||||||
while [[ $attempt -le $MAX_ATTEMPTS ]]; do
|
# Protokoll-Reihenfolge: UDP zuerst, dann automatisch TCP
|
||||||
echo -e "\n ${CYAN}Versuch ${attempt}/${MAX_ATTEMPTS}...${NC}"
|
for proto in udp tcp; do
|
||||||
|
[[ "$proto" == "tcp" ]] && info "UDP fehlgeschlagen – versuche TCP automatisch..."
|
||||||
|
|
||||||
# Stack starten
|
# Protokoll in .env setzen (Gluetun liest OPENVPN_PROTOCOL)
|
||||||
|
pct exec "$SEL_ID" -- bash -c "sed -i '/^OPENVPN_PROTOCOL=/d' ${FT_DIR}/.env; echo 'OPENVPN_PROTOCOL=${proto}' >> ${FT_DIR}/.env"
|
||||||
|
|
||||||
|
# Stack starten (ggf. neu)
|
||||||
|
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 up -d 2>&1" || true
|
pct exec "$SEL_ID" -- bash -c "cd ${FT_DIR} && docker compose up -d 2>&1" || true
|
||||||
|
|
||||||
# Auf Gluetun warten (bis zu 60s)
|
info "Warte auf VPN-Verbindung via ${proto^^}..."
|
||||||
info "Warte auf VPN-Verbindung (bis zu 60s)..."
|
|
||||||
local tries=0
|
local tries=0
|
||||||
local vpn_ok=false
|
local tls_error=false
|
||||||
while [[ $tries -lt 12 ]]; do
|
|
||||||
sleep 5; echo -n "."; tries=$((tries+1))
|
while [[ $tries -lt 18 ]]; do
|
||||||
if pct exec "$SEL_ID" -- bash -c \
|
sleep 5; tries=$((tries+1))
|
||||||
"docker exec gluetun wget -qO- https://ipinfo.io/ip 2>/dev/null" &>/dev/null; then
|
local elapsed=$(( tries * 5 ))
|
||||||
|
echo -ne "
|
||||||
|
${CYAN}[INFO]${NC} ${proto^^} – ${elapsed}s..."
|
||||||
|
|
||||||
|
local log_snippet
|
||||||
|
log_snippet=$(pct exec "$SEL_ID" -- bash -c "docker logs --since 30s gluetun 2>&1" 2>/dev/null || echo "")
|
||||||
|
|
||||||
|
# Auth-Fehler → sofort abbrechen, kein Retry
|
||||||
|
if echo "$log_snippet" | grep -qi "AUTH_FAILED\|auth.*fail\|wrong.*password\|incorrect.*password"; then
|
||||||
|
echo
|
||||||
|
echo -e "
|
||||||
|
${RED}✗ Authentifizierung fehlgeschlagen!${NC}"
|
||||||
|
echo -e " ${YELLOW}Service-Credentials prüfen:${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
|
||||||
|
collect_vpn_config
|
||||||
|
write_vpn_config
|
||||||
|
start_and_verify
|
||||||
|
return
|
||||||
|
else
|
||||||
|
error "Abgebrochen."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Hostname ungültig → sofort abbrechen
|
||||||
|
if echo "$log_snippet" | grep -qi "hostname.*not valid\|not one of the possible choices"; then
|
||||||
|
echo
|
||||||
|
echo -e "
|
||||||
|
${RED}✗ Ungültiger Hostname!${NC}"
|
||||||
|
echo -e " ${YELLOW}Gültige Server: de507.nordvpn.com, de654.nordvpn.com, de675.nordvpn.com ...${NC}"
|
||||||
|
pct exec "$SEL_ID" -- bash -c "cd ${FT_DIR} && docker compose down 2>/dev/null || true"
|
||||||
|
|
||||||
|
if confirm "Anderen Hostname eingeben?"; then
|
||||||
|
collect_vpn_config
|
||||||
|
write_vpn_config
|
||||||
|
start_and_verify
|
||||||
|
return
|
||||||
|
else
|
||||||
|
error "Abgebrochen."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# TLS-Fehler → nächstes Protokoll versuchen
|
||||||
|
if echo "$log_snippet" | grep -q "TLS Error\|TLS key negotiation"; then
|
||||||
|
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
|
vpn_ok=true
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
echo
|
echo
|
||||||
|
|
||||||
if [[ "$vpn_ok" == "true" ]]; then
|
[[ "$vpn_ok" == "true" ]] && break
|
||||||
VPN_IP=$(pct exec "$SEL_ID" -- bash -c \
|
|
||||||
"docker exec gluetun wget -qO- https://ipinfo.io/ip 2>/dev/null" || echo "unbekannt")
|
|
||||||
success "VPN verbunden! Ausgehende IP: ${BOLD}${GREEN}${VPN_IP}${NC}"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Fehleranalyse
|
# Bei TCP auch TLS-Fehler → endgültig fehlgeschlagen
|
||||||
echo
|
if [[ "$proto" == "tcp" ]]; then
|
||||||
warn "VPN-Verbindung fehlgeschlagen. Gluetun-Log:"
|
echo -e " ${RED}✗ VPN konnte weder via UDP noch TCP verbunden werden.${NC}"
|
||||||
echo -e "${YELLOW}─────────────────────────────────────────${NC}"
|
echo -e " ${YELLOW}Mögliche Ursachen:${NC}"
|
||||||
pct exec "$SEL_ID" -- bash -c \
|
echo -e " ${YELLOW}· Falsche NordVPN Service-Credentials${NC}"
|
||||||
"docker logs gluetun 2>&1 | grep -E 'ERROR|WARN|hostname|credentials|password|Invalid' | tail -20" \
|
echo -e " ${YELLOW}· Server temporär nicht erreichbar – anderen Server wählen${NC}"
|
||||||
2>/dev/null || true
|
echo -e " ${YELLOW}· Netzwerkproblem im LXC${NC}"
|
||||||
echo -e "${YELLOW}─────────────────────────────────────────${NC}"
|
pct exec "$SEL_ID" -- bash -c "cd ${FT_DIR} && docker compose down 2>/dev/null || true"
|
||||||
|
|
||||||
# Häufige Fehler erkennen und erklären
|
if confirm "Neue Konfiguration eingeben?"; then
|
||||||
local gluetun_errors
|
|
||||||
gluetun_errors=$(pct exec "$SEL_ID" -- bash -c \
|
|
||||||
"docker logs gluetun 2>&1 | tail -30" 2>/dev/null || echo "")
|
|
||||||
|
|
||||||
if echo "$gluetun_errors" | grep -qi "hostname.*not valid\|not one of the possible choices"; then
|
|
||||||
echo -e "\n ${RED}FEHLER: Ungültiger Hostname!${NC}"
|
|
||||||
echo -e " ${YELLOW}Gültige deutsche Server haben das Format: de507.nordvpn.com${NC}"
|
|
||||||
echo -e " ${YELLOW}Sieh die Fehlermeldung für eine Liste gültiger Hostnamen.${NC}"
|
|
||||||
elif echo "$gluetun_errors" | grep -qi "auth\|credential\|password\|unauthorized\|401"; then
|
|
||||||
echo -e "\n ${RED}FEHLER: Ungültige Credentials!${NC}"
|
|
||||||
echo -e " ${YELLOW}Bitte Service-Credentials prüfen unter:${NC}"
|
|
||||||
echo -e " ${CYAN}https://my.nordaccount.com → NordVPN → Set up NordVPN manually${NC}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
pct exec "$SEL_ID" -- bash -c "cd ${FT_DIR} && docker compose down 2>/dev/null || true"
|
|
||||||
|
|
||||||
if [[ $attempt -lt $MAX_ATTEMPTS ]]; then
|
|
||||||
echo
|
|
||||||
if confirm "Andere Konfiguration versuchen?"; then
|
|
||||||
collect_vpn_config
|
collect_vpn_config
|
||||||
write_vpn_config
|
write_vpn_config
|
||||||
|
start_and_verify
|
||||||
|
return
|
||||||
else
|
else
|
||||||
error "Abgebrochen. Stack wurde gestoppt."
|
error "Abgebrochen. Stack gestoppt."
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
attempt=$((attempt+1))
|
|
||||||
done
|
done
|
||||||
|
|
||||||
[[ "$vpn_ok" != "true" ]] && error "VPN konnte nach ${MAX_ATTEMPTS} Versuchen nicht verbunden werden."
|
[[ "$vpn_ok" != "true" ]] && error "VPN-Verbindung fehlgeschlagen."
|
||||||
|
|
||||||
# Freqtrade prüfen
|
# Freqtrade prüfen
|
||||||
sleep 6
|
sleep 6
|
||||||
|
|||||||
Reference in New Issue
Block a user