dnscache ist seit Debian 6 „Squeeze“ nicht mehr aus den offiziellen Quellen verfügbar, da es für Cache Poisoning sehr viel anfälliger als andere Resolver ist. Mehr Informationen dazu in diesem Bugreport.
dnscache sollte also vorerst nicht mehr eingesetzt werden!
Als Alternative empfiehlt sich der Recursor von PowerDNS. Dieser ist als eigenständiges Paket, getrennt vom authoritativen Server, in Debian 6 „Squeeze“ und Debian 7 „Wheezy“ verfügbar.
apt-get install pdns-recursor
Nach der Installation lauscht der Dienst auf 127.0.0.1:53 und die Standardkonfiguration ist für die Arbeit als lokaler Resolver völlig ausreichend.
Version 1.1
Stand: 28.11.2009
Author: OddYsseus
E-Mail: OddYsseus@web.de
Um STOPP-Schildern vorzubeugen und da man sich nicht immer auf die Resolving Caching Nameservers des Anbieters verlassen kann möchten wir auf unserem Server einen lokalen Resolving Caching Nameserver aufsetzen. Ein Nameserver dieser Art erfüllt einen einzigen Zweck: er übersetzt Domains in IP-Adressen. Dafür verwenden wir das Programm dnscache aus dem djbdns Paket von Daniel J. Bernstein. Es ist vergleichsweise einfach zu installieren, sehr sicher und performant. Eine schlanke Alternative zu BIND.
Die anderen Tools aus dem djbdns Paket werden hier nicht behandelt. tinydns ist das Programm um einen authoritativen Nameserver zu betreiben.
Zunächst installieren wir das benötigte Debian-Paket. Zusammen mit djbdns werden die daemontools installiert. Diese dienen später dazu den dnscache Prozess zu überwachen und zu steuern.
$ aptitude install djbdns
dnscache besteht aus zwei Modulen. Dem eigentlichen dnscache Prozess (zuständig für das Auflösen der DNS Queries) und einem Log Prozess (zuständig für das Loggen der Aktivitäten von dnscache). Beide Laufen chroot'ed unter eigenen Useraccounts. Wir legen also zwei Systemuser in unserem System an und verbieten diesen das Einloggen.
$ useradd -r -s /bin/false dnscache $ useradd -r -s /bin/false dnslog
dnscache benutzt eine spezielle Verzeichnisstruktur für Konfigurationsdateien und Laufzeitdateien. Diese Struktur wird das dnscache-conf Programm für uns anlegen.
$ dnscache-conf dnscache dnslog /etc/dnscache
Die daemontools überwachen das Verzeichnis /etc/service und starten den jeweiligen Dienst sobald dort ein neues Verzeichnis erscheint. Durch einen Symlink von /etc/service/dnscache nach /etc/dnscache wird der Dienst den daemontools bekannt gemacht und auch sogleich gestartet.
$ ln -s /etc/dnscache /etc/service/dnscache
Mit svstat kann man prüfen ob unser dnscache Dienst korrekt gestartet wurde.
$ svstat /etc/service/dnscache
Es sollte in etwa folgende Ausgabe erscheinen.
/etc/service/dnscache: up (pid 1337) 5 seconds
Wir rufen diesen Befehl nun in Abständen von etwa 10-15s mehrmals auf um zu sehen ob dnscache sauber läuft. Im Normalfall wird der Wert ständig steigen. Nach etlichen Tagen sieht es ungefähr so aus.
/etc/service/dnscache: up (pid 1337) 1468226 seconds
Falls wir dnscache doch einmal manuell neu starten möchten geschieht dies mit svc. Wir senden dem dnscache Prozess ein TERM Signal woraufhin dieser sich beendet, danach von den daemontools aber sofort wieder neu gestartet wird.
$ svc -t /etc/service/dnscache
Um den Dienst vorübergehend zu stoppen benutzen wir diesen Befehl. Nach dem Beenden wird dnscache nun nicht mehr automatisch neu gestartet!
$ svc -d /etc/service/dnscache
Der Betrieb kann wie nachfolgend wieder aufgenommen werden.
$ svc -u /etc/service/dnscache
Es sind keine speziellen Einstellungen mehr nötig. dnscache lauscht nach der Standardinstallation auf der IP-Adresse 127.0.0.1 und beantwortet auch nur DNS-Anfragen von dieser Adresse. Wir tragen nun noch unseren dnscache in die resolv.conf ein. Wenn dnscache für alle Anfragen benutzt werden soll, an oberster Stelle in der Datei, andernfalls in einer neuen Zeile direkt unter dem Nameserver des Anbieters.
$ vim /etc/resolv.conf
Zeile die eingetragen werden muss:
nameserver 127.0.0.1
In der Datei /etc/dnscache/env/IP kann die IP-Adresse eingestellt werden auf der dnscache Anfragen erwartet. Falls unser Server die öffentliche Adresse 4.3.2.1 besitzt tragen wir diese dort ein.
$ echo "4.3.2.1" > /etc/dnscache/env/IP
Im Verzeichnis /etc/dnscache/root/ip/ müssen jetzt leere Dateien für alle IP-Adressen oder IP-Ranges angelegt werden denen wir erlauben DNS-Anfragen an unseren dnscache zu senden. Möchten wir bspw. 1.2.3.4 hinzufügen so geschieht das folgendermaßen.
$ touch /etc/dnscache/root/ip/1.2.3.4
Es ist möglich die Oktette zwei bis vier der IP-Adresse weg zu lassen um somit ganzen /8, /16 oder /24 Netzen den Zugriff zu erlauben. In folgendem Beispiel fügen wir das Netz 1.2.3.0/24 hinzu.
$ touch /etc/dnscache/root/ip/1.2.3
In der resolv.conf muss diesmal die öffentliche IP-Adresse des Servers eingetragen werden um dnscache auch für lokale Anfragen verwenden zu können.
$ vim /etc/resolv.conf
Zeile die eingetragen werden muss:
nameserver 4.3.2.1
Ich empfehle in einer zweiten Shell das Logfile zu verfolgen.
$ tail -F /etc/dnscache/log/main/current
Nun senden wir eine Anfrage an dnscache, bspw. mit host oder dig.
$ host heise.de 127.0.0.1 $ dig heise.de A @127.0.0.1
Falls ein externer Cache konfiguriert wurde:
$ host heise.de 4.3.2.1 $ dig heise.de A @4.3.2.1