PiHole Teil 2: Verschlüsselung mit DNSCrypt
- PiHole Teil 1: PiHole auf dem Raspberry Pi einrichten
- PiHole Teil 2: Verschlüsselung mit DNSCrypt
- PiHole Teil 3: Unbound
In zweiten Teil meiner Artikelreihe zeige ich dir wie du DNSCrypt zur Verschlüsselung deiner DNS-Anfragen in Verbindung mit dem PiHole verwenden kannst.
Inhaltsverzeichnis
Was ist DNSCrypt?
Mit DNSCrypt werden DNS-Anfragen und -Antworten zur Namensauflösung verschlüsselt zwischen dem Proxy und dem DNS-Server ausgetauscht. Damit können Nutzer ihre Verbindung zum DNS-Server also verschlüsseln. Dadurch wird sichergestellt, dass Außenstehende keine Möglichkeit haben den aufgerufenen Inhalt nachzuvollziehen. Auf diese Weise wird die Manipulation der DNS-Namensauflösung und damit sogenannte Man-In-The-Middle Angriffe erschwert. Bitte beachte jedoch, DNSCrypt bietet keine Ende-zu-Ende Verschlüsselung.
DNSCrypt installieren
Die DNSCrypt Proxydateien sollten im Ordner /opt installiert werden. Wechsle daher in dieses Verzeichnis mittels.
cd /opt
Download und Entpacken von DNSCrypt. Ersetze dabei gegebenenfalls die Versionsnummer durch eine aktuellere.
sudo wget https://github.com/jedisct1/dnscrypt-proxy/releases/download/2.0.31/dnscrypt-proxy-linux_arm-2.0.31.tar.gz
sudo tar -xf dnscrypt-proxy-linux_arm-2.0.31.tar.gz
Benenne das extrahierte Verzeichnis um und wechsle wieder in das Rootverzeichnis.
sudo mv linux-arm dnscrypt-proxy
cd ..
Konfiguration
Port einstellen
Erstelle eine Konfigurationsdatei basierend auf der Standarddatei. Kopiere dazu die vorhandene Konfigurationsdatei und öffne sie in einem Editor, z. B. nano:
sudo cp /opt/dnscrypt-proxy/example-dnscrypt-proxy.toml /opt/dnscrypt-proxy/dnscrypt-proxy.toml
sudo nano /opt/dnscrypt-proxy/dnscrypt-proxy.toml
Such die folgende Zeile in der Datei und ändere hier den Port von 53 auf einen beliebigen anderen Port wie z. B. 54. Port 53 wird bereits von PiHole selbst verwendet und kann daher hier nicht genutzt werden. Die erste Adresse ist für IPv4-Anfragen, die zweite entsprechend für IPv6. Merke dir den verwendeten Port, da dieser später in PiHole eingetragen werden muss.
Falls du dich über die IP-Adressen wunderst: Dies sind die Schreibweisen der lokalen IPs des Betriebssystems. Dies bedeutet DNSCrypt erwartet Anfragen von einem lokalen Dienst (wie z. B. von der PiHole-Software). Wir müssen diese Adressen also als Ziel in PiHole angeben (siehe unten).
listen_addresses = ['127.0.0.1:54','[::1]:54'].
Zusätzlich sollte noch folgende Einstellung vorgenommen werden, um ausschließlich DNS-Server zu verwenden, die DNSSEC verwenden. Diese Option hast du auch bereits in der Oberfläche von PiHole weiter oben eingestellt.
require_dnssec = true.
DNS-Server erweitern
Die verwendeten DNS-Server können noch um weitere Einträge erweitert werden. Suche dazu nach server_names. Entferne „#“ am Anfang der Zeile, da die Server sonst nicht genutzt werden können. Andernfalls verwendet DNSCrypt die Google-DNS-Server (8.8.8.8 und 8.8.4.4), was datenschutztechnisch bedenklich ist. Ich habe die folgenden Server eingetragen. Achte in jedem Fall auf seriöse Anbieter, die keine Daten sammeln. Dazu sind europäische Server empfehlenswert, da sie der europäischen Datenschutzverordnung unterstehen. Die voreingestellten Server sind jedoch bereits völlig ausreichend. Eine Liste vertrauenswürdiger Server findest du unter diesem [Link].
server_names = ['dnscrypt.nl-ns0','dns2.digitalcourage.de','dns.digitale-gesellschaft.ch']
Speichere und schließe die Datei anschließend mit [STRG+X], bestätige mit [Y] und dann mit [Enter].
Installiere anschließend noch den DNSCrypt Proxy-Service und starte ihn.
sudo /opt/dnscrypt-proxy -service install
sudo /opt/dnscrypt-proxy -service start
Einstellungen testen
Mit folgendem Befehl erhältst du die im Bild gezeigte Ausgabe und kannst so überprüfen, ob die Einstellungen von DNSCrypt erfolgreich waren:
sudo systemctl status dnscrypt-proxy
Die letzten drei Zeilen zeigen dir, welche DNS-Server verwendet werden und die dazugehörigen Latenzen. Die letzte Zeile zeigt dir außerdem an wie viele DNS-Server aktuell genutzt werden.
PiHole Einstellungen anpassen
Nun muss PiHole noch für die Nutzung von DNSCrypt angepasst werden. Dazu rufst du wieder die Benutzeroberfläche im Browser auf und wechselst links zu Settings. Dort wählst du den Reiter DNS aus und trägst rechts einen manuellen Upstream DNS Server ein. Dieser wird nach dem Schema host#port eingetragen. Trage hier nun den zuvor gewählten Port manuell ein. Achte darauf, dass du sowohl den IPv4 als auch den IPv6 Port einträgst, damit PiHole für beide Protokolle verwendet werden kann. Auf der linken Seite sind die DNS-Server ausgewählt, die du während der Installation ausgewählt hast. Achte darauf, dass du alle voreingestellten DNS-Server auf der linken Seite deaktivierst, da Pihole ansonsten diese dauerhaft verwendet und DNSCrypt wirkungslos ist.
DNSCrypt testen
Mit folgendem Befehl prüfst du, ob die Einrichtung erfolgreich war. der Befehl liefert eine Ausgabe, die dir anzeigt, ob die Namensauflösung funktioniert.
sudo /opt/dnscrypt-proxy/dnscrypt-proxy -resolve creativeturtle.de
Die folgenden Testseiten zeigen dir, welchen DNS-Server dein PiHole aktuell verwendet. Diese sollten den unter server_names eingetragenen Anbietern entsprechen. Nutze den zweiten Link für eine schnelle Überprüfung:
Der Ablauf der DNS-Anfrage ist nach dieser Konfiguration wie nachfolgend dargestellt. Der Router steht in Klammern, da dieser bei Variante 3 der DNS-Einrichtung im Router übersprungen wird und daher nur bei Variante 1 und 2 an der Weiterleitung beteiligt ist (siehe Einrichtung des DNS-Servers in der Fritz!Box in Teil 1 dieser Artikelreihe).
Endgerät (PC, Smartphone etc.) > (Router) > PiHole > DNS-Crypt > DNS-Server
In Teil 3 dieser Artikelserie zeige ich dir, wie du mit Unbound deine DNS-Anfragen selber beantworten kannst. Dadurch ersparst du dir die Anfrage an einen DNS-Server im Internet und erhöhst deine digitale Privatsphäre.
Hallo, Philipp,
ich habe pihole über docker/portainer installiert und es läuft. Ich habe weiterhin dnscrypt-proxy installiert, und es läuft. Allerdings zeigt es mir nach systemctl status dnscrypt-proxy keinen der eingestellten server an. Der test sudo /opt/dnscrypt-proxy/dnscrypt-proxy -resolve creativeturtle.de ergibt als Resolver IP 82.145.9.134 (dns03fr.versatel-sued.de.). Das – denke ich mal – ist nicht die erwünschte lösung. Wo könnte ich denn nach einer lösung für dieses problem suchen?
Danke!
Mit besten grüßen
Joachim Köstler
Hi
Hast du mal versucht die beiden verlinkten Testseiten aufzurufen? Dort müsste angezeigt werden, ob es geklappt hat.
Grüße
Danke für die tollen Hilfestellungen in Sachen Raspberry. Konnte schon einiges davon erfolgreich umsetzen.
Ist es nicht möglich die anfrage über Unbound zu starten und dann über DNSCrypt verschlüsselt weiter zu leiten?
Oder denke ich da eventuell falsch?
Mit freundlichen Grüßen ?
Hallo
Ich denke nicht, dass das möglich ist. Bei DNSCrypt konfigurierst du nur bestimmte Einstellungen in der gezeigten Config Datei. Dadurch leitet DNSCrypt die Anfragen zu den eingetragenen DNS-Servern weiter. Um jetzt die Anfrage an einen Rootserver zu leiten wie bei Unbound, müsstest du DNSCrypt umprogrammieren. Außerdem glaube ich (da bin ich mir gerade nicht ganz sicher), dass auch die Gegenstelle, sprich der Rootserver, die Verschlüsselung unterstützen muss und das tun diese soweit ich weiß nicht.
Danke fürs Tutorial, bis zu dem Punkts: udo /opt/dnscrypt-proxy -service install klappte alle, aber es kommt folgender Fehler: sudo: /opt/dnscrypt-proxy: command not found
Tipp?
Thx
Also wenn der den Befehl nicht findet, dann ist DNSCrypt nicht ordnungsgemäß installiert. Dann muss schon bei der Installation etwas schief gelaufen sein. Oder passt vielleicht nur der Pfad, den du übergibst nicht? Hast du DNSCrypt vielleicht woanders hinkopiert als ich es getan habe? Wenn ja, musst du deinen Pfad mitgeben anstatt /opt/dnscrypt-proxy.
Bin auch daran verzweifelt, bis mir eingefallen ist, dass hier was fehlt. Das Verzeichnis heist so wie die Datei. Der richtige Befehl ist:
sudo /opt/dnscrypt-proxy/dnscrypt-proxy -service install
sudo /opt/dnscrypt-proxy/dnscrypt-proxy -service start
Hallo Philipp,
Asche auf mein Haupt…..Copy&Paste Fehler von DNSCrypt Config in den Eintrag von PiHole….also so wie Du geschrieben hast. Ich habe die local IP mit „:“ anstatt mit „#“ eingegeben und dies auch immer wieder in Deiner Beschreibung überlesen!!
Vielen Dank für den Hinweis.
Gruß
Stefan
Hallo Philipp,
danke für das Tutorial für DNSCrypt mit PiHole.
Alles soweit wie möglich danach eingerichtet. PiHole habe ich schon länger laufen und wollte jetzt noch um DNSCrypt erweitern. Jedoch lässt sich in PiHole der local DNS nicht unter IP4 übernehmen. Obwohl systemctl anzeigt, dass DNSCrypt auf dieser IP (127.0.0.1:54) läuft.
PiHole läuft in der Version 5.6 und DNSCrypt in der 2.1.1
Hast Du noch eine Idee warum es dabei Probleme gibt?
Vielen Dank schonmal.
Hallo Stefan
Wie genau äußert sich das denn? Funktioniert der PiHole nicht mehr, wenn du die lokale IP von DNSCrypt einträgst? Beachte, dass du die IP folgendermaßen angeben musst: 127.0.0.1#54 (also mit dem Rautezeichen und nicht mit Doppelpunkt). Achte außerdem darauf, dass in PiHole selber links neben der angegebenen IP kein DNS-Server ausgewählt ist, da PiHole sonst die eigenen DNS-Server nutzt und eben nicht DNSCrypt.
Gruß
Philipp
Danke für deine Arbeit. Allerdings komme ich nicht weiter. Nachdem ich die Datei linux-arm in dnscrypt-proxy umbenannt habe und mittels cd im Rootverzeichnis lande, funktioniert das weitere Vorgehen nicht mehr weil example-dnscrypt-proxy.toml dort nicht vorhanden ist und der Befehl im Guide dann natürlich nicht funktioniert. Gibts eine Möglichkeit den Artikel zu aktualisieren? Vielen Dank.
Da ist wohl noch ein kleiner Fehler. Danke dir. Du kannst dem copy Befehl einfach den Pfad mitgeben. Also in etwa so :
sudo cp /opt/dnscrypt-proxy/example-dnscrypt-proxy.toml /opt/dnscrypt-proxy/dnscrypt-proxy.toml
Danke für das Tutorial, hat mir sehr geholfen! 🙂