DNS Problembehebung
Archivierte Anleitung
Dieser Artikel wurde archiviert. Das bedeutet, dass er nicht mehr auf Richtigkeit überprüft oder anderweitig gepflegt wird. Der Inhalt wurde für keine aktuell unterstützte Ubuntu-Version getestet. Wenn du Gründe für eine Wiederherstellung siehst, melde dich bitte in der Diskussion zum Artikel. Bis dahin bleibt die Seite für weitere Änderungen gesperrt.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
DNS- und Router-Problem¶
Wenn man Ubuntu hinter einem Router oder einer Telefonanlage mit Router (und optional DHCP) benutzt, kann bei der Nutzung von DSL ein spezielles Linux-Problem auftauchen:
Das Internet im Browser ist extrem langsam, die aufgerufene Seite erscheint erst nach ca. 10 bis 30 Sekunden. In der Statuszeile steht in diesem Zeitraum etwas wie "Seite wird gesucht". Downloads laufen hingegen normal schnell, und auch die Ping-Zeit zu einer IP Adresse ist normal schnell.
Das Internet ist so langsam, dass es nicht möglich ist, irgendeine Seite aufzurufen. Es wird zwar nach der Seite gesucht, und eine Verbindung besteht offensichtlich, jedoch werden Adressen nicht gefunden.
Ursache¶
Unter Linux ist der Dienst "dhclient" dafür verantwortlich, dem Rechner die richtige DNS-IP-Adresse zuzuteilen. Der DNS-Dienst sorgt u.a. dafür, dass, wenn man www.ubuntu-de.org eintippt, die HTML-Dateien vom Server mit der IP-Adresse 213.95.41.13 abgerufen werden. In der Datei /etc/resolv.conf wird der (Internetanbieter-spezifische) DNS-Server eingetragen.
Wenn man Ubuntu mit einem Router benutzt, muss der Router über DHCP dem Betriebssystem mitteilen, welche(n) Nameserver es verwenden soll. Die meisten Router betreiben allerdings selber einen Nameserver als Cache (Zwischenspeicher) und geben deshalb ihre eigene IP-Adresse als Nameserver an. Dabei kann es bei einigen Routern im Zusammenspiel mit Linux und dem internen Cache-Nameserver zu Problemen kommen.
Firmware-Update¶
In einigen Fällen kann es helfen, ein Firmware-Update des Routers durchzuführen, um den Fehler zu beheben. Wer sich das nicht zutraut oder bei wessen Router das nicht hilft, der kann immer noch folgende provisorische Lösung benutzen.
DNS-Relay¶
Bevor man die provisorische Lösung benutzt, hat man noch die Möglichkeit, zu überprüfen, ob irgendwo in den Routereinstellungen die Option "DNS-Relay" vorhanden ist.
Wenn DNS-Relay aktiviert ist, wird den DHCP-Clients die IP-Adresse des Routers als DNS-Server zugeteilt. Alle DNS-Anfragen an den Router werden an die DNS-Server Ihres Internetdiensteanbieters weitergeleitet. Wenn DNS-Relay deaktiviert ist, werden den DHCP-Clients vom Router die DNS-Server des Internetdiensteanbieters zugewiesen.
Einen bestimmten DNS-Server verwenden¶
Konfiguration ab Ubuntu 8.10¶
Ab Ubuntu 8.10 kann man direkt im Network Manager Applet die Benutzung eines bestimmten DNS-Servers erzwingen. Dazu editiert man die verwendete Netzwerkverbindung und setzt unter dem Reiter "IPv4-Einstellungen" der entsprechenden Netzwerkverbindung die Methode auf "Automatisch (DHCP) nur Adressen". Nun kann man im selben Fenster den DNS-Server manuell einstellen, aber trotzdem die Netzwerkadressen per DHCP beziehen. Es muss eine IP angegeben werden, Servernamen wie nameserver.mein-dsl-anbieter.de werden nicht akzeptiert. Im Terminal[1] lässt sich die IP beispielsweise per
host nameserver.mein-dsl-anbieter.de
herausfinden.
Konfiguration mit resolvconf¶
Wer ohne Hilfe des NetworkManagers die Nameserverkonfiguration ändern möchte, der kann dies mit Hilfe des Programms resolvconf tun. Vorteil ist, dass dieses Programm von anderen Programmen, wie z.B. dhclient
, aufgerufen wird. Ab Ubuntu 12.04 wird dieses Programm standardmäßig eingesetzt (siehe DNS in Ubuntu 12.04 🇬🇧).
Hier befinden sich die einzelnen Textbausteine für die Nameserver-Konfiguration:
1 2 3 4 5 | ls -1 /etc/resolvconf/resolv.conf.d/ base head original tail |
Die einzelnen Dateien werden in der Anleitung von resolvconf näher beschrieben.
Um zum Beispiel einen Nameserver fest an erster Stelle einzutragen, kann man die Datei "head" um eine Zeile ergänzen:
1 | echo "nameserver 1.2.3.4" >> /etc/resolvconf/resolv.conf.d/head |
Einen bestimmten DHCP-Server blockieren¶
Befindet sich – aus was für Gründen auch immer – ein "falscher" DHCP-Server im Netzwerk, so kann man die Nutzung dieses Servers verhindern. Dies geht ebenso wie im letzten Schritt beschrieben über einen Eintrag in der dhclient.conf. Dieser Schritt sollte aber nur eine Fehlerumgehung ("workaround") sein. Besser wäre es, den falschen DHCP-Server aus dem Netz zu entfernen.
Der benötigte Eintrag besteht aus einer Zeile:
reject <ip-adresse>;
Weitere Lösungsansätze¶
Überschreiben der resolv.conf¶
Neben der Änderung der Dateien /etc/network/interfaces und /etc/dhcp/dhclient.conf gibt es noch eine weitere, sehr direkte Möglichkeit. Dazu kopiert man zuerst einmal die Datei /etc/resolv.conf:
sudo cp /etc/resolv.conf /etc/resolv.default
In dieser neu entstandenen Datei resolv.default ändert man dann die IP-Adresse hinter dem Eintrag nameserver
zu einer wie beschrieben ermittelten IP. Jetzt sorgt man noch dafür, dass bei jedem Start der Netzwerk-Routinen die /etc/resolv.conf überschrieben wird, indem man folgendes Skript in den Ordner /etc/network/if-up.d/ kopiert. Der Dateiname ist egal, Hauptsache sie ist ausführbar.
Das Skript:
#!/bin/sh cp /etc/resolv.default /etc/resolv.conf
Hinweis: Wenn das Betriebssystem auf einer virtuellen Maschinen läuft (z.B. mit VM Ware), ist es möglich dass das Script nicht automatisch ausgeführt werden kann und diese Lösung somit nicht funktioniert.
Lokalen DNS-Cache einrichten¶
Ein lokaler DNS-Cache speichert bereits beantwortete Namensauflösungen zwischen und hat in diesem Fall eine erheblich kürzere Antwortzeit, siehe auch Dnsmasq
Langsamer Systemstart¶
In der Hauptsache gibt es zwei Möglichkeiten, die Bootdauer zu verkürzen, falls es durch die Verwendung von DHCP zu verlängerten Bootzeiten kommt. Zum einen kann man die Wartezeit in /etc/dhcp/dhclient.conf von 120 s auf 15 s herabsetzen. Dies wird durch das Ändern der Zeile #timeout = 120
in timeout = 15
erreicht [2].
Zum anderen kann man die Netzwerkkonfiguration im Hintergrund ausführen lassen. Dazu muss man in der Datei /etc/init.d/networking am Ende der Zeilen mit "ifup" ein &
einfügen. Darüber hinaus bietet sich das Werkzeug ifplugd an, wenn die Karte nicht immer mit dem Netzwerk verbunden ist.
Links¶
DNS-Verbiegungen FAQ 🇩🇪 - Seltsame Netzwerk-Fehler (wenn der Provider falsche Daten liefert)
DNS-Verbiegungen 🇩🇪 - vollständiger Artikel zu Hintergründen