pdnsd als lokaler Nameserver

Aus LinuxUser 05/2002

pdnsd als lokaler Nameserver

Wer kennt die Namen?

Viele kleine Netzwerke verwenden zur Namensauflösung die hosts-Tabelle. Dabei hat der Einsatz eines Nameservers viele Vorteile und muss gar nicht kompliziert sein.

Um die in Netzwerken allerorten verwendeten Hostnamen in die zur Adressierung benötigten IP-Adressen aufzulösen, kommt bereits seit über zehn Jahren ein standardisierter Verzeichnis-Dienst zum Einsatz: der “Domain Name Service” (DNS, [1]).

DNS-Grundlagen

Die Hauptaufgabe von Domain-Nameservern besteht im Auflösen von Namen und IP-Adressen sowie in der Delegation des Mailverkehrs. Dazu arbeiten sie mit sogenannten Records, speziell formatierten DNS-Einträgen.

Ein A Type Record (kurz: A Record; bei IPv6 spielt der AAA Record dieselbe Rolle) enthält die Information, welcher Hostname auf welche IP-Adressen definiert ist, während ein MX Type Record einen “Mail Exchanger”, also den für eine Domain zuständigen Mail-Server festlegt.

Ebenfalls wichtig sind die PTR Records. Diese werden für sogenannte Reverse Lookups ausgewertet, bei denen der Nameserver nach einer IP-Adresse gefragt wird und den zugehörigen Hostnamen zurück liefert.

Jeder Record enthält eine TTL (“time to live”, Lebensdauer). Diese definiert, wie lange die entsprechende Information zwischengespeichert werden darf, nachdem die Anfrage einmal vom zuständigen Nameserver beantwortet wurde (Authorative Answer).

Langer Rede, kurzer Sinn: Über das DNS-System kann man vielfältige Informationen verbreiten. Provider tun das für ihre Kunden und setzen dabei meist die Software bind[2] ein, die sehr viel kann, aber alles andere als einfach zu konfigurieren ist, weshalb viele Admins kleinerer Netzwerke lieber auf einen zentralen Nameserver für ihr Netz verzichten. Stattdessen bringen sie einen Teil der Informationen, nämlich die Zuordnung von Hostnamen zu IP-Adressen, in Dateien mit dem Namen hosts (unter Linux /etc/hosts) unter, die dann aber immer auf allen Rechnern des Netzwerks aktuell gehalten werden müssen.

Vorteile von pdnsd

Ein mühseliges Geschäft der Turnschuhadministration, sodass sich die Frage stellt: Gibt es nicht eine Nameserver-Software, die einfacher zu konfigurieren ist? Die Antwort heißt pdnsd[3]. Damit hält man die Adressen-Hostnamen-Zuordnung für das gesamte LAN an zentraler Stelle auf einem lokalen Nameserver vor.

Aber auch, wer öfter mit einem Notebook ohne Netzwerkanbindung unterwegs ist, profitiert von pdnsd, der viele Nameservice-Informationen in einem Cache lokal zwischenspeichert. So können DNS-Abfragen von Programmen auch offline beantwortet werden, was oft deren Startzeit verkürzt.

Ob Sie pdnsd selbst kompilieren oder als Binär-Paket (erhältlich für Debian und Red Hat) mit dem Paketmanager dpkg oder rpm einspielen, bleibt Ihnen überlassen. Wenn Sie die Heft-CD unter /mnt/cdrom ins lokale Dateisystem einbinden, entpackt der folgende Befehl das Quelltextarchiv im aktuellen Verzeichnis:

tar xjf /mnt/cdrom/LinuxUser/pdnsd/pdnsd-1.1.7.tar.bz2

Wechseln Sie nun mit cd pdnsd-1.1.7 ins neu angelegte Quell-Verzeichnis. Mit

./configure && make

passen Sie den Quelltext an das lokale System an und kompilieren die Software.

