Alex
Teammitglied
- Registriert
- 10. Januar 2012
- Beiträge
- 21.392
- Lösungen
- 9
- Reaktionspunkte
- 30.291
- Punkte
- 1.113
- Ort
- Paradise City
Es gab die Anfrage, ob DDDNsupdater2.sh selbständig merkt, ob sich die öffentliche IP des Servers geändert hat.
Da dem nicht so ist habe ich ein separates Script geschrieben, das wenn die beiden IPs differieren, via DDNSupdater2.sh die DynDNS updatet
Voraussetzung für das Script ist logischerweise das installierte Addonscript DDNSupdater2.sh. Sollte aber auch mit DDNSupdater.sh funktionieren.
Das Script ist so geschrieben, das die DynIP nur einmal abgefragt wird und danach in eine Datei geschrieben wird. Dann wird der Inhalt der Datei mit der öffentlichen IP verglichen.
Sollte hier ein unterschied sein, wird die DynDNS aktualisiert und die Neue IP in die Datei geschrieben. Sollte kein Unterschied sein, wird nach einer Minute wieder neu verglichen.
Den Umweg über die Datei habe ich gemacht, damit man beim Anbieter nicht jede Minute anfrag und ggf. den Account wegen Abuse wieder freischalten muss.
Zuerst muss noch das Paket w3m installiert werden:
So wird das Script eingebaut:
dort den inhalt des Spoilers einfügen, dann mit STRG+O speichern und mit STRG+X beenden
ip-check.sh:
Bei Zeile 3 muss natürlich die eigenen DynDNS eigetragen werden
Ich habe einen Pro Account bei Dyndns.org und habe bei der getesteten Dyn-Adresse TTL auf 20 Sekunden gerabgesetzt, so kann man die Prüfung jede Minute per Cron durchführen lassen.
Allerdings habe ich keine Ahnung wie es bei anderen Anbietern ist, deshalb ggf. den Job nur alle 2 Minuten (bei TTL = 60) ausführen lassen, dafür aber das sleep 20 aus der Datei entfernen.
Nun muss das ganze noch in i jobs eingetragen werden:
bei TTL=20
bei TTL=60
Danach auch wieder mit STRG+O speichern und mit STRG+X beenden
Nach dem der Wunsch geäußert wurde, mehrere Adressen mit einem Script zu prüfen, hier ein modifiziertes Script:
Hier einfach die Dyn-Adressen bei DDNSHOST["X"] in die Eigenen ändern.
Überzählige ggf. entfernen
Da dem nicht so ist habe ich ein separates Script geschrieben, das wenn die beiden IPs differieren, via DDNSupdater2.sh die DynDNS updatet
Voraussetzung für das Script ist logischerweise das installierte Addonscript DDNSupdater2.sh. Sollte aber auch mit DDNSupdater.sh funktionieren.
Das Script ist so geschrieben, das die DynIP nur einmal abgefragt wird und danach in eine Datei geschrieben wird. Dann wird der Inhalt der Datei mit der öffentlichen IP verglichen.
Sollte hier ein unterschied sein, wird die DynDNS aktualisiert und die Neue IP in die Datei geschrieben. Sollte kein Unterschied sein, wird nach einer Minute wieder neu verglichen.
Den Umweg über die Datei habe ich gemacht, damit man beim Anbieter nicht jede Minute anfrag und ggf. den Account wegen Abuse wieder freischalten muss.
Zuerst muss noch das Paket w3m installiert werden:
Code:
apt-get install w3m
So wird das Script eingebaut:
Code:
nano /var/emu/script/ip-check.sh
dort den inhalt des Spoilers einfügen, dann mit STRG+O speichern und mit STRG+X beenden
ip-check.sh:
Code:
#!/bin/bash
#Script zur Prüfung der Aktualität der DynDNS by al-x83 V1
DDNSHOST="my.dyndns.com"
#Aktuelle IP ermitteln:
CURRENTIP=`w3m -dump http://www.monip.org/ | awk -F': ' '/IP/ { print $2 }'`
function dyn_ip () {
DYNIP=$(ping -c1 "${DDNSHOST}" | sed -n 1p | sed -e 's/(//g' -e 's/)//g' | cut -d " " -f3 | sed -e 's/\://g')
if [ -f "/tmp/.dynip" ]; then
rm /tmp/.dynip
fi
echo $DYNIP >> /tmp/.dynip
}
if [ -f "/tmp/.dynip" ]; then
DYNIP=$(cat /tmp/.dynip)
else
dyn_ip
fi
if [ "${DYNIP}" != "$CURRENTIP" ]; then
echo "Die IPs der Dyn-Adresse ($DYNIP) und die aktuelle Internet IP ($CURRENTIP) sind ungleich"
/var/emu/script/DDNSupdater2.sh now
sleep 20
dyn_ip
else
echo "Die IPs der Dyn-Adresse ($DYNIP) und die aktuelle Internet IP ($CURRENTIP) sind identisch"
fi
Bei Zeile 3 muss natürlich die eigenen DynDNS eigetragen werden
Ich habe einen Pro Account bei Dyndns.org und habe bei der getesteten Dyn-Adresse TTL auf 20 Sekunden gerabgesetzt, so kann man die Prüfung jede Minute per Cron durchführen lassen.
Allerdings habe ich keine Ahnung wie es bei anderen Anbietern ist, deshalb ggf. den Job nur alle 2 Minuten (bei TTL = 60) ausführen lassen, dafür aber das sleep 20 aus der Datei entfernen.
Nun muss das ganze noch in i jobs eingetragen werden:
bei TTL=20
Code:
* * * * * root /var/emu/script/ip-check.sh #IP Ableich jede Minute
Code:
*/2 * * * * root /var/emu/script/ip-check.sh #IP Ableich alle 2 Minuten
Danach auch wieder mit STRG+O speichern und mit STRG+X beenden
Nach dem der Wunsch geäußert wurde, mehrere Adressen mit einem Script zu prüfen, hier ein modifiziertes Script:
Code:
#!/bin/bash
#Script zur Prüfung der Aktualität der DynDNS by al-x83 V 2.00
#Jetzt mit mehreren DynDNS
DDNSHOST["1"]="my.dyndns1.com"
DDNSHOST["2"]="my.dyndns2.com"
DDNSHOST["3"]="my.dyndns3.com"
DDNSHOST["4"]="my.dyndns4.com"
DDNSHOST["5"]="my.dyndns5.com"
counter=1
#Aktuelle IP ermitteln:
CURRENTIP=`w3m -dump http://www.monip.org/ | awk -F': ' '/IP/ { print $2 }'`
function dyn_ip () {
DYNIP=$(ping -c1 "${DDNSHOST[$counter]}" | sed -n 1p | sed -e 's/(//g' -e 's/)//g' | cut -d " " -f3 | sed -e 's/\://g')
if [ -f "/tmp/.dynip" ]; then
rm /tmp/.dynip
fi
echo $DYNIP >> /tmp/.dynip
}
for index in ${!DDNSHOST[*]}; do
if [ -f "/tmp/.dynip" ]; then
DYNIP=$(cat /tmp/.dynip)
else
dyn_ip
fi
if [ "${DYNIP}" != "$CURRENTIP" ]; then
echo "Die IPs der Dyn-Adresse ($DYNIP) und die aktuelle Internet IP ($CURRENTIP) sind ungleich"
/var/emu/script/DDNSupdater2.sh now
sleep 20
dyn_ip
else
echo "Die IPs der Dyn-Adresse "${DDNSHOST[$counter]}" (DYNIP) und die aktuelle Internet IP ($CURRENTIP) sind identisch"
fi
counter=`expr $counter + 1`
done
Überzählige ggf. entfernen
Zuletzt bearbeitet: