Eigener DNS-Server mit Raspberry Pi: So geht’s

Damit Computer im Internet miteinander kommunizieren können, besitzen alle Teilnehmer im Netz eine einmalige Adresse: Durch IP-Adressen wissen Clients genau, welche Server sie ansprechen sollen. Aber kein Nutzer merkt sich die Ziffernfolgen dieser Adressen, sondern nur Domain-Namen. Dafür ist das Domain-Name-System (DNS) da: Es wandelt Domains in Zahlen um und umgekehrt. Dazu müssen Clients erst einen oder mehrere DNS-Server anfragen, bevor sie die richtige Adresse geliefert bekommen. Das kostet mitunter wertvolle Zeit. Deshalb kann es sinnvoll sein, die Internetverbindung zu beschleunigen, indem man sich einen eigenen DNS-Server einrichtet. Ein Raspberry Pi, der kleine aber vielseitige Computer, bietet dafür eine sehr gute Basis. Wir erklären Ihnen, wie DNS funktioniert und wie Sie Ihren eigenen DNS-Server aufsetzen können.

Was genau ist DNS?

Das Domain-Name-System hilft Ihnen, sich in Netzwerken, die auf IP-Adressen basieren, zurechtzufinden. In die Adresszeile Ihres Browsers geben Sie für gewöhnlich eine Domain wie www.example.org ein. Für die Kommunikation im Internet benutzen Computer allerdings IPv4- oder IPv6-Adressen. Damit die Verständigung dennoch funktioniert, muss die einprägsame Domain umgewandelt werden. Die sogenannte Namensauflösung geschieht unter Verwendung von DNS-Servern. Dafür sollte der Browser zunächst auf einen Cache zugreifen. Vielleicht ist die Adresse dem eigenen System ja bereits bekannt und muss daher gar nicht angefragt werden.

Sollte dies nicht der Fall sein, wird die Anfrage an einen oder mehrere DNS-Server weitergeleitet. Zunächst kommt hierfür meistens der DNS-Server des Internetproviders in Frage. Dieser gleicht die Anfrage mit seiner Datenbank ab und liefert im Idealfall ein Ergebnis. Wenn er keinen Eintrag für die Domain haben sollte, wird direkt bei einem der 13 Root-Nameserver des Internets nachgefragt. Dort sind alle Adressen des World Wide Webs gespeichert.

Im Zusammenhang mit DNS ist auch zu beachten, dass die meisten Teilnehmer des Internets, vor allem die Clients von gewöhnlichen Internetnutzern, keine feste IP-Adresse besitzen. Internetprovider vergeben IP-Adressen innerhalb ihres Netzes nämlich meist nur für 24 Stunden. Danach wird eine sehr kurze Zwangstrennung eingeleitet, die Internetverbindung wird dabei unterbrochen, und der Teilnehmer bekommt eine neue IP-Adresse zugewiesen. Das ist für gewöhnlich kein Problem, denn Clients werden selten von außerhalb des lokalen Netzwerks angesprochen, schließlich sind sie es, die Anfragen an Server senden – und nicht andersherum.

Für bestimmte Anwendungsfälle ist es aber notwendig, einen eigenen Server einzurichten: Remote-Desktops oder ein eigener, kleiner Gameserver beispielsweise. In solchen Fällen setzt man auf Dynamic DNS. Über einen DDNS-Anbieter bekommt der heimische Server eine Domain zugewiesen über die er durchgängig erreichbar ist. Wenn Sie also Ihren selbst gehosteten DNS-Server auch von außerhalb Ihres lokalen Netzes jederzeit ansprechen möchten, sollten Sie über DynDNS nachdenken.

vServer (VPS) von IONOS

Günstige und starke VPS für Webserver, Mailserver und eigene Anwendungen mit persönlichem Berater und 24/7 Support!

100 % SSD-Speicher
Bereit in 55 Sek.
SSL Zertifikat

Was bringt ein eigener DNS-Server?

