Zunächst muss das Paket knot-resolver installiert werden: apt-get install knot-resolver

Die Konfiguration kann anschließend über die Datei /etc/knot-resolver/kresd.conf vorgenommen werden. Dort werden DNS over TLS und DNS over HTTPS über net.listen()-Direktiven aktiviert. Für beide Protokolle sind Einträge vorhanden, welche angepasst werden können. Gegebenenfalls müssen die Kommentarzeichen in Form von zwei Minuszeichen entfernt werden. Es gibt jeweils getrennte Anweisungen für IPv4 und IPv6. Mit dem ersten Parameter kann der Service auf ein Netzwerk-Interface beschränkt werden, oder es können 0.0.0.0 (IPv4) und :: (IPv6) genutzt werden, um keine Einschränkung vorzunehmen. Die anderen Parameter legen TCP-Port und Art des Services fest (tls = DNS over TLS, doh2 = DNS over HTTPS).

Wenn beide Protokolle auf allen Netzwerk-Interfaces aktiviert werden sollen, könnte der Abschnitt „Network interface configuration“ wie folgt aussehen:

net.listen('0.0.0.0', 853, { kind = 'tls' })
net.listen('0.0.0.0', 443, { kind = 'doh2' })
net.listen('::', 853, { kind = 'tls' })
net.listen('::', 443, { kind = 'doh2' })

Der HTTP-Endpunkt für DNS over HTTPS ist mit /dns-query fest vorgegeben und kann in der Konfiguration nicht verändert werden.

Soll der Resolver ausschließlich per DoT und DoH antworten, können die Ports für unverschlüsseltes DNS deaktiviert werden. Dazu müssen die beiden Zeilen, welche Port 53 betreffen, entfernt oder auskommentiert werden:

--net.listen('127.0.0.1', 53, { kind = 'dns' })
--net.listen('::1', 53, { kind = 'dns', freebind = true })

Auch der Knot-Resolver benötigt ein TLS-Zertifikat für die Verschlüsselung. Ist das Zertifikat in der Datei /etc/ssl/server.crt und der zugehörige private Schlüssel in der Datei /etc/ssl/private/server.key gespeichert, kann das Zertifikat mit dem Konfigurationsanweisung net.tls() geladen werden:

net.tls('/etc/ssl/server.crt', '/etc/ssl/private/server.key')

Beide Dateien müssen für den Benutzer knot-resolver lesbar sein.

Die anderen Zeilen in der Konfigurationsdatei müssen nicht angepasst werden.

Ist die Konfiguration abgeschlossen, kann der Service aktiviert und gestartet werden: systemctl enable --now kresd@1.service

Zum Neustart des Services bei späteren Konfigurationsänderungen kann folgender Befehl verwendet werden: systemctl restart kresd@1.service

Damit ist die Installation des Servers abgeschlossen. Die Konfiguration der Clients ist von der verwendeten Server-Software unabhängig. Wie Android und Firefox konfiguriert werden müssen, damit der verschlüsselnde Resolver verwendet wird, kann im ersten Artikel zum Thema nachgelesen werden.

Die in Debian 11 Bullseye enthaltene Version unbound unterstützt den Betrieb eines DoH-Servers leider nicht. Mit dem nächsten Debian-Release wird sich dies vermutlich ändern. In der Zwischenzeit kann der knot-resolver als Alternative verwendet werden. Eine entsprechende Anleitung zur Verwendung von unbound als DoT- und DoH-Server unter Debian 12 Bookworm wird folgen, sobald die nächste Debian-Version erschienen ist.

Jens Meißner
Jens Meißner arbeitet seit 2018 als Linux-Consultant bei B1 Systems und beschäftigt sich mit den Themen Netzwerk, Virtualisierung, Automatisierung und Monitoring. Am liebsten benutzt er Debian, interessiert sich neben Linux aber auch für FreeBSD und OpenBSD.