Im vorgehenden Blogeintrag [Pi-hole mit DNS-over-TLS] habe ich auf dem Pi-hole Stubby für dns-over-tls eingerichtet. Daselbe möchte ich nun für DNS-over-HTTPS (DoH) realisieren, allerdings unterstützen weder Stubby noch Unbound das noch junge Protokoll bei dem DNS-Anfragen über HTTPS beantwortet werden. Einige Browser haben DoH mittlerweile integriert, aber ich möchte gerne alle DNS-Abfragen aus meinem Heimnetzwerk schützen. Daher nutze ich den in Go geschriebene Client von cloudflare: cloudflared.


Mehr über das Pi-hole und eine Anleitung zur Installation findest du hier:

Installation

Grundsätzlich gibt es eine bestehende Dokumentation bei pi-hole.net wie DNS-over-https mit cloudflared eingerichtet werden kann, mich möchte aber die Installation für mich optimieren, damit ich gleichzeitig mehrere Clients nutzen kann.
cloudflared kann bei Cloudflare als Binary heruntergeladen werden und ist nach einer kleiner Konfiguration einsatzbereit.

Auf dem Raspberry Pi:

cd
wget https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-arm.tgz
tar -xvzf cloudflared-stable-linux-arm.tgz
cp ./cloudflared /usr/local/bin
chmod +x /usr/local/bin/cloudflared

Für den Service nutzen wir einen eigenen User:

sudo useradd -s /usr/sbin/nologin -r -M cloudflared
sudo chown cloudflared:cloudflared /usr/local/bin/cloudflared    # auto-update des binary

Konfiguration

DNS Server Wahl
Wähle deinen DNS Provider sorgfältig da du diesem deine Daten exponierst. Wem du vertraust ist deine Entscheidung.
Es gibt viele Alternativen und wahrscheinlich bessere Optionen als Quad9.

Cloudflare bietet unter anderem auch DNS-over-HTTPS an, aber ich möchte lieber den Dienst von Quad9 nutzen, daher verwende ich als Upstream die IP 9.9.9.9.

sudo vi /lib/systemd/system/cloudflared.service

[Unit]
Description=cloudflared DNS over HTTPS proxy
After=syslog.target network-online.target

[Service]
Type=simple
User=cloudflared
ExecStart=/usr/local/bin/cloudflared proxy-dns --address 127.0.3.3 --port 5353 --upstream https://9.9.9.9/dns-query
Restart=on-failure
RestartSec=10
KillMode=process

[Install]
WantedBy=multi-user.target

Und den Service für den Neustart aktivieren und starten:

sudo systemctl daemon-reload
sudo systemctl enable cloudflared
sudo systemctl start cloudflared

Damit in der Pi-hole Statistik besser ersichtlich ist, welche DNS Queries nun über Stubby oder Unbound oder cloudflared beantwortet wird, kann die IP des Services ins /etc/hosts eingetragen werden. Somit erscheint cloudflared anstatt 127.0.3.3. Daselbe kann natürlich für alle/noch weitere Clients gemacht werden.

echo "127.0.3.3 cloudflared" >> /etc/hosts

Der aktive Cloudflared-Dienst können wir nun im Pi-hole als Custom DNS Server konfigurieren. Dazu unter "Settings > DNS" bei Upstream DNS Servers bei "custom" die lokale IP des Services und den Port des Dienstes eintragen: zB. 127.0.3.3#5353
Nach dem speichern sollte nun das Pi-hole DNS-Anfragen, welche nicht gecached oder geblockt werden an cloudflared weiterleiten:

Query Client Service Names

Test

pi@pi-hole:~ $ dig @127.0.3.3 -p 5353 blog.sandchaschte.ch

; <<>> DiG 9.10.3-P4-Raspbian <<>> @127.0.3.3 -p 5353 blog.sandchaschte.ch
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7383
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;blog.sandchaschte.ch.      IN  A

;; ANSWER SECTION:
blog.sandchaschte.ch.   900 IN  CNAME   sandchaschte.ch.
sandchaschte.ch.    900 IN  A   159.100.248.212

;; Query time: 245 msec
;; SERVER: 127.0.3.3#5353(127.0.3.3)
;; WHEN: Fri Jan 18 15:54:23 UTC 2019
;; MSG SIZE  rcvd: 129

It works. 🎉

Vielleicht mache ich mal noch eine Auswertung welche der Clients (Unbound mit DoT, Stubby mit DoT oder Cloudflared mit DoH) eine bessere Performance hat, damit ich auch weiterhin schnell surfen kann 🙂

Previous Post

Kommentar hinzufügen

Kommentare

Du hast eine tolle Anleitung geschrieben und die Verlinkung zu Kuketz Blog hast du auch mit dabei. Du willst also deinen Datenverkehr schützen. Du liest wahrscheinlich ab und zu bei Herr Kuketz die Artikel. Warum werden dann beim Besuch deiner Seite dann Google Dienste angefragt? Ich möchte auch meine Privatsphäre schutzen und vermeide diese Dienste. Ebenso ist Quad9 nicht so gut für die Privatsphäre. siehe hier: https://www.kuketz-blog.de/quad9-datenschutzfreundliche-alternative-zum-google-dns/ Absichern, Verschlüsseln und Schützen ist gut. Mach weiter so. Betrachte dabei immer das Gesamtpaket.
geschrieben am Sat, 19 Jan 2019 20:38:10 von Horst