1. Index
  2. Debian
  3. Desktop
  4. Heimserver
  5. Webserver

Hostnamen auflösen

PowerDNS dient als authoritativer DNS-Server für die eigene Internet-Domäne. DNSSEC bildet eine Vertrauenskette von den Root-Servern über den Nameserver des Registrars bis zum eigenen Host. DANE verifiziert die von Mail- und Webservern vorgezeigten Zertifikate. DKIM beweist die Herkunft gesendeter Nachrichten.

Pakete installieren

Wir installieren den authoritativen Server, PostgreSQL als Datenbank sowie Werkzeuge für die Verwaltung von Domänen, Schlüsseln und Zertifikaten.

apt install pdns{-server,-backend-pdns-pgsql} dnsutils certbot

Bei der Installation wird auch eine SQLite3-Datenbank mit Tabellen für Domänen, Einträge, Metadaten und Schlüssel angelegt.

zone=illusioni.de
master=81.92.164.69
slave=81.92.164.70

Die bei der Installation angelegten Konfigurationsdateien unter /etc/powerdns können gelöscht oder als Referenz aufbewahrt werden.

Datenbank anlegen

Schlüssel, Domänen und Einträge speichern wir in PostgreSQL und erzeugen dafür einen Benutzer, eine Datenbank sowie das Schema.

su postgres -c "createuser --pwprompt pdns"
su postgres -c "createdb --owner pdns pdns"
psql --host localhost --user pdns --password --dbname pdns \
	--file /usr/share/pdns-backend-pgsql/schema/schema.pgsql.sql"

Daemon konfigurieren

Sowohl der primäre als auch die sekundären Server werden – bis auf die Adresse der jeweiligen Partner – identisch konfiguriert. So bestimmt die Domäne, welcher Server die Rolle des Masters und welcher die des Slaves übernimmt. Der eingebaute Webserver bietet eine einfache Webanwendung für Statusabfragen.

/etc/powerdns/pdns.conf
allow-axfr-ips=::1, 81.92.164.70 #allow-axfr-ips=::1, 81.92.164.69 dnsupdate=yes #launch=gsqlite3 #gsqlite3-database=/var/lib/powerdns/pdns.sqlite3 #gsqlite3-dnssec=on launch=gpgsql #gpgsql-host=/run/postgresql # if PostgreSQL is listening to unix socket gpgsql-host=127.0.0.1 gpgsql-port=5432 gpgsql-dbname=pdns gpgsql-user=pdns gpgsql-password=pdnssecret master=yes slave=yes webserver=yes webserver-password=Password webserver-address=127.0.0.1 webserver-port=8053

Nach Änderungen an der Konfiguration ist ein Neustart des Daemonen fällig.

systemctl restart pdns

Zonendatei erstellen

Am Anfang der Zonendatei definiert man den Namen der Domäne und einen Vorgabewert für die Vorhaltezeit. Der erste echte Eintrag (SOA) nennt den primären Nameserver und die Elektropost-Adresse für den administrativen Kontakt, wobei der erste Punkt den Klammeraffen ersetzt. Bei Änderungen darf man nicht vergessen, die Seriennummer zu inkrementieren.

/etc/powerdns/illusioni.de.zone
$ORIGIN illusioni.de. $TTL 3600 ;origin ttl class type content @ IN SOA durmstrang.illusioni.de. hostmaster.illusioni.de. ( 2017081001 ; serial 14400 ; refresh (4 hours) 3600 ; retry (1 hour) 604800 ; expire (1 week) 1800 ; minimum (30 minutes) )
Vorhaltezeit in Sekunden
# Selektor Name
1 IN Internet
3 CH Chaos (MIT Artificial Intelligence Lab, 1981)
4 HS Hesiod (MIT Projekt Athena, 1987)
254NONE Keine (Anfrage)
255* Alle (Anfrage)
# Typ Beschreibung
1 A Zuordnung einer IPv4-Adresse
2 NS Authoritativer Nameserver
5 CNAME Kanonischer Name, z.B. www oder mail
6 SOA Administrativer Kontakt und Seriennummer
15 MX Server für elektronische Post, zeigt auf Eintrag vom Typ A.
16 TXT Öffentlicher Schlüssel für gesendete Nachrichten
28 AAAA Zuordnung einer IPv6 Adresse
33 SRV Allgemeine Dienste, zeigt auf Eintrag vom Typ A
46 RSSIG Prüfsumme für einen anderen Datensatz
48 DNSKEY Öffentlicher Zonenschlüssel
50 NSEC3 Beweis der Nicht-Existenz eines Names
52 TLSA Prüfsumme für Zertifikat
257CAAErlaubte Zertifizierungsstellen

