TinyDNS (djbdns) auf Linux Debian Server installieren und konfigurieren

Einleitung

Ziel: Auf einem Server mit Debian Linux (zum Zeitpunkt der Erstellung dieses Beitrags in Version 7.6 „Wheezy“) sollen ein Master-Nameserver und ebenfalls ein Slave-Nameserver mit TinyDNS betrieben werden.

Voraussetzung: zwei IPs, die auf den Server zeigen (sollte bei den meisten Anbietern kein Problem sein, einfach vorher erkundigen). Für den privaten Gebrauch – wie bei mir – reicht das alle Mal, wenn ich quasi nur einen Nameserver betreibe. Denn wenn mein Server nicht erreichbar ist, bringt mir das auch nichts, dass DNS geht. Die meisten Registry-Stellen (wie die DENIC, die alle .de-Domains verwaltet) verlangen jedoch mindestens 2 Nameserver, die auf unterschiedlichen IPs liegen / zeigen. Daher ist dieses ebenfalls ein kleiner Workaround für das „Problem“.

Natürlich könnt Ihr diese Anleitung auch genauso verwenden, wenn Ihr nur einen Nameserver auf einem Server betreiben (also auch nur auf einer IP lauschen) wollt. Dazu müssen einfach nur bei der Konfiguration ein paar Befehle weggelassen werden (wird an den entsprechenden Stellen unten noch einmal erklärt).


Voraussetzung schaffen um mittels apt das Paket djbdns installieren zu können

Hinweis: Das Programm TinyDNS ist ein Teil des djbdns Pakets von D. J. Bernstein. Bitte also nicht wundern, dass wir hier nicht direkt ein Paket tinydns installieren.

Zunächst die Datei /etc/apt/sources.list erweitern, da das benötigte Paket djbdns nur in „sid“ (unstable) verfügbar ist. Am Ende der Datei diese Zeilen einfügen:

Danach die Datei /etc/apt/preferences anpassen, damit nicht plötzlich Pakete ungewollt aus „unstable“ Quellen installiert oder aktualisiert werden (was zu kaputten Abhängigkeiten zwischen Paketen führen kann!). Sofern Ihr diese Datei schon bearbeitet habt, wisst Ihr sicherlich was Ihr tut. Ansonsten sollte die Datei ziemlich leer sein und Ihr braucht einfach nur am Ende der Datei diese Zeilen einfügen:

Anschließend einmal die Listen für apt neu einlesen:

Nun kann das eigentliche Paket installiert werden:

Dabei wird daemontools, etc. mit installiert. TinyDNS benötigt diese zwar intern, aber wir werden den Dienst trotzdem nachher mit einem eigenen kleinen Start-/Stopp-Skript bedienen.


TinyDNS vorkonfigurieren, damit der Dienst auf zwei IPs lauscht

Nun werden die beiden Nameserver aufgesetzt. Wir wollen ja nach außen auf beide Nameserver-IPs lauschen, daher müssen wir TinyDNS für jede IP Konfigurieren und zwei Dienste starten (jeder lauscht dann auf eine IP des Standard UDF Ports 53). Als Beispiel hier hat der Server die beiden IPs 1.2.3.4 (für den Master Nameserver) und 5.6.7.8 (für den Slave Nameserver):

Tipp: Wer nur eine Instanz installieren möchte (also bspw. nur einen Master Nameserver), muss einfach die letzten 3 Befehle (markierte Zeilen ab Zeile 8) weglassen.

Der letzte Block (Zeile 12 und 13) sorgt dafür, dass wir später nicht jede Domain einzeln für den Master und dann noch für den Slave konfigurieren müssen. Für den Slave wurde einfach eine Verknüpfug (symbolic link) zur Konfiguration des Masters anlegt, daher sind die Konfiguration immer identisch und liegen phsikalisch unter /etc/tinydns-master/root (egal welche Konfiguration man auch öffnet bzw. editiert).

Das wars. TinyDNS lauscht nun auf beiden IPs sobald der TinyDNS Server gestartet wird.


Domains hinterlegen (Zonefile konfigurieren), damit unsere Nameserver korrekt antworten

Nun muss dem TinyDNS „nur noch eben schnell“ erklärt werden, für welche Domains er verantwortlich ist und Antworten ausspucken soll. Hierzu wechselt Ihr zunächst in den Ordner /etc/tinydns-master/root in dem die Konfigurationsdatei (Zonefile) abgelegt wird.

Natürlich könnt Ihr die diversen add- Skripte nutzen, die sich ebenfalls in diesem Ordner befinden. Ich empfehle jedoch die Datei data in diesem Ordner direkt zu bearbeiten und hierbei die offizielle Dokumentation für tinydns-data zu Rate zu ziehen.