Aus ganz unterschiedlichen Gründen greifen einige Nutzer lieber auf einen eigenen DNS-Server zurück, statt auswärts nach den IP-Adressen zu suchen. Die Einrichtung eines eigenen Servers ist besonders dann sinnvoll, wenn mehrere Geräte und Personen innerhalb des Netzwerks online gehen, z. B. in einer größeren Familie, einer WG oder auch einem kleineren Büro.

  • Geschwindigkeit: Eine Webanfrage läuft – falls kein Cache-Eintrag vorhanden ist – mitunter über mehrere Router und Server, bis der Webinhalt beim Nutzer ankommt. Zwar bewegen sich diese Wartezeiten meist im Bereich von Millisekunden, aber wenn gar nicht erst eine Verbindung zum DNS-Server des Internetanbieters aufgebaut werden muss, kann der Vorgang noch beschleunigt werden.
  • Privatsphäre: Damit das Domain-Name-System funktioniert, müssen die Anfragen an fremde Server weitergeleitet werden. Dabei entstehen Spuren im Internet, die manche Nutzer gerne vermeiden möchten. Mit einem eigenen DNS-Server bleiben viele Daten bei Ihnen.
  • Sicherheit: Wer seinen eigenen DNS-Server hostet, hat auch die Kontrolle über die Einträge. Cyberkriminelle versuchen gerne, sich bei Anfragen an den DNS-Server des Providers dazwischen zu klinken und eine falsche IP-Adresse auszuliefern. Statt der eigentlich anvisierten Website wird dann eine andere ausgegeben. Dies ist besonders beim Onlinebanking extrem risikoreich: Werden sensible Kontodaten auf einer exakten Kopie der Bank-Website eingegeben, haben die Kriminellen schnell die Geldreserven geplündert.
  • Werbefilter: Ad-Blocker greifen auf eine Liste von Werbeservern, die gesperrt werden sollen, zurück. Dies kann auch ein selbsterstellter DNS-Server leisten. Damit können Sie sogar alle Geräte in Ihrem Heimnetzwerk auf einmal von Werbeeinblendungen befreien, ohne dass Sie auf jedem Gerät extra Software installieren müssen.
  • Jugendschutz: Was mit Werbung funktioniert, ist auch sinnvoll in puncto Jugendschutz. Server, die jugendgefährdende Inhalte bereitstellen, können über ein selbstverwaltetes DNS einfach geblockt werden.
  • Lerneffekt: Viele Nutzer installieren ihre eigenen DNS-Server schlicht, um mehr über die Funktionsweisen des Internets zu verstehen. Strom kommt aus der Steckdose und Websites aus dem Browser: Wer aber die Technik dahinter verstehen möchte, hat mit solchen Do-it-yourself-Projekten großartige Lerneffekte – wie im Übrigen mit vielen anderen Ideen für den Raspberry Pi.

Mit Raspberry Pi einen DNS-Server einrichten

Wenn Sie auf Ihrem Raspberry Pi einen DNS-Server installieren möchten, brauchen Sie neben dem Minirechner noch:

  • SD-Karte mit installiertem Rasbian
  • Ethernet-Verbindung zum Internet-Router
  • Stromversorgung per Micro-USB-Kabel
  • SSH-Client (z. B. PuTTY)

Als Grundlage für DNS auf dem Raspberry Pi setzen wir in diesem Beispiel auf BIND. Bei BIND handelt es sich um eine Open-Source-Software, die auf den Berkeley Internet Name Domain Server zurückgeht. Inzwischen ist das Programm in seiner neunten Version vorhanden und wird vom Internet Software Consortium (ISC) weiterentwickelt.

Zunächst müssen Sie sicherstellen, dass der Raspberry Pi innerhalb des lokalen Netzwerks eine statische IP-Adresse zugewiesen bekommt. Dafür öffnen Sie die Netzwerkkonfiguration:

sudo nano /etc/network/interfaces

Dort weisen Sie dem Raspberry Pi eine einmalige IP-Adresse zu.

Tipp

Bei Nano handelt es sich um einen einfachen Linux-Editor, den Sie auf jeden Fall auf Ihrem Raspberry Pi installieren sollten.

Nun können Sie BIND installieren. Es ist sinnvoll, neben dem eigentlichen Programm bind9 auch die beiden Pakete bind9utils und dnsutils zu installieren. Diese sind zwar nicht notwendig, enthalten aber einige nützliche Werkzeuge für die Wartung Ihres neuen DNS-Servers. Wenden Sie folgenden Befehl an:

