Pi-hole mit Unbound: eigener DNS-Resolver ohne Google
Pi-hole 6 mit Unbound auf dem Raspberry Pi kombinieren: Werbung filtern und DNS selbst auflösen, ohne Google, Cloudflare oder den Provider zu fragen.
Von Nathan Base
Jedes Mal, wenn ein Gerät in Deinem Netz eine Website, eine App oder einen Smart-Home-Dienst anspricht, fragt es zuerst einen DNS-Server nach der passenden IP-Adresse. Diese Anfragen landen normalerweise bei Deinem Internetanbieter oder bei Google und Cloudflare, wenn Du die einmal eingetragen hast. Wer diese Server betreibt, sieht damit eine ziemlich vollständige Liste der Dienste, die Du und Deine Geräte nutzen.
Pi-hole ist vielen als Werbeblocker für das ganze Heimnetz bekannt. Es filtert Werbe- und Tracking-Adressen, reicht alle anderen Anfragen aber weiter, standardmäßig an einen dieser großen Anbieter. Mit Unbound änderst Du genau diesen letzten Schritt: Dein Raspberry Pi fragt nicht mehr einen zentralen Dienst, sondern löst jede Adresse selbst auf, beginnend bei den Root-Servern des Internets. Es gibt dann keinen einzelnen Anbieter mehr, der alle Deine Anfragen sieht.
Diese Anleitung richtet Pi-hole 6.5 und Unbound 1.22 aus den Debian-Paketquellen auf Raspberry Pi OS auf Basis von Debian 13 ein. Grundlage ist die offizielle Anleitung von Pi-hole zu Unbound.
Was Unbound bringt und was nicht
Ehrlichkeit vorab, damit Du die Erwartungen richtig setzt:
- Du gewinnst Unabhängigkeit. Kein einzelner Anbieter sammelt mehr alle Deine DNS-Anfragen. Unbound fragt für jede Domain direkt die Server, die für sie zuständig sind.
- Du gewinnst DNSSEC-Prüfung. Unbound prüft die Signaturen von Domains, die DNSSEC nutzen, und verwirft gefälschte Antworten.
- Die Anfragen sind nicht verschlüsselt. Unbound spricht mit den zuständigen Servern über das klassische, unverschlüsselte DNS. Dein Internetanbieter könnte also mitlesen, welche Domains aufgelöst werden. Wer das verhindern will, braucht stattdessen einen verschlüsselten Weiterleiter und vertraut dann wieder dessen Betreiber.
- Die erste Anfrage ist langsamer. Eine Domain, die noch niemand in Deinem Netz aufgerufen hat, braucht beim ersten Mal einige hundert Millisekunden. Danach liegt sie im Zwischenspeicher, und die Antwort kommt sofort.
Was Du brauchst
- Einen Raspberry Pi, ein Raspberry Pi 3 reicht völlig, einen gebrauchten Pi 3 bei eBay (Affiliate Link) bekommst Du für wenig Geld. Er läuft rund um die Uhr, deshalb lohnen sich die Tipps aus Raspberry Pi im Dauerbetrieb: SD-Karte schonen, stabil laufen.
- Raspberry Pi OS Lite, eingerichtet mit SSH-Zugang. Falls Du das noch nicht hast, hilft Dir Raspberry Pi einrichten: Imager, erster Start und SSH.
- Eine feste IP-Adresse für den Pi im Heimnetz. Bei einer FRITZ!Box setzt Du unter Heimnetz > Netzwerk beim Gerät den Haken bei Diesem Netzwerkgerät immer die gleiche IPv4-Adresse zuweisen.
Pi-hole installieren
Melde Dich per SSH am Pi an und starte das offizielle Installationsskript:
curl -sSL https://install.pi-hole.net | bashDer Installer führt Dich durch einige Fragen. Bei der Frage nach dem Upstream-DNS-Anbieter kannst Du irgendeinen wählen, er wird gleich durch Unbound ersetzt. Alle anderen Fragen beantwortest Du mit den Vorgaben. Setze danach ein eigenes Passwort für die Weboberfläche:
sudo pihole setpasswordDie Oberfläche erreichst Du unter http://IP-DES-PI/admin.
Prüfen, ob die Root-Server erreichbar sind
Unbound muss die Root-Server des Internets direkt erreichen können. Manche Router und Anbieter fangen DNS-Anfragen auf Port 53 ab und beantworten sie selbst. Die Pi-hole-Doku empfiehlt deshalb einen kurzen Test vorab. Installiere zuerst das Werkzeug dig:
sudo apt install dnsutilsDann fragst Du einen Root-Server direkt:
dig @198.41.0.4 . NS +norec +time=3Schau Dir in der Ausgabe die Zeile mit flags: an. Steht dort aa und kein ra, antwortet tatsächlich der Root-Server, und alles ist in Ordnung. Steht dort ra, fängt jemand Deine Anfragen ab, und Unbound wird nicht zuverlässig funktionieren. Prüfe dann zuerst die Kindersicherung oder Filterfunktionen Deines Routers.
Unbound installieren und einrichten
Installiere Unbound aus den Paketquellen:
sudo apt install unboundDie Liste der Root-Server bringt das Paket dns-root-data automatisch mit und hält sie aktuell. Lege jetzt die Konfiguration für Pi-hole an:
sudo nano /etc/unbound/unbound.conf.d/pi-hole.confFüge diesen Inhalt ein. Er entspricht der Empfehlung aus der Pi-hole-Doku, gekürzt um die Kommentare:
server:
verbosity: 0
interface: 127.0.0.1
port: 5335
do-ip4: yes
do-udp: yes
do-tcp: yes
do-ip6: yes
prefer-ip6: no
harden-glue: yes
harden-dnssec-stripped: yes
use-caps-for-id: no
edns-buffer-size: 1232
prefetch: yes
num-threads: 1
so-rcvbuf: 1m
private-address: 192.168.0.0/16
private-address: 169.254.0.0/16
private-address: 172.16.0.0/12
private-address: 10.0.0.0/8
private-address: fd00::/8
private-address: fe80::/10
private-address: 192.0.2.0/24
private-address: 198.51.100.0/24
private-address: 203.0.113.0/24
private-address: 255.255.255.255/32
private-address: 2001:db8::/32Die wichtigsten Zeilen: interface: 127.0.0.1 und port: 5335 sorgen dafür, dass Unbound nur für Pi-hole auf demselben Gerät erreichbar ist und nicht für das ganze Netz. harden-dnssec-stripped verwirft Antworten, bei denen die DNSSEC-Signatur entfernt wurde. prefetch erneuert häufig genutzte Einträge kurz vor ihrem Ablauf, damit sie nie aus dem Zwischenspeicher fallen. Die private-address-Zeilen verhindern, dass ein externer Server Dir eine Adresse aus Deinem eigenen Heimnetz unterschiebt. Hast Du kein IPv6 bei Deinem Anschluss, setzt Du do-ip6 auf no.
Der Debian-Stolperstein
Auf Debian und damit auch auf Raspberry Pi OS installiert Unbound einen Hilfsdienst, der Unbound ohne den Port 5335 als DNS-Server des Systems einträgt. Das führt zu merkwürdigen Fehlern. Prüfe, ob er aktiv ist:
systemctl is-active unbound-resolvconf.serviceSteht dort active, schaltest Du ihn ab und verhinderst, dass seine Konfiguration erneut erzeugt wird:
sudo systemctl disable --now unbound-resolvconf.service
sudo sed -Ei 's/^unbound_conf=/#unbound_conf=/' /etc/resolvconf.conf
sudo rm /etc/unbound/unbound.conf.d/resolvconf_resolvers.confDie letzten beiden Befehle melden einen Fehler, wenn die Dateien bei Dir nicht existieren. Das ist dann kein Problem. Starte Unbound neu:
sudo systemctl restart unboundUnbound testen
Frag Unbound direkt nach einer Domain:
dig pi-hole.net @127.0.0.1 -p 5335Die erste Antwort kann eine Sekunde dauern, in der Ausgabe muss status: NOERROR und eine IP-Adresse stehen. Wiederholst Du den Befehl, kommt die Antwort in wenigen Millisekunden aus dem Zwischenspeicher. Prüfe dann die DNSSEC-Validierung mit zwei Testdomains:
dig fail01.dnssec.works @127.0.0.1 -p 5335
dig +ad dnssec.works @127.0.0.1 -p 5335Die erste Domain hat absichtlich eine kaputte Signatur. Die Antwort muss status: SERVFAIL lauten, ohne IP-Adresse. Die zweite muss NOERROR liefern, und in der Zeile flags: muss ad stehen. Das bedeutet, Unbound hat die Signatur geprüft und für echt befunden.
Pi-hole auf Unbound umstellen
Öffne die Pi-hole-Weboberfläche, gehe zu Settings > DNS und entferne bei den vorgegebenen Upstream-Servern alle Haken. Trage stattdessen unter Custom DNS servers diesen Wert ein:
127.0.0.1#5335Klicke auf Save & Apply. Ab jetzt reicht Pi-hole alle Anfragen, die es nicht blockiert, an Unbound weiter.
Den Router auf Pi-hole zeigen lassen
Damit alle Geräte im Netz Pi-hole nutzen, muss Dein Router ihnen den Pi als DNS-Server mitteilen. Bei einer FRITZ!Box trägst Du unter Heimnetz > Netzwerk > Netzwerkeinstellungen in den IPv4-Einstellungen die IP-Adresse des Pi als Lokaler DNS-Server ein. Die Geräte übernehmen die Änderung, wenn sie ihre Adresse das nächste Mal neu beziehen. Am schnellsten geht das, indem Du WLAN kurz aus- und wieder einschaltest.
Hast Du IPv6 im Heimnetz, schau zusätzlich in die IPv6-Einstellungen. Gibt die FRITZ!Box sich dort selbst als DNSv6-Server bekannt, umgehen manche Geräte Pi-hole über IPv6. Trage dann auch dort die IPv6-Adresse des Pi ein. Sie beginnt meist mit fd und steht in Pi-hole unter Settings > System.
Prüfen, ob alles zusammenspielt
Öffne auf einem Gerät im Heimnetz ein paar Websites und schau danach in Pi-hole unter Query Log. Dort müssen die Anfragen Deines Geräts auftauchen, und in der Spalte für die Antwort steht bei nicht blockierten Domains, dass sie von 127.0.0.1#5335 beantwortet wurden.
Wenn es nicht klappt
Pi-hole meldet, dass kein Upstream-Server erreichbar ist. Prüfe mit systemctl status unbound, ob Unbound läuft. Startet es nicht, steht der Grund meist in sudo journalctl -u unbound -n 30. Häufigste Ursache ist ein Tippfehler in der Konfiguration. Mit sudo unbound-checkconf prüfst Du sie.
Manche Websites laden nicht mehr, dig liefert SERVFAIL. Wenn das nur bestimmte Domains betrifft, ist deren DNSSEC tatsächlich kaputt, und Unbound tut das Richtige. Betrifft es alle Domains, stimmt meist die Uhrzeit des Pi nicht. DNSSEC-Signaturen haben ein Ablaufdatum, und bei falscher Uhrzeit hält Unbound alle für ungültig. Prüfe mit timedatectl, ob die Zeit synchronisiert ist.
Das Internet ist komplett weg, wenn der Pi aus ist. Das ist der Preis eines einzelnen DNS-Servers. Trage im Router nur den Pi ein und keinen zweiten öffentlichen Server, sonst umgehen Geräte den Filter. Sorge stattdessen für eine stabile Stromversorgung und eine zuverlässige Speicherkarte oder SSD.
Fazit
Pi-hole mit Unbound ist eine der wirkungsvollsten Stunden, die Du in Dein Heimnetz stecken kannst. Werbung und Tracker sind für alle Geräte gefiltert, auch für Smart-TVs und Apps, und Deine DNS-Anfragen landen nicht mehr gebündelt bei einem großen Anbieter. Wenn Du den Pi-hole-Schutz auch unterwegs nutzen willst, kannst Du ihn über ein VPN wie Tailscale erreichbar machen, das Prinzip zeigt Home Assistant von unterwegs: Tailscale oder Cloudflare.
Weiterlesen.
-
Raspberry Pi & LinuxRaspberry Pi im Dauerbetrieb: SD-Karte schonen, stabil laufen
Läuft der Raspberry Pi rund um die Uhr, sterben SD-Karten und Netzteile zuerst. Diese Einstellungen unter Raspberry Pi OS Trixie machen den Pi langlebig.
Nathan Base -
Raspberry Pi & LinuxRaspberry Pi einrichten: Imager, erster Start und SSH
Raspberry Pi einrichten mit dem Raspberry Pi Imager: Betriebssystem auf die microSD-Karte schreiben, WLAN und SSH vorbereiten, erster Start und Updates.
Nathan Base -
Raspberry Pi & LinuxHome Assistant von unterwegs: Tailscale oder Cloudflare
Home Assistant ohne Portfreigabe von unterwegs erreichen, auch mit DS-Lite: Tailscale, Cloudflare Tunnel und Nabu Casa im Vergleich, mit Anleitung.
Nathan Base -
Raspberry Pi & LinuxTailscale Exit Node: unterwegs über den Pi surfen
Raspberry Pi als Tailscale Exit Node: im Hotel-WLAN sicher über den eigenen Anschluss surfen und Pi-hole auch unterwegs auf dem iPhone nutzen.
Nathan Base -
Raspberry Pi & LinuxRaspberry Pi feste IP-Adresse geben: Router oder nmcli
Dem Raspberry Pi eine feste IP-Adresse geben: am einfachsten in der FRITZ!Box oder direkt auf dem Pi mit nmcli. Für Raspberry Pi OS Trixie und Bookworm.
Nathan Base -
Raspberry Pi & LinuxWake on LAN mit dem Raspberry Pi: PCs im Netz aufwecken
Mit dem Raspberry Pi per Wake on LAN Mac, Windows-PC oder NAS im Heimnetz aufwecken: wakeonlan installieren, Zielrechner vorbereiten, sicher von unterwegs.
Nathan Base