From 11fdda1ef60fb4c7ecd232913fdb35ec6a40a649 Mon Sep 17 00:00:00 2001 From: patrick Date: Thu, 16 Jul 2026 14:32:15 +0200 Subject: [PATCH] miyagi-backup.sh aktualisiert dyndns route fix --- miyagi-backup.sh | 65 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 43 insertions(+), 22 deletions(-) diff --git a/miyagi-backup.sh b/miyagi-backup.sh index 554cd4f..56f6e6a 100644 --- a/miyagi-backup.sh +++ b/miyagi-backup.sh @@ -628,40 +628,61 @@ wait() { fi } set_dynamic_route() { - local ddns_hostname="$SOURCEHOST" + local target="$SOURCEHOST" local gateway="$DDNS_GATEWAY" local dns_server="$DDNS_SERVER" + local current_ip - if [[ -z "$ddns_hostname" || -z "$gateway" ]]; then + if [[ -z "$target" || -z "$gateway" ]]; then log "Fehler: SOURCEHOST oder DDNS_GATEWAY nicht gesetzt" return 1 fi - log "Setze temporäre Route zu DNS-Server $dns_server via $gateway..." - if ! ip route | grep -q "^$dns_server"; then - ip route add "$dns_server" via "$gateway" \ - && log "Route zu $dns_server via $gateway gesetzt" \ - || log "Fehler beim Setzen der DNS-Route" + # Ist SOURCEHOST bereits eine IPv4- oder IPv6-Adresse? + if [[ "$target" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ || "$target" == *:* ]]; then + current_ip="$target" + log "SOURCEHOST ist bereits eine IP-Adresse: $current_ip" else - log "Route zu $dns_server bereits vorhanden" + log "Setze temporäre Route zu DNS-Server $dns_server via $gateway..." + + case "$(uname -s)" in + Linux) + ip route | grep -q "^$dns_server" || \ + ip route add "$dns_server" via "$gateway" + ;; + FreeBSD) + route -n get "$dns_server" >/dev/null 2>&1 || \ + route add -host "$dns_server" "$gateway" + ;; + esac + + log "Löse IP von $target über DNS $dns_server..." + current_ip=$(dig +short @"$dns_server" "$target" | awk 'NF {print; exit}') + + if [[ -z "$current_ip" ]]; then + log "Fehler: Konnte IP für $target nicht auflösen" + return 1 + fi fi - log "Löse IP von $ddns_hostname über DNS $dns_server..." - CURRENT_IP=$(dig +short @"$dns_server" "$ddns_hostname") + log "Ermittelte IP: $current_ip – setze Route via $gateway..." - if [[ -z "$CURRENT_IP" ]]; then - log "Fehler: Konnte IP für $ddns_hostname nicht auflösen" - return 1 - fi + case "$(uname -s)" in + Linux) + ip route | grep -q "^$current_ip" || \ + ip route add "$current_ip" via "$gateway" + ;; + FreeBSD) + route -n get "$current_ip" >/dev/null 2>&1 || \ + route add -host "$current_ip" "$gateway" + ;; + *) + log "Nicht unterstütztes Betriebssystem: $(uname -s)" + return 1 + ;; + esac - log "Ermittelte IP: $CURRENT_IP – setze Route via $gateway..." - if ! ip route | grep -q "^$CURRENT_IP"; then - ip route add "$CURRENT_IP" via "$gateway" \ - && log "Route erfolgreich gesetzt: $CURRENT_IP via $gateway" \ - || log "Fehler beim Setzen der Route zu $CURRENT_IP" - else - log "Route zu $CURRENT_IP bereits vorhanden" - fi + log "Route erfolgreich gesetzt: $current_ip via $gateway" } # Main execution: if [[ $# -eq 0 ]]; then