Automatische DNS-Updates per DHCP

Lesezeit
3 Minuten
Bis jetzt gelesen

Automatische DNS-Updates per DHCP

21.01.2016 - 12:00
Veröffentlicht in:

Mühsam ist es, Informationen zu einem Host an mehr als einer Stelle zu pflegen. Einfacher wird die Sache, wenn man den Domain Name Service (DNS) mit DHCP verbindet, um die Hostnamen dynamisch im DNS einzutragen. Dabei gibt es einiges zu konfigurieren, was dieser Artikel näher erklärt.

Als Linux-Distribution kommt Debian 8 "Jessie" zum Einsatz, aber die Konfiguration sollte auf anderen Distributionen ähnlich aussehen. Glücklicherweise liefert Debian den BIND-Server (apt-get install bind9) schon mit einer modularen Konfiguration aus, was es einfacher macht, die eigenen Änderungen strukturiert zu pflegen. Die Hauptkonfiguration ist in der Datei /etc/bind/named.conf zu finden. Sie bindet die beiden Dateien /etc/bind/named.conf.options und /etc/bin/named.conf.local ein. Gedacht ist erstere für globale Konfigurationsoptionen, während Sie in der zweiten Datei die DNS-Zonen eintragen.

Für dynamische DNS-Updates, wie sie der DHCP-Server für die Updates verwendet, brauchen Sie einen kryptografischen Key, der von Debian ebenfalls schon nach der Installation erzeugt wurde. Er ist in der Datei /etc/bind/rndc.key zu finden. Einen eigenen Key erzeugen Sie mit dem Befehl dnssec-keygen:

dnssec-keygen -a hmac-md5 -b 128 -r /dev/urandom -n USER meinkey

Den Schlüssel finden Sie anschließend in jeder der beiden entstandenen Dateien in der Zeile "Key". In die BIND-Konfiguration integrieren Sie ihn so:

key "ddns-key" {
       algorithm hmac-md5;
       secret "pAY61K6RuV0TPfd0fTBMhA==";
};

Diese Zeilen schreiben Sie entweder direkt in die Konfigurationsdatei /etc/bind/named.conf.local oder in eine eigene Datei wie ddns.key, die Sie per include "/etc/bind/ddns.key"; in die Konfiguration einbinden.

Damit für eine Zone dynamische DNS-Updates erlaubt sind, muss die Zonen-Konfiguration etwa so aussehen:

zone "cloud.net" IN {
   type master;
   file "/var/lib/bind/db.cloud.net";
   allow-update { key "ddns-key" ; } ;
};

Für Zonen, die dynamische Updates erlauben, ist das Verzeichnis /var/lib/bind vorgesehen, damit der BIND-Server nicht in das Konfigurationsverzeichnis schreiben muss und man die Dateirechte dort restriktiver halten kann.

Auch den Reverse Lookup der zugehörigen IP-Adressen sollten Sie dynamisch gestalten, damit die IP-Adresse und Hostnamen auch in umgekehrter Richtung zusammenpassen. Die Konfiguration dafür ist analog zu der der Zone:

zone "0.0.10.in-addr.arpa." {
    type master;
    file "/var/lib/bind/db.10.0.0";
    allow-update { key "ddns-key" ; } ;
};

Die Konfiguration der DNS-Zonen selbst zu beschreiben, würde hier zu weit führen. Deshalb nur zwei Beispiele von Zonen mit dem obligatorischen SOA-Record (Start of Authority) und einem Nameserver-Eintrag:

$ORIGIN .
$TTL 604800    ; 1 week
cloud.net              IN SOA  ns.cloud.net. hostmaster.cloud.net. (
                               20151213   ; serial
                               604800     ; refresh (1 week)
                               86400      ; retry (1 day)
                               2419200    ; expire (4 weeks)
                               604800     ; minimum (1 week)
                               )
                       NS      ns.cloud.net.
$ORIGIN .
$TTL 604800    ; 1 week
0.0.10.in-addr.arpa    IN SOA  ns.cloud.net. hostmaster.cloud.net. (
                               15         ; serial
                               604800     ; refresh (1 week)
                               86400      ; retry (1 day)
                               2419200    ; expire (4 weeks)
                               604800     ; minimum (1 week)
                               )
                       NS      ns.cloud.net.

Wer will, kann nach dem Neuladen der BIND-Konfiguration die dynamischen DNS-Updates testen. Dazu bietet die Software das Tool nsupdate:

# nsupdate
> server localhost
> key ddns-key pAY61K6RuV0TPfd0fTBMhA==
> zone cloud.net
> update add test.cloud.net. 600 IN A 10.0.0.123
> send

Alles funktioniert, wenn nach den send-Befehlen keine Fehlermeldungen auftauchen.

Dynamische DNS-Updates vom DHCP-Server

