miyagi-backup.sh aktualisiert

dyndns route fix
This commit is contained in:
2026-07-16 14:32:15 +02:00
parent 0b52e87330
commit 11fdda1ef6
+43 -22
View File
@@ -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