Zonendatei

Eine Zonendatei ist Teil der Konfiguration des Nameservers BIND für das Domain Name System. Sie besteht aus einer Liste von Resource Records. Eine Zonendatei beschreibt eine Zone vollständig. Es muss genau ein SOA Resource Record und mindestens ein NS Resource Record vorhanden sein. Der SOA-Resource Record befindet sich meist am Anfang einer Zonendatei.

Neben den Syntax-Regeln der einzelnen RR-Typen definieren die RFC-Standards verschiedene globale Syntax-Regeln. Hauptziel dieser globalen Regeln ist, die Lesbarkeit von Zonendateien zu verbessern. Ein Syntax-Fehler führt meist dazu, dass die gesamte Zonendatei als unbrauchbar angesehen wird. Der Nameserver verhält sich dann ähnlich, als wäre diese Zone gar nicht vorhanden. Auf DNS-Anfragen reagiert er mit einer SERVFAIL Fehlermeldung (wenn die Zone tatsächlich nicht vorhanden ist, reagiert er mit NXDOMAIN).

Leerzeilen

Leerzeilen sind zulässig und werden nicht als Syntax-Fehler gewertet, wenn der BIND-Server gestartet oder reloaded wird.

Kommentare

Kommentare werden durch das Zeichen „;“ eingeleitet. Alles, was rechts von einem  Semikolon auftaucht, wird als Kommentar interpretiert und beim Zonentransfer nicht übertragen.

Mehrzeilige Anweisungen

Soll ein Resource Record auf mehrere Zeilen verteilt werden, so müssen Klammern verwendet werden.

mycompany.com. IN SOA ns1.mycompany.com. hosmaster@mycompany.com. (
                                         2014120501    ; Serial
                                                 3H    ; refresh after 3 hours
                                                 1H    ; retry after 1 hour
                                                 1W    ; expire after 1 week
                                                 1D)   ; minimum TTL of 1 day

mycompany.com.          1800  IN  NS     ns1.mycompany.com.
mycompany.com.          1800  IN  MX 10  mx1.mycompany.com.

ns1.mycompany.com.      1800  IN  A      189.56.201.21
ns1.mycompany.com.      1800  IN  AAAA   2001:db8::f:a
www.mycompany.com.      1800  IN  A      188.156.21.2
www.mycompany.com.      1800  IN  AAAA   2001:db8::1:2

@ anstelle des Zonennamens

@ ist der Platzhalter, der sogenannte Origin, den BIND9 für die in der "named.conf" genannte Zone einsetzt.  Und tritt in der Zonendatei der Zonenname ohne jegliche Extension isoliert auf, dann darf er durch das Zeichen "@" ersetzt werden. Die eben vorgestellte Datei gestaltet sich dann so:

            IN SOA ns1.mycompany.com. hosmaster@mycompany.com. (
                                         2014120501    ; Serial
                                                 3H    ; refresh after 3 hours
                                                 1H    ; retry after 1 hour
                                                 1W    ; expire after 1 week
                                                 1D)   ; minimum TTL of 1 day

@                       1800  IN  A       188.156.21.2
@                       1800  IN  NS     ns1.mycompany.com.
@                       1800  IN  MX 10  mx1.mycompany.com.

ns1.mycompany.com.      1800  IN  A      189.56.201.21
ns1.mycompany.com.      1800  IN  AAAA   2001:db8::f:a
www.mycompany.com.      1800  IN  A      188.156.21.2
www.mycompany.com.      1800  IN  AAAA   2001:db8::1:2

Abkürzungen ohne den Zonennamen

Tritt der Origin am Ende eines Namens aufg, dann kann er weggelassen werden. Man beachte den Unterschied, der durch den weggelassenen Punkt am Ende des Namens entsteht:
Namen mit anhängendem Punkt sind vollqualifiziert, und Namen ohne Punkt sind immer relativ zur Origin, wie in dem Beispiel zu sehen ist.

@              IN SOA ns1.mycompany.com. hosmaster@mycompany.com. (
                                         2014120501    ; Serial
                                                 3H    ; refresh after 3 hours
                                                 1H    ; retry after 1 hour
                                                 1W    ; expire after 1 week
                                                 1D)   ; minimum TTL of 1 day

@                       1800  IN  A       188.156.21.2
@                       1800  IN  NS     ns1.mycompany.com.
@                       1800  IN  MX 10  mx1.mycompany.com.

ns1                     1800  IN  A      189.56.201.21
ns1                     1800  IN  AAAA   2001:db8::f:a
www                     1800  IN  A      188.156.21.2  ;Wird zu www.mycompany.com. aufgelöst.
www.mycompany.com.      1800  IN  A      188.156.21.2  ;Wegen dem Fehlen des Punktes wird nach
                                                       ; www.mycompany.com.mycompany.com aufgelöst.


Mehrere Resource Records mit gleichem Namen

Haben zwei oder mehr aufeinanderfolgende Ressource Records den gleichen Namen, so braucht nur der Erste angegeben zu werden.

@              IN SOA ns1.mycompany.com. hosmaster@mycompany.com. (
                                         2014120501    ; Serial
                                                 3H    ; refresh after 3 hours
                                                 1H    ; retry after 1 hour
                                                 1W    ; expire after 1 week
                                                 1D)   ; minimum TTL of 1 day

@                       1800  IN  A       188.156.21.2
@                       1800  IN  NS     ns1.mycompany.com.
@                       1800  IN  MX 10  mx1.mycompany.com.

ns1.mycompany.com.      1800  IN  A      189.56.201.21
                        1800  IN  AAAA   2001:db8::f:a
www.mycompany.com.      1800  IN  A      188.156.21.2
                        1800  IN  AAAA   2001:db8::1:2

Klassenfeld „IN“

Das Klassenfeld „IN“ braucht nur beim ersten RR angegeben zu werden.

@              IN SOA ns1.mycompany.com. hosmaster@mycompany.com. (
                                         2014120501    ; Serial
                                                 3H    ; refresh after 3 hours
                                                 1H    ; retry after 1 hour
                                                 1W    ; expire after 1 week
                                                 1D)   ; minimum TTL of 1 day

@                       1800  A       188.156.21.2
@                       1800  NS     ns1                  ; Die Namen dürfen hier
@                       1800  MX 10  mx1               ; weggelassen werden.

ns1                     1800  A      189.56.201.21
www                     1800  A      188.156.21.2 

Time to live(TTL)

Mit der $TTL-Anweisung kann ein Default-TTL-Wert vorgegeben werden.

$TTL    3600
@              IN SOA ns1.mycompany.com. hosmaster@mycompany.com. (
                                         2014120501    ; Serial
                                                 3H    ; refresh after 3 hours
                                                 1H    ; retry after 1 hour
                                                 1W    ; expire after 1 week
                                                 1D)   ; minimum TTL of 1 day

$ORIGIN

Standard-Origin ist der Zonenname, wie er in der Datei named.conf.local definiert wurde. Mit der $ORIGIN-Anweisung können beliebige andere Origins definiert werden. Ein neu definierter Origin ist für alle folgenden Zeilen bis zur nächsten $ORIGIN-Anweisung gültig.

@              IN SOA ns1.mycompany.com. hosmaster@mycompany.com. (
                                         2014120501    ; Serial
                                                 3H    ; refresh after 3 hours
                                                 1H    ; retry after 1 hour
                                                 1W    ; expire after 1 week
                                                 1D)   ; minimum TTL of 1 day

@                       1800  A       188.156.21.2
@                       1800  NS     ns1                
@                       1800  MX 10  mx1

ns1                     1800  A      189.56.201.21
www                     1800  A      188.156.21.2
$ORIGIN sub.mycompany.com.
host                          A      188.152.23.44   ; Wird zu host.sub.mycompany.com

$INCLUDE

Mit $INCLUDE-Anweisungen können weitere Dateien eingebunden werden. Diese müssen natürlich eine korrekte Syntax aufweisen. Die $INCLUDE-Anweisung hat nur lokale Bedeutung. Beim Zonentransfer wird die expandierte Zone übertragen.

@            IN  SOA  ns1 mailbox 100 300 100 6000 1800
             NS   ns1

ns1          A    189.56.201.21
$INCLUDE     /var/lib/bind/mx-records.txt
$INCLUDE     /var/lib/bind/a-records.txt

Zonendatei generieren lassen

Unter diesem Webportal kann man sich die Zonendatei und den passenden name.conf-Eintrag generieren lassen.