Ein make check ohne Fehlermeldung zeigt, dass der Kompiliervorgang erfolgreich war. Zur Installation beschaffen Sie sich nun mit su und Ihrem root-Passwort Schreibrechte für die Ziel-Verzeichnisse. Wechseln Sie ins Quell-Unterverzeichnis src/rc, und folgen Sie den Anweisungen im README. SuSE-, Red-Hat und Debian-Nutzer haben es noch einfacher: Sie wechseln einfach ins passende Sub-Directory (für SuSE nach src/rc/SuSE) und geben make install ein.

Listing 1

/etc/pdnsd.conf

01  global {
02        perm_cache=512;
03        cache_dir="/var/cache/pdnsd";
04        max_ttl=604800;
05        run_as="nobody";
06        verbosity=3;
07 }
08
09 server {
11        ip="194.162.162.194";
12        timeout=30;
13        interval=onquery;
14        uptest=if;
15 }
16
17 rr {
18        ttl=86400;
19        owner="killesberg.org.";
20        name="killesberg.org.";
21        a="192.168.0.10";
22        soa="killesberg.org.","root.killesberg.org.",42,86400,900,86400,86400;
23 }
24
25 rr {
26        ttl=86400;
27        owner="killesberg.org.";
28        name="10.0.168.192.in-addr.arpa.";
29        ptr="killesberg.org.";
30        soa="killesberg.org.","root.killesberg.org.",42,86400,900,86400,86400;
31
32 }
34
35 source {
37        ttl=86400;
38        owner="killesberg.org.";
39        file="/etc/hosts"; // Position der zu verwendenden Hosts-Tabelle
40 }

Konfiguration

Damit pdnsd funktionieren kann, gilt es, ihn in der Datei /etc/pdnsd.conf mit den nötigen Konfigurationsangaben zu versorgen (Listing 1). Die erste Sektion global beschreibt allgemeine Server-Einstellungen wie Cache-Größe und Cache-Verzeichnis: perm_cache setzt den Platz für die Zwischenlagerung von DNS-Informationen auf 512 kB. cache_dir legt das Verzeichnis fest, in dem diese Daten abgelegt werden. max_ttl definiert die maximale “Haltbarkeit” eines Cache-Eintrags in Sekunden. run_as gibt den Namen des Benutzers an, mit dessen Rechten pdnsd laufen soll. Die Option verbosity schließlich wird vor allem zur Fehlersuche benötigt: Bei einem Wert von 3 protokolliert Syslog sehr viele Daten, bei 0 nur sehr wenige.

In server-Abschnitte wie in Zeile 9 trägt man Nameserver ein, die abgefragt werden sollen, wenn der lokale Server keine Antwort auf die Anfrage kennt. Deren IP-Adressen erhalten Sie meistens von Ihrem Internet-Provider und tragen Sie als ip ein. Unter timeout legen Sie fest, wieviele Sekunden auf eine Antwort gewartet wird. interval gibt an, wie oft die Erreichbarkeit des Nameservers zu prüfen ist. Mögliche Optionen sind ein Wert in Sekunden oder onquery, also nur bei einer anliegenden Anfrage. Die interessantesten Werte für den uptest-Eintrag heißen if und ping. Ersteres empfiehlt sich für Modem- und ISDN-Einwahlen: Damit erkennt pdnsd die Erreichbarkeit des Nameserver nur am Status des Einwahl-Interfaces. Den zweiten Wert, ping, sollten alle Benutzer ohne zeitlich tarifierte Einwahl verwenden.

Die DNS-Records für die zu verwaltenden Rechner trägt man in rr-Sektionen ein. Welche Record-Typen pdnsd unterstützt, erfahren Sie mit pdnsd-ctl list-rrtypes. Ähnlich funktionieren auch die source-Abschnitte (Zeile 35). Die unter file eingetragene hosts-Datei behandelt pdnsd dann wie eine DNS-Zone: Alle Einträge aus dieser Datei werden in den Nameserver eingefügt. Von zentraler Bedeutung sowohl in rr als auch in source sind die Einträge ttl (die TTL für diese Sektion) und owner (der Name des lokalen Nameservers).

