Eigenen DoT/DoH DNS Resolver betreiben

Ich beschreibe euch wie ihr einen eigenen DNS Resolver inklusive DoT und DoH für die Namensauflösung im Internet aufsetzen könnt.

So wurde auch der adminForge Service: dnsforge.de konfiguriert.

Aufbau des Setups:

  • dnsdist – DNS Loadbalancer: DNS Port 53, DoT Port 853, DoH Port 443
  • Pi-hole – Werbeblocker: 127.0.0.1:53
  • PowerDNS Recursor – auflösender Nameserver: 127.0.0.1:5300

Punkt 1: PowerDNS Repositories hinzufügen

Zuerst fügen wir die beiden Repositories von dnsdist und PowerDNS Recursor hinzu: https://repo.powerdns.com/

Beispiel Debian 10:

Punkt 2: Pakete installieren

Wir installieren die beiden Pakete.

Punkt 3: Pi-hole installieren

Wir starten mit der Installation des Werbeblockers Pi-hole.

Wenn ihr die eine vollständige Pi-hole Installation haben möchtet, mit Webserver und Webinterface, dann drückt die Installation mit ENTER durch.

Das Pi-hole Admin Interface ist dann unter http://YOUR-IP/admin/ zu erreichen. Ich empfehle eine zusätzliche Absicherung des Webinterfaces!

Punkt 4: dnsdist konfigurieren

Kopiert diesen Text in die Konsole um eine dnsdist Konfiguration zu erstellen.

Ersetzt dann eure IPv4 und IPv6 Adressen in den markieten Zeilen.
Für einen öffentlichen Resolver könnt ihr diese Befehle verwenden:

Punkt 5: Let’s Encrypt

Für Let’s Encrypt verwende ich gerne acme.sh, ihr könnt aber auch gerne eigene Zertifikate oder andere Let’s Encrypt Scripte verwenden.

Einen Ordner für die Zertifikate legen wir in folgender Datei fest, ich empfehle den bereits vorhandenen Ordner /etc/ssl/private.

Nun holen wir uns ein Zertifikat.

WICHTIG: Eure Domain sollte bereits jetzt einen A-Record mit der IP-Adresse eures Servers haben und auflösen!

Variante 1 (Pi-hole mit Webserver):

Variante 2 (Pi-hole ohne Webserver):

Punkt 6: dnsdist DoT und DoH aktivieren

In der /etc/dnsdist/dnsdist.conf entfernen wir die -- und ersetzen domain.de mit unserer Domain YOUR-DOMAIN.de aus dem Schritt zuvor.

Änderungen sollten in etwa so ausschauen:

Punkt 7: Pi-hole anpassen

Wir erweitern die Adlist.

Passen /etc/pihole/setupVars.conf unseren Wünschen an: Lokale IP-Adresse, Loopback Interface, deaktivieren Querry logging, stellen Pihole DNS auf unseren PowerDNS Recursor.

Um sicher zu gehen, dass Pi-hole bei einem Update diese Variable nicht löscht, erstellen wir eine neue Datei um das Interface lo zu binden.

Punkt 8: PowerDNS Recursor konfigurieren

Jetzt gehen wir das letzte Element der Kette an – dem Recursor von PowerDNS. Das kleine Programm schickt sämtliche DNS-Anfragen direkt an die DNS-Rootserver und behilft sich der vorinstallierten DNS-Rootserver Datei /usr/share/dns/root.hints.

Punkt 9: Dienste starten

Nun ist es an der Zeit die Pi-hole Konfiguration zu übernehmen

und die Dienste neu zu starten.

WICHTIG: dnsdist zuletzt starten da wir ein checkInterval von 5 Minuten eingestellt haben! Ansonsten ist der downstream Server 127.0.0.1:53 nicht direkt up.

Punkt 10: DNS Auflösung testen

Zu guter Letzt überprüfen wir ob alle Dienste auf den korrekten Ports lauschen.

Soll:
dnsdist/tcp: 53, 443, 853
dnsdist/udp: 53
pihole/tcp+udp: 127.0.0.1:53, ::1:53
pdns_recursor/tcp+udp: 127.0.0.1:5300

Wenn alles stimmt können wir die ersten Namensauflösungen testen.

DNS:

Das Tool dig ist unter Debian vorinstalliert. Tragt hinter dem @ die öffentliche IP-Adresse des Servers ein.

DNS over TLS:

Da PHP dank Pi-hole bereits installiert ist, nutzen wir am einfachsten dnstls zum testen. Anstelle domain.de nehmt bitte eure Domain.

DNS over HTTPS:

Über einen kleinen curl Aufruf kann man prüfen ob DoH funktioniert. Angefragt wird hier example.com (verschlüsselt dns=q80BAAABAAAAAAAAB2V4YW1wbGUDY29tAAABAAE).

 

UnterstützenDas Betreiben der Dienste, Webseite und Server machen wir gerne, kostet aber leider auch Geld.
Unterstütze unsere Arbeit mit einer Spende.
Dominion

Dominion

Linux Systemadministrator

Das könnte dich auch interessieren …

9 Antworten

  1. Avatar Rayman sagt:

    Hallo Dominion,

    erstmal vielen Dank für die Anleitung. Ich habe in den letzten Tagen einen Pi-Hole mit DNSCrypt-Proxy (also DoH- und DNSCrypt-Forwarder) aufgesetzt.

    Deshalb wundert es mich, dass Du empfiehlst, die /etc/dnsmasq.d/01-pihole.conf anzupassen.

    In dieser Datei stehen folgende Hinweise:
    „ANY CHANGES MADE TO THIS FILE AFTER INSTALL WILL BE LOST ON THE NEXT UPDATE“

    „IF YOU WISH TO CHANGE THE UPSTREAM SERVERS, CHANGE THEM IN: /etc/pihole/setupVars.conf“

    „ANY OTHER CHANGES SHOULD BE MADE IN A SEPARATE CONFIG FILE WITHIN /etc/dnsmasq.d/yourname.conf“

    Habe ich hier etwas falsch verstanden oder übersehen?

    • Dominion Dominion sagt:

      Hallo Rayman,

      ja richtig. Dort sollten auch keine Änderungen vorgenommen werden die nicht sowieso schon in /etc/pihole/setupVars.conf stehen.
      In /etc/dnsmasq.d/01-pihole.conf mache ich nur Änderungen, da pihole -g nicht zu 100% alles übernimmt.

      Also keine Angst, ist alles korrekt so. Die wichtigste Einstellung ist in /etc/dnsmasq.d/02-bind.conf festgehalten. Denn bind-interfaces ist nicht Bestandteil der Hauptkonfiguration und würde somit beim Update gelöscht werden.

      Gruß
      Dominion

  2. Avatar san sagt:

    How can you get both dnsdist and pihole-ftl run on same port 53 ?

    dnsdist/tcp: 53, 443, 853
    dnsdist/udp: 53
    pihole/tcp+udp: 127.0.0.1:53, ::1:53

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.