Mit Dnsmasq
So richten Sie einen DNS-Server unter Linux ein
Im eigenen Netzwerk dient üblicherweise der Router als erster DNS-Server, der die Browser-Anfragen entgegennimmt. Dieser DNS-Server arbeitet mit einem Zwischenspeicher, der sich vorherige Anfragen merkt und schnell antwortet. Ist die Zieladresse unbekannt, so geht die Anfrage weiter an die DNS-Server des Internet-Providers.
Im LAN ist der Weg zum Router im LAN kurz, und im Idealfall dauert eine DNS-Anfrage nur einige Dutzend Millisekunden.
Allerdings arbeiten dabei nicht alle Router richtig schnell. Im WLAN sind Anfragen generell langsamer, und bei vielen Anfragen von einer großen Zahl von Netzwerkteilnehmern dauert eine Antwort auch mal länger. Der Befehl
for i idn {1..20}; do dig pcwelt.de | grep time; sleep 1; done
gibt eine Übersicht von typischen Antwortzeiten für DNS-Abfragen. Auf einem Linux-PC kann ein lokaler DNS-Zwischenspeicher diese Anfragen enorm beschleunigen. Der Konfigurationsaufwand ist gering.
Lese-Tipp: Die 10 wichtigsten Linux-Befehle für Netzwerk und Internet
Lokaler Cache mit Dnsmasq
Auch wenn es nur um einige Dutzend Millisekunden geht: Ein DNS-Server mit Zwischenspeicher auf dem eigenen PC antwortet sofort, wenn eine Host-Adresse bereits im Speicher liegt. Nur bei einer unbekannten Adresse oder wenn die Haltezeit im Zwischenspeicher abgelaufen ist, fragt der DNS-Server bei den übergeordneten DNS-Servern nach. Ideal für diese Aufgabe ist das Multitalent Dnsmasq, das einen kompakten DNS-Server mit Cache bereitstellt. Die DNS-Anfrage geht bei einem lokalen Cache gar nicht erst über das Netzwerk, sondern direkt an den Localhost (127.0.0.1). Die nötige Konfiguration betrifft auch nur den eigenen Linux-PCs und nicht das sonstige Netzwerk.
Sonderfall Ubuntu: Ab Version 12.04 ist bei den Desktop-Versionen dieser Distribution Dnsmasq im Network-Manager bereits enthalten, allerdings ohne lokalen Cache. Diese Instanz von Dnsmasq können Sie einfach ignorieren, zumal sich die Konfiguration nicht mit einem manuell eingerichteten Dnsmasq stört. Dnsmasq ist in den Paketquellen aller verbreiteten Linux-Distributionen vorhanden. In Debian, Raspbian, Ubuntu und seinen Varianten wird es mit dem Befehl
sudo apt-get install dnsmasq
nachinstalliert. Auch Fedora, Open Suse, Arch und viele andere Distributionen kennen Dnsmasq unter diesem Paketnamen.
Lese-Tipp: Die richtige Linux-Distribution für Einsteiger
Die Konfiguration liegt in der Datei „/etc/dnsmasq.conf“ vor und erfolgt über root-Privilegien oder sudo mit jedem Texteditor. Dnsmasq kann mehr als nur DNS und bietet deshalb viele Optionen. Legen Sie deshalb eine Sicherheitskopie der mitgelieferten Konfigurationsdatei an, und legen Sie der Übersicht halber noch wie folgt eine neue Datei an:
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.bak
sudo touch /etc/dnsmasq.conf
Dann öffnen Sie die neue Konfigurationsdatei im Texteditor
sudo nano /etc/dnsmasq.conf
und tragen dort die folgenden fünf Zeilen ein:
listen-address=127.0.0.1
port=53
domain-needed
bogus-priv
resolv-file=/etc/resolv.dnsmasq
Der Eintrag „listen-address“ weist Dnsmasq an, nur auf der Adresse des Localhost (127.0.0.1) auf dem Port 53 lokale Anfragen entgegenzunehmen. Einfache Host-Namen aus dem LAN werden mit der Option „domain-needed“ nicht an übergeordnete DNS-Server weitergegeben, und „bogus-priv“ vermeidet die umgekehrte Auflösung von IP-Adressen aus privaten Subnetzen (192.168.x.x, 10.x.x.x).
Der Verweis „resolv-file“ gibt die weitere Konfigurationsdatei „/etc/resolv.dnsmasq“ an, die Sie anschließend noch anlegen müssen, Dort tragen Sie die IP-Adresse der übergeordneten DNS-Server des Providers oder des Routers ein. Mit
sudo touch /etc/resolv.dnsmasq
erstellen Sie diese Datei „/etc/resolv.dnsmasq“ und öffnen diese dann in einem Texteditor. Hier tragen Sie die Adressen der DNS-Server ein, die Dnsmasq zur Auflösung verwenden soll. Bei stationären PCs im lokalen Netzwerk sollten dies die DNS-Server-Adressen des Providers beziehungsweise des Routers sein.
Welche DNS-Adressen das in Ihrem Fall sind, zeigt
cat /etc/resolv.conf
hinter der Angabe „nameserver“ an und in Ubuntu der Befehl
nmcli dev list
hinter „IP4.DNS[1]“. Steht hier beispielsweise „192.168.178.1“ für die Adresse einer Fritzbox, so tragen Sie
nameserver 192.168.178.1
in die Datei „/etc/resolv.dnsmasq“ ein. Bei Rechnern, die häufig in anderen LANs/WLANs mit wechselnden DNS-Servern unterwegs sind, tragen Sie darunter noch die Adresse eines schnellen öffentlichen DNS-Servers ein.
Für den DNS-Dienst von Google beispielsweise wäre
nameserver 8.8.8.8
ein geeigneter Eintrag.
Dnsmasq starten und verwenden
Starten Sie Dnsmasq auf Systemen mit Systemd (Fedora, Open Suse, Debian ab Version 8, Ubuntu ab 14.10, Raspbian ab „Jessie“) über diese Befehle:
sudo systemctl enable dnsmasq.service
sudo systemctl restart dnsmasq.service
Auf älteren Systemen mit System-V-Init (Debian 7, Ubuntu 14.04, Raspbian Wheezy) startet der folgende Befehl Dnsmasq neu:
sudo service dnsmasq restart
Jetzt teilen Sie dem System mit, dass ab sofort alle DNS-Anfragen an die lokale Adresse 127.0.0.1 gehen sollen. Dazu öffnen Sie die Datei „/etc/resolv.conf“ als root oder mit sudo in einem Texteditor und tragen dort in der ersten Zeile
nameserver 127.0.0.1
ein. Ein Problem ist, dass die Datei „/etc/resolv.conf“ bei einem Reboot immer wieder gern vom Network-Manager oder von dhcpd überschrieben wird. Um das zu verhindern, setzen Sie mit dem Kommando
sudo chattr +i /etc/resolv.conf
einen Schreibschutz. Mit
sudo chattr -i /etc/resolv.conf
heben Sie den Schreibschutz zum Bearbeiten der Datei bei Bedarf wieder auf.
Im Netzwerk: DNS-Cache für alle
Läuft Dnsmasq schon mal, kann es mit wenig Aufwand dazu gebracht werden, auch DNS-Anfragen von anderen Netzwerkteilnehmern im LAN entgegenzunehmen. Sorgen Sie zuerst dafür, dass der Rechner, auf dem Dnsmasq läuft, vom Router stets die gleiche IP-Adresse erhält. Diese Einstellung nehmen Sie der Verwaltungsoberfläche des Routers vor. In der Konfigurationsdatei „/etc/dnsmasq.conf“ tragen Sie dann unter „listen-address=127.0.0.1“ noch die Zeile
listen-address=[IP-Adresse]
ein, wobei der Platzhalter für die feste IP-Adresse steht, die der Router dem Rechner zuweist. Danach ist ein Neustart von Dnsmasq nötig – auf Distributionen mit Systemd mit
sudo systemctl restart dnsmasq.service
und bei anderen mit diesem Befehl:
sudo service dnsmasq restart
Anschließend können Sie andere Netzwerkteilnehmer so einrichten, dass diese nun als DNS-Server diese IP-Adresse verwenden.