Um seinen eigenen DNS Server unter Ubuntu zu konfigurieren, muss man nur BIND installieren:
sudo apt-get install bind9
und einfach selber konfigurieren, wie im Folgenden gezeigt wird.
Die Funktionsweise von BIND
Die zentrale Datei /etc/bind/named.conf:
include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local"; include "/etc/bind/named.conf.default-zones";
In dieser Datei werden nur 3 andere Datein inkludiert, die die Funktionalität beinhalten:
Die etc/bind/named.conf.options beinhaltet allgemeine Konfigurationsparameter für den Nameserver, z.B. ob rekursive Anfragen zulässig sind oder ob die Daten an andere Nameserver weitergegeben werden sollen.
Die etc/bind/named.conf.default-zones beinhaltet den Verweis auf die Root-Nameserver Datenbank, die bei einem DNS Lookup als erstes angefragt werden:
zone "." { type hint; file "/etc/bind/db.root"; };
Außerdem enthält Sie die Konfiguration, das der eigene Rechner für die Domäne Localhost zuständig ist:
zone "localhost" { type master; file "/etc/bind/db.local"; };
und für Broadcast und spezielle andere IP-Blöcke:
zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127"; }; zone "0.in-addr.arpa" { type master; file "/etc/bind/db.0"; }; zone "255.in-addr.arpa" { type master; file "/etc/bind/db.255"; };
Die etc/bind/named.conf.local ist für alle Anpassungen da, die der Benutzer selber vornehmen soll:
Konfiguration eines Masters
zone "example.com" in{ type master ; file "example.com.db" ; notify explicit; also-notify { 172.27.157.16; }; };
Hierüber wird festgelegt, dass Anfragen nach der IP Adresse von example.com selber beantwortet werden und die Daten dafür in der Datei example.com.db liegen. Bei Änderungen wird der Rechner mit der IP 172.27.157.16 benachrichtigt (weil er wahrscheinlich ein Slave ist) und nur genau dieser und nicht alle vielleicht noch global definierten Benachrichtige, was der Parameter notify explicit aussagt.
Konfiguration eines Slaves
Slaves haben die Aufgabe den Master zu unterstützen meist zur Lastverteilung. Sie beziehen ihre Daten von einem oder mehreren Mastern:
zone "example.net" in{ type slave ; master {2.2.2.2}; file "slave/example.net.db" ; };
Dieser Slave unterstützt den Rechner mit der IP 2.2.2.2 bei seiner Arbeit und ist zuständig für die Domäne example.net. Er synchronisiert seine Daten mit dem Master, wenn dieser Ihn per notify Parameter dazu triggert.
Logging/Debugging
Zum debuggen kann ein Log-File spezifiziert werden:
logging { channel default-log { file "logs/named.log"; severity debug; print-severity yes; }; category default { default-log; }; };
Erstellung der Zonendatei für den Master
Regeln: Es muss genau ein SOA Resource Record und mindestens ein NS Resource Record vorhanden sein. Der SOA-RR befindet sich meist am Anfang einer Zonendatei.
Die Datei example.com.db:
$TTL 86400 $ORIGIN example.com. @ IN SOA ns1.example.com. admin.example.com( 1 ; Versionsnummer, für die Slaves 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 86400 ) ; Negative Cache TTL @ IN NS ns1.example.com. ;primärer Nameserver, das ist derselbige, den wir gerade konfigurieren @ 1800 IN A 1.2.3.4 ;IPv4-Adresse unseres Servers @ 1800 IN AAAA 2001:db8::1:2:3:4 ;IPv6-Adresse unseres Servers ns1.example.com. 1800 IN A 1.2.3.4 ;IPv4 des primären Nameservers www 1800 IN A 1.2.3.4 ;IPv4 der Subdomain www.example.com mail 1800 IN CNAME www ;mail.example.com hat dieselbe IPv4 wie die Subdomainwww
Die Regeln für den Syntax der Zonendatei gibt es bei Wikipedia.
Das @ wird substituiert durch $ORIGIN, also unser Domäne.
An alle Domäne, die nicht auf ein Punkt enden, wird die Domäne angehängt:
www 1800 IN A 1.2.3.4 ; IPv4 der Subdomain www.example.com
Zum erzeugen und editieren der schreibgeschützten Datein kann der gute alte Texteditor benutzt werden (Root Rechte nötig):
sudo touch example.com.db sudo gedit example.com.db &
Man kann kontrollieren, ob der Syntax richtig angewendet wurde mit:
named-checkconf named.conf.local
und
named-checkzone example.com example.com.db
Letzter Schritt: Bind Neustarten
sudo /etc/init.d/bind9 restart
Jetzt kann mit dem dig-Befehl aus Teil1 getestet werden, ob der DNS Server funktioniert:
dig example.com
Wenn der Abschnitt „ANSWER SECTION“ nicht enthalten ist, hat etwas nicht funktioniert.
Probleme beim Zonetransfer vom Master zum Slave
Heutzutage ist da sehr oft das Problem, das er die Datei wegen Rechtemangels nicht schreiben darf (sei es klassische Unix- Schreibrechte oder SELinux/AppArmor).
Dazu muss global das Schreibrecht für den BIND-User von readonly auf read/write stellen /etc/apparmor.d/usr.sbin.named:
Die Zeile
etc/bind/** r,
muss geändert werden zu
etc/bind/** rw,
Im letzten Schritt müssen Gruppen Schreibrechte auf den bind-Ordner vergeben werden:
sudo chmod -R 775 /etc/bind
Probleme? Ein empfehlenswertes Tutorial: Configuring BIND9 Master / Slave on Ubuntu.
Eine sicheres Konfigurations-Template für Bind9 gibt es hier.
DNS – Grundlagen mit dig – Teil1
DNS – Namensauflösung mit Nameservern – Teil2
DNS – Bind9 Nameserver Konfiguration – Teil3