ubuntuusers.de

Hinweis: Dies ist ein statischer Snapshot unseres Wikis vom 25. März 2013 und kann daher nicht bearbeitet werden. Der aktuelle Artikel ist unter wiki.ubuntuusers.de zu finden.

DNS Problembehebung

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

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

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.

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 bis Ubuntu 8.04

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 {de}

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 

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 {en}).

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

Firefox

Im englischen Forum {en} sind ebenfalls noch weitere Lösungsansätze beschrieben.

Überschreiben der resolv.conf

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

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/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.

ubuntuusers.local › WikiDNS Problembehebung