Den DHCP-Server (hier: ISC-DHCP-Server) müssen Sie anweisen, DNS-Updates an BIND zu schicken, wenn ein Rechner per DHCP eine Adresse bezieht. Dazu dient in der Datei /etc/dhcp/dhcpd.conf die Anweisung:

ddns-updates on;

Verwenden Sie den ddns-update-style interim, der ab ISC DHCP 4.3 die Standardeinstellung ist. Damit auch statische Einträge in der DHCP-Konfiguration die DNS-Updates auslösen, verwenden Sie die Anweisung update-static-leases on;.

Am einfachsten ist es, den DNS-Update-Key direkt in die DHCP-Konfiguration zu kopieren, statt eine Datei einzubinden. Dann müssen Sie sich nicht darum kümmern, die Rechte und Besitzverhältnisse so festzulegen, dass DHCP-Server und BIND darauf zugreifen dürfen.

key "ddns-key" {
 algorithm HMAC-MD5;
 secret "pAY61K6RuV0TPfd0fTBMhA==";
};

Zusätzlich müssen Sie noch den beiden Zonen (Forward und Reverse) den Key zuweisen:

zone cloud.net {
  primary 127.0.0.1;
  key "ddns-key";
}
zone 0.0.10.in-addr.arpa {
   primary 127.0.0.1;
   key "ddns-key";
}

In der Konfiguration des von DHCP verwalteten IP-Netzwerks fügen Sie den zugehörigen Domainnamen hinzu:

subnet 10.0.0.0 netmask 255.255.255.0 {
    option routers             10.0.0.254;
    option domain-name-servers 10.0.0.254;
    option subnet-mask         255.255.255.0;
    option domain-search       "cloud.net";
    ddns-domainname            "cloud.net";
    default-lease-time         21600;
    max-lease-time             43200;
    next-server                10.0.0.254;
}

Schließlich richten Sie noch für jeden Host einen Eintrag ein, der die MAC-Adresse der IP-Adresse und dem Hostnamen zuordnet:

host nfs {
   hardware ethernet 52:54:00:66:f8:32;
   fixed-address 10.0.0.21;
   ddns-hostname "nfs";
}

Den Namen für das DNS-Update bezieht der DHCP-Server aus der Zeile mit ddns-hostname. Diese wie alle anderen Einstellungen sind in der Manpage von dhcpd dokumentiert.

Der von einem Rechner selbst gespeicherte Hostname lässt sich so nicht ändern, weil die DHCP-Clients die entsprechende Einstellung meist ignorieren (auch wenn man sie im DHCP-Server mit use-host-decl-names aktiviert). Auf der sicheren Seite sind Sie, wenn der Host schon den Hostnamen trägt, den er bei DHCP-Requests an den DHCP-Server schickt. Installieren Sie beispielsweise automatisiert eine virtuelle Maschine, können Sie ihn bei der Installation festlegen, etwa über Preseed- (Debian/Ubuntu) und Kickstart-Dateien (Red Hat usw.). Ansonsten müssen Sie durch die DHCP-Settings sicherstellen, dass der mitgeschickte Hostname nicht den im DNS eingestellten Namen beeinflusst. Klappt alles, sehen Sie im Syslog ähnliche Meldungen wie in Abbildung 1.

Abbildung 1: Das dynamische DNS-Update durch den DHCP-Server hat geklappt.
Abbildung 1: Das dynamische DNS-Update durch den DHCP-Server hat geklappt.

Denken Sie daran, dass Sie mit dynamischen Updates nicht mehr einfach die BIND-Zonendateien editieren können. Wenn Sie das tun wollen, müssen Sie sie vorher mit dem Befehl rndc freeze "einfrieren". Sind Sie fertig mit dem Editieren, tauen Sie die Zone-Files wieder mit rndc thaw auf.

 

Ähnliche Beiträge

Zero-Touch-Provisionierung von aktiven Netzwerkkomponenten (3)

Zero-Touch-Provisionierungsprozesse sind im Rollout von Client-PCs und Servern bereits lange Zeit Standard. Im Gegensatz dazu kommen diese Prozesse bei aktiven Netzwerkkomponenten wie Routern und Switches nur selten zum Einsatz. Im dritten und letzten Teil gehen wir auf weitere Varianten ein, etwa die ZTP-Provisionierung ohne proprietären Server, die Boot-Loader-Variante iPXE oder das alte Verfahren AutoInstall.

Zero-Touch-Provisionierung von aktiven Netzwerkkomponenten (2)

Zero-Touch-Provisionierungsprozesse sind im Rollout von Client-PCs und Servern bereits lange Zeit Standard. Im Gegensatz dazu kommen diese Prozesse bei aktiven Netzwerkkomponenten wie Routern und Switches nur selten zum Einsatz. Im zweiten Teil der Workshopserie schildern wir den proprietären Cisco-Ansatz "Network-Plug-and-Play", der über eine GUI erfolgt und bei dem sich die ausgerollten Komponenten an die Gegebenheiten im Netzwerk anpassen lassen.