Raspberry 4 mit Pi-Hole und DoH über FFMuc nutzen

Bild: Freifunk München Logo

In diesem Artikel beschreibt thegoliath wie man mit einem Raspberry Pi 4 mit Pi_Hole und FFMUC DNS nutzen kann.

Im Tutorial benutztes Equipment, Stand Januar 2022

Es wird in den weiteren Schritten davon ausgegangen, dass auf dem Pi bereits ein funktionierendes Betriebssystem (z.B. Raspbian/Raspberry Pi OS) installiert ist. Ebenso benötigt der Pi eine feste (statische) IPv4 im Heimnetz. Muss noch ein Betriebssystem installiert werden, so empfiehlt sich diese Seite, da hier gleichzeitig ein SSH Zugang mit aktiviert wird:

https://www.tutonaut.de/anleitung-raspberry-pi-ohne-monitor-und-tastatur-headless-einrichten/

Als erstes loggen wir uns auf dem Pi ein, anschließend geben wir uns mit sudo su - root Rechte, sonst gibt es später Probleme.

Die gesamte Installation muss als root durchgeführt werden.

Danach muss Pi-Hole heruntergeladen werden, dazu gibt es 2 Möglichkeiten:

1. Der automatische Download und die automatische Installation Dazu muss folgender Befehl eingegeben werden:

# curl -sSL https://install.pi-hole.net | bash

2. Der manuelle Download und die anschließende Installation:

# wget -O basic-install.sh https://install.pi-hole.net
# sudo bash basic-install.sh

Alle weiteren Installationsschritte für Pi-Hole werden hier gut und ausführlich beschrieben, ich wählte „Custom“ bei der DNS Auswahl.

https://www.heise.de/tipps-tricks/Pi-Hole-auf-dem-Raspberry-Pi-einrichten-so-geht-s-4358553.html

Wenn die Installation von Pi-Hole soweit abgeschlossen ist, widmen wir uns der Installation des Cloudflared-Dienstes. Dieser wird benötigt, um über Pi-Hole per DNS-over-HTTPS (DoH) Anfragen verschlüsselt abzuwickeln.

Dazu müssen folgende Befehle nacheinander ausgeführt werden:

# wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64
# sudo cp ./cloudflared-linux-arm64 /usr/local/bin/cloudflared
# sudo chmod +x /usr/local/bin/cloudflared
# cloudflared -v

Wenn diese Befehle erledigt sind, muss noch ein Benutzer angelegt werden. Das wird erledigt mit:

# sudo useradd -s /usr/sbin/nologin -r -M cloudflared

Mit

# sudo nano /etc/default/cloudflared

öffnen wir die Standard-Konfigurationsdate des Cloudflared-Dienstes. Abweichend von der ursprünglichen Installation müssen wir für die DoH-Server von FFMUC folgende Zeilen einfügen:

/etc/default/cloudflared
...
 
# Commandline args for cloudflared
CLOUDFLARED_OPTS=--port 5053 --upstream https://doh.ffmuc.net/dns-query
 
...

Wenn das erledigt ist, mit der Tastenkombination STRG + x und anschließend durch Drücken der Taste y die Datei speichern.

Danach rufen wir mit

# nano /lib/systemd/system/cloudflared.service

eine neue Datei für das z.B. Starten & Stoppen des Cloudflared-Dienstes auf und kopieren dort folgende Zeilen hinein:

