Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
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.
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.
U.a. beim "Teledat Router 630" hilft nach Berichten ein Firmware-Update des Routers, 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.
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.
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.
Eventuell ist es eine Überlegung wert, den NetworkManager auf eine neuere Version zu aktualisieren, um einen wesentlich komfortablere Methode zur Konfiguration zur Verfügung zu haben. Mehr dazu hier: NetworkManager
Die "einfachste" Lösung ist, einen DNS-Server (des eigenen Providers) in der /etc/dhcp3/dhclient.conf festzulegen. Die Adresse kann man entweder beim jeweiligen Provider erfragen oder bei bestehender Internet-Verbindung in der Konfiguration des Routers nachsehen – der sollte die aktuell verwendeten Nameserver-Adressen irgendwo anzeigen.
Das willkürliche Verwenden fremder DNS-Server ist übrigens nicht unbedingt sinnvoll: ein Provider könnte seinen Server für Abfragen aus Fremdnetzen sperren, wenn zu viele das tun. Falls es jedoch nicht möglich ist, den DNS-Server des eigenen Providers zu ermitteln, ist diese Liste hilfreich: Public DNS-Server
Wenn man das Paket resolvconf für die Ermittlung der optimalen Nameserver verwendet, kann man die Datei /etc/network/interfaces in einem Editor mit Root-Rechten [2] öffnen. Dann sucht man die folgenden Zeilen (es wird angenommen, dass eth0 der Netzwerkcontroller ist):
auto eth0 iface eth0 inet dhcp
Hier fügt man die Zeile
dns-nameservers ip.addresse.des.nameservers
an.
Wenn resolvconf nicht genutzt wird, muss man auch noch die folgenden Schritte ausführen:
Man öffnet oder erstellt in einem Editor mit Root-Rechten [2] die Datei /etc/dhcp3/dhclient.conf und fügt dort zum Beispiel folgenden Text ein:
prepend domain-name-servers 85.214.73.63;
Damit nicht weiterhin ein DNS Server vom Router angefordert wird, nun unbedingt aus der Zeile
request subnet-mask, broadcast-address, time-offset, routers, domain-name, domain-name-servers, host-name,
den Eintrag "domain-name-servers" löschen!
Die Datei danach speichern. Die Änderung muss noch dem Rechner vermittelt werden. Normalerweise wird die Netzwerkverbindung von NetworkManager verwaltet. Um hier ein Neuladen der Verbindungsdaten zu erreichen, muss die entsprechende Verbindung neu hergestellt werden. Siehe hierzu Verbindung herstellen.
Wird das entsprechende Netzwerkinterface jedoch nicht von Network-Manager verwaltet (weil es z.b. explizit in der Datei /etc/network/interfaces konfiguriert wird), so muss dieses auf eine andere Art neu gestartet werden. Dazu in einem Terminal [1] folgendes ausführen
sudo /etc/init.d/networking restart
Unabhängig vom verwendeten Verbindungsverfahren kann nun kontrolliert werden, welcher DNS-Server gerade verwendet wird:
grep nameserver /etc/resolv.conf
Nachprüfen, ob und was ein Nameserver auf eine Anfrage antwortet, geht mit
dig @85.214.73.63 www.ubuntu.com a
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 |
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>;
Im englischen Forum sind ebenfalls noch weitere Lösungsansätze beschrieben.
Neben der Änderung der Dateien /etc/network/interfaces und /etc/dhcp3/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
Ein lokaler DNS-Cache speichert bereits beantwortete Namensauflösungen zwischen und hat in diesem Fall eine erheblich kürzere Antwortzeit, siehe auch Dnsmasq
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/dhcp3/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.
DNS-Verbiegungen FAQ - Seltsame Netzwerk-Fehler (wenn der Provider falsche Daten liefert)
DNS-Verbiegungen - vollständiger Artikel zu Hintergründen