miyagi-backup.sh aktualisiert
dyndns route fix
This commit is contained in:
+42
-21
@@ -628,40 +628,61 @@ wait() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
set_dynamic_route() {
|
set_dynamic_route() {
|
||||||
local ddns_hostname="$SOURCEHOST"
|
local target="$SOURCEHOST"
|
||||||
local gateway="$DDNS_GATEWAY"
|
local gateway="$DDNS_GATEWAY"
|
||||||
local dns_server="$DDNS_SERVER"
|
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"
|
log "Fehler: SOURCEHOST oder DDNS_GATEWAY nicht gesetzt"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log "Setze temporäre Route zu DNS-Server $dns_server via $gateway..."
|
# Ist SOURCEHOST bereits eine IPv4- oder IPv6-Adresse?
|
||||||
if ! ip route | grep -q "^$dns_server"; then
|
if [[ "$target" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ || "$target" == *:* ]]; then
|
||||||
ip route add "$dns_server" via "$gateway" \
|
current_ip="$target"
|
||||||
&& log "Route zu $dns_server via $gateway gesetzt" \
|
log "SOURCEHOST ist bereits eine IP-Adresse: $current_ip"
|
||||||
|| log "Fehler beim Setzen der DNS-Route"
|
|
||||||
else
|
else
|
||||||
log "Route zu $dns_server bereits vorhanden"
|
log "Setze temporäre Route zu DNS-Server $dns_server via $gateway..."
|
||||||
fi
|
|
||||||
|
|
||||||
log "Löse IP von $ddns_hostname über DNS $dns_server..."
|
case "$(uname -s)" in
|
||||||
CURRENT_IP=$(dig +short @"$dns_server" "$ddns_hostname")
|
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
|
||||||
|
|
||||||
if [[ -z "$CURRENT_IP" ]]; then
|
log "Löse IP von $target über DNS $dns_server..."
|
||||||
log "Fehler: Konnte IP für $ddns_hostname nicht auflösen"
|
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
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
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
|
fi
|
||||||
|
|
||||||
|
log "Ermittelte IP: $current_ip – setze Route via $gateway..."
|
||||||
|
|
||||||
|
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 "Route erfolgreich gesetzt: $current_ip via $gateway"
|
||||||
}
|
}
|
||||||
# Main execution:
|
# Main execution:
|
||||||
if [[ $# -eq 0 ]]; then
|
if [[ $# -eq 0 ]]; then
|
||||||
|
|||||||
Reference in New Issue
Block a user