Nachdem bei statischen IP’s der im Router integrierte Domain Name System (DNS)-Server die Namensauflösung verweigert, habe ich kurzerhand auf meinem Raspberry Pi einen eigenen DNS-Server installiert und eingerichtet.
Ich habe mich für den BIND Server entschieden, da dieser realtiv einfach unter Raspbian „Wheezy“ zu installieren und konfigurieren ist. Hinzu kommt, dass dieser DNS-Server mittlerweile ausgereift und relativ weit verbreitet ist.

Nachfolgend zeige ich die notwendigen Schritte, um BIND zu installieren und zu konfigurieren

Für intere Zonen im LAN wird dieser als autoritativer DNS-Server konfiguriert. Zusätzlich werden Forwarder (öffentliche DNS-Server) angegeben, um auch alle anderen Anfragen beantworten zu können. Somit ist er Router als DNS-Server eigentlich nicht mehr notwendig.

Installation

Zuerst muss BIND (aktuell in er Version 9) über das APT Paketmanagement-System durch folgenden Terminal-Befehl installiert werden.

sudo apt-get install bind9 bind9utils dnsutils

Die Pakete „bind9utils“ und „dnsutils“ sind zwar optional. Diese sollten aber trotzdem installiert werden, da dann verschiedene Programme für die Wartung, zum Testen oder zur Fehleranalsye einer BIND-Installation bereitstehen.

Nach der erfolgeichen Installation, sollte BIND automatisch gestartet werden.
Um zu prüfen ob der Server korrekt läuft, kann folgender Befehl verwendet werden.

dig @127.0.0.1 www.google.de

Hinweis: Das DNS Lookup Utility „dig“ wird vom Paket „dnsutils“ geliefert.

Läuft alles korrekt, sollte dann als Ausgabe u. a. die IP der angegeben Internetadresse erscheinen.

Konfiguration

Normalerweise sollte BIND unter „/etc/bind/“ installiert worden sein. Hier liegen dann auch die Konfigurationsdateien und Zonen-Dateien. Eine Anpassung der Konfiguration sollte aber nicht direkt in der Datei „/etc/bind/named.conf“ erfolgen. Diese importiert normalerweise nur weitere Dateien. Darunter auch die Dateien „named.conf.options“ und „named.conf.local“, die für die eigene Konfiguration und Zonen verwendet werden sollen.

Sollte die Datei „named.conf.local“ noch nicht existieren, kann diese wie folgt angelegt werden:

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

Beispiel-Konfiguration

Kommen wir nur zur eigentlichen Einrichtung von eigenen Zonen und der Konfiguration von BIND.

Für ein einfaches Beispiel gehen wir von folgender lokalen Netzwerk-Topologie aus.

  • Netzwerk: 192.168.2.0/24
  • Subnetzmaske: 255.255.255.0
  • Broadcast-Adresse: 192.168.2.255
  • Gateways/Router: 192.168.2.1
  • Interner Server: 192.168.2.10
  • Raspberry (DNS-Server): 192.168.2.2
  • Hostname – Raspberry (DNS Servers): berry
  • DNS-Zone: berry.home

Hinweis:
Um später bei den Clients den eigenen DNS-Server eintragen zu können, sollte für den Raspberry Pi eine statische IP-Adresse eingerichtet werden.

Durch den eigenen DNS-Server soll folgendes erreicht werden:

1. Der „Interne Server“ mit der statischen IP „192.168.2.10“ soll unter „server.berry.home“ erreichbar sein.
2. Der „Raspberry Pi“ mit der statischen IP „192.168.2.2“ soll unter „berry.home“ erreichbar sein.
3. Zusätzlich ist auf dem Raspberry Pi ein HTTP-Webserver installiert. Dieser soll unter „www.berry.home“ erreichbar sein.

Hinweis:
In einigen Anleitungen findet man anstelle von „.home“ auch „.local“. Da dies aber oft zu Problemen bei der Namensauflösung unter Mac OS oder iOS führt, habe ich mich für „.home“ entschieden. Natürlich sollten hier auch keine öffentlichen Domainnamen verwendet werden!

Forward- und Reverse-Lookup Zonen anlegen

Domains die wir im DNS-Server konfigurieren wollen, werden eigene Zonen angelegt. Für jede Domain sollte es normalerweise zwei Zonen-Dateien geben. Jeweils eine Zonen-Datei für den Forward- und den Reverse-Lookup.

Zuerst muss in der Datei „/etc/bind/named.conf.local“ die Konfiguration für diese beiden Dateien unserer Beispiel-Zone „berry.home“ eingetragen werden. Um die Datei zu bearbeiten, muss diese in einem Editor (z. B. „nano“) geöffnet werden.

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

