Archiv/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:

  1. Ein Terminal öffnen

  2. Einen Editor öffnen

  3. Network Manager bedienen

Inhaltsverzeichnis
  1. DNS- und Router-Problem
    1. Ursache
    2. Firmware-Update
    3. DNS-Relay
    4. Einen bestimmten DNS-Server verwenden
    5. Einen bestimmten DHCP-Server blockieren
    6. Weitere Lösungsansätze
  2. Lokalen DNS-Cache einrichten
  3. Langsamer Systemstart
  4. Links

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:

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.