Pi-hole als Docker Container unter OpenMediaVault


Nachdem wir euch in der Vergangenheit ja bereits den netzwerkweiten Werbeblocker Pi-hole auf einem Raspberry Pi vorgestellt hatten, folgt nun eine Anleitung um Pi-hole als Docker Container laufen zu lassen. Die Anleitung kann aber auch auf andere Container leicht angepasst angewendet werden. Insofern ist diese Anleitung auch als ein kleines Docker Tutorial zu sehen.

Wir nutzen dafür das NAS Betriebssystem OpenMediaVault und die Container-Webverwaltung Portainer. Ihr könnt den Docker-Container aber natürlich auch aus z.B. Unraid oder einem nativen Linux/Windows System heraus nutzen. Da Pi-hole allerdings 24/7 laufen muss (er ersetzt ja euren DNS-Server im Netzwerk), halte ich es für sinnvoller diesen auf einem kleinen Server wie einem NAS zu installieren und nicht auf eurem privaten Computer.
Docker und Portainer unter OpenMediaVault
Zunächst einmal benötigt ihr ein NAS mit einem aktuellen OpenMediaVault. Aktuell ist momentan OpenMediaVault in Version 6, welches auf Debian 11 basiert. Dieses hatte ich in meinem Artikel OpenMediaVault 6 - Das freie NAS Betriebssystem in der letzten Woche vorgestellt.
Wer sich noch gar nicht mit OpenMediaVault auseinander gesetzt hat, dem empfehle ich zudem unsere Komplettanleitung für OpenMediaVault, welche ich kürzlich auf die aktuellste Version aktualisiert habe.
Da weder Docker noch Portainer (Webverwaltung für Container) in OpenMediaVault enthalten sind, benötigen wir zunächst die OMV-Extras, die eine Plugin-Sammlung sind und OpenMediaVault um viele Möglichkeiten erweitern. Die OMV-Extras können mit dem folgenden Befehl installiert werden:
wget -O - https://github.com/OpenMediaVault-Plugin-Developers/packages/raw/master/install | bash
Nach der Installation der OMV-Extras könnt ihr über den neuen Menüpunkt nun zunächst die Containerverwaltung Docker und anschließend die Weboberfläche Portainer installieren. Ihr könnt statt Portainer auch Yacht nutzen, welches ebenfalls eine Weboberfläche zur Containerverwaltung ist, allerdings etwas simpler daherkommt als Portainer.

Da sich Portainer und Yacht nicht in der Quere kommen, könnt ihr natürlich auch einfach beide installieren und dann ausprobieren welche Weboberfläche für euch am Besten geeignet ist. Auch die Templates in Yacht sind kompatibel zu Portainer.

Portainer
In dieser Anleitung verwenden wir aber Portainer, da es die am häufigsten genutzte Containerverwaltung ist. Anfänger sollten sich hier nicht von den unzähligen Einstellmöglichkeiten verwirren lassen sondern Schritt-für-Schritt vorgehen. Da wir Docker bereits über OpenMediaVault installiert haben, ist diese Umgebung schon in Portainer angelegt.

Die meisten Container benötigen neben dem Image in dem alle benötigten Daten enthalten sind, noch eine Konfiguration. Diese kann später über ein Template erfolgen oder die Variablen können auch direkt im Container gesetzt werden.
DNS-Einstellungen von OpenMediaVault
Ab OpenMediaVault 5 (Debian 10) müsst ihr zuvor den systemd-resolved Dienst umkonfigurieren, da dieser im Standard den DNS-Port 53 nutzt und ihr diesen aber für den pi-hole Container benötigt.
nano /etc/systemd/resolved.conf
Hier müssen die beiden Zeilen DNS-Cache und DNS-StubListener auf no gesetzt und aktiviert werden indem ihr das führende # löscht.

Die Datei anschließend mit Strg+O speichern. Mit Strg+X schließt ihr die Datei. Anschließend muss noch der systemd-resolved Dienst neu gestartet werden:
systemctl restart systemd-resolved
In Docker einen neuen Container anlegen
Es gibt mehrere Wege um in Docker einen neuen Container anzulegen. Der erste Weg wäre über das DockerHub, welches bereits eingerichtet ist. Docker verwendet hier standardmäßig einen anonymen Docker-Account, der zwar limitiert ist, für die meisten Anwender aber ausreicht. Ansonsten könnt ihr euch jederzeit einen kostenlosen DockerHub Account einrichten.
Im DockerHub findet ihr viele bereits konfigurierte Container, die ihr nur noch geringfügig an eure Bedürfnisse anpassen müsst. Hier findet ihr auch den offiziellen Pi-hole Docker Container.
Um einen neuen Container hinzuzufügen, navigiert ihr über den Menüpunkt Containers in die Containerübersicht. Hier könnt ihr über den Button Add container einen neuen Docker Container erzeugen. Diesen Weg gehen wir in dieser Anleitung aber nicht.

