Von Lars Gremme Oktober 3, 2016
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. Bitte vorher das “Kennwort” durch ein sinnvolles ersetzen! Einen eigenen Key erzeugen Sie mit dem Befehl dnssec-keygen:
dnssec-keygen -a hmac-md5 -b 128 -r /dev/urandom -n "Kennwort"
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" { ..., 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.
Bitte bearbeiten Sie als nächtes die /etc/bind/named.conf.options
innerhalb des Option Bereichs:
forwarders {
8.8.8.8;
8.8.4.4;
};
Ansonsten können keine Domain-Namen aufgelöst werden & der Server meldet zurück, dass er die eingegebene URL nicht kennt. 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.
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.
Quelle:
Oliver Frommel http://www.admin-magazin.de/Online-Artikel/Automatische-DNS-Updates-per-DHCP