Inhalt
- 1. Einführung
- 2. Installation
- 3. Konfiguration
- 4. DNS-Server im Router eintragen
- 5. DNS-Server testen
1. Einführung
Ein lokaler Domain Name System (DNS) Server ist nützlich wenn man die Netzwerkgeräte wie Server, PC’s usw. im lokalen Heimnetzwerk (Intranet) mit der Domäne anstelle mit der IP-Adresse ansprechen möchte oder wie im Falle von Unitymedia Horizon HD Recorder die eigene öffentliche Domäne lokal nicht aufgelöst bekommt.
Einer der bekanntesten DNS-Server ist der von der Universität Berkeley (USA) entwickelte und inzwischen vom Internet Systems Consortium (ISC) übernommenen BIND Server. Als Open Source erhältlich, eignet er sich auch für private Zwecke wie eben einen lokalen Heimnetzwerk-DNS-Server.
2. Installation
Zuerst wird das Raspberry Pi Betriebsystem auf den neusten Stand gebracht:
$ sudo apt-get update && sudo apt-get upgrade
Der Raspberry Pi muss eine statische IP-Adresse besitzen. Das Interface (/etc/network/interfaces) sollte wie folgt konfiguriert sein:
# Ethernet auto eth0 allow-hotplug eth0 iface eth0 inet static address 192.168.2.105 netmask 255.255.255.0 gateway 192.168.2.1 dns-nameservers localhost 192.168.2.1 dns-domain beispiel-domain.home # optional
Jetzt wird BIND 9 mit dem folgenden Befehl installiert:
$ sudo apt-get install bind9 bind9utils dnsutils
Die Pakete bind9utils und dnsutils sind optional, sie enthalten aber nützliche Tools für die Wartung, das Testen und die Fehleranalyse eines DNS-Servers.
Nach der Installation startet der DNS-Server automatisch. Um dies zu überprüfen kann man mit dem dig-Befehl aus dem dnsutils-Paket folgendes ausführen:
$ dig @127.0.0.1 www.google.de
Die Ausgabe sollte ungefähr so aussehen:
3. Konfiguration
Die Konfigurationsdateien liegen im /etc/bind/ Verzeichnis. Die /etc/bind/named.conf importiert nur weitere Dateien wie /etc/bind/named.conf.options, /etc/bind/named.conf.local und /etc/bind/named.conf.default-zones. Für die eigene Konfiguration und Zonen sollte die /etc/bind/named.conf.local verwendet werden.
3.1 Forward- und Reverse-Lookup Zonen
Für jede Domäne sollte es zwei Zonen-Dateien geben. Eine für den Forward- und eine für den Reverse-Lookup.
Zuerst muss in der Datei /etc/bind/named.conf.local die Konfiguration der beiden Zonen eingetragen werden:
$ sudo nano /etc/bind/named.conf.local
Am Ende der Datei hinzufügen:
// Forward-Lookup zone "beispiel-domain.home" { type master; file "/etc/bind/zones/db.beispiel-domain.home"; allow-transfer { acl_trusted_transfer; }; }; // Reverse-Lookup zone "2.168.192.in-addr.arpa" { type master; file "/etc/bind/zones/db.2.168.192"; };
Die Datei speichern und ein Unterverzeichnis für die Zone-Dateien erstellen:
$ sudo mkdir /etc/bind/zones
In diesem Ordner die Forward-Lookup-Datei erstellen:
$ sudo nano /etc/bind/zones/db.beispiel-domain.home
In dieser Datei folgende Einträge erstellen:
;; ;; BIND forward data file for zone beispiel-domain.home ;; $TTL 86400 ; time-to-live - 24 hours @ IN SOA ns1.beispiel-domain.home. mail.beispiel-domain.home. ( 2016122601 ; Serial - Muster YYYYMMDD01 604800 ; Refresh (every 7 days) 86400 ; Retry (every 24h) 2419200 ; Expire (after 28 days) 604800 ) ; TTL Negativ Cache (7 days) IN NS ns1.beispiel-domain.home. ; nameserver IN A 192.168.2.105 ; nameserver's loop-back address ns1 IN A 192.168.2.105 ; nameserver self beispiel-domain.home. IN A 192.168.2.105 www IN CNAME beispiel-domain.home.
Für den Reverse-Lookup wird eine weitere Datei angelegt:
$ sudo nano /etc/bind/zones/db.2.168.192
und mit folgendem Inhalt gefüllt:
;; ;; BIND reverse data file for zone db.2.168.192 ;; $TTL 86400 ; time-to-live - 24 h @ IN SOA ns1.beispiel-domain.home. mail.beispiel-domain.home. ( 2016122701 ; Serial 604800 ; Refresh (every 7 days) 86400 ; Retry (every 24h) 2419200 ; Expire (after 28 days) 604800 ) ; TTL Negativ Cache (7 days) IN NS ns1.beispiel-domain.home. ; nameserver 105 IN PTR www.beispiel-domain.home. ; webserver 192.168.2.105 103 IN PTR nas.beispiel.domain.home. ; NAS Server 192.168.2.103
3.2 BIND-Konfiguration
Nachdem die Zonen-Dateien erstellt wurden, muss noch die Zugriffssteuerung in die BIND-Konfiguration eingetragen werden.
Die BIND-Konfigurationsdatei öffnen:
$ sudo nano /etc/bind/named.conf.options
Der Access Control List (ACL) Eintrag acl_trusted_transfer steuert für welche IP’s ein DNS-Zonen-Transfer erlaubt ist.
acl "acl_trusted_transfer" { none; };
Der Eintrag acl_trusted_clients steuert, von welchen IP’s aus Anfragen 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) - LAN, WLAN etc. 192.168.2.0/24; // 192.168.2.0 - 192.168.2.255 // Private Network (RFC 1918) - VPN etc. // 10.0.0.0/8; // 10.0.0.0 - 10.255.255.255 };
Um Anfragen des DNS-Servers von Zonen außerhalb des lokalen Netzwerkes beantworten zu können, ist es möglich weitere, öffentliche DNS-Server als Forwarders einzutragen.
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; };
Die angelegte Konfiguration kann mit dem Programm named-checkconf geprüft werden:
$ sudo named-checkconf -z
Werden ausschließlich IPv4-Adressen benutzt, soll es dem DNS-Server mitgeteilt werden um die Performance zu steigern. Dazu den Optionsparameter “-4” in dem folgenden Eintrag in der Datei /etc/default/bind9 anhängen:
OPTIONS="-u bind -4"
Abschließend den DNS-Server neu starten:
$ sudo service bind9 restart
oder
$ sudo service bind9 stop $ sudo service bind9 start
3.3 BIND DNS-Server beim Booten automatisch starten
Damit der BIND DNS-Server-Prozess beim Booten des Systems automatisch gestartet wird, muss der Autostart mit folgendem Befehl aktiviert werden:
$ sudo update-rc.d bind9 defaults
4. DNS-Server im Router eintragen
Die DNS-Server IP-Adresse (in diesem Beispiel 192.168.2.105) sollte in der Router-Konfiguration als primärer lokaler DNS-Server eingetragen werden.
5. DNS-Server testen
5.1 Linux
Forward-Lookup testen
dig @192.168.2.105 +noall +answer beispiel-domain.home dig @192.168.2.105 +noall +answer www.beispiel-domain.home dig @192.168.2.105 +noall +answer ns1.beispiel-domain.home dig @192.168.2.105 +noall +answer nas.beispiel-domain.home
Für jede Anfrage sollte der DNS-Eintrag mit der korrekten IP-Adresse ausgegeben werden.
Reverse-Lookup testen
dig @192.168.2.105 +noall +answer -x 192.168.2.105 dig @192.168.2.105 +noall +answer -x 192.168.2.103
Für jede Anfrage sollte der DNS-Eintrag mit dem korrekten Domain-Namen ausgegeben werden.
5.2 Windows
Forward-Lookup testen
nslookup beispiel-domain.home nslookup www.beispiel-domain.home nslookup ns1.beispiel-domain.home nslookup nas.beispiel-domain.home
Für jede Anfrage sollte die korrekten IP-Adresse ausgegeben werden.
Reverse-Lookup testen
nslookup 192.168.2.105 nslookup 192.168.2.103
Für jede Anfrage sollte der korrekte Domain-Name ausgegeben werden.
War diese Seite für dich informativ? Hat sie dir gefallen und geholfen?
Dann unterstütze die Weiterentwicklung mit einer kleinen Spende!
Die Spenden werden für die Lizenzen sowie neue Hard- und Software verwendet, die für weitere Projekte auf dieser Webseite eingesetzt werden.
Hallo,
danke für diese geniale Anleitung! Alles hat wie beschrieben auf Anhieb auf meinem vServer funktioniert.
Viele Grüße,
Jan
Danke für den Tippfehler-Hinweis! Schon korrigiert.
Hallo!
Erst einmal vielen Dank für das gute Tutorial. Nach Systemupdate Debian Jessie auf Squeeze ging alles – ausser bind.
Und die Konfiguration war Jahre her ….
Bei den ACLs hat er bei mir gemault. Mußte sie aus den Optionen herausnehmen
und (ohne options-Block) in die Haupt-Cfg setzen:
/etc/bind/named.conf
…
//
include “/etc/bind/named.conf.options”;
include “/etc/bind/named.conf.local”;
include “/etc/bind/named.conf.default-zones”;
//====================================
// security – ACLs
//====================================
//
acl “acl_trusted_transfer” {
none;
};
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) – LAN, WLAN etc.
192.168.13.0/24; // 192.168.13.0 – 192.168.13.255
// Private Network (RFC 1918) – VPN etc.
// 10.0.0.0/8; // 10.0.0.0 – 10.255.255.255
};
Jetzt läuft wieder alles wie am Schnürchen ;.D
_______
Wer es 1:1 ausprobieren möchte; hier ein kleiner Tippfehler am Rande :
$ sudo nano /etc/bind/zones/db.2.169.192 <– muss hier enden mit db.2.168.192
Sehr toll
leider funktioniert nur die Forward Zone bei mir.
Reverse Zone löst IP Adressen im namen nicht und zeigt keine Fehlermeldung.
kann jemand bitte helfen.
Danke
Hallo Matthias,
überprüfe die named.conf.options Datei in Zeile 42. Ist forwarders richtig mit { geöffnet und mit }; abgeschlossen?
Ist die Datei mit Unix-Zeilenende(LF) und UTF-8 Kodierung gespeichert?
Windows Editoren ändern dies oft beim Speichern, so dass die Datei falsch formatiert (Windows Zeilenende) auf den RPi hochgeladen wird.
Gruss
Alexander
Hallo,
eine sehr gute Anleitung! Leider bekomme ich beim Prüfen der Konfiguration (/etc/bind/named.conf.options) mit sudo named-checkconf -z die Fehlermeldung “/etc/bind/named.conf.options:42: unknown option ‘forwarders'” und finde keine Lösung. 🙁
Hilfe! 🙂
Viele Grüße,
Matthias