02.10.2015

Dynamisches DNS per Rasperry Pi aktualisieren

Da mein DSL Router (FritzBox) nur einen Anbieter für dynamisches DNS (DynDNS) gleichzeitig aktualisiert und ich der automatischen Aktualisierung nicht 100% traue wird diese Aufgabe jetzt zusätzlich von einem Raspberry Pi erledigt, was folgende Vorteile hat:
  • Man kann mehrere DynDNS services gleichzeitig benutzen und aktualisieren;
  • Die Aktualisierung wird per cron regelmäßig angestoßen;
  • Alle Aktivitäten werden in ein log file geschrieben;
  • Die Lösung ist erweiterbar (z.B. email Benachrichtigung bei IP Änderung).
Das script basiert auf der Arbeit von https://github.com/AntonioCS/no-ip.com-bash-updater. Das geänderte script benutzt unter anderem curl statt wget, da ich mit wget Probleme bei der SSL Verbindung hatte. Wer weitere oder andere Anbieter von dynamischem DNS verwenden will, muß sich die ensprechende update URL besorgen und das bestehende script erweitern.

Zuerst das script anlegen mit, z.B. mit:

nano ~/no-ip-updater.sh
Folgenden Inhalt einfügen:
#!/bin/bash
# The script assumes existing user 'pi'
# Ensure to URL encode if required (e.g.encode the @ as %40)
# Change below to match your NO-IP user/email
USERNAME=your.name%40email.com
# Change below to match your NO-IP password
PASSWORD=your-NO-IP-cleartext-password
# Change below
HOST_NOIP=mygreathostname.ddns.org
LOGFILE=/var/log/no-ip-updater.log
STOREDIPFILE=/home/pi/current_ip
USERAGENT="My bash No-IP Updater"

if [ ! -e $STOREDIPFILE ]; then
  touch $STOREDIPFILE
fi

NEWIP=$(wget -q -O - "http://myexternalip.com/raw")
STOREDIP=$(cat $STOREDIPFILE)

if [ "$NEWIP" != "$STOREDIP" ]; then
  RESULT=$(curl --silent --user-agent "$USERAGENT" "https://$USERNAME:$PASSWORD@dynupdate.no-ip.com/nic/update?hostname=$HOST_NOIP&myip=$NEWIP" >> $LOGFILE)
  LOGLINE="[$(date +"%Y-%m-%d %H:%M:%S")] Updated IP from $STOREDIP to $NEWIP"
  #ADD MORE SERVICES HERE IF REQUIRED
  echo $NEWIP > $STOREDIPFILE
else
  LOGLINE="[$(date +"%Y-%m-%d %H:%M:%S")] No IP change"
fi
echo $LOGLINE >> $LOGFILE
exit 0
Das script abspeichern (bei nano mit Ctrl-O Ctrl-X) und ausführbar machen.

chmod +x ~/no-ip-updater.sh
Jetzt fehlt noch der Eintrag in der crontab um das script regelmäßig auszuführen. Die crontab des aktuellen Benutzers (pi) editieren mit:

crontab -e
Und folgende Zeile hinzufügen um das script z.B. alle 20 Minuten auszuführen:

*/20 * * * *  sudo /home/pi/no-ip-updater.sh
Fertig.

Keine Kommentare:

Kommentar veröffentlichen