Das Format sieht zunächst vielleicht komisch aus, auf jeden Fall anders als man es ggf. von BIND Zonefiles kennt. Doch wenn man das Prinzip einmal verstanden hat, ist es ganz einfach das TinyDNS Zonefile zu schreiben.

Hier ein paar nützliche Links (alle Seiten auf englisch):

Die konkreten Einträge für diesen Blog (ansas-meyer.de) sieht bei mir so aus:

Die einzelnen Schritte sehen dann zusammengefasst so aus:

Wichtig: Am Ende nicht vergessen das make auszuführen (in dem Ordner /etc/tinydns-master/root/), damit die Konfiguration aktualisiert wird (siehe Zeile 4)!

Das wars. TinyDNS weiß nun was er bei den eingerichteten Domains bei einer Anfrage antworten soll.

Wenn TinyDNS auch bei unbekannten Domains immer antworten soll

Von Haus aus antwortet TinyDNS nur auf Anfragen von Domains, die Ihr im Zonefile angelegt habt. Kennt TinyDNS eine Domain nicht, so erhält der aufrufende Client nach ein paar Sekunden ein Timeout. Ich persönlich finde das gut, da Euer Nameserver dadurch weniger anfällig ist.

Wenn Ihr jedoch wollt, dass TinyDNS immer antwortet (uns sei es halt mit „habe keinen Eintrag zu der Domain“), dann fügt einfach am Anfang des Zonefile data folgendes ein:


Dienst sauber mittels Start-Stopp-Skript einrichten, damit dieser beim Systemstart auch automatisch gestartet wird (ohne deaemontools!)

Eine neue Datei namens /etc/init.d/tinydns anlegen mit diesem Inhalt:

Tipp: Wer nur eine Instanz installieren möchte (also bspw. nur einen Master Nameserver), muss einfach in der markierten Zeile 16 den Teil slave rauslöschen, damit nur ein Master gestartet wird. Diese Zeile würde dann so aussehen: servers="master"

Damit das Skript auch ausgeführt werden kann müssen wir die Berechtigungen noch anpassen:

Wichtig: Die ersten Zeilen im Skript, die einfach nur wie Kommentare aussehen, dienen nun der Steuerung für den Systemstart (diese Zeilen also bitte nicht ändern, es sei denn Ihr wisst was Ihr tut… oder einfach hier nachlesen). Nun muss der Dienst noch in die Startroutinen des Servers eingetragen werden, damit TinyDNS auch bspw. beim Neustart des Servers gleich gestartet wird. Das geht ganz einfach mit diesem Befehl, der nur einmalig ausgeführt werden muss:

Das wars. TinyDNS statet nun automatisch bei jedem Neustart.


Ein paar nützliche Befehle um den Nameserver manuell zu steuern und zu überwachen

Mit diesen Befehlen könnt Ihr die Nameserver manuell zu starten, kontrollieren oder beenden:

Ich hoffe dieses How-to hat Euch helfen können. Was habt Ihr ggf. anders gemacht? Läuft alles? Schreibt mir doch einfach ein paar Zeilen dazu.  Ich würde mich freuen.


 

Update (26.04.2015): Abschritt „Voraussetzung schaffen“ überarbeitet und die automatische Installation bzw. Aktualisierung auf „testing“ bzw. „sid“ Pakete über APT-Pinning ausgeschlossen.

Ähnliche Beiträge

2 Antworten

  1. Henrik sagt:

    Vielen Dank für die Anleitung, aber Vorsicht beim cut n paste der preferences fuer das pinning!

    Wenn man in Zeile 4 ist ein Leerzeichen mit-kopiert, werden die beiden pinnings als eines aufgefasst, und man macht unbeabsichtigt ein teil-upgrade auf Debian testing!

    • Ansas sagt:

      Danke für den Hinweis, Henrik.

      Leider mogelt mir das WordPress Plugin „Crayon Syntax Highlighter“ einfach ein Leerzeichen in die „eigentlich“ leeren Zeilen :/ Das ist mir bis zu Deinem Kommentar gar nicht aufgefallen. In diesem Zuge habe ich mal den Entwickler des Plugins darauf angesprochen, siehe https://github.com/aramk/crayon-syntax-highlighter/issues/344

      Ich habe zudem diesen Beitrag grad mal ein wenig vereinfacht. Da nur das Release „unstable“ benötigt wird, habe ich die Integration des Releases „testing“ entfernt.

      VG Ansas

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.