Danach muss folgender Inhalt eingetragen und gespeichert werden.

//
// This file contains the own local DNS server configuration.
// This is where you declare the zones associated with this server's domain(s). 
// Consider adding the 1918 zones here, if they are not used in your organization 
// include "/etc/bind/zones.rfc1918";
//

// ----------------------- Zones -----------------------

// Forward-Lookup
zone "berry.home" {
    type master;
    file "/etc/bind/zones/berry.home.zone";
    allow-transfer { acl_trusted_transfer; };    //see named.conf.options for configuration
};

// Reverse-Lookup
zone "2.168.192.in-addr.arpa" {
    type master;
    file "/etc/bind/zones/db.2.168.192.inv";
};

// ----------------------- Zones -----------------------

named.conf.local (GitHub) herunterladen

Hier werden zuerst nur die Zonen für BIND bekannt gemacht. Die eigentliche Konfiguration der logischen Struktur, wird dann in den jeweils unter „file“ angegeben Dateien eingetragen.

Zur besseren Übersicht habe ich diese in einen eigenen Ordner „zones“ gespeichert, welcher mit diesem Befehl angelegt wird.

sudo mkdir /etc/bind/zones

Die Datei „berry.home.zone“ muss nicht erstellt werden und kann direkt mit folgendem Befehl geöffnet werden.

sudo nano /etc/bind/zones/berry.home.zone

Folgender Inhalt muss in die Datei eingetragen und gespeichert werden.

;;
;; BIND forward data file for zone berry.home
;;

$TTL          86400   ; time-to-live - 24 hours could have been written as 24h or 1d

@             IN      SOA         ns1.berry.home. mail.berry.home. (
                                             2015061201       ; Serial - (NOTE: Needs to increment every time you restart BIND)
                                                 604800       ; Refresh
                                                  86400       ; Retry
                                                2419200       ; Expire
                                                 604800 )     ; Default TTL

              IN            NS           ns1.berry.home.      ; nameserver
              IN            A            192.168.2.2          ; loop-back address

ns1           IN            A            192.168.2.2 	
berry.home.   IN            A            192.168.2.2
server        IN            A            192.168.2.10
server        IN            TXT          "Interner Server"

www           IN            CNAME        berry.home.

berry.home.zone (GitHub) herunterladen

Für den Reverse-Lookup wird noch eine weitere Zonen-Datei „db.2.168.192.inv“ angelegt.

sudo nano /etc/bind/zones/db.2.168.192.inv

In dieser Datei muss folgender Inhalt eingetragen und gespeichert werden.

;;
;; BIND reverse data file for zone db.2.168.192.inv
;;

$TTL 	       86400         ; time-to-live - 24 hours could have been written as 24h or 1d

@              IN            SOA      ns1.berry.home. mail.berry.home. (
                                           2015061101          ; Serial  - (NOTE: Needs to increment every time you restart BIND)
                                               604800          ; Refresh
                                                86400          ; Retry
                                              2419200          ; Expire
                                               604800 )        ; Default TTL

               IN            NS       ns1.berry.home.          ; nameserver 
    
2              IN            PTR      ns1.berry.home.          ; #1 192.168.2.2
10             IN            PTR      server.berry.home.       ; #2 192.168.2.10

db.2.168.192.inv (GitHub) herunterladen

Wurde die Konfiguration angelegt, kann diese mit dem Programm „named-checkconf“ geprüft werden.

sudo named-checkconf -z

Konfiguration für BIND anpassen

Nachdem die Zonen eingetragen wurden, muss jetzt noch die Konfiguration von BIND über die Datei „named.conf.options“ erfolgen.

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

Eine mögliche Konfigurationsdatei habe ich unter folgender Adresse zur Verfügung gestestellt:
named.conf.options (GitHub) herunterladen

Nachdem es sehr viele Konfigurationsmöglichkeiten gibt, kann ich hier nicht auf alle eingehen.
Einige möchte ich aber hier trotzdem kurz erklären.

Über den Access Control List (ACL) Eintrag „acl_trusted_transfer“ kann gesteuert werden, von welchen IP’s aus ein Transfer von DNS-Zonen erlaubt wird.

 acl "acl_trusted_transfer" {
      none;
 };

Über den Access Control List (ACL) Eintrag „acl_trusted_clients“ kann gesteuert werden, von welchen IP’s aus Anfragen (Queries & Recursion) an den DNS-Server erlaubt sind.

 acl "acl_trusted_clients" {
       // localhost (RFC 3330) - Loopback-Device addresses  
       127.0.0.0/8;     // 127.0.0.0 - 127.255.255.255  

       // Private Network (RFC 1918) - e. e. LAN            
       192.168.0.0/16;  // 192.168.0.0 - 192.168.255.255 

       // Private Network (RFC 1918) - e. g. VPN            
       // 10.0.0.0/8;   // 10.0.0.0 - 10.255.255.255
 };

