Reihner
Anmeldungsdatum: 14. Juni 2017
Beiträge: 168
Wohnort: Klendathu
|
Hallo ihr (und auch du da in der Ecke), wie die Überschrift es schon sagt möchte ich zwei "einfache" Updatescripts, für meine DynDNS-Addresse bei ddnss.de vereinen. Da meine shell-Kenntnisse mit "praktisch nicht vorhanden" euphemistisch großzügig beschreiben sind und ich schon KI-tools nutzen musste um die einzelnen Scripts hinzubekommen übersteigt das verschmelzen beider Scripts meine Fähigkeiten. Script1:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | #!/bin/bash
KEYAUTH="key hier eintragen"
HOSTNAME="domain.ddnss.de"
PFAD="/home/username"
# ALLHOST="all" # Alternativ Hostname
DATUM=`date +%Y-%m-%d\ %H:%M:%S`
IP=`wget -q -O - https://ip4.ddnss.de/meineip.php| grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'`
UPDIP=`cat $PFAD/updip4.txt`
echo "Aktuelle IP=$UPDIP"
if [ "$IP" == "$UPDIP" ]; then
echo "$DATUM - $IP ; IP ist gleich - KEIN UPDATE" >> $PFAD/log4.txt
else
echo "$DATUM - Neue-IP: $ip / Alte-IP: $UPDIP - UPDATE!" >> $PFAD/log4.txt
echo $IP > $PFAD/updip4.txt
wget -q -O - 'https://ip4.ddnss.de/upd.php?key='$KEYAUTH'&host='$HOSTNAME''>> $PFAD/log4.txt
# wget -q -O - 'https://ip4.ddnss.de/upd.php?key='$KEYAUTH'&host='$ALLHOST''>> $PFAD/log4.txt
echo " " >> $PFAD/log4.txt
echo "Update ..."
fi
|
Script2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | #!/bin/bash
KEYAUTH="key hier eintragen"
HOSTNAME="domain.ddnss.de"
PFAD="/home/username"
# ALLHOST="all" # Alternativ Hostname
DATUM=`date +%Y-%m-%d\ %H:%M:%S`
IP=`wget -q -O - https://ip6.ddnss.de/meineip.php| grep -o -E '([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}'`
UPDIP=`cat $PFAD/updip6.txt`
echo "Aktuelle IP=$UPDIP"
if [ "$IP" == "$UPDIP" ]; then
echo "$DATUM - $IP ; IP ist gleich - KEIN UPDATE" >> $PFAD/log6.txt
else
echo "$DATUM - Neue-IP: $ip / Alte-IP: $UPDIP - UPDATE!" >> $PFAD/log6.txt
echo $IP > $PFAD/updip6.txt
wget -q -O - 'https://ip6.ddnss.de/upd.php?key='$KEYAUTH'&host='$HOSTNAME''>> $PFAD/log6.txt
# wget -q -O - 'https://ip6.ddnss.de/upd.php?key='$KEYAUTH'&host='$ALLHOST''>> $PFAD/log6.txt
echo " " >> $PFAD/log6.txt
echo "Update ..."
fi
|
Final müsste in Zeile 15 so etwas wie
https://www.ddnss.de/upd.php?key='$KEYAUTH'&host='$HOSTNAME'&ip=<ipaddr>&ip6=<ip6addr>
stehen ... vermute ich zumindest. Ich habe da wohl den falschen Denkansatz, könnte mir jemand helfen? Der Anbieter selbst konnte mir in diesem Zusammenhang nicht weiterhelfen.
|
micneu
Anmeldungsdatum: 19. Januar 2021
Beiträge: 758
Wohnort: Hamburg
|
Also, ich habe deine Skripte nur überflogen und wenn ich es richtig verstehe, willst du IPv4 & IPv6 updaten?!
Ich habe sowas ähnliches bei desec.io laufen mit meinen eigenen Domains.
Dort habe ich mit der api die Möglichkeit entweder IPv4 oder IPv6 oder beides upzudaten, das ganze mache ich mit curl, entsprechend mache ich das mit if Bedingungen, ich werde jetzt nicht dein Skript hier für dich anpassen, aber du kannst dir gerne mal das anschauen https://github.com/micneu72/deSEC-DNS-Updater-BASH alternativ habe ich auch eine Version mit python3 und pushover benachrichtigung
|
Reihner
(Themenstarter)
Anmeldungsdatum: 14. Juni 2017
Beiträge: 168
Wohnort: Klendathu
|
micneu schrieb: Also, ich habe deine Skripte nur überflogen und wenn ich es richtig verstehe, willst du IPv4 & IPv6 updaten?!
Nicht nur. Zudem soll noch:
protokolliert werden wie sich die einzelnen IP´s (IPv4 und IPv6) im Laufe der Zeit verändern, protokolliert werden was der Prompt antwortet, nur ein Update gesendet werden wenn eine Änderung aufgetreten ist.
Ich habe das Script von micneu72, was du verlinkt hast, angepasst und ausprobiert. Es funktioniert zwar, dauert manchmal aber sehr lange:
Hostname: domain.ddnss.de
Fehler: Weder 'drill' noch 'host' sind verfügbar.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 12 100 12 0 0 123 0 --:--:-- --:--:-- --:--:-- 125
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 33 100 33 0 0 298 0 --:--:-- --:--:-- --:--:-- 300
IPv4: XXX.XXX.XXX.11
IPv6: XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:bbb6
Die IPs haben sich geändert oder eine davon. Verarbeitung starten.
Beide IPs sind verfügbar: IPv4 = 'XXX.XXX.XXX.11', IPv6 = 'XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:bbb6'
<head>
<meta name="robots" content="noindex">
<title>DDNSS - Kostenloser DynDNS Service : Re-ProutDNS v5.01v</title>
</head>
<body>
<p><font face="Verdana" size="2"></font></p>
<p><font face="Verdana" size="2">Updated 1 hostname.</font></p>
</body>
Laufzeit: 2 Minuten, 1 Sekunden
ein anderes mal ist es hingegen aber schnell:
Hostname: domain.ddnss.de
Fehler: Weder 'drill' noch 'host' sind verfügbar.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 12 100 12 0 0 113 0 --:--:-- --:--:-- --:--:-- 114
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 33 100 33 0 0 299 0 --:--:-- --:--:-- --:--:-- 302
IPv4: XXX.XXX.XXX.11
IPv6: XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:bbb6
Die IPs haben sich geändert oder eine davon. Verarbeitung starten.
Beide IPs sind verfügbar: IPv4 = 'XXX.XXX.XXX.11', IPv6 = 'XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:bbb6'
<head>
<meta name="robots" content="noindex">
<title>DDNSS - Kostenloser DynDNS Service : Re-ProutDNS v5.01v</title>
</head>
<body>
<p><font face="Verdana" size="2"></font></p>
<p><font face="Verdana" size="2">Updated 1 hostname.</font></p>
</body>
Laufzeit: 0 Sekunden Das Script funktioniert soweit erst einmal. Danke.
|
micneu
Anmeldungsdatum: 19. Januar 2021
Beiträge: 758
Wohnort: Hamburg
|
Ok, super dann musst du dir nur noch die fehlenden Funktionen in das Skript einbauen, ich habe gesehen das auf deinem System kein drill oder Host Befehl fehlt, aber es scheint ja auch so bei dir zu gehen. Ist es jetzt gelöst?
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 14314
|
micneu schrieb: ... drill oder Host Befehl fehlt, ...
BTW: Diese tools können mit:
sudo apt install ldnsutils bind9-host
installiert werden.
which drill host
|
micneu
Anmeldungsdatum: 19. Januar 2021
Beiträge: 758
Wohnort: Hamburg
|
Ich habe auf allen Systemen „dnsutils“ bis auf die alpine Systeme
|
micneu
Anmeldungsdatum: 19. Januar 2021
Beiträge: 758
Wohnort: Hamburg
|
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 14314
|
micneu schrieb: ... „dnsutils“ ...
Ja, ist auch OK bzw. ein Übergangspaket:
Transitional package for bind9-dnsutils
|
Reihner
(Themenstarter)
Anmeldungsdatum: 14. Juni 2017
Beiträge: 168
Wohnort: Klendathu
|
micneu schrieb: ... Ist es jetzt gelöst?
Prinzipiell "ja", wenngleich es noch das Problem gibt, dass das Script jedes mal, wenn es ausgeführt wird, ein Update macht. Das könnte ärger mit dem Anbieter geben wenn alle paar Minuten ein Update ohne neue Informationen kommt. Andererseits besteht bei einem zu großen Updateintervall die Gefahr das meine Dienst einige Zeit (zu lange) nicht erreichbar sind. micneu schrieb: ... dann musst du dir nur noch die fehlenden Funktionen in das Skript einbauen ...
Wie, weiter oben schon, erwähnt, übersteigt das meine Fähigkeiten. micneu schrieb: ... ich habe gesehen das auf deinem System kein drill oder Host Befehl fehlt ...
Wie heisen die Pakete dazu? lubux schrieb: BTW: Diese tools können mit:
sudo apt install ldnsutils bind9-host
installiert werden.
ich ziehe die Frage zurück lubux schrieb: micneu schrieb: ... „dnsutils“ ...
Ja, ist auch OK bzw. ein Übergangspaket:
Transitional package for bind9-dnsutils
Werde ich mir mal ansehen, vielleicht klappt es damit besser.
|
micneu
Anmeldungsdatum: 19. Januar 2021
Beiträge: 758
Wohnort: Hamburg
|
@Reihner ich kenne deinen dyndns Anbieter nicht, wenn der eine api hat kannst du die ja auch abfragen, um den aktuellen eintrag auszulesen, ein mögliches vorgehen (was ich für meine python version überlege)
Abfrage der api, abfragen, ob der dns vorhanden ist und welche ip eingetragen ist bei ungleichen ips diesen aktualisieren oder bei fehlendem Eintrag das für IPv4 & IPv6
Warum ich sowas für die Python Version machen würde, ist da ich direkt mit dem json arbeiten kann (dictonary) PS: was willst du mit den logs, werden die elektronisch weiterverarbeitet oder willst du dir das nur anschauen können?
|
Reihner
(Themenstarter)
Anmeldungsdatum: 14. Juni 2017
Beiträge: 168
Wohnort: Klendathu
|
Das Script von micneu72 macht bei mir doch Probleme. ddnss.de erlaubt nur 60 IP-updates pro Tag. Ich habe nach einiger Suche ein "uraltes" Script von M0ses (wieder)gefunden und leicht angepasst: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 | #!/bin/bash
WORKING_DIR="/home/ich/ddnss-update/"
LOG_FILE=/home/ich/ddnss-update/update.log
KEYAUTH="123456"
HOSTNAME="meine.ddnss.de"
# set default loglevel
LOGLEVEL=3
if [ -z "$FORCE_UPDATE" ];then
FORCE_UPDATE=86400
fi
function logmsg {
LL=$1
shift
[ "$LL" -le "$LOGLEVEL" ] && echo "$CURRENT_DATE - $@" >> $LOG_FILE
}
CURRENT_DATE=`date +%Y-%m-%d\ %H:%M:%S`
IP6=`curl https://ip6.ddnss.de/meineip.php 2>/dev/null| grep -o '[0-9a-z]\{1,4\}\:[0-9a-z]\{1,4\}\:[0-9a-z]\{1,4\}\:[0-9a-z]\{1,4\}\:[0-9a-z]\{1,4\}\:[0-9a-z]\{1,4\}\:[0-9a-z]\{1,4\}\:[0-9a-z]\{1,4\}'`
IP=`curl https://ip4.ddnss.de/meineip.php 2>/dev/null| grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'`
UPDIP=`cat $WORKING_DIR/ip4.last 2>/dev/null||echo -en ''`
UPDIP6=`cat $WORKING_DIR/ip6.last 2>/dev/null||echo -en ''`
logmsg 5 "Current IP=$UPDIP"
logmsg 5 "Current IP=$UPDIP6"
NOW=`date +%s`
LAST_UPDATE=`stat -c %Y $WORKING_DIR/ip4.last`
NEXT_UPDATE=$(( $LAST_UPDATE + $FORCE_UPDATE ))
[ $NOW -lt $NEXT_UPDATE ]
UPDATE_NOW=$?
[ "$IP" == "$UPDIP" -a "$IP6" == "$UPDIP6" ]
IP_SAME=$?
if [ $IP_SAME == 0 -a $UPDATE_NOW == 0 ]; then
logmsg 4 "IP is the same - NO UPDATE"
else
logmsg 5 "New IP: $IP / Old IP: $UPDIP - UPDATE!"
logmsg 5 "New IP6: $IP6 / Old IP6: $UPDIP6 - UPDATE!"
echo $IP > $WORKING_DIR/ip4.last
echo $IP6 > $WORKING_DIR/ip6.last
CMD="curl -v https://www.ddnss.de/upd.php?key=$KEYAUTH&host=$HOSTNAME&ip=$IP&ip6=$IP6"
logmsg 5 "COMMAND: $CMD"
HTTP=`$CMD 2>&1`
FOUND=`echo "$HTTP"|grep "DDNSS-Response: good"`
if [ -n "$FOUND" ];then
logmsg 4 "Update ... (IPv4=$IP/IPv6=$IP6)"
else
logmsg 1 "Something went wrong: $HTTP"
fi
fi
|
Das sollte nun seine Funktion erfüllen, auch wenn der Updateverlauf noch nicht so funktioniert wie er soll.
|
micneu
Anmeldungsdatum: 19. Januar 2021
Beiträge: 758
Wohnort: Hamburg
|
@Reihner danke, dein für deinen Hinweis das ich einen Fehler in meinem Skript hatte.
Nach dem ich diesen behoben hatte, habe ich noch mal mir dein Problem angeschaut, ich habe für deinen Dyndns Anbieter mal eine python3 variante probiert, ja das ist möglich. Ich gebe dir einen tipp, prüfe nicht auf code 200, da habe ich ein wenig für gebraucht. Bei mir läuft es!
./ddnss-updater.py
2025-04-25 22:26:44 - INFO - Hostname: blabla.ddnss.de
2025-04-25 22:26:44 - INFO - dnsIPv4: yy.yy.yy.yy, dnsIPv6: gexxt
2025-04-25 22:26:44 - INFO - wanIPv4: yy.yy.yy.yy, wanIPv6: gexxt
2025-04-25 22:26:44 - INFO - Keine IP-Änderungen. Keine Aktion nötig.
2025-04-25 22:26:44 - INFO -
Runtime: 0 seconds
|