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 Aufträge 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"
Jetzt noch ein Neustart, und Unbound ist fertig eingerichtet:
service unbound restart
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 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"
Die Query Time sollte beim zweiten Mal 0-1 ms betragen, während sie bei der ersten Anfrage deutlich höher liegt.