Kategorien
Server Administration

DNS – Bind9 Nameserver Konfiguration – Teil3

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