DNS ist einer der wenigen Dienste für die es lange keine verschlüsselte Variante gab. DNS ist jedoch ein zentraler Dienst im Internet und für datensammelnde Firmen von großen Interesse. Google stellt wahrscheinlich mit 88.88.88.88 und 88.88.44.44 nicht umsonst einen öffentlichen DNS-Server zur Verfügung. Aus DNS-Anfrage und IP-Adresse, die immer übertragen werden, lassen sich prima virtuelle Bewegungsprofile erstellen. Das Internet wurde seinerzeit nicht in Hinblick auf Sicherheit entworfen sondern auf Funktionalität. Heute ist das Internet, im Gegensatz zu damals, ein Tummelplatz von Datenkraken, Werbetreibende und anderen geworden die daran interessiert sind möglichst viel über die meist ahnungslosen Benutzer heraus zu bekommen um sie mit mehr oder minder unerwünschter Werbung zu beglücken. Heute sind viele Seiten, z.B. die Seiten für Online-Banking aber auch die meisten anderen – wie diese hier auch – per SSL/TLS verschlüsselt. Das heißt der Inhalt des Abrufes ist nicht mehr so ohne weiteres einsehbar. Der DNS-Aufruf, d.h. wenn man in seinen Browser in der Adresszeile „www.example.com“ eingibt und das dann direkt in eine IP-Adresse aufgelöst wird, ist unverschlüsselt und für den Internetprovider sowohl mitlesbar als auch fälschbar. So liefern manche Internetprovider, die deutsche Telekom zum Beispiel, eine ihrer Seiten aus in der sie ihre Werbung platzieren wenn man einen Tippfehler in der Adresszeile hat und eine Domain nicht aufrufbar ist.
Pi-hole fungiert im lokalen Netz als DNS-Server und daher bietet sich an ab hier zu verschlüsseln wobei die ganze Sache den Pferdefuß hat, dass der Anbieter des DNS-Services immer noch die DNS-Anfrage auslesen könnte. Aber für den Provider ist es nahezu unmöglich diese zu erfassen weil die Anfrage vom lokalen Netz zum DNS-Server verschlüsselt erfolgt.
Die Installation macht man nach meiner Erfahrung besser manuell mit:
wget https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-arm.tgz
tar -xzvf cloudflared-stable-linux-arm.tgz
cp ./cloudflared /usr/local/bin
chmod +x /usr/local/bin/cloudflared
cloudflared -v
In die Datei /etc/default/cloudflared wird nun
# Commandline args for cloudflared, using Cloudflare DNS CLOUDFLARED_OPTS=--port 5053 --upstream https://1.1.1.1/dns-query --upstream https://1.0.0.1/dns-query
eingetragen mit:
useradd -s /usr/sbin/nologin -r -M cloudflared
ein Systembenutzer angelegt und mit:
chown cloudflared:cloudflared /etc/default/cloudflared chown cloudflared:cloudflared /usr/local/bin/cloudflared
die Rechte gesetzt.
Nun wird die Datei /etc/systemd/system/cloudflared.service mit dem folgenden Inhalt angelegt:
[Unit] Description=cloudflared DNS over HTTPS proxy After=syslog.target network-online.target [Service] Type=simple User=cloudflared EnvironmentFile=/etc/default/cloudflared ExecStart=/usr/local/bin/cloudflared proxy-dns $CLOUDFLARED_OPTS Restart=on-failure RestartSec=10 KillMode=process [Install] WantedBy=multi-user.target
Zum Schluss wird der Dienst noch aktiviert und gestartet:
sudo systemctl enable cloudflared systemctl start cloudflared systemctl status cloudflared
Eine Ausgabe von dig @127.0.0.1 -p 5053 google.de sollte nun auf dem Pi folgendermaßen aussehen:
; <<>> DiG 9.11.5-P4-5.1+deb10u2-Raspbian <<>> @127.0.0.1 -p 5053 google.de ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22983 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;google.de. IN A ;; ANSWER SECTION: google.de. 40 IN A 172.217.16.163 ;; Query time: 50 msec ;; SERVER: 127.0.0.1#5053(127.0.0.1) ;; WHEN: Fr Sep 18 13:21:31 CEST 2020 ;; MSG SIZE rcvd: 63
Nun fehlt noch die Konfiguration von Pi-hole selber. Dazu loggt man sich in der Webinterface von Pi-hole ein (normalerweise aus dem lokalen Netzwerk unter dem Namen pi.hole zu erreichen) und ruft den Menüpunkt Settings→DNS auf. Dort wird unter Upstream DNS Servers:
127.0.0.1#5053
eingetragen, aktiviert und abgespeichert.
Da cloudflared nicht über den Paketmanager installiert wurde wird er auch nicht durch diesen aktuell gehalten. Ein Update kann aber durch cloudflared update angestoßen werden. Nach einem Update nicht vergessen den Dienst mit service cloudflared restart neu zu starten.