Das Format einer Zonendatei ist in RFC 1035 (Abschnitt 5) und RFC 1034 (Abschnitt 3.6.1) definiert. Dieses Format wurde ursprünglich vom Softwarepaket Berkeley Internet Name Domain (BIND) verwendet, wurde aber auch von anderen DNS-Servern übernommen – obwohl einige von ihnen (z. B. NSD, PowerDNS) die Zonendateien nur als Ausgangspunkt für die Kompilierung in ein Datenbankformat verwenden, siehe auch Microsoft DNS mit Active Directory-Datenbankintegration.
Eine Zonendatei ist eine Folge von zeilenorientierten Einträgen, von denen jeder entweder eine Direktive oder eine Textbeschreibung ist, die einen einzelnen Resource Record (RR) definiert. Ein Eintrag besteht aus Feldern, die durch eine beliebige Kombination von Leerzeichen (Tabulatoren und Leerzeichen) getrennt sind, und endet an einer Zeilengrenze, es sei denn, es handelt sich um einen in Anführungszeichen gesetzten Feldwert oder ein Paar einschließender Formatierungsklammern. Jede Zeile kann mit einem Kommentartext enden, dem ein Semikolon vorangestellt ist, und die Datei kann auch eine beliebige Anzahl von Leerzeilen enthalten.
Einträge können in beliebiger Reihenfolge in einer Zonendatei vorkommen, mit einigen Ausnahmen.
Direktiven sind Steuereinträge, die den Rest der Zonendatei beeinflussen. Das erste Feld einer Direktive besteht aus einem Dollarzeichen, gefolgt von einem Schlüsselwort:
- $ORIGIN, gefolgt von einem Domainnamen, der als Ursprung für nachfolgende relative Domainnamen verwendet werden soll.
- $INCLUDE, gefolgt von einem Dateinamen und einem optionalen Ursprungsdomainnamen, der bei der Interpretation des Inhalts verwendet werden soll (der so behandelt wird, als ob er in der übergeordneten Datei stünde, gefolgt von einer Rücksetzung auf den Ursprungswert vor der Auswertung der Direktive).
- $TTL, definiert in RFC 2308 (Abschnitt 4), gefolgt von einer Zahl, die als Standard-TTL (time-to-live) verwendet werden soll.
- $GENERATE, eine Nicht-Standard-Erweiterung, die von BIND und einigen anderen Nameservern akzeptiert wird, um mehrere Ressourcendatensätze mit einem Eintrag einzufügen, gefolgt von einer prägnanten Darstellung einer aufsteigenden Folge von nicht-negativen Zahlen und einem RR-Vorlageneintrag. Für jede Zahl in der Folge wird ein Ressourcendatensatz hinzugefügt, wobei die Schablone verwendet wird und die uneingeschriebenen „$“-Zeichen durch die Zahl ersetzt werden.
Ein Ressourcendatensatz-Eintrag besteht aus mehreren Feldern wie folgt (beide Feldreihenfolgen sind zulässig und können austauschbar verwendet werden):
Name | ttl | Datensatzklasse | Datensatztyp | Datensatzdaten |
Name | Datensatzklasse | ttl | Datensatztyp | Datensatzdaten |
Das Namensfeld kann leer gelassen werden. Ist dies der Fall, übernimmt der Datensatz das Feld vom vorherigen Datensatz. Ein freistehendes @ wird verwendet, um den aktuellen Ursprung zu kennzeichnen.
Das ttl-Feld gibt die Anzahl der Sekunden an, nach denen ein Caching-Client den Datensatz verwerfen und einen neuen Auflösungsvorgang durchführen muss, um neue Informationen zu erhalten. Einige Nameserver, darunter BIND, erlauben nicht standardisierte Darstellungen, die Abkürzungen für Zeiteinheiten verwenden (z. B. „2d“ für zwei 24-Stunden-Tage oder „1h30m“ für eine Stunde und 30 Minuten). Es kann weggelassen werden, in diesem Fall wird der resultierende Wert aus der Standard-TTL (falls definiert) oder aus dem vorhergehenden Datensatz gesetzt.
Das Feld record class gibt den Namensraum der Datensatzinformationen an. Es kann weggelassen werden, in diesem Fall wird der resultierende Wert aus dem vorhergehenden Datensatz gesetzt. Der am häufigsten verwendete Namensraum ist der des Internets, angegeben durch den Parameter IN, aber es gibt auch andere und sie werden verwendet, z. B. CHAOS.
Das Datensatztypfeld ist eine Abkürzung für die Art der im letzten Feld, den Datensatzdaten, gespeicherten Informationen. Beispiel: Ein Adresseintrag (Typ A für IPv4 oder Typ AAAA für IPv6) ordnet den Domänennamen aus dem ersten Feld einer IP-Adresse in den Eintragsdaten zu; ein Mail-Exchanger-Eintrag (Typ MX) gibt den SMTP-Mail-Host (Simple Mail Transfer Protocol) für eine Domäne an.
Das Eintragsdatenfeld kann aus einem oder mehreren Informationselementen bestehen, je nach den Anforderungen des jeweiligen Eintragstyps. Ein Adressdatensatz erfordert zum Beispiel nur eine Adresse, während ein Mail-Exchanger-Datensatz eine Priorität und einen Domänennamen erfordert. Solche Informationselemente werden als durch Leerzeichen getrennte Felder dargestellt.
BeispieldateiBearbeiten
Ein Beispiel für eine Zonendatei für die Domäne example.com sieht folgendermaßen aus:
$ORIGIN example.com. ; designates the start of this zone file in the namespace$TTL 3600 ; default expiration time (in seconds) of all RRs without their own TTL valueexample.com. IN SOA ns.example.com. username.example.com. ( 2020091025 7200 3600 1209600 3600 )example.com. IN NS ns ; ns.example.com is a nameserver for example.comexample.com. IN NS ns.somewhere.example. ; ns.somewhere.example is a backup nameserver for example.comexample.com. IN MX 10 mail.example.com. ; mail.example.com is the mailserver for example.com@ IN MX 20 mail2.example.com. ; equivalent to above line, "@" represents zone origin@ IN MX 50 mail3 ; equivalent to above line, but using a relative host nameexample.com. IN A 192.0.2.1 ; IPv4 address for example.com IN AAAA 2001:db8:10::1 ; IPv6 address for example.comns IN A 192.0.2.2 ; IPv4 address for ns.example.com IN AAAA 2001:db8:10::2 ; IPv6 address for ns.example.comwww IN CNAME example.com. ; www.example.com is an alias for example.comwwwtest IN CNAME www ; wwwtest.example.com is another alias for www.example.commail IN A 192.0.2.3 ; IPv4 address for mail.example.commail2 IN A 192.0.2.4 ; IPv4 address for mail2.example.commail3 IN A 192.0.2.5 ; IPv4 address for mail3.example.com
Die Zonendatei muss mindestens den SOA-Datensatz (Start of Authority) mit dem Namen des autoritativen Master-Namensservers für die Zone und die E-Mail-Adresse einer für die Verwaltung des Namensservers verantwortlichen Person (dargestellt als Domänenname mit einem Punkt anstelle des üblichen @-Zeichens) angeben. Die Parameter des SOA-Datensatzes enthalten auch eine Liste von Zeit- und Ablaufparametern (Seriennummer, Slave-Aktualisierungszeitraum, Slave-Wiederholungszeit, Slave-Ablaufzeit und die maximale Zeit für die Zwischenspeicherung des Datensatzes). Einige Nameserver, darunter BIND, benötigen außerdem mindestens einen zusätzlichen NS-Eintrag.
In der Zonendatei sind Domänennamen, die mit einem Punkt enden (wie „example.com.“ im obigen Beispiel), voll qualifiziert, während diejenigen, die nicht mit einem Punkt enden, relativ zum aktuellen Ursprung sind (weshalb www im obigen Beispiel auf www.example.com verweist).