sudo apt-get install bind9 bind9utils dnsutils

Nun ist bind9 auf Ihrem System installiert. Allerdings müssen sie, bevor Sie Ihren Raspberry Pi als DNS-Server verwenden können, noch ein paar Einstellungen vornehmen. Öffnen Sie deshalb nun die Konfigurations-Datei von bind9:

sudo nano /etc/bind/named.conf.local

Dort sollten Sie nun zwei Zonen einrichten: Eine für den Forward-Lookup, bei dem die IP-Adresse zur Domain gesucht wird, und eine für den Reverse-Lookup mit der umgekehrten Fragestellung.

sudo nano /etc/bind/named.conf.local 

    zone "home.lan" IN {
            type master;
            file "/etc/bind/db.home.lan";
      };
    zone "1.168.192.in-addr.arpa" {
            type master;
            file "/etc/bind/db.rev.1.168.192.in-addr.arpa";
      };

Im Code ist zu erkennen, dass Sie zwei Dateien (db.home.lan und db.rev.1.168.192.in-addr.arpa) zur Definition der Zonen verwenden. Diese müssen Sie aber erst einmal erstellen. Da Sie die Dateien selbst anlegen, können Sie diese auch benennen, wie Sie möchten, müssen dies dann aber auch an allen entsprechenden Stellen so eingeben. Erstellen Sie zunächst die Datei für den Forward-Lookup:

sudo nano /etc/bind/db.home.lan
  
    home.lan. IN SOA raspberry.home.lan. hostmaster.home.lan. (
       2017081401 ; serial
        8H ; refresh
        4H ; retry
        4W ; expire
        1D ; minimum
    )
    home.lan. IN NS raspberry.home.lan.
    home.lan. IN MX 10 raspberry.home.lan.
    localhost    IN A 127.0.0.1
    raspberry    IN A 192.168.1.31
    router       IN A 192.168.1.1

Die letzten beiden Einträge innerhalb der Datei müssen Sie anpassen. Geben Sie dort die IP-Adresse Ihres Raspberry Pi (dem Sie zu Anfang eine statische IP-Adresse zugewiesen haben) und die Ihres Routers ein. Achten Sie auch darauf, dass Domain-Namen hier immer mit einem Punkt abgeschlossen werden. Am Anfang der Datei, nach deren Seriennummer, legen Sie fest, wie viel Zeit zwischen regelmäßigen Aktionen liegen soll. Die beiden Angaben NS und MX (siehe MX-Record) legen fest, dass sowohl der Name-Server als auch der Mail-Server vom Raspberry Pi gestellt werden.

Tipp

Zu Beginn der Dateien geben Sie diesen immer eine Seriennummer: Es hat sich das Format YYYYMMDDXX eingebürgert, also das Datum (in der Reihenfolge Jahr, Monat, Tag) plus eine aufsteigende Seriennummer – falls Sie mehrere Versionen an einem Tag erstellen.

Nun erstellen Sie noch die Reverse-Zone-Datei:

sudo nano /etc/bind/db.rev.1.168.192.in-addr.arpa

    @ IN SOA raspberry.home.lan. hostmaster.home.lan. (
        2017081401 ; serial
        8H ; refresh
        4H ; retry
        4W ; expire
        1D ; minimum
    )
               IN NS raspberry.home.lan.
    1         IN PTR router.home.lan.
    31        IN PTR raspberry.home.lan.

Dieses Beispiel geht davon aus, dass Ihre lokale Netzwerkadresse mit 192.168.1. beginnt. Sollte dies nicht der Fall sein, müssen Sie den richtigen Adressraum in der Datei und dem Dateinamen definieren. Denken Sie daran, dass dann auch ein anderer Dateiname in /etc/bind/named.conf.local an entsprechender Stelle einzutragen ist.

Wenn Sie auf Ihrem Raspberry Pi einen DNS-Server installieren, fungiert dieser als Cache von DNS-Anfragen. Das heißt, sobald Sie einmal eine Namensauflösung angefragt haben, bleibt der Eintrag auf Ihrem DNS-Server gespeichert. Fürs Erste werden also DNS-Anfragen noch auf andere Server weitergeleitet. Welche Server dies sind, legen Sie in /etc/bind/named.conf.options fest. Öffnen Sie dafür die Datei und ändern Sie die IP-Adressen im Eintrag „Forwarders“:

