Ein Programm, z.B. ein WWW-Browser, muß nun natürlich so einen
DNS-Server fragen können. Damit das nicht jedes Programm von
sich aus implementieren muß, ist das Bestandteil der libc. Dies
nennt man Resolver, zu deutsch:
"Auflöser". Die Funktionen verwenden
Konfigurationsdateien (bzw. bei Win entsprechende
Registryeinträge), um z.B. die IP Adresse des zu verwenden
Namensservers zu ermitteln. Der Resolver sendet eine Anfrage an
einen DNS-Server, und erwartet die (endgültige) Antwort. Der
DNS-Server muß nun hinten beginnend den Namen
auflösen. Soll er z.B. www.selflinux.de für den
Klienten auflösen, muß er sich dabei rekursiv durch die
DNS-Struktur hangeln.
Er fragt zuerst einen ROOT-SERVER nach den DNS-Servern (falls
noch nicht im Cache), die für de. autoritativ sind.
Dann fragt er einen dieser nach den für selflinux.de.
autoritativen, und einen von diesen nach
www.selflinux.de.. Hat er die Antwort im Cache, oder
hatte ein anderer DNS-Server (der von "unserem" als
Forwarder benutzt wird, der also die Anfragen
weitergereicht bekommt) die Antwort im Cache, so wird sie dem
Client als non-authoritative gekennzeichnet
übermittelt. Diese Information bekommt das Programm
normalerweise allerdings nicht zu sehen.
Es gibt auch DNS-Server, die diese rekursiven Resolveranfragen
nicht auflösen. Diese können von einem Client nicht als
DNS-Server benutzt werden. Das reduziert die Belastung dieser
DNS-Server, was z.B. bei den ROOT-Servern wichtig ist.
|
Häufig wird unter UN*X der BSD-Resolver verwendet. Dieser wird
mit der Datei /etc/resolv.conf konfiguriert.
Hier können einige
Optionen gesetzt werden. Eine ist natürlich die zu verwendenden
Namensserver. Diese werden einfach untereinander (jeder in einer
Zeile) aufgezählt (z.B.: "nameserver 127.0.0.1" usw.).
Zusätzlich wird hier die DNS-Domain eingetragen (z.B.:
"domain self-linux.de"), und eine Suchliste (z.B.:
"search selflinux.de de com" - ein benutzerfreundliches
Beispiel).
Es wird immer der erste Namenserver gefragt, außer
wenn dieser ausfällt. Nach einem großzügigen Timeout wird dann
der zweite verwendet.
|
Es gibt eine Erweiterung, der
Splitted Resolver. Hier kann man zusätzlich
angeben, für welche Domains der Namesserver verwendet wird (die
Option "nameserver" erhält dies als weiteren
Parameter). Diese Erweiterung ist allerdings relativ selten
anzutreffen. Die Suchliste funktioniert wie folgt:
Wird ein Name nicht gefunden,
so wird der erste Teil der Suchliste angehängt (also
selflinux.de). Wird auch der so erweitere Name nicht gefunden, so
wird dem ursprünglichen der zweite Teil angehängt, und eine
dritte Anfrage gestartet usw. Der Client (also das Programm)
bemerkt davon nichts. So kann man sich etwas Schreibarbeit
sparen. Eine Beispieldatei wäre also:
/etc/resolv.conf |
domain selflinux.de
search selflinux.de de com
nameserver 127.0.0.1
nameserver 192.168.1.53
|
Sicherheitshalber sollte man stets mehrere Nameserver angeben.
|
Verwendet man Windows-Clients, so sind diese Paramter im
entsprechenden Fenster einzustellen. Dabei ist zu beachten, dass
Windows Namen grundsätzlich zuerst über das
Windows-Namensprotokoll aufzulösen versucht, was zu unerwarteten
Effekten führen kann.
In einer weiteren Datei (/etc/nsswitch.conf)
legt man unter
moderneren UN*X-Varianten fest, in welcher
Reihenfolge welche
Methoden zur Namensauflösung verwendet werden (lokale Dateien,
DNS oder NIS). Die entsprechende Option heißt "hosts".
In einer
typischen DNS-Konfiguration (ohne NIS) ist sie meist auf
/etc/nsswitch.conf |
hosts: files dns
|
gesetzt (erst lokale Datei: /etc/hosts, dann
DNS verwenden).
|