DNS caching only Server: Namensauflösung im Netzwerk
Auf dem Weg ins Internet gibt es eine Menge Bremsen, Flaschenhälse und Hindernisse. Eines davon ist die Namensauflösung. Betreiber von Netzwerken mit gemeinsamen Internet-Zugang können diesen Engpass beseitigen. Alles, was man dazu braucht, ist ein Linux-Rechner.
Dieser Artikel stammt aus dem Jahr 2002
Beim DNS caching only Server handelt es sich um eine abgespeckte Variante eines DNS-Servers. Der Vorteil: er ist schnell aufgesetzt und ausgesprochen nützlich. Die Hardware-Voraussetzungen sind dabei gering: Ein Linux-fähiger Computer mit Netzwerkanschluss reicht, um Zugriffe aus dem Netzwerk in das Internet deutlich zu beschleunigen. Da tut es auch ein alter Pentium 90 oder, wie in diesem Beispiel verwendet, ein Pentium II mit 200 MHz. Laut Dokumentation von BIND 9 würde auch ein 486er noch brav seine Dienste als DNS-Server in kleineren Netzen verrichten.
Die einfachste Konfiguration von BIND9 ist ein DNS caching only Server. Zu Deutsch: ein Server, der Antworten aus DNS-Anfragen zwischenspeichert. Das geht so: Der DNS-Server erhält erstmals eine Anfrage in Form einer symbolischen Adresse wie www.vnu.de. Dazu ermittelt er über die in root.hint eingetragenen Root-Server die zuständigen DNS-Server und von die zugehörige IP-Adresse. Diese Adresse geht dann als Ergebnis an den Client zurück. Gleichzeitig merkt sich Ihr lokaler DNS-Server die Auflösungsdaten. Bei einer nächsten Anfrage an dieselbe Adresse holt er diese Daten aus dem Speicher statt aus dem Internet. Das spart etliche Millisekunden und beschleunigt gerade dann spürbar den Netzzugriff, wenn mehrere Benutzer gleichzeitig über den DNS-Cache-Server auf das Internet zugreifen.
DNS caching only mit Suse Linux
Die nachfolgenden Konfigurationsbeispiele beziehen sich auf das in Deutschland weit verbreitete Suse Linux 7.3 und BIND9. BIND ist das für die DNS-Dienstleistungen zuständige Programm. Bei der Version 9 handelt es sich um die aktuellste Fassung. Da BIND immer wieder Angriffsziel von Hackern ist, sollten Sie immer die aktuelle BIND-Version installieren.
Um BIND9 von den SUSE-CDs zu installieren, starten Sie als root von der Kommandozeile aus das Wartungsprogramm yast. Wählen Sie dort Paketverwaltung - Konfiguration ändern/erstellen. BIND9 finden Sie in der Paketserie n - Netzwerk-Support. Installieren Sie neben bind9 auch gleich die bind9-utils mit. Die helfen bei der Suche nach Fehlern und der Wartung des Servers.
Nach der Installation ist der DNS caching only Server bereits für einen ersten Test einsatzbereit. Denn im Verzeichnis /etc hat Suse die Datei named.conf installiert. Und die enthält genau die Konfiguration für einen DNS caching only Server.
Doch auch ohne SUSE-Linux ist der Weg zu einem Caching-Server kurz. Der genaue Weg ist in der DNS-Howto beschrieben. Hier finden Sie auch Dateien, die Sie aus dem Web kopieren und auf Ihrem Server einsetzen können. Die Adresse der Anleitung: http://www.tu-harburg.de/~semb2204/dlhp/HOWTO/DE-DNS-HOWTO-3.html
Eine aktuelle Version von BIND zum selbst kompilieren finden Sie auf der Homepage des Internet Software Consortium unter http://www.isc.org/.
Ein erster Test mit dig
Um zu überprüfen, was der neue Nameserver schon kann, tippen Sie zunächst
named
ein. Damit starten Sie den DNS-Server. Anschließend geben Sie ein:
dig www.vnu.de
Nach einem kurzen Augenblick erscheint eine Erfolgsmeldung und zuletzt der Vierzeiler:
;; Query time: 4138 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Feb 15 19:27:46 2002
;; MSG SIZE rcvd: 112
Aussagekräftig in diesem Fall ist Wert Query time. Beim ersten Versuch dauert es gut vier Sekunden, bis eine Antwort vom Nameserver da ist -- allerdings braucht der Aufbau einer ADSL-Verbindung via Router einen Gutteil dieser Zeit. Ohne den Leitungsaufbau benötigt eine solche Anfrage in der Testumgebung etwa 200 Millisekunden.
Interessant wird es beim zweiten Versuch. Probieren Sie es gleich noch ein Mal mit
dig www.vnu.de
Das Ergebnis:
;; Query time: 7 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Feb 15 19:31:46 2002
;; MSG SIZE rcvd: 112
Sieben Millisekunden sind gegenüber 200 oder gar 4000 Millisekunden ein deutlicher Fortschritt. Das ist ein gutes Zeichen dafür, dass das Caching funktioniert. Der DNS-Server hat die IP-Adresse aus dem Speicher geholt.
Wie aktiv der DNS-Server ist, können Sie mit dem Befehl
tcpdump
nachsehen. Starten Sie diese Anweisung auf der Konsole und sehen Sie sich den Datenverkehr an: Zu einem großen Teil besteht er aus der Kommunikation rund um DNS.
Forwarders setzen
Ohne weitere Konfiguration benutzt Ihr DNS-Server die in der Datei root.hint angegebenen Server als Datenquellen für seine Arbeit. Von diesen Root-Servern aus arbeitet sich jede Anfrage durch bis zum für die gesuchte Adresse zuständigen DNS-Server. Das erzeugt eine Menge Traffic auf Ihrem. Andererseits baut sich so relativ schnell ein leistungsfähiger Cache auf. Denn Ihr caching only Server merkt sich nicht nur die gefundenen Seiten, sondern alle anderen auf den Weg dahin aufgespürten Informationen über Server und deren Zuständigkeiten. Geht beispielsweise eine erste Anfrage nach dem Server hepp.foo.bar noch über den Root-Server, so wird sich die nächste Anfrage nach hopp.foo.bar gleich an den zuständigen Server foo.bar richten. Große Netze profitieren davon.
Betreiber kleinerer Netze mit langsamen Leitungen sollten die Alternative in Betracht ziehen, DNS-Anfragen über "Forwarders" an den DNS-Server des Providers weiter zu leiten. Dieses Verfahren verringert den Traffic. Der Nachteil: Sie machen sich damit komplett vom Funktionieren des angesprochenen DNS-Servers abhängig. Und sollten Sie wechselweise mehrere Provider für den Internet-Zugang anwählen, ist forwarders ohnehin nicht sinnvoll -- denn hier angegebene DNS-Server sind über den jeweils anderen Provider dann nicht unbedingt zugänglich.
Mit zunehmender Größe des Netzwerkes kommt ein zweites Problem hinzu: "forwarders" bürdet dem DNS-Servers Ihres Providers die gesamte DNS-Arbeit auf. Wenn 20, 30 oder 100 Rechner den DNS-Server auf diese Art nutzen, wird der Provider zu Recht sauer. In jedem Fall sollten Sie den Provider in solchen Fällen vorher um Erlaubnis fragen.
Mit der steigenden Anzahl von Rechnern steigt auch das Risiko der "forwarders" für den reibungslosen Betrieb. Geht der verwendete DNS-Server kaputt oder wird er nur selten auf den neuesten Stand gebracht, kann das ein ganzes Unternehmen in Schwierigkeiten bringen.
Für kleine Netze jedoch ist "forwarders" sinnvoll. Das gilt umso mehr, je langsamer die Leitung ins Internet ist. Eine ISDN-Dialup-Verbindung oder gar eine Modem-Verbindung wäre mit dem ständigen DNS-Datenverkehr ohne "forwarders" überfordert.
Die DNS-Server-Adressen tragen Sie im Parameter forwarders ein. Den finden Sie in der Datei /etc/named.conf. Entfernen Sie den Kommentar vor dem Eintrag und tragen Sie die bis zu drei DNS-Server ein. Am Beispiel von T-Online gezeigt, sieht die Zeile so aus:
forwarders { 194.25.2.129; 194.25.2.130; 194.25.2.131; };
Eine Liste mit DNS-Servern anderer Provider finden Sie im Web unter der Adresse http://www.fli4l.de/german/dns.htm
Danach speichern Sie die Datei und starten Named neu. Für's erste erledigen Sie das mit
killall named
und der erneuten Eingabe von
named
Der DNS caching only server sollte nach dieser Aktion noch genauso gut funktionieren wie vorher. Allerdings ist der Datenverkehr deutlich reduziert: es werden nur tatsächliche Anfragen an den übergeordneten Server weiter geleitet.
Den Neustart sollten Sie nicht allzu oft vornehmen. Denn jedes Beenden des Programms löscht den kompletten Cache-Speicher. Der wird ausschließlich im RAM des DNS-Servers vorgehalten. Eine Speicherung der Cache-Daten auf Festplatte ist nicht vorgesehen.
DNS-Server steuern
BIND9 bringt ein Steuerungsprogramm mit, es heißt rndc. Aus Sicherheitsgründen kommuniziert das Steuerungsprogramm mit dem Server über eine verschlüsselte Verbindung. Um das Steuerungsprogramm zum Laufen zu bringen, erzeugen Sie zunächst eine Datei rndc.conf. Die hat folgenden Inhalt:
options {
default-server localhost;
default-key mykey;
};
key mykey {
algorithm hmac-md5;
secret "XYZ";
};
Als Default-Server beim Aufruf des Programms wird localhost angesprochen und der Schlüssel mykey verwendet, der weiter unten definiert ist. An Stelle von XYZ müssen Sie einen eigenen Schlüssel erzeugen und einbauen. Das geht mit dem Befehl
dnssec-keygen -a hmac-md5 -b 128 -n user rndc
Heraus kommen zwei Dateien, die mit Krndc. beginnen. Eine hat die Endung .private, die andere .key. Öffnen Sie eine der Dateien und nehmen Sie dort den Schlüssel heraus. Fügen Sie diesen Schlüssel in die rndc.conf ein. Vergessen Sie nicht die Anführungszeichen.
Danach editieren Sie die named.conf und fügen diese Zeilen hinzu:
controls {
inet * allow { any; } keys { "mykey"; };
};
key mykey {
algorithm hmac-md5;
secret "XYZ";
};
Ersetzen Sie XYZ wieder mit dem zuvor ermittelten Schlüssel. Speichern Sie die Datei neu und starten Sie named neu. Die zuvor erzeugten Schlüsseldateien Krndc* sollten Sie anschließend löschen.
Falls sich mehrere Benutzer auf Ihrem Linux-System tummeln, achten Sie darauf, dass auch nur die Einblick in Ihre rndc.conf und named.conf nehmen können, die die Programm nutzen sollen. Denn wer die Schlüssel lesen kann, hat auch Zugriff auf die Steuerung.
Falls Sie Sicherheitsprobleme fürchten, packen Sie die Schlüsseldaten in eine eigene Datei und binden Sie diese mit include "/etc/mykey.key" in die Konfigurationsdatei ein. Auf diese diese Datei sperren Sie dann den Lesezugriffe für andere User.
Sind die Schlüssel erzeugt, können Sie rndc einsetzen. Der wichtigste Befehl ist
rndc restart
um den DNS-Server nach einer Änderung in der Konfiguration neu zu starten. Die Anweisung
rndc stats
schreibt eine Statistik über die Cache-Aktionen in die Datei /var/named/named_dump.db. Je nach Installation kann das auch ein anderes Verzeichnis sein. Suchen Sie einfach nach der Datei. Der Befehl
rndc dumpdb
zeigt in der Datei /var/named/named_dump.db, welche Server-Adressen im Cache gespeichert sind.
Auf der Suche nach Fehlern kann
rndc querylog
hilfreich sein. Damit schreibt das Programm Meldungen in die Datei /var/log/messages. Am einfachsten lesen Sie die letzten Meldungen mit
tail -n20 /var/log/messages | grep named
aus. Diese Anweisung liest die letzten 20 Eintrage aus message und gibt die Zeilen aus, die Named enthalten.
Damit /var/log/messages nicht zu groß wird, schalten Sie das Logging bald wieder ab. Das geht abermals mit
rndc querylog
Den DNS-Server auf Clients eintragen
Nun, da der DNS caching only Server läuft, sollten Sie sich ein paar Gedanken über dessen Einsatz machen. Zwei Aspekte spielen dabei eine Rolle: Wartungsfreundlichkeit und Redundanz. Redundanz ist dann gefragt, wenn Sie Ihren Linux-Rechner ein Mal vom Netz nehmen müssen. Da Sie in einem kleinen Netz sicher keinen zweiten DNS-Server betreiben wollen, sollten Sie von vornherein eine Rücksicherung einbauen. Und die besteht aus der Adresse des DNS-Servers Ihres Providers.
Wer einen Router im Netzwerk hat, der auch als DHCP-Server dient, der sollte direkt im Router die Adresse des eigenen DNS-Servers angeben. Das erspart die manuelle Konfiguration jeder einzelnen Workstation. Denn die bezieht den DNS-Server vom DHCP-Server. Zusätzlich zum hausinternen DNS-Server geben Sie im Router noch einen oder zwei externe DNS-Server an.
In kleinen Netzen können Sie auch jedem Client einzeln die Adresse des DNS-Servers geben. Das erledigen Sie unter Windows 9x und ME in den Eigenschaften der Netzwerkumgebung. Klicken Sie hier doppelt auf den zur Netzwerkkarte gehörenden TCP/IP-Eintrag und tragen Sie unter DNS-Konfiguration Ihren lokalen DNS-Server sowie einen externen DNS-Server als Backup ein.
Benutzer von Windows 2000 und Windows XP gehen ebenfalls über die Netzwerkeigenschaften, klicken dann aber doppelt auf LAN-Verbindung und noch ein Mal auf Eigenschaften und hier auf Internetprotokoll (TCP/IP). Unter Folgende DNS-Serveradressen verwenden tragen Sie die Server ein. Sollten Sie mehr als den Standard-Sever und eine Alternative brauchen, klicken Sie auf Erweitert und DNS. Dort findet sich unter DNS-Serveradressen in Verbindungsreihenfolge genügend Platz für mehr Server.
Und wenn Sie auch mit Linux online gehen wollen, vergessen Sie nicht, den Nameserver in der resolv.conf unterzubringen. Wenn der Domain-Server auf demselben Linux-Rechner sitzt, kann das so aussehen:
domain local
search local
nameserver 127.0.0.1
nameserver 192.25.2.129
DNS-Server automatisch starten
Den letzten Arbeitsschritt sollten Sie erst dann ausführen, wenn alles klappt und läuft: Tragen Sie den DNS-Server in der Startkonfiguration von Linux ein. Das geht über Yast und den Menüpunkt Administration - Konfigurationsdatei verändern. Setzen Sie den Parameter START_NAMED auf yes. Mit dem nächsten Systemstart wird Named automatisch geladen.
Und wenn alles läuft und Sie noch Lust auf DNS haben, dann lesen Sie sich weiter ins Thema ein und stellen Sie die Namensverwaltung in Ihrem lokalen Netzwerk auf den DNS-Server um. Dazu mehr in einer der kommenden Ausgaben.
Troubleshooting
Falls etwas mit dem DNS-Server nicht funktioniert, sollten Sie zunächst nachsehen, ob named überhaupt läuft. Denn beim Start über den bloßen Programm-Namen gibt es weder Erfolgs- noch Fehlermeldung. Ein Blick in die Prozessliste mit
ps a | grep named
hilft weiter. Erscheint dort kein Eintrag oder nur
grep named
dann ist der Dienst gar nicht gestartet. Das bedeutet: Es liegt ein Fehler vor. In diesem Fall geben Sie
named -g
ein. Damit starten Sie das Programm im Vordergrund und zwingen es, Fehlermeldungen auszugeben.
Ein zuverlässiger Helfer bei DNS- und Netzwerkfragen ist tcpdump. Starten Sie das Programm auf einer Konsole Ihres Linux-Rechners. Wenn zu viele Daten über's Netz gehen, filtern Sie mit
tcpdump | grep icmp
die Kontrollmitteilungen des Internet Control Message Protocols heraus. Diese teilen Ihnen zum Beispiel mit, ob ein Port nicht erreichbar ist oder ob es andere Probleme im TCP/IP-Netz gibt. Falls Sie den Datenverkehr von und zu einem bestimmten Rechner im Netz überwachen wollen, verwenden Sie den Namen dieses Computers als Filter, zum Beispiel
tcpdump | grep winxp
Wichtige Adressen
DNS Howto * http://www.tu-harburg.de/~semb2204/dlhp/HOWTO/DE-DNS-HOWTO-3.html
DNS-Server der Provider * http://www.fli4l.de/german/dns.htm
BIND9-Dokumentation * http://www.csd.uwo.ca/staff/magi/doc/bind9/
Einstieg in DNS * http://sws.dett.de/papers/DNS.txt
BIND-Download * http://www.ics.org/
Buchtipp: DNS und BIND
Das ist das Standardwerk. Auf knapp 650 Seiten liefert "DNS und BIND" Fachwissen pur. Allein der Einstieg ist lesenswert. Er erklärt die Mechanismen des Domain Name Systems so, dass jeder mit dem nötigen Grundwissen an die Arbeit gehen kann. Nach dem Einsteig widmen sich die Autoren allen Aspekten von BIND. Dabei kommen sowohl das alte BIND 4 sowie BIND 8 und 9 zum Zuge. Zu den Themen gehören das Einrichten von Nameservern, die Verwendung spezieller MX-Einträge für das Mail-Routing, Einteilung von Domains und die Absicherung von Nameservern. Ein weiteres, ausführliches Kapitel widmet sich der Fehlersuche und -Behebung.
Die Erklärungen sind klar, knapp und verständlich. Ausführliche Beispiele helfen, die Gedankengänge der Autoren nachzuvollziehen.
DNS und BIND, O'Reilly, Bonn, ISBN 3-89721-290-0, Preis 46 Euro