Es folgen für die gesamt Domäne relevanten Name- und Mailserver.

; Service			prio host
@		IN	NS	durmstrang.illusioni.de.
@		IN	NS	ilvermorny.illusioni.de.
@		IN	MX	10 durmstrang.illusioni.de.
@		IN	MX	20 ilvermorny.illusioni.de.

Der SPF-Eintrag legt in unserem Fall fest, das nur Hosts Nachrichten versenden dürfen, die auch einen MX-Eintrag haben.

@		IN	TXT	v=spf1 mx -all

Die CAA-Einträge legen fest, dass wir ausschlißelich Zertifikate von Let's Encrypt verwenden.

@		IN	CAA	0 iodef "mailto:hostmaster@illusioni.de"
@		IN	CAA	0 issue "letsencrypt.org"
@		IN	CAA	0 issuewild "letsencrypt.org"

Zuordnung von Hostnamen zu IPv4- und IPv6-Adressen ist der ursprünglicher Zweck.

; IPv4-Address
@		IN	A	81.92.164.69
@		IN	AAAA	2001:1b18:a1::69
durmstrang	IN	A	81.92.164.69
durmstrang	IN	AAAA	2001:1b18:a1::69
ilvermorny	IN	A	81.92.164.70
ilvermorny	IN	AAAA	2001:1b18:a1::70

Kanonische Hostnamen haben sich für bestimmte Dienste eingebürgert.

; Alias
mail		IN	CNAME	durmstrang
www		IN	CNAME	durmstrang

Service-Einträge legen fest, wo welche Dienste laufen. Es dürfen nur echte Hostnamen (A) angegeben werden. Aliase (CNAME) sind nicht erlaubt.

; Service			prio weight port host
_ldap._tcp	IN	SRV	0 0 389	durmstrang.illusioni.de.
_smtp._tcp	IN	SRV	0 0 25	durmstrang.illusioni.de.
_imap._tcp	IN	SRV	0 0 143	durmstrang.illusioni.de.
_submission._tcp IN	SRV	0 1 587	durmstrang.illusioni.de.
_http._tcp	IN	SRV	0 0 80	durmstrang.illusioni.de.
_https._tcp	IN	SRV	0 0 443	durmstrang.illusioni.de.
_kerberos-adm._tcp IN	SRV 1 0 749 durmstrang
_kerberos._udp	IN	SRV	0 0 88	durmstrang.illusioni.de.
_kerberos._tcp	IN	SRV	0 0 88	durmstrang.illusioni.de.
_kerberos._udp	IN	SRV	0 0 88	ilvermorny.illusioni.de.
_kerberos._tcp	IN	SRV	0 0 88	ilvermorny.illusioni.de.
_kpasswd._udp	IN	SRV	0 0 464	durmstrang.illusioni.de.
_kerberos	IN	TXT	ILLUSIONI.DE

Zuletzt hinterlegen die Hostschlüssel für die Secure Shell und ersparen uns so die Pflege und Verteilung einer known_hosts-Datei.

ssh-keygen -r durmstrang >> /etc/powerdns/$zone.zone
durmstrang.illusioni.de. IN SSHFP 1 1 deef2f21c9cd27987461b5044b5ae4b52eee7902
…
# Schlüssel
1 RSA
2 DSS
3 ECDSA
4 ED25519
# Prüfsumme
1 SHA-1
2 SHA-256

Nun importieren wir die vorbereitete Zonendatei in die Datenbank.

pdnsutil load-zone $zone /etc/powerdns/$zone.zone

Alle weitern Änderungen nehmen wir direkt in der Datenbank vor oder verwenden das Werkzeug, um sie im Texteditor zu bearbeiten.

pdnsutil edit-zone $zone

Zone digital signieren

Nun wollen wir die Zone per DNSSEC absichern. Folgender Aufruf erzeugt alle benötigten Schlüssel und speichert sie in der Tabelle cryptokeys.