rr-Abschnitte enthalten als name zudem noch den aufzulösenden Namen. Beachten Sie dabei das besondere Format für Reverse Lookups: Notieren Sie die IP-Adresse in umgekehrter Reihenfolge, und fügen Sie .in-addr.arpa an, ein Überbleibsel vom Vorgänger des Internets. Die IP-Adresse 192.168.0.10 wird so im Reverse-Lookup-Eintrag zu 10.0.168.192.in-addr.arpa.. Hier wie auch an allen anderen Stellen müssen Sie Namenseinträge immer mit einem Punkt abschließen!

Ist die Antwort auf die Abfrage von name ein A Record, folgt jetzt die Zeile a=”IP-Adresse”; (Zeile 21). Bei einem PTR Record steht stattdessen ptr=”Hostname.”; (Zeile 29). Jeder rr-Abschnitt enthält zudem einen SOA (“Start of Authority”) Record (Zeile 22). Dieser beinhaltet einige administrative Angaben, durch Komma getrennt in folgender Reihenfolge:

  • Domain-Name des Domain Name Servers.
  • E-Mail-Adresse des Administrators, wobei das @ durch einen Punkt substituiert wird.
  • Seriennummer der Zone (bei lokaler Installation beliebig).
  • Refresh Timeout: Aller wieviel Sekunden soll der Cache aktualisiert werden?
  • Nach wieviel Sekunden soll ein erneuter Refresh versucht werden, wenn der vorige misslang?
  • Expire-Wert: Nach wieviel Sekunden erlischt ein gecachter Eintrag?
  • Erneute Angabe der TTL.
Abbildung 1: Abfrage eines Nameserver-Records

Abbildung 1: Abfrage eines Nameserver-Records

Über das Startskript der jeweiligen Distribution (beim Booten) gestartet, nützt der beste Nameserver nichts, wenn er nicht gefragt wird. Daher editiert man die Datei /etc/resolv.conf der ihn nutzenden Rechner: Listing 2 verwendet den lokal gestarteten Nameserver. (Für weitere zu befragende Nameserver fügen Sie je eine Zeile nameserver IP-Adresse-des-Nameservers an.) Der Parameter search legt die Domains fest, die nach einem Computer-Namen durchsucht werden sollen, wenn kein Eintrag gefunden werden konnte.

Listing 2

/etc/resolv.conf

search killesberg.org
nameserver 127.0.0.1

Glossar

IP-Adressen

Weltweit eindeutige Zahlenkombination zur Adressierung von Netzwerkkomponenten im Internet (siehe auch [4]). Die Abkürzung IP steht für “Internet Protocol”. Es wird heute zumeist in der klassischen Version 4 eingesetzt, in Zukunft wird IPv6 für einen größeren, zur Verteilung bereitstehenden Adressbereich sorgen.

Authorative Answer

Nur der für die angefragte Domain zuständige Nameserver liefert sogenannte authorisierte Antworten zurück. Andere Nameserver, die die Antwort unter Umständen zwischengespeichert haben, liefern Unauthorative Answers zurück. Diese können durch gezielte Angriffe teilweise gefälscht werden.

Syslog

Logging-Daemon, der System- und Kernelaktivität mitprotokolliert. pdnsd-Fehler landen normalerweise in der Datei /var/log/messages.

Infos

[1] RFC 1035: http://www.ietf.org/rfc/rfc1035.txt

[2] ISC BIND: http://www.isc.org/products/BIND/

[3] PDNSD-Homepage: http://home.t-online.de/home/Moestl/

[4] Frederik Bijlsma: “Vernetzte Welt”, LinuxUser 03/2002, S. 24 ff., http://www.linux-user.de/ausgabe/2002/03/024-netzwerk/grundlagen-5.html

Der Autor

Frederik Bijlsma benutzt Linux seit 1994. Er studiert Betriebswirtschaftslehre in Magdeburg und setzt das Betriebssystem vor allem zum Planen und Realisieren von Netzwerken ein.

LinuxUser 05/2002 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben