DDNS mit Bind einrichten
Tagged as DE · net · dnssec · bind
Written on
Der Nameserver Bind bringt von Hause aus die Möglichkeit mit, dass Änderungen in Zonen dynamisch durchgeführt werden können. Dies kann zum Beispiel genutzt werden um selbst etwas wie DynDNS zu realisieren. In der Tat nennt sich das was Bind da implementiert auch DDNS. Spezifiziert ist das Protokoll in RFC 2136: Dynamic Updates in the Domain Name System (DNS UPDATE).
Da ich heute eh den größten Teil dieses Textes als Mini-HOWTO für einen Kollegen
geschrieben habe, möchte ich ihn auch hier auf meinem Weblog für andere zur
Verfügung stellen. Alle hier verwendeten Befehle sind Befehle von Bind. Unter
Debian sind diese Utility-Befehle im Paket dnsutils
verpackt. Aktuell benutze
ich die Version 9.8.4 von Bind.
Ich zeige in diesem Artikel:
- wie man einen kryptografischen Schlüssel zur Sicherung des Zugriffs erstellt,
- wie die Konfiguration von Bind angepasst wird,
- wie dynamische Updates an Bind geschickt werden und
- was zu beachten ist, wenn weiterhin auch klassische Updates an der Zone durchgeführt werden sollen.
Bei max.example.com
handelt es sich im folgenden um den Namen des erzeugten
Keys. Dieser hat die Form einer Domain, muss aber nicht zwangsläufig einer
existierenden Domain entsprechen. Ich empfehle die E-Mail-Adresse des
Schlüsselinhabers in dem das @-Zeichen durch einen Punkt ersetzt ist zu
verwenden (im Beispiel wäre als die E-Mail-Adresse des Inhabers
max@example.com). Bei example.net
um die Zone, die für DDNS konfiguriert
werden soll. Ein Key kann dabei für mehrere Zonen gemeinsam genutzt
werden. Genauso ist es möglich mehreren Keys die Änderung einer Zone zu
erlauben.
Key erzeugen
dnssec-keygen -a HMAC-SHA512 -b 512 -n USER max.example.com
Das kann einen Moment dauern. Es entstehen zwei Dateien mit den Namen Kmax.example.com..key und Kmax.example.com..private. Beide Dateien enthalten den gleichen Key in unterschiedlichen Formaten, da wir für DDNS einen symmetrischen Key benutzen (d.h. kein Public-Key-Verfahren). Entsprechend muss der Inhalt beider Dateien geheim gehalten werden.
Konfigurieren von Bind
Zuerst muss der erzeugte Schlüssel in die Konfiguration von bind eingefügt werden:
key max.example.com. {
algorithm hmac-sha512;
secret "nc/Q3sL8LDpBE6XpPFdXji2VlhRirN3zxIErqA8xmS8JSMbqQ1PGZrAEdTHl0ekduiQGwDt9zicKtJCSBvaLJw==";
};
Der Inhalt von „secret“ ist dabei aus der Datei Kmax.example.com.*.key übernommen.
Außerdem wird die Konfiguration der Zone angepasst indem eingetragen wird mit welchem Key welche Änderungen gemacht werden dürfen:
zone "example.net" in {
type master;
notify yes;
file "/etc/bind/zones/example.net.zone";
update-policy {
grant max.example.com. subdomain example.net. ANY;
};
};
Neu eingefügt ist hier der „update-policy“-Abschnitt. (Es gibt auch das Keyword allow-update, da kann man allerdings nicht konfigurieren was (nicht) geändert werden darf mit einem Key.)
Bind muss damit alles funktioniert Schreibzugriff auf die Zonenfiles und das Verzeichnis in dem diese liegen haben.
Editieren der Zone mit DDNS-Befehlen
# nsupdate -k Kmax.example.com.*.private
update delete example.net A
update add example.net 500 A 192.0.2.128
send
quit
Manuelles Editieren des Zonefiles
Wenn für eine Zone DDNS aktiv ist, dann darf nicht mehr einfach das Zonenfile geändert werden. Grund hierzu ist, dass Bind nicht für jede Änderung eine neue Version des Zonenfiles erzeugt sondern ein Journal anlegt. (Datei wie die Zonendatei plus Endung *.jnl.) Um die Zonendatei zu editieren muss bind gesagt werden, dass er keine weiteren Updates für die Zone annimmt und alle vorhandenen Updates in die Zonendatei schreibt. Das geht mit:
rndc freeze example.net
Jetzt kann die Zonendatei editiert werden.
rndc thaw example.net
Mit dem "thaw"-Kommando von rndc wurde die Annahme von Updates wieder aktiviert und gleichzeitig Bind instruiert die Zonendatei neu einzulesen, also gemachte Updates zu übernehmen.
Ich habe inzwischen aber komplett aufgehört Zonendateien auf diesem Weg zu
editieren. Ich mache alles über nsupdate
. Das hat den großen Vorteil, dass
nichts schiefgehen kann. nsupdate
übernimmt einerseits nur korrekte
Änderungen und kümmert sich andererseits auch automatisch darum, dass der Serial
im SOA-Record inkrementiert wird. Wenn DNSsec auf dem Nameserver
aktiviert ist, so
sorgt sich nsupdate
sogar darum, dass die Zone automatisch neu signiert wird.