Im Katalog suchen

Linux - Wegweiser für Netzwerker

Online-Version

Copyright © 2001 by O'Reilly Verlag GmbH & Co.KG

Bitte denken Sie daran: Sie dürfen zwar die Online-Version ausdrucken, aber diesen Druck nicht fotokopieren oder verkaufen. Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

Wünschen Sie mehr Informationen zu der gedruckten Version des Buches Linux - Wegweiser für Netzwerker oder wollen Sie es bestellen, dann klicken Sie bitte hier.


vorheriges Kapitel Inhaltsverzeichnis Stichwortverzeichnis nächstes Kapitel



Die Resolver-Bibliothek

Der Begriff Resolver bezieht sich nicht auf eine spezielle Applikation, sondern auf die Resolver-Bibliothek. Hierbei handelt es sich um eine Sammlung von Funktionen, die bei Linux zur Standard-C-Bibliothek gehören. Ihre wichtigsten Routinen sind gethostbyname(2) und gethostbyaddr(2), die alle zu einem Namen gehörenden IP-Adressen zurückliefern und umgekehrt. Über die Datei host.conf können Sie einstellen, ob Sie die gewünschten Informationen in /etc/hosts nachschlagen, verschiedene DNS-Server befragen oder die hosts-Datenbank des Network Information Service (NIS) benutzen wollen.

Die Resolver-Funktionen lesen die Konfigurationsdateien, wenn sie zum erstenmal aufgerufen werden. Anhand dieser Konfigurationsdateien ermitteln sie, welche Datenbank sie zu befragen haben, in welcher Reihenfolge dies passieren soll und welche anderen relevanten Details Sie zur Konfiguration Ihrer Systemumgebung eingestellt haben. Die ältere Standardbibliothek von Linux, libc, benutzte die Datei /etc/host.conf als Hauptkonfigurationsdatei, während die Version 2 der GNU-Standardbibliothek, glibc, die Datei /etc/nsswitch.conf verwendet. Wir werden jede für sich gesondert behandeln, da beide weit verbreitet.

Die Datei host.conf

Die Datei /etc/host.conf teilt den Resolver-Funktionen der älteren Standardbibliothek von Linux mit, welche Dienste benutzt werden sollen und in welcher Reihenfolge.

