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 wäre 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 djbdnsdnscache 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 dnslogdnscache 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/dnscacheDie 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/dnscacheMit svstat kann man prüfen ob unser dnscache Dienst korrekt gestartet wurde.
$ svstat /etc/service/dnscacheEs sollte in etwa folgende Ausgabe erscheinen.
/etc/service/dnscache: up (pid 1337) 5 secondsWir 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/dnscacheUm 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/dnscacheDer 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.confZeile 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/IPIm 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.4Es 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.3In 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.confZeile 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/currentNun 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.1Falls ein externer Cache konfiguriert wurde:
$ host heise.de 4.3.2.1 $ dig heise.de A @4.3.2.1