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:
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.