# Zonendatei

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“).

## Regeln
### Regel 1 – Leerzeilen

Leerzeilen sind zulässig.

### Regel 2 – Kommentare

Kommentare werden durch ; (Semikolon) eingeleitet. Alles, was rechts von einem ; auftaucht, gilt als Kommentar. Kommentare werden beim Zonentransfer nicht mitübertragen.

### Regel 3 – mehrzeilige Anweisungen

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

### Regel 4 – @ als Platzhalter für Zonennamen

Erscheint der Name der Zone – der sogenannte Origin – ohne Extension isoliert, so darf er durch ein „@“ ersetzt werden.
Beispiel Datei example.com:

### Regel 5 – Zonenname darf weggelassen werden

Erscheint der Origin (Name der Zonen) am Ende eines Namens, so darf 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 man an den letzten beiden Beispielen sieht.
Beispiel Zone example.com:

### Regel 6 – nur der erste Name muss angegeben werden

Haben zwei oder mehr aufeinanderfolgende RRs den gleichen Namen, so braucht nur der erste angegeben zu werden.

### Regel 7 – „IN“ muss nur einmal angegeben werden

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

### Regel 8 – TTL

Ist in einem RR kein TTL (Time to live) vorhanden, so wird der Wert aus der „$TTL“-Variable am Anfang der Zonendatei vor dem SOA Ressource Record genommen. Vor der Bind-Version 8.2 kam dieser TTL-Wert aus dem letzten Feld im SOA Resource Record (minimum TTL), welcher ab der Bind-Version 8.2 durch die „negative caching TTL“ ersetzt wurde und der $TTL vor dem SOA-RR an dessen Stelle eingeführt wurde.
Beispiel:
Die Einheit für Zeitangaben wie z. B. TTL ist Sekunden (ersichtlich in Ripe-203). Die Spezifikation des TTL-Feldes findet sich in RFC 2308.

### Regel 9 – $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.
Beispiel: Zone example.com:

### Regel 10 – $TTL

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

### Regel 11 – $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.
Beispiel:

## Sonstiges

Beim bekannten BIND-Nameserver existiert außerdem die $GENERATE-Anweisung, mit der Resource-Records automatisch erzeugt werden können.