![]() |
|
Linux - Wegweiser für NetzwerkerOnline-VersionCopyright © 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. |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
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 /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 Zeilenende erstreckt. Die folgenden Optionen sind verfügbar:
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.
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.
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.
Diese Option erwartet on oder off als Argumente. Wird diese Option aktiviert, protokolliert der Resolver jeden Spoofing-Versuch über den syslog-Dienst.
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.
Sie können den trim-Befehl auch mehrmals angeben. Dadurch können Sie Hostnamen aus mehreren Domains in /etc/hosts mischen.
:linux.org.au.
), damit trim
korrekt funktioniert.
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.
Die globalen Einstellungen in host.conf können von einer Reihe Umgebungsvariablen außer Kraft gesetzt werden.
Diese Variable spezifiziert eine Datei, die anstelle von /etc/host.conf eingelesen werden soll.
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.
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.
Diese Variable verwendet einen Wert von on oder off, um die multi-Option von host.conf zu überschreiben.
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.
Diese Variable spezifiziert eine Liste von “Trim”-Domains, die den in host.conf angegebenen Einträgen hinzugefügt werden.
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:
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.
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.
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:
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.
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:
Der angeforderte Eintrag wurde ohne Fehler gefunden. Die Standardaktion für diesen Zustand ist return.
Die Namenssuche verlief fehlerfrei, jedoch konnte der Zielhost bzw. das Zielnetzwerk nicht gefunden werden. Die Standardaktion für diesen Zustand ist continue.
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.
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.
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 Oberdomains. 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.
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.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Weitere Informationen zum Linux - Wegweiser für Netzwerker
Weitere Online-Bücher & Probekapitel finden Sie in unserem Online Book Center
© 2001, O'Reilly Verlag