pdnsutil secure-zone $zone
pdnsutil set-nsec3   $zone '1 0 1 ab'
1 = SHA1 Algorithmus
0 = Aktiv Flag
1 = Eine Iteration
ab = Salt (- für Keines)

Der Daemon synthetisiert für alle Einträge die zugehörigen RSSIG- und NSEC3-Einträge und liefert DNSKEY-Einträge für ZSK und KSK.

pdnsutil show-zone   $zone
KSK, tag = 24111, algo = 13, bits = 256
DNSKEY = illusioni.de. IN DNSKEY 257 3 13 baSE64enC0dEdPuBl1cK3y; ( ECDSAP256SHA256 )
DS = illusioni.de. IN DS 24111 13 1 sHa1diGEsT    ; ( SHA1 digest )
DS = illusioni.de. IN DS 24111 13 2 Sha256dIg3st  ; ( SHA256 digest )
DS = illusioni.de. IN DS 24111 13 3 g0sTr34d1geSt ; ( GOST R 34.11-94 digest )
DS = illusioni.de. IN DS 24111 13 4 ShA384diGesT  ; ( SHA-384 digest )
# Flag
256ZSK
257KSK
# Protokoll
1 TLS
2 Elektropost
3 DNSSEC
4 IPsec
255Alle
# Verschlüsselungsverfahren
1 RSA/MD5
2 Diffie Hellman
3 DSA/SHA-1
4 Elliptische Kurven
5 RSA/SHA-1
6 DSA/SHA-1/NSEC3
7 RSA/SHA-1/NSEC3
8 RSA/SHA-256
10 RSA/SHA-512
12 ECC-GOST
13 ECDSA/Curve P-256/SHA-256
14 ECDSA/Curve P-384/SHA-384

Um die Vertrauenskette zu vervollständigen, hinterlegen wir die Prüfsumme des KSK in Form von DS-Einträgen beim Registrar, der dafür eine Webanwendung zur Verfügung stellen sollte. Wenn alles funktioniert, enthalten Antworten das ad-Flag.

dig @localhost $zone DNSKEY
;; flags: qr aa ad; QUERY: 1, ANSWER: 2, AUTHORITY: 7, ADDITIONAL: 1
Global Default Beschreibung
aa authoritative answer Antwort direkt vom authoritativen Server
ad authenticated data Nameserver hatte Trust Anchor
do dnssec ok Antwort ist valide
rd recursion desired Client fragt rekursive Auflösung an
ra recursion available Server ermöglicht rekursive Auflösung

Zertifikate ausstellen

Certbot automatisiert die Verwaltung von Zertifikaten. Let's Encrypt stellt sogenannte Wildcard-Zertifikate aber nur per DNS-Challenge aus. Dazu übergibt certbot den Domainnamen und ein zufälliges Token an ein Skript, welches per dynamischem nsupdate einen entsprechenden Text-Einträg anlegt.

/etc/powerdns/lets-encrypt.sh
nsupdate << . server 127.0.0.1 update delete _acme-challenge.$CERTBOT_DOMAIN TXT update add _acme-challenge.$CERTBOT_DOMAIN 60 TXT $CERTBOT_VALIDATION send . sleep 30

Nun beantragen wir das eigentliche Zertifikat. Die Domäne selbst wird als Subject eingetragen und alle Subdomänen per Wildcard als Subject Alternative Name.

certbot certonly \
	--manual \
	--preferred-challenges=dns \
	--manual-auth-hook /etc/powerdns/lets-encrypt.sh \
	-d "$zone,*.$zone"

Damit Besucher unserer Webseiten das vorgezeigte Zertifikat via DANE verifizieren können, bilden wir eine Prüfsumme und stellen diese in einem TLSA-Eintrag zur Verfügung.

cert=/etc/letsencrypt/live/$zone/cert.pem
hash=$(openssl x509 -in $cert -outform DER | openssl sha256 -r)
add-record $zone  _25._tcp.mail IN TLSA 3 0 1 ${hash% *}
add-record $zone _443._tcp.www  IN TLSA 3 0 1 ${hash% *}
# Name Verwendung
0 PKIX-TA Zertifikat muss in der Kette auftauchen
1 PKIX-EE Wurzelzertifikat, gegen das die CA-Kette validiert
2 DANE-TA Zertifikat, mit dem der Schlüssel signiert sein muß
3 DANE-EE Öffentlicher Schlüssel des Servers
# Selektor
0 Das ganze Zertifikat
1 Der öffentliche Schlüssel
# Selektor
0 Die selektierten Daten selbst
1 SHA-256 Prüfsumme
2 SHA-512 Prüfsumme

