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.

Kurz gesagt: Am Ende läuft Pi-hole in einem eigenen Debian-Container auf deinem Proxmox-Host, filtert Werbung und Tracker fürs ganze Heimnetz und zeigt dir in einer Web-Oberfläche, was deine Geräte den lieben langen Tag so anfragen. Dauer: rund 20 Minuten. Schwierigkeitsgrad: Einsteiger — jeder Proxmox-Schritt steht doppelt da: einmal zum Klicken, einmal für die Shell.
Pi-hole auf Proxmox in 3 Schritten: LXC anlegen, Pi-hole installieren, Router umbiegen
Der ganze Weg auf einen Blick — drei Schritte, und Schritt drei ist der, den die meisten vergessen.

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 oft local-zfs)
  • Größe: 8 GB Platte, 1 Kern, 512 MB RAM
  • DNS-Server nur für die Installation: 9.9.9.9
LXC? Ein Linux-Container: Er teilt sich den Kernel mit Proxmox, statt ein komplettes zweites Betriebssystem zu simulieren. Denk an eine abgetrennte Wohnung im selben Haus statt an ein eigenes Haus nebenan — gleiche Heizung, eigene Tür. Startet in Sekunden, frisst kaum Ressourcen, ideal für einen kleinen Dienst wie Pi-hole.
So liest du diese Anleitung: Alles, was du selbst tun sollst, steht in einem farbigen Kasten. [ per klick ] heißt: Das erledigst du mit der Maus in einer Web-Oberfläche — hier Proxmox, dein Router oder das Pi-hole-Dashboard. [ über die shell ] heißt: Den Befehl kopieren, ins Terminal einfügen, Enter. Stehen beide Kästen direkt untereinander, führen sie zum selben Ergebnis — du gehst EINEN davon, nicht beide.

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):

  1. Links im Baum deinen Node aufklappen und den Speicher local anklicken.
  2. Rechts CT Templates wählen, dann oben auf die Schaltfläche Templates.
  3. 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.zst

Die 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/24 und das Gateway 192.168.178.1 eintragen. 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.9 eintragen. 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 1

110 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.

Unprivilegierter Container? Wer da drinnen „root“ ist, ist auf dem Proxmox-Host trotzdem nur ein rechtloser Niemand. Falls jemand im Container Unsinn baut, bleibt der Unsinn im Container. Kostet dich nichts — und erklärt später einen der Stolpersteine.

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 110

pct 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 curl

Kam 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 | bash

Ja, 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.sh

Der 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.

Upstream-DNS? Pi-hole ist kein Auskunftsbüro, sondern das Vorzimmer davor. Für jede Domain, die nicht auf der Blockliste steht, fragt es selbst bei einem großen DNS-Server nach — das ist der Upstream. Cloudflare, Quad9, dein Provider: freie Wahl, jederzeit änderbar.

Schritt 5: Passwort setzen und einloggen

Der Installer würfelt dir am Ende zwar ein Passwort aus, aber eins zum Merken ist bequemer:

pihole setpassword

Im 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.

Dein Handy→ fragt „wo ist X?“ →Pi-hole→ nur wenn erlaubt →Upstream-DNS

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 -up

Ein 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-FTL

Du 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.port

Steht 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