Optionen in host.conf müssen in separaten Zeilen erscheinen, wobei die Argumente durch Leerzeichen oder Tabulatorzeichen voneinander getrennt sein müssen. Ein Doppelkreuz bzw. Hashzeichen (#) leitet einen Kommentar ein, der sich bis zum Zeilen­ende erstreckt. Die folgenden Optionen sind verfügbar:

order

Dieser Befehl bestimmt die Reihenfolge, in der der Resolver die verschiedenen Dienste ausprobiert. Zulässige Optionen sind bind für die Anfragen an den Name-Server, hosts zum Nachschlagen in /etc/hosts und nis für NIS-Abfragen. Alle Optionen können einzeln oder kombiniert auftreten. Die Reihenfolge der angegebenen Optionen ist maßgeblich dafür, welche Dienste zuerst ausprobiert werden.

multi

Es legt fest, ob Hosts in der Datei /etc/hosts mehrere Adressen haben dürfen. Diese Eigenschaft wird im Englischen oft als “multi-homed” bezeichnet. Gültige Argumente sind on und off. Dieses Kommando hat keinerlei Auswirkungen auf DNS- und NIS-Anfragen.

nospoof

Wie wir im Abschnitt Reverse Lookups noch beschreiben werden, kann DNS über die Domain in-addr.arpa IP-Adressen auf den zugehörigen Hostnamen abbilden. Die Versuche von Name-Servern einen falschen Hostnamen zurückzuliefern, werden Spoofing (Reinlegen) genannt. Um sich davor zu schützen, kann der Resolver so konfiguriert werden, daß er überprüft, ob die gegebene IP-Adresse auch tatsächlich zum erhaltenen Hostnamen gehört. Wenn dies nicht der Fall ist, wird der Name verworfen und ein Fehler zurückgeliefert. Dieses Verhalten wird mit nospoof on eingestellt.

alert

Diese Option erwartet on oder off als Argumente. Wird diese Option aktiviert, protokolliert der Resolver jeden Spoofing-Versuch über den syslog-Dienst.

trim

Diese Option gibt einen Domainnamen an, den der Resolver (wenn möglich) vom Hostnamen abschneiden soll, bevor er die einzelnen Dienste befragt. Das kann für die hosts-Datei nützlich sein, wenn Sie dort nur die lokalen Hostnamen ohne Domain eintragen wollen. Übergibt eine Applikation dem Resolver nun einen Hostnamen, der auf den lokalen Domainnamen endet, wird er “getrimmt”, so daß der Resolver ihn in /etc/hosts finden kann. Der Domainname, den Sie angeben, muß mit einem Punkt (.) enden (z.B. :linux.org.au.), damit trim korrekt funktioniert.

Sie können den trim-Befehl auch mehrmals angeben. Dadurch können Sie Host­namen aus mehreren Domains in /etc/hosts mischen.

Beispiel 6-1 zeigt eine Beispieldatei für vlager.

Beispiel 6.1: Beispieldatei host.conf

# /etc/host.conf 
# Wir haben named, aber (bis jetzt) kein NIS 
order   bind,hosts 
# Hosts können mehrere IP-Adressen haben multi   on 
# Schutz gegen Spoofing-Versuche nospoof on 
# Lokale Domains abschneiden (nicht unbedingt nötig) 
trim    vbrew.com.

Resolver-Umgebungsvariablen

Die globalen Einstellungen in host.conf können von einer Reihe Umgebungsvariablen außer Kraft gesetzt werden.

RESOLV_HOST_CONF

Diese Variable spezifiziert eine Datei, die anstelle von /etc/host.conf eingelesen werden soll.

RESOLV_SERV_ORDER

Diese Variable setzt die order-Option außer Kraft. Als Dienste können hosts, bind und nis angegeben werden, die jeweils durch ein Leerzeichen, Komma, Doppelpunkt oder Semikolon getrennt werden.

RESOLV_SPOOF_CHECK

Diese Variable bestimmt den Grad der Spoofing-Abwehr. Bei Angabe von off werden die Spoofing-Tests komplett abgeschaltet. Die Werte warn und warn off aktivieren bzw. deaktivieren die Spoofing-Abwehr durch Ein- bzw. Abschalten des Loggings. Ein Wert von * schaltet die Spoofing-Tests ein, übernimmt für das Logging aber den Vorgabewert von host.conf.

RESOLV_MULTI

Diese Variable verwendet einen Wert von on oder off, um die multi-Option von host.conf zu überschreiben.

RESOLV_OVERRIDE_TRIM_DOMAINS

Diese Variable spezifiziert eine Liste von “Trim”-Domains, die die in host.conf angegebenen Einträge überschreiben. Auf Trim-Domains wurde bereits im Zusammenhang mit dem Schlüsselwort trim eingegangen.

RESOLV_ADD_TRIM_DOMAINS

Diese Variable spezifiziert eine Liste von “Trim”-Domains, die den in host.conf angegebenen Einträgen hinzugefügt werden.

Die Datei nsswitch.conf

Version 2 der GNU-Standardbibliothek zeichnet sich durch ein mächtiges und flexibles Konzept aus, das den älteren host.conf-Mechanismus ersetzt. Das Konzept des Name-Service wurde dahingehend erweitert, daß es eine Vielzahl verschiedener Arten von Informationen aufnehmen kann. Die diversen Konfigurationsoptionen für all die verschiedenen Funktionen, die Anfragen an Datenbanken stellen, werden nun wieder an einer zentralen Stelle angegeben, nämlich in der Datei nsswitch.conf.

In der Datei nsswitch.conf kann der Systemadministrator eine Vielzahl verschiedener Datenbanken konfigurieren. Wir besprechen hier nur diejenigen Optionen, die sich auf die Auflösung von Host- und Netzwerk-IP-Adressen beziehen. Weitergehende Informationen über die anderen Features erhalten Sie ganz einfach durch das Studium der Dokumentation zur GNU-Standardbibliothek.

Optionen in nsswitch.conf müssen in getrennten Zeilen erscheinen, wobei die Argumente durch Leerzeichen oder Tabulatorzeichen voneinander getrennt sein müssen. Ein Hashzeichen (#) leitet einen Kommentar ein, der sich bis zum Zeilenende erstreckt. Jede Zeile beschreibt einen bestimmten Dienst, z.B. die Auflösung von Hostnamen. Das erste Feld jeder Zeile gibt den Namen der Datenbank an und endet mit einem Doppelpunkt. Die Datenbank, die für die Auflösung von Hostadressen verwendet wird, ist hosts. Eine verwandte Datenbank ist networks. Sie dient zur Auflösung von Netznamen in Netzadressen. Der Rest jeder Zeile enthält Optionen, die die Art des Zugriffs auf die betreffende Datenbank regeln.

Die folgenden Optionen sind verfügbar:

dns

Verwendet das Domain Name System (DNS) zur Auflösung der Adresse. Das macht allerdings nur Sinn bei der Auflösung von Hostadressen, nicht von Netzadressen. Der Mechanismus benutzt die Datei /etc/resolv.conf, auf die wir später noch näher eingehen werden.

files

Durchsucht eine lokale Datei nach den Host- oder Netznamen und ihren zugehörigen IP-Adressen. Diese Option verwendet die traditionellen Dateien /etc/hosts und /etc/network.

nis oder nisplus

Verwendet das Network Information System (NIS) zur Auflösung einer Host- oder Netzadresse. NIS und NIS+ werden ausführlich in Kapitel 13 Das Network Information System, besprochen.

In der Reihenfolge, in der die Dienste angegeben sind, werden sie auch abgefragt, wenn ein Name aufgelöst werden soll. Anspruch genommen, in der sie aufgelistet sind. Diese Liste befindet sich in der Datei /etc/nsswitch.conf in dem Abschnitt, in dem die Beschreibung der Dienste erfolgt. Die Dienste werden von links nach rechts abgefragt, und die Suche wird standardmäßig beendet, wenn ein Wert (oder Name) erfolgreich aufgelöst wurde.

Ein simples Beispiel einer Host- und Netzwerk-Datenbankspezifikation, die das Verhalten unserer Konfiguration mit der alten libc-Standardbibliothek nachbildet, zeigt Tabelle 6.2.

Beispiel 6.2: Beispieldatei nsswitch.conf

# /etc/nsswitch.conf 
# 
# Beispielkonfiguration der GNU-Name-Service-Switch-Funktionalität 
# Informationen über diese Datei finden Sie im Paket 'libc6-doc'  

hosts:          dns files 
networks:       files

Dieses Beispiel veranlaßt das System, Hosts zuerst im DNS zu suchen und wenn dort nichts gefunden wird, die Suche in der Datei /etc/hosts fortzusetzen. Um Netzwerknamen aufzulösen, wird ausschließlich die Datei /etc/networks benutzt.

Sie können das Suchverhalten genauer kontrollieren, indem Sie zusätzlich Aktionen (action items) angeben, die anhand des Ergebnisses der jeweils vorhergehenden Suchanfrage ausgeführt werden. Diese geben an, welche Aktion nach dem jeweils letzten Namensauflösungsversuch durchgeführt werden soll. Handlungsanweisungen werden zwischen den Dienstangaben eingetragen und mit eckigen Klammern [ ] versehen. Die allgemeine Syntax einer Handlungsanweisung ist:

[ [!] Ergebnis = Aktion ... ]

Es gibt zwei mögliche Handlungen:

return

Kontrolliert die Rückgabewerte an das Programm, das die Namensauflösung versuchte. War ein Auflösungsversuch erfolgreich, liefert der Resolver die zugehörigen Details als Resultat zurück, ansonsten eine Null.

continue

Der Resolver nimmt den nächsten Dienst in der Liste in Anspruch und versucht damit eine Namensauflösung.

Das optionale Ausrufezeichen (!) gibt an, daß der Zustandswert vor dem Test invertiert werden soll; es entspricht also dem logischen Nicht (not).

Die zur Verfügung stehenden Statuswerte, mit denen wir arbeiten können, sind:

success

Der angeforderte Eintrag wurde ohne Fehler gefunden. Die Standardaktion für diesen Zustand ist return.

notfound

Die Namenssuche verlief fehlerfrei, jedoch konnte der Zielhost bzw. das Zielnetzwerk nicht gefunden werden. Die Standardaktion für diesen Zustand ist continue.

unavail

Der angeforderte Dienst war nicht erreichbar. Das könnte bedeuten, daß die Dateien hosts oder networks für den files-Dienst unlesbar waren oder daß ein Name- bzw. NIS-Server für die dns- oder nis-Dienste nicht geantwortet hat. Die Standardaktion für diesen Zustand ist continue.

tryagain

Dieser Zustand bedeutet, daß der Dienst zeitweise nicht verfügbar ist. Für den Dienst files weist dies normalerweise darauf hin, daß die relevante Datei gerade von einem anderen Prozeß blockiert wurde. Bei den anderen Diensten könnte es ein Hinweis darauf sein, daß der Server zeitweise keine Verbindungen akzeptierte. Die Standardaktion für diesen Zustand ist continue.

Ein simples Anwendungsbeispiel für den beschriebenen Mechanismus zeigt Tabelle 6.3.

Beispiel 6.3: Beispieldatei nsswitch.conf mit einer Handlungsanweisung

# /etc/nsswitch.conf 
# 
# Beispielkonfiguration der GNU-Name-Service-Switch-Funktionalität 
# Informationen über diese Datei finden Sie im Paket 'libc6-doc'  

hosts:          dns [!UNAVAIL=return] files 
networks:       files 

In diesem Beispiel wird die Hostauflösung mit dem Domain Name Service versucht. Wenn sich als Resultat der Wert “nicht verfügbar” (unavailable) ergibt, versucht der Resolver eine erneute Namensauflösung mit der lokalen Datei /etc/hosts. Andernfalls wird das erhaltene Resultat zurückgeliefert. Auf die hosts-Datei wird also nur dann zurückgegriffen, wenn der Name-Server aus irgendeinem Grund nicht verfügbar ist.

Konfiguration der Name-Server-Aufrufe mit resolv.conf

Wenn Sie die Resolver-Bibliothek so konfigurieren, daß sie zur Ermittlung von Hostadressen den BIND-Namensdienst verwendet, müssen Sie ihr auch mitteilen, welche Server sie benutzen soll. Dafür gibt es eine separate Datei namens resolv.conf. Fehlt diese Datei oder ist sie leer, nimmt der Resolver an, daß sich der Name-Server auf Ihrem lokalen Host befindet.

Um einen Name-Server auf Ihrem lokalen Host laufen zu lassen, müssen Sie ihn separat einrichten, wie es in den folgenden Abschnitten erläutert wird. Wenn Sie sich in einem lokalen Netzwerk befinden und sich die Gelegenheit bietet, einen bereits vorhandenen Name-Server zu benutzen, sollten Sie auf jeden Fall darauf zurückgreifen. Wenn Sie eine Dialup-Verbindung ins Internet haben, werden Sie für gewöhnlich den Name-Server Ihres Providers in der Datei resolv.conf eintragen.

Die wichtigste Option in resolv.conf ist nameserver, die die Adresse eines Name-Servers angibt. Wenn Sie die Option mehrmals angeben, werden die Server in der angegebenen Reihenfolge ausprobiert. Deshalb sollten Sie unbedingt den zuverlässigsten Server zuerst eintragen. Wenn Sie keinen Name-Server eintragen, nimmt der Resolver an, daß einer auf der lokalen Maschine läuft. Gegenwärtig werden bis zu drei name server-Einträge in resolv.conf unterstützt.

Zwei weitere Befehle, domain und search, geben Domainnamen an, die der Resolver an einen Namen anhängt, wenn die zugehörige Adresse beim ersten Versuch nicht gefunden wird. Wenn Sie beispielsweise telnet benutzen, wollen Sie im allgemeinen nicht immer den voll qualifizierten Domainnamen eingeben, sondern lieber so etwas wie gauss angeben und den Resolver den Domainnamen mathematics.groucho.edu anhängen lassen.

Genau dafür ist der Befehl domain da. Mit ihm können Sie eine Default-Domain angeben, die immer dann angehängt werden soll, wenn ein Name nicht aufgelöst werden konnte. Wird dem Resolver z.B. der Name gauss übergeben, findet dieser den Namen gauss. nicht im DNS, da es eine solche TLD nicht gibt. Wird mathematics.groucho.edu als Standarddomäne angegeben, wiederholt der Resolver seine Anfrage und hängt diese Standarddomäne an den Hostnamen gauss an. Diese Abfrage ist nun erfolgreich.

Prima, werden Sie jetzt vielleicht denken, aber sobald ich die Domain verlasse, bin ich wieder bei den langen Namen und tippe mir die Finger wund. Warum kann ich nicht Namen wie quark.physics benutzen, wo wir doch schon an der Groucho-Marx-Universität sind?

Hier kommt die Suchliste (search list) ins Spiel. Eine Suchliste kann mit der Option search angegeben werden und ist eine Verallgemeinerung der domain-Anweisung. Während Sie mit domain nur eine einzelne Domain angeben dürfen, akzeptiert search eine ganze Liste davon, deren Einträge alle der Reihe nach durchprobiert werden, bis ein gültiger DNS-Eintrag gefunden wird. Die einzelnen Namen der Liste müssen durch Leerzeichen oder Tabulatoren voneinander getrennt werden.

Die Befehle search und domain schließen einander aus und dürfen höchstens einmal auftauchen. Wenn keiner der beiden Befehle angegeben ist, versucht der Resolver, die Default-Domain mit Hilfe der Systemfunktion getdomainname(2) aus dem lokalen Hostnamen zu raten. Hat der Hostname keinen Domain-Teil, wird als Default-Domain die Root-Domain (.) angenommen.

Wenn Sie in resolv.conf eine Suchliste definieren, sollten Sie sich genau überlegen, welche Domains Sie dort eintragen. Die Resolver-Bibliotheken vor BIND-4.9 pflegten aus dem Domainnamen eine Liste zusammenzubauen, wenn vom Administrator keine angegeben wurde. Diese Default-Liste enthielt die Default-Domain plus alle Ober­domains. Das konnte zu Problemen führen, da DNS-Anfragen manchmal bei Name- ­Servern landeten, für die sie nie bestimmt waren.

Angenommen, Sie sitzen in der virtuellen Brauerei und wollen sich auf foot.groucho.edu einloggen. Durch einen versehentlichen Tippfehler schreiben Sie aber foo statt foot. Der Name-Server der GMU kennt aber keine Maschine namens foo, was er Ihrem Resolver auch mitteilt. Mit der alten Suchliste würde der Resolver nun fortfahren und in den Domains vbrew.com und com fahnden. Vor allem der letzte Fall ist problematisch, da es dort durchaus eine Domain namens groucho.edu.com geben kann. Wenn diese Domain dann auch noch einen Host namens foo enthält, landet Ihr login-Programm bei einer ganz anderen Maschine, als von Ihnen beabsichtigt.

Für einige Applikationen können diese fehlerhaften Zuordnungen ein Sicherheitsproblem darstellen. Aus diesem Grund sollten Sie die Suchliste auf die Unterdomains Ihrer Organisation oder etwas Vergleichbares beschränken. Im Fachbereich Mathematik der Groucho-Marx-Universität würde die Liste beispielsweise nur maths.groucho.edu und groucho.edu enthalten.

Wenn Ihnen all das zu verwirrend vorkommt, werfen Sie einen Blick auf die Datei resolv.conf der virtuellen Brauerei:

# /etc/resolv.conf 
# Unsere Domain 
domain         vbrew.com 
# 
# Wir benutzen vlager als zentralen Name-Server: 
nameserver     172.16.1.1

Wenn Sie in dieser Konfiguration die Adresse von vale suchen, wird der Resolver erst versuchen, vale nachzuschlagen, und wenn das fehlschlägt, vale.vbrew.com.

Robustheit des Resolvers

Wenn Sie ein LAN innerhalb eines größeren Netzes betreiben, sollten Sie auf jeden Fall zentrale Name-Server benutzen (falls verfügbar). Die Server bauen mit der Zeit umfangreiche Caches auf, die wiederholte Anfragen beschleunigen, da alle DNS-Queries im Laufe der Zeit reichhaltige Caches entwickeln, die die DNS-Anfragen beschleunigen, da alle DNS-Queries über sie abgewickelt werden. Dieses Vorgehen hat allerdings einen gravierenden Nachteil: Als ein Brand ein Backbone-Kabel an Olafs Universität zerstörte, kam alle Arbeit auf dem LAN des Fachbereichs zum Erliegen, da der Resolver keinen der Name-Server mehr erreichen konnte. Darunter litten die meisten Netzwerkdienste. So konnte man sich nicht mehr auf den X-Terminals einloggen, die Drucker waren nicht mehr ansprechbar usw.

Obwohl es nun nicht gerade häufig passiert, daß Uni-Backbones in Flammen aufgehen, ist es durchaus sinnvoll, Vorsichtsmaßnahmen gegen solche Fälle zu treffen.

Eine Möglichkeit ist, einen eigenen Name-Server aufzusetzen, der die lokale Domain bedient und alle Anfragen für andere Hostnamen an den zentralen Server weiterleitet. Natürlich funktioniert das nur, wenn Sie eine eigene Domain administrieren.

Ebensogut können Sie aber auch Ihre lokalen Maschinen zusätzlich in /etc/hosts eintragen und in der Datei /etc/host.conf den String order bind, hosts anfügen, damit der Resolver im Notfall auf diese statischen Tabellen zurückgreifen kann.

Alternativ können Sie eine Hosttabelle zur Sicherung für Ihre Domain oder ihr LAN in /etc/hosts eintragen. Das ist schnell erledigt. Sie müssen einfach nur sicherstellen, daß die Resolver-Bibliothek zuerst DNS befragt und erst danach in den Hostdateien nachschaut. Dazu tragen Sie order bind,hosts in die Datei /etc/host.conf bzw. hosts: dns files in /etc/nsswitch.conf ein. Bei diesen Einstellungen greift der Resolver immer auf die Hostdateien zurück, wenn der zentrale Name-Server nicht erreicht werden konnte.





vorheriges Kapitel Inhaltsverzeichnis Stichwortverzeichnis nächstes Kapitel


Weitere Informationen zum Linux - Wegweiser für Netzwerker

Weitere Online-Bücher & Probekapitel finden Sie in unserem Online Book Center


O'Reilly Home|O'Reilly-Partnerbuchhandlungen|Bestellinformationen
Kontakt|Über O'Reilly|Datenschutz

© 2001, O'Reilly Verlag