Pihole zu einem lauffähigen Werbeblocker zu verwandeln gibt es viele Möglichkeiten. Doch zunächst zu der Frage, was ist Pihole bzw. was bietet es. Pihole ist in erster Linie ein leichtgewichtiger DNS Sever, welcher Webanfragen im heimischen Netzwerk entgegennimmt. Es übernimmt im Netzwerk sozusagen einen Sortierer, welcher intern mit Blocklisten arbeitet und auf diese Weise Werbeanfragen blockiert. Seine Benutzerfreundlichkeit erhält es durch eine durchdachte GUI, mit welcher die Verwaltung aller Einstellungen leicht von statten geht. Eine besonders praktische Möglichkeit bietet sich an, wenn man Pihole mit Docker kombiniert. Gerade Pihole als kleines Programm ist dazu prädestiniert die Vorteile, die Docker mitbringt auszunutzen. Aber was geschieht, denn Docker auf einen Virtualisierer wie Proxmox trifft? Auch dies ist möglich und das Ergebnis ist, dass sich ein Docker Host als Linux Container unter Proxmox sehr gut realisieren lässt. Welche Schritte nun notwendig sind, um Pihole auf dieser Umgebung einzurichten wird im Folgenden aufgezeigt.
1. LXC Container in Proxmox erstellen
2. Docker installieren
3. Portainer installieren
4. Pihole einrichten
1. LXC Container in Proxmox erstellen
Zunächst beginnen wir mit dem Herunterladen des Container Templates, indem wir unter "Storage" -> "Container Templates" -> auf "URL Herunterladen" oder "Hochladen" klicken, je nachdem wo sich die Datei befindet. Ist das Template erfolgreich heruntergeladen, erstellen wir unter "Erstelle CT" den Container mit den folgenden Eigenschaften:
- Hostnamen vergeben
- unprivilegierter Container
- Kennwort vergeben und bestätigen
- Template auswählen, welches wir weiter oben heruntergeladen haben, etwa debian-11-standard
- Diskgröße: 20 GB
- 1 Cores
- 2048 MiB Speicher, 512 MiB Swap
- IPv4: DHCP
- Abschließen
Nach dem Erstellen des Containers stellen wir sicher, dass unter "Container" -> "Optionen" -> "Features" -> "keyctl" und "Nesting" ausgewählt sind. Anschließend starten wir den Container
2. Docker installieren
Um Docker installieren zu können schalten wir uns auf die Konsole des Containers mit unserem oben eingerichteten Benutzernamen/Passwort. Anschließend verwenden wir den Updatebefehl, um unseren Container auf den neusten Stand zu bringen:
apt update && apt upgrade -y
Um Docker einrichten zu können brauchen wir vorab folgende Programmteile, welche uns erlauben, HTTPS über den Packmanager zu nutzen.
apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
Dann fügen wir den offiziellen GPG Schlüssel von Docker hinzu:
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
Mit dem folgenden Befehl verwenden wir den Stable channel von unserem Repository
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
Um die Änderungen anzuwenden aktualisieren wir den Packetindex und installieren die neuste Version der Docker Engine.
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Um sicherzustellen, dass Docker korrekt installiert wurde, laden wir uns mit folgendem Befehl das "Hello World" Image herunter.
docker run hello-world
3. Portainer installieren
Um Portainer nutzen zu können, wird zunächst ein Volume bereitgestellt, welches von Portainer für die Datenablage verwendet wird. Anschließend erzeugen wir den Portainer Container mit dem zweiten Befehl.
docker volume create portainer_data
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=unless-stopped -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
4. Pihole einrichten
Bevor wir mit der Installation von Pihole beginnen, erstellen wir mit dem folgenden Befehl zunächst zwei Volumes, die später von Pihole verwendet werden.
docker volume create pihole_app
docker volume create dns_config
Um im späterem Verlauf der Installation keine Fehlermeldung zu erhalten, müssen wir den Port 53 auf unserem Docker Server freigeben. Dazu rufen in Proxmox die Konsole von Docker auf und verwenden folgende Befehle:
systemctl disable systemd-resolved.service
systemctl stop systemd-resolved
Anschließend konfigurieren wir die Datei /etc/resolv.conf
nano /etc/resolf.conf
und fügen diese Zeile hinzu
nameserver 8.8.8.8
und kommentieren die verleiben Nameserver aus.
Sind die Vorarbeiten erledigt, gehen wir in der Portainer Oberfläche auf "Containers" -> "Add Container". Dort vergeben wir zunächst einen Namen für unseren neunen Container. Danach müssen wir unser Image auswählen. Dazu geben wir folgendes ein:
pihole/pihole:latest
Als nächstens klicken wir auf "publish a new network port" und legen folgende Portkonfiguration an:
Host: 443 -> Container: 443 (TCP)
Host: 53 -> Container: 53 (TCP)
Host: 53 -> Container: 53 (UDP)
Host: 67 -> Container: 67 (UDP)
Host: 80 -> Container: 80 (TCP)
Anschließend gehen wir auf den Reiter "Volumes" unter "Advanced container settings" und verbinden unsere zuvor angelegten Volumes mit den Containern (auf "Bind" klicken). Dies muss folgendermaßen konfiguriert sein:
map addintional volume:
/etc/dnsmasq.d (/path/in/container)
/var/lib/docker/volumes/dns_config/_data (/path/on/host)
/etc/pihole (/path/in/container)
/var/lib/docker/volumes/pihole_app/_data (/path/on/host)
Als letztens fehlen noch die Umgebungsvariablen. Diese setzen wir wie folgt, indem wir unter "Env" klicken und dann zweimal auf "add environment variable" klicken. Als Namen setzen wir TZ (Timezone)
und WEBPASSWORD. Als Wert vergeben wir im ersten Fall Europe/Berlin und als zweites das Password für die Weboberfläche von Pihole.
Nachdem der Pihole Container läuft, können wir die weiter oben veränderte resolv.conf Datei auf den neusten Stand bringen, indem wir unserem Nameserver wie folgt setzen
nameserver 127.0.0.1
Der Pihole Server ist ab sofort unter http://<docker-IP>/admin erreichbar
Einzelnachweise:
https://docs.docker.com/engine/install/debian/
https://adamtheautomator.com/pihole-docker/
https://www.youtube.com/watch?v=9zL64m2RiRo
https://github.com/pi-hole/docker-pi-hole/#running-pi-hole-docker
https://github.com/portainer/portainer/issues/1918