/lib/systemd/system/cloudflared.service
[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

Wieder mit der Tastenkombination STRG + x und anschließend durch Drücken der Taste y die Datei speichern. Nun müssen wir noch die Berechtigungen für den `cloudflared` Nutzer anpassen

# sudo chown cloudflared:cloudflared /etc/default/cloudflared
# sudo chown cloudflared:cloudflared /usr/local/bin/cloudflared

Mit folgenden Befehlen starten und aktivieren wir Cloudflared:

# sudo systemctl enable cloudflared
# sudo systemctl start cloudflared
# sudo systemctl status cloudflared

Jetzt kommt für FFMUC eine weitere Besonderheit, denn wir müssen mit

# echo "5.1.66.255 doh.ffmuc.net" >> /etc/hosts
# echo "185.150.99.255 doh.ffmuc.net" >> /etc/hosts
# echo "2001:678:e68:f000:: doh.ffmuc.net" >> /etc/hosts
# echo "2001:678:ed0:f000:: doh.ffmuc.net" >> /etc/hosts

dem Cloudflared-Dienst noch die IP's von den FFMUC-DoH-Servern bekanntgeben und anschließend mit

# systemctl restart cloudflared

Cloudflared neustarten.

Mit dem Befehl

# dig @127.0.0.1 -p 5053 heise.de

überprüfen wir ob alles funktioniert. Die Ausgabe sollte dann so aussehen:

Bild: Bildschirmhardcopy Befehl dig

Jetzt können wir uns beim Pi-Hole anmelden und dort die DNS-Server konfigurieren. Im Normalfall ist das Webinterface unter der IPv4-Adresse eures Raspberry Pis erreichbar (z.B. http://<IP-des-Pi>/admin)

Nun wechseln wir zu „Settings“ dort zum Reiter „DNS“ und geben bei „Custom 1 (IPv4)“ die IP-Adresse 127.0.0.1#5053 ein. Damit verweisen wir auf Cloudflared. (Localhost) Wenn man später auf dem Dashboard unter „Queries answered by“ „Localhost“ sieht, weiß man, dass die Anfragen über Cloudflared und somit über den DNS von FFMUC gelaufen sind.

Das ganze muss dann so aussehen:

Bild : Bildschirmhardcopy PiHole

Ganz unten auf dieser Seite müssen wir noch die IP und den Namen vom Router eingeben, rechts unten sieht man auch den „Save“ Button, nicht vergessen zu speichern.

Bild : Bildschirmhardcopy PiHole

In unserem Fall bleibt der Router der DHCP-Server, nur die externen DNS-Abfragen laufen über den Pi!!!! Anschließend müssen wir noch unserem Router mitteilen, dass die DNS-Abfragen in Zukunft über den Pi laufen. Dazu loggen wir uns auf unserem Router (hier eine AVM FRITZ!Box 7490) ein und gehen dort zu „Internet → Zugangsdaten → DNS-Server“.

Dort tragen wir die statische IPv4 Heimnetzadresse (in diesem Fall die 10.99.1.11) sowie die Link-Local IPv6 Adresse des Pi ein. Bei der Fritz!Box muss man jeweils beide Felder benutzen, sonst meckert sie beim abspeichern. Die Link-Local beginnt in der Regel mit fe80, sie findet man unter „Heimnetz → Netzwerk“, wenn man auf den Stift rechts neben dem Netzwerkgerät klickt.

Bild : Bildschirmhardcopy Fritzbox-DNS

Nach der Umstellung sollte alles, einschließlich IPTV (z.B. Entertain) funktionieren.

Auf dem Dashboard vom Pi-Hole http://<IP-des-Pi>/admin/ kann man gut erkennen ob das Pi-Hole funktioniert.

Bild : Bildschirmhardcopy Pi-Hole Dashboard

Bitte auch überprüfen ob sich das Pi-Hole die Updatelisten holt. Dazu nach dem Einloggen auf den Pi-Hole unter „Tools → Update Gravity“ im rechten großen Fenster auf „UPDATE“ klicken und warten. Wenn alles funktioniert sollte es so aussehen:

Bild : Bildschirmhardcopy Pi-Hole Updateliste

Unter folgender Website gibt es noch weitere Ergänzungslisten für das Pi-Hole:

Die Listen kann man unter „Settings → Blocklists“ einfügen und speichern.

Als Quellen wurden verwendet: