Eine Zonendatei ist Teil der Konfiguration des Nameservers BIND für das Domain Name System. Sie besteht aus einer Liste von Resource Records (RR). Eine Zonendatei beschreibt eine Zone vollständig. 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.
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 sind zulässig.
Kommentare werden durch „;“ eingeleitet. Alles was rechts von einem „;“ auftaucht, gilt als Kommentar. Kommentare werden beim Zonentransfer nicht mit übertragen.
Soll ein Resource Record auf mehrere Zeilen verteilt werden, so müssen Klammern verwendet werden.
Beispiel:
example.com. 1800 IN SOA ns1.example.com. mailbox.example.com. (
100 ; Seriennummer
300 ; Refresh Time
100 ; Retry Time
6000 ; Expire Time
600 ; negative Caching Zeit
)
example.com. 1800 IN NS ns1.example.com.
ns1.example.com. 1800 IN A 172.27.182.17
www.example.com. 1800 IN A 192.168.1.2
xxx.external.net. 1800 IN A 1.2.3.4
Erscheint der Name der Zone – der so genannte Origin – ohne Extension isoliert, so darf er durch ein „@“ ersetzt werden.
Beispiel Datei example.com:
@ 1800 IN SOA ns1.example.com. mailbox.beispiel.de. (
100 ; Seriennummer
300 ; Refresh Time
100 ; Retry Time
6000 ; Expire Time
600 ; negative Caching Zeit
)
@ 1800 IN NS ns1.example.com.
@ 1800 IN A 1.2.3.4
alias.example.com. 1800 IN CNAME @
ns1.example.com. 1800 IN A 172.27.182.17
www.example.com. 1800 IN A 192.168.1.2
Erscheint der Origin (Name der Zonen) am Ende eines Namens, so darf er weggelassen werden.
Beispiel Zone example.com:
@ 1800 IN SOA ns1 mailbox (
100 ; Seriennummer
300 ; Refresh Time
100 ; Retry Time
6000 ; Expire Time
600 ; negative Caching Zeit
)
@ 1800 IN NS ns1
ns1 1800 IN A 172.27.182.17
www 1800 IN A 192.168.1.2
Haben zwei oder mehr aufeinanderfolgende RRs den gleichen Namen, so braucht nur der erste angegeben zu werden.
Das Klassenfeld „IN“ muss nur beim ersten RR angegeben werden.
Beispiel:
@ 1800 IN SOA ns1 mailbox (
100 ; Seriennummer
300 ; Refresh Time
100 ; Retry Time
6000 ; Expire Time
600 ; negative Caching Zeit
)
1800 NS ns1 ; der Name darf weggelassen werden
ns1 1800 A 172.27.182.17
www 1800 A 192.168.1.2
Ist in einem RR kein TTL (Time to live) vorhanden, so wird der letzte in der Zonendatei vorher vorhandene TTL-Wert verwendet. Ist vorher kein TTL vorhanden, so wird der Wert aus dem SOA Resource Record genommen.
Beispiel:
@ IN SOA ns1 mailbox 100 300 100 6000 1234
NS ns1 ; =1234 aus SOA
ns1 A 172.27.182.17 ; TTL=1234 aus SOA
www 20 A 192.168.1.2 ; ab hier gilt TTL=20
test A 1.2.3.4 ; TTL=20 aus vorherigem Eintrag
Standard-Origin ist der Dateiname ohne Extension. 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.
Beispiel Zone example.com:
@ IN SOA ns1 mailbox 100 300 100 6000 1800
NS ns1
ns1 A 172.27.182.17
www A 192.168.1.2
$ORIGIN sub.example.com.
xxx A 1.2.3.4
Mit der $TTL-Anweisung kann ein Default-TTL-Wert vorgegeben werden.
Beispiel:
$TTL 1800
@ IN SOA ns1 mailbox 100 300 100 6000 600
NS ns1
ns1 A 172.27.182.17
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.
Beispiel:
@ IN SOA ns1 mailbox 100 300 100 6000 1800
NS ns1
ns1 A 172.27.182.17
$INCLUDE /var/named/mx-records.txt
$INCLUDE /var/named/a-records.txt
Beim bekannten BIND Nameserver existiert außerdem die $GENERATE-Anweisung, mit der Resource Records automatisch erzeugt werden können.