Ausgehende Nachrichten werden später per DKIM mit einem RSA-Schlüssel signiert. Den öffentlichen Schlüssel stellen wir als Text-Eintrag zur Verfügung. Die Nummer des Selektors (mail1) wird hochgezählt, wenn wir neue Schlüssel erzeugen.

openssl genrsa -out /etc/ssl/dkim.key 2048
openssl rsa     -in /etc/ssl/dkim.key -pubout -outform PEM
-----BEGIN PUBLIC KEY-----
dK1mpUbl1ck3Y…
-----END PUBLIC KEY-----
add-record $zone mail1._domainkey IN TXT "v=dkim1; h=sha256; k=rsa; p=dK1mpUbl1ck3Y…"

Dynamische Adressen aktualisieren

Damit wir auch vom Büro aus oder auf Reisen unser Heimnetzwerk unter einem schönen Namen wie fnord.illusioni.de erreichen, registrieren wir dynamisch zugewiesene Adressen durch Aufruf eines Skripts.

/etc/powerdns/ddns-update.sh
type=A [[ "$REMOTE_ADDR" =~ ^2...: ]] && type=AAAA nsupdate << . server 127.0.0.1 update delete $QUERY_STRING $type update add $QUERY_STRING 60 $type $REMOTE_ADDR send .

Authentifizierung erfolgt durch den Apache Webserver, indem man diese Konfiguration einbindet:

/etc/powerdns/apache.conf
ScriptAlias /ddns /etc/powerdns/ddns-update.sh <Location /ddns> Require valid-user AuthName "Dynamic DNS" AuthType Basic AuthBasicProvider ldap AuthLDAPURL "ldap://localhost/ou=users,dc=illusioni,dc=de?uid" AuthLDAPBindDN "cn=apache,ou=daemons,dc=illusioni,dc=de" AuthLDAPBindPassword "Password" </Location>

Referenz für die Konfiguration

Diese Auflistung soll nur einen Überblick über die verfügbaren Kommandos und Optionen vermitteln und erhebt keinen Anspruch auf Vollständigkeit. Als authoritative Quelle gelten nur die Manpages und die offizielle Dokumentation. Alle Direktiven werden in pdns.conf(5) ausführlich beschrieben.

