Dynamische DNS

Szenario: Man von daheim auf einen Schulserver zugreifen. Die Schule hat nur einen einfachen Internetzugang, dessen IP-Adressen sich dynamisch (i.d.R. täglich) ändern. Um ihn erreichen zu können sorgt man dafür, dass die neuen Adressen an einen geeigneten Dienst (früher: dyndns.com, jetzt eher andere Anbieter wie z.B. spDYN.de) gemeldet werden. Dann kann man den Schulserver unter der beispielhaften Adresse serviceabcschule.my-firewall.org erreichen, da dieser DNS-Name immer mit den aktuellen Adressen aufgelöst wird. Siehe dazu auch https://de.wikipedia.org/wiki/Dynamisches_DNS.

Tipp

Will man das Kollegium oder gar die Eltern- und Schülerschaft auf den Server lassen, so sollte man den DNS-Namen des DynDNS-Dienstes nicht veröffentlichen, sonder einen zusätzlichen DNS-Eintrag bei der Schuldomäne vornehmen., z.B. service.abc-schule.edu. Dieser Eintrag muss vom Typ CNAME mit dem Ziel serviceabcschule.my-firewall.org sein.

Aktualisierung

IPv4-Adressen lässt man eher vom Router aktualisieren. Ansonsten gibt es viele Anleitungen für Rechner bei dynamisch vergebenen IP-Adressen. Selten findet man aber eine, die sich mit dem Problem beschäftigt, dass man sowohl IPv4, als auch IPv6-Adressen zuweisen möchte. Bei meiner letzten Recherche im Jahr 2019 fand ich nur wenige kostenlose Dienste, die das anbieten. Ergebnis sind u.a. die beiden folgenden Skripte, die unter Linux auf dem Gateway-Server in der DMZ laufen (wenn curl installiert ist). Sie werden bei mir alle 5 Minuten aufgerufen und überprüfen die aktuellen IP-Adressen und melden diese nur bei Adressänderung an den Dienst. Vielleicht reicht auch eine Überprüfung morgens um 6 Uhr.

Funktionsfähige Datei für SPdyn

Hier die besser funktionierende mit dem Anbieter spDYN.de

#!/bin/sh
## Konfiguration SPdyn
tokenv4='nmxx-yyyy-zzcj'
tokenv6='jhvv-wwww-uuah'
hostname='serviceabcschule.my-firewall.org'
## Und los:
aktipv6=`ip addr | grep "inet6 2" | awk '{print $2}' | awk -v FS='/' '{print $1}'| head -n1`
content=1234
content=$(cat /tmp/dynv6.state)
#echo ${aktipv6} vs ${content}
if [ "${aktipv6}" != "${content}" ];then
aktipv4=`/usr/bin/curl "http://checkip4.spdyn.de"`
echo `date` "setzen: IPv4: ${aktipv4} IPv6: ${aktipv6}"
/usr/bin/curl "https://${hostname}:${tokenv6}@update.spdyn.de/nic/update?hostname=${hostname}&myip=$aktipv6"
echo ${aktipv6} > /tmp/dynv6.state
#/usr/bin/curl "https://${hostname}:${tokenv4}@update.spdyn.de/nic/update?hostname=${hostname}&myip=$aktipv4"
/usr/bin/curl --ipv4 "https://${hostname}:${tokenv4}@update.spdyn.de/nic/update?hostname=${hostname}&myip=192.168.0.1"
service apache2 restart
else
echo `date` "-> Keine Aenderung in der IP-Adresse"
fi

Funktionsfähige Datei für DynV6

Der Dienst dynv6.de ist/war? nur ein Hobbyprojekt. Mit folgendem einfacheren Skript ließ es sich erfolgreich nutzen:

#!/bin/sh
## Konfiguration:
token='PMPxxxxxxxxxyyyyyyyyyyyyzzzzzzzzzL'
hostname='unsergatewayserver.dynv6.net'
## Und los:
aktstate=`ip addr | grep inet6 | md5sum | awk '{print $1}'`
content=1234
content=$(cat /tmp/dynv6.state)
#echo $aktstate vs $content
if [ "$aktstate" != "$content" ];then
date
/usr/bin/curl "https://ipv4.dynv6.com/api/update?token=${token};hostname=${hostname};ipv4=auto"
/usr/bin/curl "https://ipv6.dynv6.com/api/update?token=${token};hostname=${hostname};ipv6=auto"
echo $aktstate > /tmp/dynv6.state
#else
#	date
#	echo Keine Aenderung in der IP-Adresse
fi