Achtung: solltet ihr den Container über das DockerHub erzeugen, müsst ihr unbedingt noch alle benötigten Ports, Netzwerkeinstellungen, Dateifreigaben und Variablen festlegen. Das geht problemlos, ist aber recht mühselig. Einfacher geht die Erstellung eines Containers meiner Meinung nach über die Erstellung eines Templates, das eine Docker Compose Datei enthält. Diesen Weg zeige ich euch in dieser Anleitung.
Template (Vorlage) erstellen
Unter dem Menüpunkt App Templates und dann Custom Templates lassen sich eigene Templates konfigurieren. Hier werden die kompletten Einstellungen für den Container in einer so genannten Docker Compose Datei gespeichert. In dieser Datei werden Funktionen, Variablen und Netzwerk- und Dateieinstellungen vorgenommen die dann auf den Container angewendet werden.
Ich habe hier einfach ein Template mit dem Namen pi-hole und der folgenden Konfiguration erstellt. Der Zugriff auf die Weboberfläche von Pi-hole erfolgt bei mir über den Port 1080, da der Port 80 ja bereits von OpenMediaVault belegt ist. Ihr greift später auf den Container über die IP-Adresse eures NAS zu, daher dürfen die NAS-Ports hier nicht doppelt vergeben werden. Der Port 67 wird im Pi-hole Container nur benötigt, wenn Pi-hole später als DHCP-Server für euer Netzwerk dienen soll.
Alternativ zu dem Standard Docker Netzwerk, welches immer als Netzwerkbrücke (bridge) läuft, könnt ihr auch dedizierte IP-Adressen vergeben. Dann verhält sich der pihole Container so wie ein normaler Computer im Netzwerk. Da dies aber nicht die einfachste Möglichkeit ist, verwenden wir hier das Brückennetzwerk, der Pi-hole Container ist dann unter der IP-Adresse eures NAS erreichbar.
Die Variablen WEBPASSWORD sowie DNS1 müsst ihr an eure Bedürfnisse anpassen.
version: "3.9" services: pihole: container_name: pihole image: pihole/pihole:latest hostname: pihole ports: - "53:53/tcp" #DNS - "53:53/udp" #DNS - "67:67/udp" #DHCP/Bootstrap - "1080:80/tcp" #Pi-hole Weboberfläche - "10443:443/tcp" #Pi-hole Weboberfläche (SSL) environment: TZ: 'Europe/Berlin' WEBPASSWORD: 'DEINPASSWORT' #Dein Passwort für die Pi-hole Webverwaltung (frei wählbar) DNS1: '192.168.1.2' #Deine Router IP-Adresse DNS2: '' volumes: - './etc-dnsmasq.d/:/etc/dnsmasq.d/' - './etc-pihole/:/etc/pihole/' dns: - 127.0.0.1 #Der Pi-hole nutzt sich selbst als DNS-Server cap_add: - NET_ADMIN #Erlaubt das Bearbeiten von Netzwerkeinstellungen im Container restart: unless-stopped
Habt ihr das Template erstellt, könnt ihr dies nun öffnen und über Deploy the stack den Container installieren.

Docker Containerverwaltung
Unter dem Menüpunkt Containers findet ihr im Anschluss an die Installation euren neuen pihole Container.

Die Weboberfläche von Pi-hole erreicht ihr in eurem Browser über die IP-Adresse eures NAS gefolgt von einem :1080. Um Einstellungen in Pi-hole vorzunehmen, müsst ihr euch zunächst mit eurem Passwort (welches ihr über die WEBPASWORD Variable in der Docker Compose Datei festgelegt habt) anmelden.

Nachdem Pi-hole nun via Docker auf eurem NAS läuft, müsst ihr eure Clients so konfigurieren, dass diese den Pi-hole zur DNS-Auflösung nutzen. Das könnt ihr entweder in den DNS-Einstellungen jedes Clients manuell machen oder noch besser direkt in eurem Router (z.B. eurer Fritzbox) den Pi-hole als DNS-Server einstellen.
Wie dies im Detail funktioniert, haben wir bereits in unserer Pi-hole Anleitung auf einem Raspberry Pi 4 beschrieben. Da sich die Konfiguration identisch zu unserem Pi-hole Container verhält, könnt ihr diesen Teil der Anleitung nutzen.
Ad-Block Filterlisten in Pi-hole erweitern
Im Standard kommt Pi-hole mit einfachen Blocklisten, die ca. 130.000 Domains blockieren. Ihr könnt die Filterung durch den Pi-hole noch deutlich erweitern, indem ihr neue Blocklisten einbindet. Wie dies geht, haben wir in unserer Anleitung Neue Ad-Block Filterlisten in Pi-hole einbinden beschrieben.


Bei Links, die mit einem * gekennzeichnet sind, handelt es sich um Affiliate-Links, bei denen wir bei einem Kauf eine Vergütung durch den Anbieter erhalten.
Kommentare (0)
Diesen Artikel kommentieren:
Hinweis:
- Nur Fragen / Antworten direkt zum Artikel
- Kein Support für andere Hard- oder Software !

E-Mail Benachrichtigung bei neuen Artikeln