Global Default Beschreibung
8bit-dns = no Nicht-ASCII erlauben
allow-axfr-ips = 127.0.0.0/8, ::1 Partner für Domänen-Transfers
allow-notify-from = 0.0.0.0/0, ::/0 Partner für Benachrichtigungen
allow-recursion= 0.0.0.0/0 (obsolet)
allow-unsigned-notify = yes Benachrichtigung ohne TSIG erlauben
allow-unsigned-supermaster = yes
also-notify = Weitere Hosts benachrichtigen
any-to-tcp = yes
api = no HTTP-API aktivieren
api-key = Uuid API-Schlüssel
api-logfile = /var/log/pdns.log Pfad der Protokolldatei
api-readonly = no Änderungen verbieten
cache-ttl = 20 Vorhaltezeit für Einträge im Cache
carbon-interval = 30 Wartezeit zwischen Aktualisierungen
carbon-ourname = Host Name der Instanz
carbon-server = IpAddress Adresse des Servers
chroot = Dir Changeroot verwenden
config-dir = /etc/powerdns Verzeichnis der Konfiguration
config-name = Name Virtuelle Konfiguration
control-console = no Debugging
daemon = no Prozess daemonisieren
default-ksk-algorithms = ecdsa256 Algorithmus für Zonenschlüssel
default-ksk-size = 0 Bits passend zum Algorithmus wählen
default-soa-edit = Metadaten für SOA-EDIT setzen
default-soa-edit-signed = Dito für signierte Zonen
default-soa-mail= Vorgabe für Elektropost
default-soa-name = a.misconfigured.powerdns.server
default-ttl = 3600 Vorgabe für Vorhaltezeit
default-zsk-algorithms = Algorithmus für Zonenschlüssel
default-zsk-size = 0 Bits passend zum Algorithmus wählen
direct-dnskey = no Weitere Zonenschlüssel aus DNSKEY-Einträgen lesen
disable-axfr = no Zonentransfers unterbinden
disable-axfr-rectify = no Automatische Korrektur unterbinden
disable-syslog = no Nur auf Standardausgabe protokollieren
disable-tcp = no Nur UDP-Pakete senden
distributor-threads = 3 Anzahl der Hintergrund-Threads
dname-processing = no CNAME- aus DNAME-Einträgen bilden
dnssec-key-cache-ttl = 30 Vorhaltezeit für Zonenschlüssel
dnsupdate = no Dynamische Aktualisierung erlauben
allow-dnsupdate-from = 127.0.0.0/8, ::1 Partner für dynamische Aktualisierung
forward-dnsupdate = yes Master benachrichtigen
do-ipv6-additional-processing= yes Zusätzlich immer AAAA-Einträge mitsenden
domain-metadata-cache-ttl = 60 Vorhaltezeit für Metadaten
edns-subnet-processing = no
entropy-source = /dev/urandom Enropiequelle
guardian = no Überwachungsprozess starten
gsqlite3-database = File Pfad der SQLite Datenbank
gsqlite3-dnssec = on
include-dir = Dir Weitere .conf-Dateien laden
launch = backendDatenbank-Prozesse starten
load-modules = File[, …] Datenbank-Module laden
local-address = 0.0.0.0 Auf diesen IPv4-Adressen lauschen
local-address-nonexist-fail= yes Prozess gegebenenfalls beenden
local-ipv6 = :: Auf diesen IPv6-Adressen lauschen
local-ipv6-nonexist-fail = yes Prozess gegebenenfalls beenden
local-port = 53 Auf diesem Port lauschen
log-dns-details = no Details protokollieren
log-dns-queries = no Anfragen protokollieren
logging-facility = facility Syslog-Einrichung
loglevel = 4 Syslog-Loglevel
lua-prequery-script = File
master = no Betrieb als Master ermöglichen
slave = no Betrieb als Slave ermöglichen
slave-cycle-interval = 60
max-cache-entries = 1000000 Ein Million Anfragen speichern
max-ent-entries = 100000 Obergrenze für Begriffe pro Zone
max-nsec3-iterations = 500 Obergrenze für NSEC3-Iterationen
max-queue-length = 5000 Obergrenze für Datenbankanfragen
max-signature-cache-entries= Obergrenze für Einträge im Signatur-Cache
max-tcp-connections = 20 Obergrenze für Anfragen per TCP
module-dir = $PKGLIBDIR Verzeichnis für Module
negquery-cache-ttl = 60 Vorhaltezeit für negative Antworten
no-shuffle = off Antworten nicht mischen
non-local-bind = no
only-notify = 0.0.0.0/0,::/0 Nur bestimmte Hosts benachrichtigen
outgoing-axfr-expand-alias = no
overload-queue-length = 0
prevent-self-notification = yes Nicht sich selbst benachrichtigen
query-cache-ttl = 20 Vorhaltezeit für Antworten
query-local-address = 0.0.0.0 IPv4-Adresse für ausgehende Anfragen
query-local-address6 = :: IPv6-Adresse für ausgehende Anfragen
query-logging = no Ausgehende Anfragen protokollieren
queue-limit = 1500 Millisekunden
receiver-threads = 1 Initiale Anzahl Threads
recursor = no Rekursive Anfragen senden
recursive-cache-ttl = 10
retrieval-threads = 2 Anzahl Threads für AXFR
reuseport = no
security-poll-suffix = secpoll.powerdns.com. Quelle für Sicherheits-Benachrichtigungen
server-id = Host Eigener Hostname
setgid = Uid Gruppe ändern
setuid = Gid Benutzer ändern
signing-threads = 3 Anzahl Threads
slave-renotify = no
soa-expire-default = 604800
soa-minimum-ttl = 3600 Kleinstmögliche Vorhaltezeit für SOA-Einträge
soa-refresh-default = 10800
soa-retry-default = 3600
socket-dir = /var/run Verzeichnis für Sockets
tcp-control-address = IpAddress Adresse der Kontrollinstanz
tcp-control-port = 53000 Portnummer der Kontrollinstanz
tcp-control-range = 127.0.0.0/8,
10.0.0.0/8,
192.168.0.0/16,
172.16.0.0/12,
::1/128,
fe80::/10
Zulässige Adressbereiche
tcp-control-secret = Password Passwort für pdns_control
traceback-handler = yes
trusted-notification-proxy = IpAddress Proxy für eingehende Benachrichtigungen
udp-truncation-threshold = 1680
version-string = full
webserver = no Eingebauten HTTP-Server aktivieren
webserver-address = 127.0.0.1 Adresse des Webservers
webserver-port = 8081 Port des Webservers
webserver-allow-from = 0.0.0.0/0, ::/0 Zulässige Netzwerke
webserver-password = Password Passwort für die Anmeldung
webserver-print-arguments = no
write-pid = yes PID in Datei schreiben
xfr-max-received-mbytes = 100 Obergrenze für AXFR in Megabytes
bind
gmysql
remote
DAEMON
USER
AUTH
LOCAL[0-7]
QUIET
FATAL
ERROR
INFO
VERBOSE
DEBUG
DEBUG1
DEBUG2
DEBUG3

