Werbung blockt man am besten dort, wo sie ins Haus kommt: bei der Namensauflösung. Pi-hole fängt die Anfragen nach Werbe- und Tracker-Domains ab, bevor dein Handy, der Fernseher oder der Smart-Speaker sie überhaupt laden. Und wenn bei dir eh schon ein Proxmox brummt, brauchst du dafür keinen extra Raspberry Pi im Regal.
Ein LXC-Container reicht völlig: ein Kern, 512 MB RAM, ein paar Gigabyte Platte. Das ist weniger, als dein Browser gerade für diesen Tab verbraucht.

Was du brauchst
- Einen laufenden Proxmox-VE-Host mit Internetzugang. Ich gehe hier von Version 9 aus; unter 8 funktioniert derselbe Weg, dort nimmst du gegebenenfalls die Debian-12-Vorlage.
- Eine freie IP-Adresse in deinem Heimnetz, die dauerhaft Pi-hole gehört.
- Zugriff auf deinen Router — ohne den letzten Schritt filtert Pi-hole für genau niemanden.
- Etwa 20 Minuten. Ein schwarzes Fenster brauchst du nur für Pi-holes eigenen Installer — alles an Proxmox geht auch per Klick.
Mit diesen Werten rechnet die Anleitung. Du musst sie nirgendwo „eintragen" — sie tauchen in den Schritten von selbst auf, und dort ersetzt du sie durch deine:
- IP-Adresse für Pi-hole:
192.168.178.53/24 - Gateway (die Adresse deines Routers):
192.168.178.1 - Container-ID:
110— Hostname:pihole - Storage:
local-lvm(heißt bei ZFS oftlocal-zfs) - Größe: 8 GB Platte, 1 Kern, 512 MB RAM
- DNS-Server nur für die Installation:
9.9.9.9
Schritt 1: Debian-Vorlage herunterladen
Proxmox baut Container aus Vorlagen — fertigen Mini-Abbildern eines Betriebssystems. Wir holen die aktuelle Debian-13-Vorlage (Stand Proxmox VE 9):
- Links im Baum deinen Node aufklappen und den Speicher local anklicken.
- Rechts CT Templates wählen, dann oben auf die Schaltfläche Templates.
- In der Liste debian-13-standard suchen, markieren, Herunterladen. Der Fortschrittsbalken läuft einmal durch, fertig.
Links deinen Node und dort Shell öffnen:
pveam update
pveam available --section system | grep debian-13
pveam download local debian-13-standard_13.1-1_amd64.tar.zstDie mittlere Zeile zeigt dir den exakten Dateinamen — die Versionsnummer hinter debian-13-standard_ kann bei dir abweichen, dann nimmst du deine.
Warum Debian? Pi-hole unterstützt offiziell nur aktiv gepflegte Systeme, und Debian steht seit jeher ganz oben auf der Liste. Außerdem ist die Standard-Vorlage klein und langweilig — beides Komplimente.
Schritt 2: Den LXC-Container anlegen
Jetzt der eigentliche Bauauftrag. Alle Werte kommen aus der Beispiel-Box oben — hier siehst du nur noch, wo sie hingehören.
Oben rechts Create CT. Der Assistent fragt Seite für Seite ab:
- General: Hostname
pihole, ein Root-Passwort deiner Wahl. Der Haken Unprivileged container ist schon gesetzt — so lassen. - Template: die eben geladene Debian-13-Vorlage auswählen.
- Disks: 8 GB auf deinem Storage. (Pi-hole braucht laut Doku mindestens zwei GB, empfohlen vier — mit acht hast du Luft für die Abfrage-Datenbank.)
- CPU / Memory: 1 Kern, 512 MB RAM, 512 MB Swap.
- Network: IPv4 von DHCP auf Static umstellen, dann die Pi-hole-IP
192.168.178.53/24und das Gateway192.168.178.1eintragen. Die feste Adresse ist keine Kür: Sie darf sich nie ändern, sonst zeigen deine Geräte irgendwann ins Leere. - DNS: als DNS-Server
9.9.9.9eintragen. Klingt paradox für einen werdenden DNS-Server, ist aber nötig — Pi-hole muss ja erst einmal heruntergeladen werden.
Nach dem Finish noch eine Sache, die der Assistent nicht abfragt: im Container-Menü unter Options → Start at boot auf Yes stellen. Ohne das steht nach dem nächsten Stromausfall das halbe Heimnetz.
Ein Befehl statt sechs Assistenten-Seiten:
pct create 110 local:vztmpl/debian-13-standard_13.1-1_amd64.tar.zst \
--hostname pihole \
--cores 1 --memory 512 --swap 512 \
--rootfs local-lvm:8 \
--net0 name=eth0,bridge=vmbr0,ip=192.168.178.53/24,gw=192.168.178.1 \
--nameserver 9.9.9.9 \
--onboot 1 \
--unprivileged 1110 ist die Container-ID — nimm eine, die bei dir frei ist. --onboot 1 und --unprivileged 1 entsprechen den beiden Haken des Assistenten. Ein Root-Passwort setzt dieser Weg nicht — das holst du im nächsten Schritt mit passwd nach.
Schritt 3: Container starten und vorbereiten
Den Container links auswählen, oben Start, dann Console — Anmeldung als root mit dem Passwort aus dem Assistenten.
pct start 110
pct enter 110pct enter setzt dich auch ohne Passwort direkt hinein.
Ab jetzt sitzt du auf beiden Wegen im selben Terminal. Erstmal aufräumen:
apt update && apt full-upgrade -y
apt install -y curlKam dein Container per pct create, fehlt noch das Root-Passwort — einmal passwd, fertig. Ohne es kommst du später nicht per SSH hinein, sondern nur über den Umweg Proxmox-Host. Wenn du den Container tatsächlich per SSH erreichbar machen willst, schau vorher kurz in unsere Anleitung zum SSH-Absichern auf Debian und Ubuntu — ein frisch aufgesetzter Container mit Passwort-Login ist eine Einladung.
Schritt 4: Pi-hole installieren
Hier gibt es ausnahmsweise keinen Klick-Weg — Pi-holes offizieller Installer ist ein Skript, direkt aus der Doku:
curl -sSL https://install.pi-hole.net | bashJa, das ist ein curl in eine Shell. Wenn du lieber erst liest, was du da ausführst — das Projekt bietet den Weg selbst an:
wget -O basic-install.sh https://install.pi-hole.net
bash basic-install.shDer Installer führt dich durch ein paar blaue Dialoge: Upstream-DNS-Anbieter, Blockliste, Web-Oberfläche, Abfrage-Protokollierung. Die Voreinstellungen sind für den Anfang völlig in Ordnung — einmal durchklicken reicht, das Feintuning kommt gleich unten in den ersten Einstellungen.
Schritt 5: Passwort setzen und einloggen
Der Installer würfelt dir am Ende zwar ein Passwort aus, aber eins zum Merken ist bequemer:
pihole setpasswordIm Browser die IP deines Containers mit /admin dahinter aufrufen, im Beispiel also http://192.168.178.53/admin. Login mit dem gerade gesetzten Passwort, und du landest im Dashboard. Noch ist es leer — logisch, es fragt ja niemand.
Schritt 6: Den Router auf Pi-hole umbiegen
Das ist der Schritt, an dem die meisten Anleitungen aufhören und die meisten Nutzer sich wundern, warum immer noch Werbung kommt. Solange deine Geräte Pi-hole nicht als DNS-Server benutzen, ist es nur ein hübsches Dashboard.
An der FRITZ!Box führt der Weg laut Pi-hole-Doku über Heimnetz → Netzwerk → Netzwerkeinstellungen → IP-Adressen → IPv4-Konfiguration → Heimnetz. Dort trägst du die Pi-hole-IP als Lokaler DNS-Server ein. Ab dann bekommt jedes Gerät, das sich per DHCP anmeldet, Pi-hole als DNS-Server mitgeteilt.
Anderer Router, gleiche Idee: Such in den LAN- oder DHCP-Einstellungen nach einem Feld für den DNS-Server, den die Clients bekommen sollen.
Eine Warnung, die sich die Pi-hole-Doku ausdrücklich nicht spart: Trag Pi-hole nicht gleichzeitig als Upstream deiner FRITZ!Box ein, während die FRITZ!Box Upstream von Pi-hole ist. Dann fragen sich beide gegenseitig im Kreis, und deine Namensauflösung dreht sich mit.
Und noch ein Klassiker: Deine Geräte merken von der Änderung erst etwas, wenn sie sich ihre DHCP-Daten neu holen. WLAN aus, WLAN an — das ist der schnellste Weg, das zu erzwingen.
Die ersten Einstellungen
Installiert ist Pi-hole in zwanzig Minuten — eingerichtet ist es damit noch nicht. Vier Dinge, die den Unterschied machen (Stand Pi-hole v6):
1. Upstream-DNS bewusst wählen. Im Installer hast du einmal durchgeklickt, hier lohnt der zweite Blick: Der Upstream sieht jede Anfrage, die Pi-hole durchlässt. Quad9 oder Cloudflare statt des Provider-DNS heißt, dein Anbieter führt nebenher kein Verzeichnis darüber, welche Seiten dein Haushalt aufruft. Jederzeit änderbar, wirkt sofort.
Dashboard: Settings → DNS, Upstream ankreuzen, Save.
2. Privacy-Level prüfen. Ab Werk protokolliert Pi-hole jede Domain samt anfragendem Gerät. Zum Einrichten und Fehlersuchen ist das Gold wert — dauerhaft ist es ein Klick-Tagebuch aller Mitbewohner. Die Stufen 1 bis 3 anonymisieren schrittweise bis zur reinen Statistik. Ich würde es so machen: alles sichtbar lassen, bis das Setup eine Woche rund läuft, dann hochdrehen.
Dashboard: Settings, Abschnitt Privacy, Stufe wählen.
3. Einmal ein Teleporter-Backup ziehen. Das kleine Archiv enthält deine Listen, Ausnahmen und Einstellungen; leg es zu deinen übrigen Backups. Der Container selbst ist in Minuten neu gebaut — die Whitelist, die du über Wochen gepflegt hast, nicht.
Dashboard: Settings → Teleporter, dann Export.
4. Updates zur Gewohnheit machen. Pi-hole aktualisiert sich nicht von selbst. Das Dashboard meldet unten, wenn eine neue Version bereitsteht; eingespielt wird sie im Container-Terminal:
pihole -upEin DNS-Filter, durch den das ganze Heimnetz läuft, ist ein Sicherheitsbauteil — der gehört aktuell gehalten. Um die Blocklisten musst du dich dagegen nicht kümmern, die holt Pi-hole wöchentlich automatisch neu.
Häufige Stolpersteine
„Failed to adjust time during NTP sync: Insufficient permissions“
Der mit Abstand häufigste Schreck bei Pi-hole im Proxmox-Container. Pi-hole v6 bringt einen eigenen Zeit-Client mit und will die Systemuhr stellen. Ein unprivilegierter Container darf das nicht — die Uhr gehört dem Host. Der Pi-hole-Entwickler DL6ER empfiehlt für genau diesen Fall, die Zeitsynchronisation abzuschalten:
pihole-FTL --config ntp.sync.active false
systemctl restart pihole-FTLDu verlierst dabei nichts: Die Uhrzeit im Container kommt ohnehin vom Proxmox-Host.
Die Web-Oberfläche ist nicht erreichbar
Pi-hole v6 bringt seinen eigenen Webserver mit und versucht zuerst Port 80. Ist der belegt, weicht es klammheimlich auf 8080 aus. Nachsehen kannst du im Container:
pihole-FTL --config webserver.portSteht dort 8080, rufst du eben http://192.168.178.53:8080/admin auf. Wer stattdessen wissen will, welcher Dienst sich Port 80 unter den Nagel gerissen hat: Wir haben aufgeschrieben, wie du einen belegten Port findest und wieder frei bekommst.
Es wird einfach nichts geblockt
Neben dem DHCP-Lease von oben gibt es einen zweiten Verdächtigen: ein zusätzlicher, öffentlicher DNS-Server im Router. Steht neben Pi-hole noch 8.8.8.8 in den Einstellungen, fragen deine Geräte fröhlich daran vorbei. Ein Alternativ-DNS ist kein Backup, sondern eine Umgehungsstraße.
Pi-hole aus, Internet gefühlt aus
Wenn der Container steht, löst im Heimnetz niemand mehr Namen auf — und Besuch am Küchentisch findet das mäßig witzig. Wer nachts ruhig schlafen will, stellt entweder ein zweites Pi-hole daneben oder sorgt zumindest dafür, dass er den Ausfall früh mitbekommt, etwa mit Uptime Kuma als Wachhund.
Fazit
Nach 20 Minuten hast du einen Container, der einen Kern und ein halbes Gigabyte RAM belegt und dafür in jedem Gerät im Haus Werbung wegräumt — auch auf dem Smart-TV, wo dich kein Browser-Add-on rettet. Das Aufwand-Nutzen-Verhältnis ist im Homelab schwer zu schlagen.
Ehrlich bleiben muss man trotzdem: Pi-hole blockt auf DNS-Ebene, also anhand von Domainnamen. YouTube-Werbung kommt von derselben Domain wie das Video und geht deshalb durch. Wer mit dieser Erwartung startet, ist enttäuscht.
Meine Einschätzung: Wer schon einen Proxmox-Host betreibt, setzt das heute Abend auf — der Container kostet praktisch nichts und liefert nebenbei den ersten ehrlichen Blick darauf, wie oft die eigenen Geräte nach Hause telefonieren. Und noch in derselben Woche kommt der Wachhund daneben: Ein DNS-Filter, an dem das ganze Netz hängt, gehört überwacht und gesichert, nicht in die Kategorie „einmal aufgesetzt und vergessen“.
Wie hast du es gelöst — filterst du zentral über den Router für alle Geräte, oder trägst du Pi-hole nur bei ausgewählten Clients ein und lässt Gäste bewusst außen vor? Und ist ein zweites Pi-hole für dich Pflicht oder Paranoia? Schreib's in die Kommentare.
Solche Anleitungen erscheinen hier regelmäßig — wenn du keine verpassen willst, wirf den Newsletter an: Die Anmeldung steht gleich unter diesem Beitrag, und abbestellen ist ein Klick.
Quellen
- Pi-hole Docs — Basic Install
- Pi-hole Docs — Prerequisites (Hardware, unterstützte Systeme, Ports)
- Pi-hole Docs — pihole command (setpassword, update, gravity)
- Pi-hole Docs — pihole.toml (ntp.sync, webserver.port)
- Pi-hole Docs — Privacy levels
- Pi-hole Docs — FRITZ!Box (deutsch)
- Proxmox VE Docs — Linux Container (pct, pveam)
- Pi-hole Discourse — Failed to adjust time during NTP sync