Beispiel: Eine Domain zusammensetzen¶
Dieser Walkthrough zeigt Schritt für Schritt, wie aus einem Konfigurationseintrag und
den modularen Includes ein vollständiges Zone-File entsteht. Alle Daten sind
anonymisiert (example.com, RFC-5737-Adressen wie 198.51.100.x, 2001:db8::/32) und
stammen aus dem mitgelieferten Datensatz
samples/.
Der Konfigurationseintrag¶
"example.com": {
"template": "standard.tpl",
"mail": "example-provider",
"www": "example-provider",
"xmpp": "example-provider",
"registrar": "Hetzner",
"subdomains": ["blog", "dev"],
"custom_groups": ["shared-hosting"]
}
Aus diesem Eintrag entscheidet dnsjinja, welche Includes eingebunden werden:
| Feld | Wert | eingebundener Include |
|---|---|---|
mail |
example-provider |
include/mail/mail_example-provider.inc |
www |
example-provider |
include/www/www_example-provider.inc |
xmpp |
example-provider |
include/xmpp/xmpp_example-provider.inc |
| (Domainname) | example.com |
include/custom/example.com.inc (automatisch) |
custom_groups |
shared-hosting |
include/custom-groups/shared-hosting.inc |
| (aus Mail-Include) | example.com |
include/validation/example.com.inc (falls vorhanden) |
registrar |
Hetzner |
TXT-Record registrar |
subdomains |
blog, dev |
je ein eigener Zonen-Abschnitt |
SOA und NS kommen aus den Standard-Providern (soa_hetzner, ns_hetzner), da kein
soa/ns-Override gesetzt ist.
Die Bausteine¶
; MX records
@ IN MX 10 mx1.mail.example.
@ IN MX 20 mx2.mail.example.
; Mail client auto-configuration
autoconfig IN CNAME mail.example.
_autodiscover._tcp IN SRV 0 0 443 mail.example.
; SPF
@ IN TXT "v=spf1 include:mail.example ~all"
; DKIM
selector1._domainkey IN CNAME selector1._domainkey.mail.example.
selector2._domainkey IN CNAME selector2._domainkey.mail.example.
; DMARC
_dmarc IN TXT "v=DMARC1;p=none;rua=mailto:postmaster@{{domain}}"
; bindet validation/<domain>.inc ein, falls vorhanden
{% set inc = 'include/validation/' + domain + '.inc' %}
{% include inc ignore missing +%}
{{domain}} wird beim Rendern durch den aktuellen Domainnamen ersetzt – bei der
Hauptdomain example.com., bei der Subdomain blog.example.com. usw. So funktioniert
derselbe Baustein (etwa die *-Wildcard der Shared Group) für Haupt- und Subdomains.
Das gerenderte Zone-File¶
dnsjinja -d samples -c samples/config.json.sample --dry-run erzeugt für die
Hauptdomain:
$ORIGIN example.com.
$TTL 300
; SOA record for Hetzner DNS
@ IN SOA hydrogen.ns.hetzner.com. dns.hetzner.com. 2026010101 86400 10800 3600000 3600
; Hetzner nameservers
@ IN NS helium.ns.hetzner.de.
@ IN NS hydrogen.ns.hetzner.com.
@ IN NS oxygen.ns.hetzner.com.
; MX records
@ IN MX 10 mx1.mail.example.
@ IN MX 20 mx2.mail.example.
; Mail client auto-configuration
autoconfig IN CNAME mail.example.
_autodiscover._tcp IN SRV 0 0 443 mail.example.
; SPF
@ IN TXT "v=spf1 include:mail.example ~all"
; DKIM
selector1._domainkey IN CNAME selector1._domainkey.mail.example.
selector2._domainkey IN CNAME selector2._domainkey.mail.example.
; DMARC
_dmarc IN TXT "v=DMARC1;p=none;rua=mailto:postmaster@example.com"
; Domain ownership validation
a1b2c3d4e5f6 IN TXT "verification=abc123def456"
; XMPP
_xmpp-client._tcp 3600 IN SRV 0 5 5222 xmpp.example.
_xmpp-server._tcp 3600 IN SRV 0 5 5269 xmpp.example.
; Web server
@ IN A 198.51.100.10
www IN A 198.51.100.10
; custom/example.com.inc
calendar IN CNAME ghs.example.
docs IN CNAME ghs.example.
vpn IN A 198.51.100.20
vpn IN AAAA 2001:db8::20
; custom-groups/shared-hosting.inc
@ 3600 IN A 198.51.100.50
* 3600 IN CNAME example.com.
webmail 3600 IN CNAME www
registrar IN TXT Hetzner
Direkt im Anschluss folgen die Subdomains. Sie durchlaufen dieselben Provider-Includes,
aber mit angepasstem $ORIGIN – und ohne SOA/NS, da diese nur zur Hauptzone gehören:
$ORIGIN blog.example.com.
$TTL 300
@ IN MX 10 mx1.mail.example.
@ IN MX 20 mx2.mail.example.
autoconfig IN CNAME mail.example.
...
@ 3600 IN A 198.51.100.50
* 3600 IN CNAME blog.example.com.
webmail 3600 IN CNAME www
registrar IN TXT Hetzner
Die anderen beiden Beispiel-Domains¶
example.org (Mail + Web, kein XMPP, keine Subdomains, kein Custom):
$ORIGIN example.org.
$TTL 300
@ IN SOA hydrogen.ns.hetzner.com. dns.hetzner.com. 2026010101 86400 10800 3600000 3600
@ IN NS helium.ns.hetzner.de.
@ IN NS hydrogen.ns.hetzner.com.
@ IN NS oxygen.ns.hetzner.com.
@ IN MX 10 mx1.mail.example.
@ IN MX 20 mx2.mail.example.
autoconfig IN CNAME mail.example.
_autodiscover._tcp IN SRV 0 0 443 mail.example.
@ IN TXT "v=spf1 include:mail.example ~all"
selector1._domainkey IN CNAME selector1._domainkey.mail.example.
selector2._domainkey IN CNAME selector2._domainkey.mail.example.
_dmarc IN TXT "v=DMARC1;p=none;rua=mailto:postmaster@example.org"
@ IN A 198.51.100.10
www IN A 198.51.100.10
registrar IN TXT Namecheap
example.net (geparkt – nur SOA, NS und Registrar):
$ORIGIN example.net.
$TTL 300
@ IN SOA hydrogen.ns.hetzner.com. dns.hetzner.com. 2026010101 86400 10800 3600000 3600
@ IN NS helium.ns.hetzner.de.
@ IN NS hydrogen.ns.hetzner.com.
@ IN NS oxygen.ns.hetzner.com.
registrar IN TXT GoDaddy
Eigene Daten ableiten¶
Um daraus eine echte Konfiguration zu machen:
samples/kopieren und die Platzhalter-Domains durch eigene ersetzen.- Pro Mail-/Web-/XMPP-Provider den passenden Include unter
include/<kategorie>/anlegen (siehe Template-Architektur). - Domain-spezifische Records in
include/custom/<domain>.inc, geteilte ininclude/custom-groups/<name>.inc. - Mit
--dry-runprüfen, dann mit-b -w -uausspielen (siehe Schnellstart).