Inhaltsverzeichnis

Update 23.11.2012

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.

Installation von dnscache unter Debian (veraltet)

Version 1.1
Stand: 28.11.2009

Author: OddYsseus
E-Mail: OddYsseus@web.de

Installation von dnscache unter Debian

Vorwort

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.

Anmerkung

Die anderen Tools aus dem djbdns Paket werden hier nicht behandelt. tinydns ist das Programm um einen authoritativen Nameserver zu betreiben.

Installation

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

Verwalten des Dienstes

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

Konfiguration für einen lokalen Cache

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

Konfiguration für einen externen Cache

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

Testen der Funktionalität

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

http://cr.yp.to/djbdns.html