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 „@
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.
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 Rückmeldung. Fehlerhafter Code wurde angepasst.
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?
Vielen Dank. Hat jetzt prima funktioniert.
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!
Hallo Hendrik,
bitte den Abschnitt „Konfiguration für BIND anpassen“ nochmal prüfen! In der Datei „named.conf.options“ muss ein „acl“ Eintrag mit genau diesen Namen angelegt sein.
Vielen Dank für die Anleitung mit der ich innerhalb von 15 Minuten meinen eigenen DNS Server aufgesetzt. Jetzt suche ich schon die doppelte Zeit nach einer Möglichkeit die DNS Einträge in einem Webserver Interface zu administrieren. Allerdings finde ich nichts brauchbares. Hast Du oder einer der hier lesenden einen Tipp?
Hallo Moritz,
schau mal nach „Webmin„.
Hierfür gibt es ein „BIND DNS Server“ Module.
Hallo,
echt super Anleitung … ich habe nur das Problem, dass die reverse Auflösung nicht funktioniert … was kann ich tun?