Damit der DNS-Server auch Anfragen von Zonen außerhalb des lokalen Netzwerkes beantworten kann, können weitere öffentliche DNS-Server als „Forwarders“ eingetragen werden. Wird hier die IP-Adresse des Routers eingetragen, so werden die Anfragen an die DNS-Server des eigenen Providers weitergeleitet.

forwarders {
       // Router DNS
       // 192.168.2.1

       // Google Public DNS
       8.8.8.8;
       8.8.4.4;
 
       // OpenDNS
       208.67.222.222;
       208.67.220.220;
};

Jetzt muss der DNS-Server noch neu gestartet werden.

sudo service bind9 restart

oder

sudo service bind9 stop
sudo service bind9 start

Wurde alles korrekt konfiguriert, sollte der Status „ok“ ausgeben werden.

[ ok ] Starting domain name service...: bind9su.

Sollte etwas schiefgelaufen sein, empfiehlt es sich, die Meldungen in der Log-Datei „/var/log/syslog“ anzusehen.

BIND automatisch bei Systemstart starten

Damit der DNS-Server beim nächsten System Neustart automatisch gestartet wird, muss der Autostart noch durch folgenden Befehl aktiviert werden:

sudo update-rc.d bind9 defaults

DNS-Server durch DNS-Anfragen testen

Um den DNS-Server von einem Client aus testen zu können, sollten zuerst in der jeweiligen Netzwerkkonfiguration der DNS-Server eingetragen werden.
Danach kann dieser wie folgt getestet werden.

Linux
Die Funktionalität des DNS-Servers kann unter Linux durch das Tool „dig“ getestet werden.

Forward-Lookup testen

dig +noall +answer system.berry.home
dig +noall +answer www.berry.home
dig +noall +answer ns1.berry.home

Für alle Anfragen sollte der entsprechende DNS-Eintrag mit der korrekten IP-Adresse ausgegeben werden.

Reverse-Lookup testen

dig +noall +answer -x 192.168.2.10
dig +noall +answer -x 192.168.2.2

Für alle Anfragen sollte der entsprechende DNS-Eintrag mit dem korrekten Namen ausgegeben werden.

Tipp:
Durch die Angabe des Parameters „@“ kann ein beliebiger DNS-Server getestet werden, ohne das dieser in der Netzwerkkonfiguration eingetragen wurde.

Beispiel:

dig +noall +answer @192.168.2.2 system.berry.home

Windows
Die Funktionalität des DNS-Servers kann unter Windows durch das Tool „nslookup“ getestet werden.

Forward-Lookup testen

nslookup system.berry.home
nslookup www.berry.home
nslookup ns1.berry.home

Für alle Anfragen sollte die korrekte IP-Adresse ausgegeben werden.

Reverse-Lookup testen

nslookup 192.168.2.10
nslookup 192.168.2.2

Für alle Anfragen sollte der korrekte DNS-Name der jeweiligen IP-Adresse ausgegeben werden.

BIND DNS-Server unter Raspbian installieren und einrichten (Howto Anleitung)

7 Gedanken zu „BIND DNS-Server unter Raspbian installieren und einrichten (Howto Anleitung)

  • Hallo,
    erstmal, super Anleitung.
    Mir ist aufgefallen das bei den Code Fenstern unter:

    sudo nano /etc/bind/zones/berry.home.zone
    sudo nano /etc/bind/zones/db.2.168.192.inv

    wird jeweils der gleiche Code angezeigt. Auf Github ist der unterschiedlich.
    Wahrscheinlich nur hier auf der Webseite unterschiedlich.

    Mit freundlichen Grüssen

  • Vielen Dank für die tolle Anleitung,

    habe Sie zwar für nicht für einen Raspi genutzt, aber funktioniert tadellos.

  • Hallo,

    vielen Dank für Deine Anleitung. Funktioniert bis auf die Reverseauflösung. Hier ist bei mir noch irgendwas falsch. Welche DNS IP hast Du im Raspi eingetragen? 127.0.0.1?

  • Hallo

    vielen Dank für das tolle Tutorial. Genau das was ich gesucht habe…

    Bei der Überprüfung durch named-checkconf erhalte ich jedoch die Fehlermeldung:
    /etc/bind/named.conf.local:15: undefined ACL ‚acl_trusted_transfer‘

    Was muss ich tun um ACl zu definieren? in named.conf.options werde ich auch nicht schlauer..

    Vielen Dank im Voraus!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.