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 sind zulässig und werden nicht als Syntax-Fehler gewertet, wenn der BIND-Server gestartet oder reloaded wird.
Kommentare werden durch das Zeichen „;“ eingeleitet. Alles, was rechts von einem Semikolon auftaucht, wird als Kommentar interpretiert und beim Zonentransfer nicht übertragen.
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. (
2017120501 ; 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
@ 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. (
2017120501 ; 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
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. (
2017120501 ; 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.
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. (
2017120501 ; 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
Das Klassenfeld „IN“ braucht nur beim ersten RR angegeben zu werden.
@ IN SOA ns1.mycompany.com. hosmaster@mycompany.com. (
2017120501 ; 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
Mit der $TTL-Anweisung kann ein Default-TTL-Wert vorgegeben werden.
$TTL 3600
@ IN SOA ns1.mycompany.com. hosmaster@mycompany.com. (
2017120501 ; Serial
3H ; refresh after 3 hours
1H ; retry after 1 hour
1W ; expire after 1 week
1D) ; minimum TTL of 1 day
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. (
2017120501 ; 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
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
Unter diesem Webportal kann man sich die Zonendatei und den passenden name.conf-Eintrag generieren lassen.