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.