Synology DS212+: DynDNS mittels BIND9 selber betreiben

1

DynDNS ist ein Dienst, der es ermöglicht, durch z.B. einen Router automatisch bei der Einwahl, einen DNS-Eintrag zu aktualisieren, der auf die aktuelle IP des Routers zeigt. Man ist hierbei jedoch an die verfügbaren Domains von DyDNS gebunden. Schöner ist es natürlich, einen dynamischen Eintrasg für eine selbst gehostete DNS Zone zu erstellen.

Dies ist im Prinzip relativ einfach. Es gibt unter Linux das Tool nsupdate, mit dessen Hilfe man DNS Einträge innerhalb einer DNS-Zone erstellen sowie löschen kann. Um sicher zu stellen, dass der Client dazu auch authorisiert ist, muss sich der Client durch einen Schlüssel authentifizieren, der auf dem Server für dynamische Updates für die entsprechende Zone berechtigt ist.

Da man evtl. aus Sicherheitsgründen nsupdates nicht direkt innerhalb der eigentlichen Zone zu erlauben möchte, kann man z.B. eine Sub-Domain einrichten, in der die dynamischen Einträge erstellt werden. In der eigentlich Zone braucht man dann nur einen CNAME auf den entsprechenden Sub-Domain DNS-Eintrag zeigen zu lassen. Das ganze kann dann wie folgt aussehen:

> ddns.blog.cscholz.io
Server:  dir-600
Address:  192.168.0.1

Nicht autorisierende Antwort:
Name:    ddns.blog.cscholz.io (Die Zone für dynamische Updates)
Address:  178.77.103.157

> home.blog.cscholz.io
Server:  dir-600
Address:  192.168.0.1

Nicht autorisierende Antwort:
Name:    home.ddns.blog.cscholz.io (dynamischer intrag innerhalb der ddns-Zone)
Address:  109.90.132.37
Aliases:  home.blog.cscholz.io (Der CNAME, der auf den dynamischen Eintrag verweist)

Um das ganze mittels Bind9 zu realisieren,wird zuerst der Schlüssels angelegt, mit sich Clients später authentifizieren um Updates an der Zone vornehmen zu dürfen.

../bind/keys/
dnssec-keygen -C -a HMAC-MD5 -b256 -n HOST ddns.blog.cscholz.io

Der Parameter -C ist aus Kompatibilitätsgründen notwendig, da das nsupdate was auf den Synology NAS-Systemen installiert werden kann, noch nicht die neuen Schlüssel unterstützt. Das Ergebnis dieses Befehls sind zwei Dateien.

-rw------- 1 root bind   77 23. Jun 18:38 Kddns.blog.cscholz.io.+157+36575.key
-rw------- 1 root bind  112 22. Jun 07:15 Kddns.blog.cscholz.io.+157+36575.private

Der Inhalt der Datei  *.key wird nun zusammen mit dem Verweis auf eine neue Sub-Domain in die eigentliche Zone (blog.cscholz.io) aufgenommen. Anschließend muss noch die Seriennummer der Zone inkrementiert und die Zone neu geladen werden.

../../blog.cscholz.io.zone
ns                              IN      A       178.77.103.157
ddns                            IN      NS      ns
ddns.blog.cscholz.io.                  IN      KEY     512 3 157 MJV+YI32Xfxb9rHW4qIUeg3UE1ez6rs/1SKq/EP4lQI=

Im Ordner ../bind/key/ wird nun eine Konfigurationsdatei erstellt, welche die Schlüsselkonfiguration enthält. Der Wert der mittels secret angegeben ist, ist identisch mit dem Wert, der in der DNS-Zone erstellt wurde:

../bind/keys/keys.conf
key "ddns.blog.cscholz.io." {
     algorithm HMAC-MD5;
     secret "MJV+YI32Xfxb9rHW4qIUeg3UE1ez6rs/1SKq/EP4lQI=";
};

Nun wird die eigentliche neue Zone erstellt. Hier kann man extrem kurze TTL Zeiten wählen, um sicher zu stellen, dass der DNS Eintrag immer aktuell ist:

../../ddns.blog.cscholz.io.zone
$ORIGIN .
$TTL 2560       ; 42 minutes 40 seconds
ddns.blog.cscholz.io           IN SOA  ns2.blog.cscholz.io. postmaster.blog.cscholz.io. (
                                17         ; serial
                                60         ; refresh (1 minute)
                                90         ; retry (1 minute 30 seconds)
                                120        ; expire (2 minutes)
                                120        ; minimum (2 minutes)
                                )
$TTL 10800      ; 3 hours
                        NS      ns.blog.cscholz.io.
                        A       178.77.103.157
$ORIGIN ddns.blog.cscholz.io.
$TTL 60 ; 1 minute

Jetzt noch die neue Zone in der named.conf eingetragen. Hierbei wird auch der Schlüssel "ddns.blog.cscholz.io." für Updates berechtigt.

../../named.conf
zone "ddns.blog.cscholz.io" in {
 type master;
 file "../../ddns.blog.cscholz.io.zone";
 allow-query { any; };
 allow-update { key "ddns.blog.cscholz.io."; };
[..]
include "/etc/bind/keys/keys.conf";

Nach dem reload der Zone ist Serverseitig schon alles fertig. Nun muss dem Client, z.B. einem NAS noch ein Script verpasst werden, dass einen entsprechenden DNS-Eintrag in der Zone ddns.blog.cscholz.io erstellt. Hierzu kann ich das Script von Artem Sidorenko empfehlen. Zu beachten ist, dass aus Kompatibilitätsgründen in dem Ordner auf dem Client, in dem sich die *.private Datei befindet, ebenfalls die *.key Datei vorhanden sein muss.

Teilen.

Über den Autor

Seit der Ausbildung zum Fachinformatiker Systemintegration (2002-2005) bei der DaimlerChrysler AG, beruflich im Bereich der E-Mail Kommunikation (Exchange, Linux) sowie des ActiveDirectory, mit entsprechenden Zertifizierungen (MCSE 2003, MCITP Ent.-Admin 2008, MCSE 2012, LPIC 1-3) tätig. Abgeschlossenes Studium zum Master of Science der IT-Management an der FOM sowie zertifizierter Datenschutzbeauftragter. Aktuell im Projektmanagement tätig.

1 Kommentar

Antworten