Daemon steuern

Referenz für pdns_control

Kommando Argument Parameter Beschreibung
ccounts Cache-Statisituken ausgeben
current-config Aktuelle Konfiguration ausgeben
list-zones [Kind] Zonen auflisten
notify Zone Slaves benachrichtigen
notify-host Zone Host Host benachrichtigen
policy [Command] Kommando in Policy Engine ausführen
purge [Record] Zwischenspeicher löschen
qtypes QType Statistiken abfragen
quit Daemon beenden
rediscover Neue Zonen autoamtisch finden
reload Zonen neu laden
remotes Wichtigste Partner ausgeben
respsizes Histogramm der Antwortgrößen ausgeben
retrieve Zone Zone vom Master abrufen
rping Instanz anpingen
set Name Value Variable in Konfiguration setzen
show Statistic Statistik anzeigen, * für Liste
token-login Module Slot Pin Bei einer PKCS#11 Karte anmelden
uptime Laufzeit ausgeben
version Version ausgeben

Werkzeug

Referenz für pdnsutil

Kommando Argument Parameter Beschreibung
Einträge
list-zone Zone Einträge ausgeben
add-record Zone Name
Type
[Ttl]
Content
Eintrag hinzufügen
edit-zone Zone Einträge mit $EDITOR bearbeiten
clear-zone Zone Alle Einträge löschen
increase-serial Zone Seriennummer im SOA-Eintrag hochzählen
Zonen
create-zone Zone [NsName] Neue Zone erzeugen
delete-zone Zone Zone löschen
list-all-zones [Kind] Zonen auflisten
load-zone Zone File Zone aus Datei importieren
create-slave-zone Zone IpAddress Neue Slave-Zone erzeugen
set-kind Zone Kind Zone zum Master oder Slave erklären
get-meta Zone [Kind …] Metadaten der Zone ausgeben
set-meta Zone Kind [Value] … Metadaten setzen, No zum Löschen
check-zone Zone Zone auf Korrektheit prüfen
check-all-zones [exit-on-error] Alle Zonen prüfen
Transfer
list-tsig-keys Transferschlüssel auflisten
generate-tsig-key Name Algorithm Transferschlüssel generieren
import-tsig-key Name Algorithm KeyTransferschlüssel importieren
delete-tsig-key Name Transferschlüssel löschen
[de]activate-tsig-key Zone Name KindTransferschlüssel (de)aktivieren
Zonenschlüssel
show-zone Zone Öffentlichen Zonenschlüssel ausgeben
secure-zone Zone DNSSEC aktivieren
secure-all-zones [increase-serial] Alle Zonen signieren (und Seriennummer hochzählen)
add-zone-key Zone zsk|ksk
[Bits]
[active|inactive]
[Algorithm]
Zonenschlüssel erzeugen und hinzufügen
list-keys [Zone] Zonenschlüssel ausgeben
generate-zone-key zsk|ksk [Algorithm] [Bits]Zonenschlüssel erzeugen und ausgeben
[de]activate-zone-key Zone KeyId Zonenschlüssel (de)aktivieren
remove-zone-key Zone KeyId (Inaktiven) Zonenschlüssel entfernen
import-zone-key Zone File Zonenschlüssel aus Datei importieren
export-zone-key Zone KeyId Privaten Zonenschlüssel ausgeben
export-zone-dnskey Zone KeyId Öffentlichen Zonenschlüssel ausgeben
list-algorithms [with-backend] Unterstützte Algorithmen ausgeben
hash-zone-record Zone Rname NSEC3 Prüfsummen berechnen
disable-dnssec Zone Alle Zonenschlüssel deaktivieren
rectify-zone Zone DNSSEC-Einträge korrigieren
rectify-all-zones Einträge aller Zonen korrigieren
[un]set-nsec3 Zone ['Params' [narrow]] NSEC3 aktivieren
[un]set-presigned Zone RRSIG berechnen
[un]set-publish-cdnskey Zone CDNSKEY senden
[un]set-publish-cds Zone [DigestAlgorithm …] CDS senden
Unterbau
backend-cmd Backend Command Kommando ausführen
b2b-migrate Old New Daten verschieben
bench-db [File]
test-schema Zone Schema testen
delete-rrset Zone Name Type RRSET löschen
replace-rrset Zone Name Type [Ttl] RRSET ersetzen
master
Slaves über Änderungen benachrichtigen
slave
Änderungen vom Master empfangen
native
Unterbau repliziert die Daten selbst
Kind Parameter Beschreibung
ALLOW-AXFR-FROM IpAddress Partner für Zonentransfers
API-RECTIFY 1 Einträge nach Änderungen durch die HTTP-API automatisch korrigieren
AXFR-SOURCE IpAddress Ausgehende Adresse für Zonentransfers
ALLOW-DNSUPDATE-FROM IpAddress Partner für dynmische Aktualisierung
TSIG-ALLOW-DNSUPDATE Key
FORWARD-DNSUPDATE
NOTIFY-DNSUPDATE
ALSO-NOTIFY IpAddress Weitere Hosts benachrichtigen
AXFR-MASTER-TSIG Key Transferschlüssel
GSS-ALLOW-AXFR-PRINCIPAL Host@RealmPrinzipal für Zonentransfer
GSS-ACCEPTOR-PRINCIPAL Host@RealmPrinzipal für Kontextdaten
IXFR 1 Inkrementellen Zonentransfer versuchen
LUA-AXFR-SCRIPT File|NONE Skript um Zonendaten zu bearbeiten
NSEC3NARROW 1 NSEC3 im narrow-Modus betreiben
NSEC3PARAM 1 0 1 ab NSEC3PARAM-Eintrag synthetisieren
PRESIGNED 1
PUBLISH-CDNSKEY 1 CDNSKEY-Eintrag senden
PUBLISH-CDS 1 CDS-Eintrag senden
SLAVE-RENOTIFY 1
SOA-EDIT Regeln für Seriennummer
SOA-EDIT-API … per HTTP-API
SOA-EDIT-DNSUPDATE … per dynamischer Aktualisierung
TSIG-ALLOW-AXFR Key Transferschlüssel für Zonentransfers
TSIG-ALLOW-DNSUPDATE Key … für dynamische Aktualisierung
hmac-sha512
# Name Name
5 rsasha1 RSASHA1
7 RSASHA1-NSEC3-SHA1
8 rsasha256 RSASHA256
10 rsasha512 RSASHA512
13 ecdsa256 ECDSAP256SHA256
14 ecdsa384 ECDSAP384SHA384
15 ED25519

Literatur

  1. Wikipedia: Domain Name System
  2. Danman's blog: Automatic letsencrypt wildcard cert renewal with nsupdate, 2019
  3. Carsten Strotmann: DNSSEC und DANE auf Linux-Servern konfigurieren, c't, 22.11.2016
  4. VeriSign Labs: DNSSEC Analyzer
  5. Firefox Addon: DNSSEC Validator
  6. Sender Policy Framework: SPF Record Syntax
  7. RFC 1034: Domain Names - Concepts and Facilities, 1987
  8. RFC 1035: Domain Names - Implementation and Specification, 1987
  9. RFC 2181: Clarifications to the DNS Specification, 1997
  10. RFC 2782: A DNS RR for specifying the location of services (DNS SRV), 2000
  11. RFC 5155: DNS Security (DNSSEC) Hashed Authenticated Denial of Existence, 2008
  12. RFC 6594: Use of SHA-256 with RSA, DSA and ECDSA in SSHFP Resource Records, 2012
  13. RFC 6698: DNS-Based Authentication of Named Entities (DANE), 2012
  14. RFC 6844: DNS Certification Authority Authorization (CAA) Resource Record, 2013