Pi-hole einrichten im Proxmox-LXC: Werbung im ganzen Netz blocken
Dein Werbeblocker hilft nur im Browser, während Smart-TV, Handy-Apps und die Streaming-Box im Wohnzimmer weiter mit Werbe- und Tracking-Servern reden? Mit Pi-hole blockst du das für dein ganzes Netz auf einmal. In diesem Guide richtest du Pi-hole in einem kleinen LXC auf Proxmox ein, trägst es im Router ein und sicherst dich gegen die typischen Fehler ab. Bei mir läuft genau dieses Setup, die Tipps unten stammen aus dem Betrieb.
Was Pi-hole eigentlich macht
Jedes Gerät in deinem Netz fragt ständig einen DNS-Server, welche IP-Adresse hinter einem Namen steckt. Normalerweise beantwortet das dein Router oder dein Provider. Pi-hole stellt sich als DNS-Server dazwischen. Fragt ein Gerät nach einer Domain, die auf einer Blockliste steht, bekommt es eine leere Antwort zurück, und die Werbung wird gar nicht erst geladen. Alle anderen Anfragen reicht Pi-hole ganz normal weiter.
Der Vorteil: Du installierst nichts auf den einzelnen Geräten. Sobald der Router Pi-hole als DNS verteilt, ist jedes Gerät im WLAN und am Kabel automatisch dabei. Die Grenze solltest du aber kennen: Werbung, die von derselben Domain kommt wie der eigentliche Inhalt, kann Pi-hole nicht trennen. YouTube-Werbung zum Beispiel bleibt meistens.
Das brauchst du
Für Pi-hole reicht ein winziger Container. Die Tabelle zeigt mein Setup als Orientierung. Pi-hole läuft bei mir am Standort Frankreich als LXC auf einem Proxmox-Host. Mehr zu den Standorten findest du in Mein Homelab an zwei Standorten.
| Komponente | Bei mir |
|---|---|
| Basis | LXC mit Debian 12 auf Proxmox |
| Ressourcen | 1 CPU-Kern, 512 MB RAM, 2 GB Disk |
| Pi-hole | Version 6 (Core 6.1.4, FTL 6.2.3, Web 6.2.1) |
| Blockliste | StevenBlack hosts, rund 229.000 Domains |
| Upstream | Unbound lokal im Container, DNSSEC aktiv |
| DHCP | aus, das macht der Router |
Du brauchst keinen Proxmox-Server dafür. Pi-hole läuft genauso gut auf einem Raspberry Pi 5*, daher kommt auch der Name. Wenn du aber sowieso schon einen Mini-PC fürs Homelab mit Proxmox hast, ist ein LXC die sparsamste Lösung.
Schritt 1: Leg den LXC per Community Script an
Am einfachsten legst du den Container mit den Proxmox VE Helper-Scripts der Community an. Das Script erstellt den LXC, installiert Pi-hole und fragt dich unterwegs ein paar Dinge ab. Du führst es direkt in der Shell des Proxmox-Hosts aus:
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/pihole.sh)"
Ein Script aus dem Internet direkt als root auszuführen, ist natürlich ein Vertrauensding. Schau dir den Inhalt vorher an, wenn du unsicher bist. Die Defaults kannst du übernehmen. Nur die Disk würde ich größer machen: Der Standard sind 2 GB, plan in den erweiterten Einstellungen lieber 4 bis 8 GB ein (warum, steht unten bei den Stolperfallen). Zwei Dinge solltest du außerdem bewusst entscheiden:
- Feste IP: Ein DNS-Server darf seine Adresse nicht wechseln. Gib dem Container entweder im Script eine statische IP oder reserviere sie im Router per DHCP-Reservierung. Ich mache Letzteres.
- Unbound: Gegen Ende fragt das Script
Would you like to add Unbound? <y/N>, also ob du Unbound als lokalen Resolver mitinstallieren willst. Mein Tipp: Antworte mity. Die Folgefrage, ob Unbound stattdessen als Forwarder mit DNS-over-TLS laufen soll, beantwortest du mitN. Dann löst Unbound die Namen selbst auf. Was das bringt, erkläre ich weiter unten.
Danach setzt du im Container das Passwort für das Webinterface:
pihole setpassword
Das Dashboard erreichst du dann unter http://192.168.1.x/admin.
Schritt 2: Trag Pi-hole im Router als DNS ein
Bis jetzt fragt noch kein Gerät Pi-hole. Damit sich das ändert, trägst du die IP des Containers im DHCP-Server deines Routers als DNS-Server ein. Dann bekommt jedes Gerät beim nächsten Verbinden automatisch Pi-hole mitgeteilt.
- UniFi: In den Netzwerkeinstellungen des jeweiligen LAN gibt es bei den DHCP-Optionen ein Feld für den DNS-Server. Statt automatisch trägst du dort die Pi-hole-IP ein.
- FRITZ!Box: Im Heimnetz unter den Netzwerkeinstellungen findest du bei den IPv4-Einstellungen den lokalen DNS-Server, den die Box per DHCP verteilt. Dort kommt die Pi-hole-IP rein.
Die genauen Menüpunkte ändern sich je nach Firmware, die Logik ist überall gleich. Achtung: Die Geräte übernehmen den neuen DNS erst, wenn ihre DHCP-Lease erneuert wird. WLAN kurz aus und wieder an hilft meistens. So prüfst du, ob es klappt: Führ auf einem beliebigen Rechner nslookup doubleclick.net aus. Kommt 0.0.0.0 zurück, blockt Pi-hole.
Schritt 3: Wähl deine Blocklisten, lieber zu wenig als zu viel
Im Internet findest du Sammlungen mit Dutzenden Listen und Millionen Domains. Das ist übertrieben. Je mehr Listen, desto öfter geht irgendwas kaputt, und du verbringst mehr Zeit mit Whitelisten als mit allem anderen. Fang mit einer einzigen Liste an. Ich nutze die StevenBlack hosts, das sind bei mir aktuell rund 229.000 Domains, und damit ist das Gröbste an Werbung und Tracking weg.
Pi-hole aktualisiert die Listen per Cronjob einmal pro Woche selbst. Neue Listen fügst du im Webinterface unter Lists hinzu und lädst sie danach mit diesem Befehl:
pihole -g
So gehst du vor, wenn etwas nicht mehr geht
Irgendwann lädt eine App nicht, ein Link in einer Newsletter-Mail führt ins Leere oder der Shopping-Link geht nicht auf. Dann schaust du ins Query Log im Webinterface, filterst nach dem betroffenen Gerät und suchst die geblockten Einträge rund um den Zeitpunkt. Die verdächtige Domain erlaubst du direkt dort oder per Kommandozeile:
pihole allow beispiel-domain.de
Mit nur einer moderaten Liste musste ich bisher nichts freischalten, meine Allowlist ist leer. Bei aggressiveren Listen sieht das schnell anders aus. Für einen schnellen Test kannst du Pi-hole im Dashboard auch für ein paar Minuten pausieren. Geht es dann, liegt es am Blocking.
Upstream-DNS: Google, Cloudflare oder Unbound?
Alles, was Pi-hole nicht blockt, muss es irgendwo auflösen lassen. Die einfache Variante sind öffentliche Resolver wie Cloudflare, Quad9 oder Google. Das funktioniert, aber dann sieht eben dieser Anbieter alle deine Anfragen.
Mit Unbound löst Pi-hole die Namen selbst auf und fragt direkt bei den zuständigen Nameservern nach, angefangen bei den Root-Servern. Kein einzelner Anbieter bekommt dann deine kompletten DNS-Anfragen zu sehen. Wenn Unbound wie bei mir lokal auf Port 5335 lauscht, trägst du in Pi-hole als Upstream ein:
127.0.0.1#5335
Das Community-Script trägt neben 127.0.0.1#5335 noch Googles 8.8.4.4 als zweiten Upstream ein. Warum das ein Problem ist, steht unten bei den Stolperfallen. Entfern den Eintrag im Webinterface unter Settings > DNS oder im Container mit:
pihole-FTL --config dns.upstreams '[ "127.0.0.1#5335" ]'
Aktivier in Pi-hole zusätzlich DNSSEC. Die erste Anfrage nach einer neuen Domain dauert mit Unbound etwas länger, danach kommt die Antwort aus dem Cache.
Redundanz: Was passiert, wenn Pi-hole ausfällt?
Diesen Punkt unterschätzen viele. Ist Pi-hole weg, geht im ganzen Haus gefühlt das Internet nicht mehr, weil kein Gerät mehr Namen auflösen kann. Du hast zwei Optionen:
- Zweiter Pi-hole: Ein zweiter Container auf einem anderen Host, beide als DNS im Router eingetragen. Damit die Einstellungen gleich bleiben, gibt es Sync-Tools wie Nebula-sync für Pi-hole 6.
- Öffentlicher DNS als zweiter Eintrag im Router: Einfacher, aber die Geräte nutzen den zweiten Server oft auch dann, wenn Pi-hole läuft. Dann rutscht immer mal wieder Werbung durch.
Egal wofür du dich entscheidest: Lass den Container überwachen. Ich prüfe meine Dienste mit Uptime Kuma und ntfy, ein DNS-Check auf Pi-hole ist dort schnell angelegt. Und starte den LXC in Proxmox automatisch beim Booten (Start at boot), sonst hängt nach einem Stromausfall das ganze Netz.
Typische Fehler und Lösungen
- Stiller Fallback beim Upstream: Wenn du neben Unbound noch weitere Upstreams einträgst, merkst du einen Ausfall von Unbound nicht. Bei mir stand zusätzlich Google drin. Als Unbound nach einem Neustart nicht mehr hochkam, hat Pi-hole einfach über Google weiter aufgelöst, ohne dass es aufgefallen ist. Check also ab und zu
systemctl status unboundoder lass Unbound als einzigen Upstream stehen. - Privileged vs. unprivileged: Wenn du einen LXC nachträglich von unprivileged auf privileged umstellst, bleiben die alten, verschobenen User-IDs auf den Dateien. Dienste wie Unbound können dann nicht mehr in ihre eigenen Ordner schreiben und starten nicht. Entscheide das also vor der Installation.
- Kleine Disk, große Logs: Pi-hole selbst ist klein, aber das Query-Log und das System-Journal wachsen mit. Bei mir war die 2-GB-Disk zuletzt zu 86 Prozent voll. Plan deshalb 4 bis 8 GB ein. Einen bestehenden Container vergrößerst du auf dem Proxmox-Host mit
pct resize <CTID> rootfs +4G, wobei<CTID>die Nummer deines Containers ist. - IPv6: Verteilt dein Router per IPv6 einen eigenen DNS-Server, fragen manche Geräte an Pi-hole vorbei. So prüfst und behebst du das: Schau auf einem Rechner im Netz nach, welche DNS-Server er bekommen hat, unter Windows mit
ipconfig /all, unter macOS mitscutil --dns, unter Linux mitresolvectl status. Steht dort eine IPv6-Adresse deines Routers, geht dieses Gerät an Pi-hole vorbei. Öffne dann im Router die IPv6- oder DNS-Einstellungen für das Heimnetz. Dort trägst du entweder die IPv6-Adresse von Pi-hole als DNS-Server ein (die zeigt dirip -6 addr show eth0im Container) oder schaltest die Ankündigung eines IPv6-DNS-Servers ab. Im zweiten Fall fragen die Geräte über IPv4 und damit bei Pi-hole. Verbinde ein Gerät danach neu und prüf noch einmal. Wie die Option heißt, hängt vom Router ab, manche Provider-Router lassen sie gar nicht ändern.
Updates machst du im Container mit pihole -up. Bei einem LXC aus den Community Scripts gibt es zusätzlich den Befehl update, der dasselbe über das Script erledigt.
Fazit
Pi-hole ist eines der Homelab-Projekte mit dem besten Verhältnis aus Aufwand und Nutzen. Den LXC setzt du in ein paar Minuten auf, er braucht kaum Ressourcen und wirkt auf jedes Gerät im Netz, auch auf die, bei denen du sonst gar keinen Werbeblocker installieren kannst. Halte die Blocklisten moderat, nutze Unbound als Upstream und kümmere dich früh um Monitoring und einen Plan B für den Ausfall. Im Alltag läuft Pi-hole dann einfach im Hintergrund mit.
* Affiliate-Link: Als Amazon-Partner verdiene ich an qualifizierten Verkäufen. Für dich ändert sich am Preis nichts. Mehr dazu
Hat dir der Guide geholfen? Dann spendier mir gern einen Kaffee auf Ko-fi. Damit bleibt MappleBox werbefrei.