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:
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
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
Hier einfach die Dyn-Adressen bei DDNSHOST["X"] in die Eigenen ändern.
Überzählige ggf. entfernen
Moin al-x83,
ist es viel Arbeit wenn du mir kurz den Ansatz zeigst wie das Script mehrere Dyn's "checkt"?
So nach dem Motto:
DDNSHOST01="mydomain.de"
DDNSHOST02="mycar.de"
DDNSHOST03="myhome.de"
... usw
CurrentIP bleibt ja bei einmal abfragen. Kann ruhig jede .dynip nacheinander eintragen oder für jede IP ne eigene Datei (.dyn02,dyn03,...), das wäre egal.
Ist das machbar ohne sich großartig am heiligen Sonntag zu bewegen um dem Centaury ne Freude zu machen?
Ich werde heute nicht dazu kommen, werd mir das Ganze morgen aber mal anschauen. Denke mal, wenn man das in eine Schleife packt oder so, sollte das klappen
Das mit Schleife und tricksen und fuschen teste ich schon seitdem Formel 1 läuft, aber so richtig sauber/vernünftig will es nicht. Bin da einfach zu blöd für.
Lass dir ruhig Zeit, ist überhaupt nichts was eilt. Ich teste parallel mal weiter, denke aber das du sogar in 2 Wochen schneller bist als ich.
Ja klar das ist kein Thema, das zu machen! Hab bisher einfach zwei skripte parallel am laufen. Also zwei mal das selbe mit unterschiedlichen dyndns. Aber eleganter ist das natürlich in einem. Und dann gleich noch ne sendEmail Zeile dazu... Ich schaus mir die Tage auch mal an
Ich hab für mich mal noch ein sendEmail dazugehängt damit ich im Fehlerfall ne Mail bekomme. Kann man aber an und abschalten. Wenn man möchte auch ne Mail wenn alles IO ist.
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
#eMail Benachrichtigung
ABSENDER="absender@provider.de"
EMPFAENGER="empfaenger@provider.de"
SMTPSERVER="smtp.provider.de"
SMTPUSER="smtpuser@provider.de"
SMTPPASSWORD="smtppassword"
TLS="no" #yes no auto
GOODMAIL=false #Mail versenden wenn DYNDNS in Ordnung
BADMAIL=true #Mail versenden wenn DYNDNS Fehler
#Aktuelle IP ermitteln:
CURRENTIP=$(wget http://www.wieistmeineip.de -U "" -qO - | egrep -o '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}' | uniq)
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
if [ "$BADMAIL" = true ] ; then
sendemail -f "$ABSENDER" -t "$EMPFAENGER" -u OSCam-Server DynDNS Fehler -m Die IPs der Dyn-Adresse "${DDNSHOST[$counter]}" und die aktuelle Internet IP "$CURRENTIP" sind ungleich -s "$SMTPSERVER" -xu "$SMTPUSER" -xp "$SMTPPASSWORD" -vv -o tls="$TLS"
fi
#/var/emu/script/DDNSupdater2.sh now
sleep 20
dyn_ip
else
if [ "$GOODMAIL" == true ] ; then
sendemail -f "$ABSENDER" -t "$EMPFAENGER" -u OSCam Server DynDNS IO -m Die IPs der Dyn-Adresse "${DDNSHOST[$counter]}" und die aktuelle Internet IP "$CURRENTIP" sind identisch -s "$SMTPSERVER" -xu "$SMTPUSER" -xp "$SMTPPASSWORD" -vv -o tls="$TLS"
fi
echo "Die IPs der Dyn-Adresse "${DDNSHOST[$counter]}" (DYNIP) und die aktuelle Internet IP ($CURRENTIP) sind identisch"
fi
counter=`expr $counter + 1`
done
Bin für Anregungen und weitere Änderungen gerne offen!
Hab nen kleinen Fehler korrigiert. Das Forum wandelt Links automatisch um, so das der wget Befehl nicht mehr passte.
außerdem hab ich das Script noch in CODE gepackt
so wie es ausschaut, antwortet wieistmeineip.de seit letzter Woche nicht mehr auf die bash Anfrage. Deshalb habe ich bei mir die Anfrage für CURRENTIP so abgeändert: