Unbound als lokalen DNS-Resolver und -Cache einrichten


Meine Server verfügen seit ein paar Wochen über lokale, nur vom DNS Root abhängige DNS-Resolver, die auch DNSSEC beherrschen. Der Vorteil: DNS-Ergebnisse lassen sich lokal cachen und man muss weniger auf externe Infrastruktur vertrauen. Das verbessert Datenschutz und Sicherheit. Die DNS-Anfragen werden direkt an einen der DNS-Rootserver gestellt und von dort aus aufgelöst. Der kleine DNS-Resolver “Unbound” ist perfekt als lokaler Resolver geeignet und mit wenigen Kommandos einsatzbereit:

apt install unbound

Eigentlich könnte die Anleitung an dieser Stelle schon fast zu Ende sein, denn nach der Installation horcht der Resolver lokal bereits auf Port 53 und beherrscht auch schon DNSSEC. Trotzdem sind wir noch nicht fertig, denn der Resolver bekommt jetzt noch eine aktualisierte Version des DNSSEC Root Trust Anchors:

unbound-anchor

… speichert neuen key in /etc/unbound/root.key

Die Datei /etc/unbound/unbound.conf.d/root-auto-trust-anchor-file.conf solltet ihr so anpassen:

server:
    auto-trust-anchor-file: "/etc/unbound/root.key"

(Hinweis zu Ubuntu 16.04: Bevor Unbound gestartet wird, muss noch ein kleiner Bug behoben werden: Unbound muss Zugriff auf sein Konfigurationsverzeichnis haben: chown unbound /etc/unbound/)

Unbound ist fertig eingerichtet und kann gestartet werden:

service unbound start

Damit der DNS-Server vom System genutzt wird, muss je nach Linux-Distribution die Netzwerkkonfiguration angepasst werden, sodass Unbound als DNS-Resolver genutzt wird. In meiner Konfiguration (/etc/network/interfaces) sieht das so aus:

auto lo
iface lo inet loopback
auto eth0

iface eth0 inet static
    address 5.1.76.155
    netmask 255.255.255.0
    gateway 5.1.76.1
    dns-nameservers 127.0.0.1 8.8.8.8 8.8.4.4

iface eth0 inet6 static
    address 2a00:f820:417::be19:7b23
    netmask 64
    gateway 2a00:f820:417::1
    dns-nameservers ::1 2001:4860:4860::8888 2001:4860:4860::8844

Ich habe euch blau markiert, wo ich eine Anpassung gemacht habe. In meinem Beispiel wird zuerst versucht, Unbound zu nutzen (steht an erster Stelle) - und wenn das nicht funktioniert, wird das Google DNS befragt. Neu einem Neustart wird die aktualisierte Netzwerkkonfiguration genutzt.

Wenn ihr wissen wollt, welchen Performance-Vorteil der lokale DNS-Cache bringen kann, führt zweimal hintereinander eine DNS-Anfrage aus:

dig thomas-leister.de | grep "Query time"

(evtl. Paket “dnsutils” für “dig”-Kommando nach installieren). Die Query Time sollte beim zweiten Mal 0-1 ms betragen, während sie bei der ersten Anfrage deutlich höher liegt.