sudo nano /etc/bind/named.conf.options 

    forwarders {
      1.2.3.4;
      5.6.7.8;
    };

Hier tragen Sie beispielsweise die IP-Adresse des DNS-Servers Ihres Internetproviders ein oder die eines offenen Systems. Bekannt ist z. B. das Angebot von Google (8.8.8.8). Wer sich unabhängiger von kommerziellen Anbietern machen möchte, kann aber auch ein freies System wie das des Digitalcourage e. V. (85.214.20.141) wählen.

Nun haben Sie auf Ihrem Raspberry Pi den DNS-Server mit BIND konfiguriert. Damit die Änderungen wirksam werden, sollten Sie das Programm an dieser Stelle neustarten:

sudo service bind9 restart

Oder:

sudo service bind9 stop
sudo service bind9 start

Falls beim Starten des DNS-Servers Fehler auftreten, lohnt es sich, einen Blick in die Logdatei unter /var/log/syslog zu werfen. Damit Sie nach einem Neustart Ihres Raspberry Pis den DNS-Server nicht erneut per Hand starten müssen, können Sie diesen in den Autostart des Systems legen:

sudo update-rc.d bind9 defaults

Nun müssen Sie nur noch Ihren neuen DNS-Server in den Einstellungen Ihres Routers eintragen, damit Anfragen zur Namenauflösung über Ihren Raspberry Pi laufen. Tragen Sie dazu in den Einstellungen des Geräts (dieses lässt sich meist über eine Weboberfläche aufrufen) die IP-Adresse des Raspberry Pi ein. Nun haben Sie Kontrolle über die DNS-Einträge und können bestimmte Server blocken, um sich beispielsweise vor Seiten zu schützen, die Ihnen schaden wollen. Dazu müssen Sie DNS-Sperren einrichten. Dies geschieht in einer Datei, die Sie zunächst in die Konfigurationsdatei von bind9 eintragen:

sudo nano /etc/bind/named.conf

Die Datei wird als neuer Eintrag unter die bereits vorhandenen eingefügt und mit einem Semikolon abgeschlossen:

include „/etc/bin/named.conf.blocked“;

In diese Datei tragen Sie nun die Domains ein, die Sie blocken möchten. Damit Sie wissen, welche Domains gesperrt werden sollen, können Sie auf verschiedene Listen zugreifen. In diesem Beispiel verwenden wir eine Liste des DNS-BH-Projekts, die eine Zone-File für BIND bereitstellen. Diese können Sie herunterladen und mit einem Texteditor öffnen. Einträge dort sind bereits im richtigen Format und können deshalb einfach in Ihre Blockliste kopiert werden. Einträge müssen – auch wenn Sie andere Quellen verwenden – dieses Format haben:

zone "malware-example.ga"  {type master; file "/etc/namedb/blockeddomain.hosts";};

Am Ende der Zeile wird eine Datei genannt, die ausgeführt wird, wenn die entsprechende Domain aufgerufen werden soll. Diese Datei legen Sie so an:

sudo nano /etc/namedb/blockeddomain.hosts

Dort fügen Sie folgenden Code ein:

$TTL    86400
@       IN      SOA     raspberry.home.lan. hostmaster.home.lan. (
                            2017081401 ; serial
                            8H ; refresh
                            2H ; retry
                            10D ; expire
                            1D ; minimum
)
  NS raspberry.home.lan.
  A 127.0.0.1
* IN      A       127.0.0.1

Achten Sie darauf, dass auch hier wieder die richtigen Werte für Ihre eigene Domain (in diesem Fall raspberry.home.lan) eingetragen sind. Starten Sie bind9 ein weiteres Mal neu. Nun sollte Ihr DNS-Server korrekt konfiguriert und startbereit sein.

Tipp

Mit einem Raspberry Pi können Sie auch andere Server aufsetzen: Erfahren Sie, wie Sie einen Webserver oder einen Mailserver mit dem Minicomputer erstellen!