/ cron

Dynamisches DNS mit nsupdate und BIND

Nachdem mich letzte Woche ein Freund darauf hingewiesen hat, das DynDNS allem Anschein nach seinen kostenlosen Service einstellt, durfte ich mich auch gleich mit einer eigenen Implementierung eines solchen Services auseinandersetzen.

Um für dich selbst so einen Service einzurichten brauchst du ein paar Dinge:

  • Eine Domain
  • Zugriff auf den DNS Server der Domain
  • Einen Rechner der immer an ist…
  • … möglichst mit einer installierten Linux Distribution
  • und die Programme nsupdate und curl

Dann kann es auch schon losgehen. Als erstes musst du mit folgendem Befehl den Private- und den Public-Key erzeugen. Dieser ist bei der gewählten Methode HMAC-MD5 in beiden fällen identisch.

dnssec-keygen -a HMAC-MD5 -b 512 -n USER name.example.com.

Mit diesem Befehl wird ein HMAC-MD5 Schlüssel mit 512Bit für den User name@example.com erstellt. Wichtig ist hierbei, dass das @ durch einen Punkt ersetzt wird.

Dann erstellst du eine Datei /etc/bind/keys.conf und fügst dort folgendes ein:

key name.example.com { algorithm HMAC-MD5; secret  "deinPublicKey"; };

Jetzt legst  du noch eine neue Subzone im DNS für die Domain z.B. dyn.example.com an. Dazu fügst du im zone-File für example.com einfach eine Delegation zu einer neuen Subzone an.

dyn.example.com        IN      NS   ns1.example.com

Für diese legst du dann ein minimales zone-File mit einem default A Record an.

; example.com $TTL 900 dyn.example.com. IN SOA ns1.example.com. zonemaster.example.com. ( 2013032002 ; Serial 3600 ; refresh after 1 hour 900 ; retry after 15 minutes 604800 ; expire after 1 week 900) ; minimum TTL of 15 minutes ; Name Server dyn.example.com.       IN    NS       ns1.example.com. dyn.example.com.       IN    A       127.0.0.1

Jetzt musst du folgendes Script auf einem Rechner der möglichst immer an ist anpassen und als cron-Job einrichten.

#!/bin/sh IP='curl -s ifconfig.me' nsupdate -k example.com.key << EOF server ns1.example.com zone dyn.example.com update delete dyn.example.com. A update add dyn.example.com. 300 A $IP send EOF

Den cron-Job anlegen.

5 * * * * /home/name/update.sh 2>&1 /dev/null

Und zuletzt noch das Key-File example.com.key in der gleichen Syntax wie die keys.conf auf dem Server nur hier mit dem privaten Schlüssel (der hier gleich ist) erstellen.
Jetzt sollte dein  eigener DynDNS Dienst funktionieren.