Pi-Hole für Synology (Docker)

Einrichtung Container

Für die Einrichtung des Docker Containers muss zunächst das richtige Image heruntergeladen und installiert werden. Hierzu suchen wir in der Synology Docker Anwendung unter dem Reiter Registrierung nach cbcrowe für das cbcrowe/pihole-unbound docker image. Ist dies heruntergeladen können wir das Docker Image im Reiter Image per Doppelklick starten.

Es öffnet sich ein Pop-Up-Fenster in dem wir für die Netzwerkumgebung den Host-Modus (und nicht den Bridge-Modus) auswählen.

Allgemeine Einstellungen

Im Hauptreiter können wir unserem Docker Image einen Namen geben (z.B. „Pi-Hole). Der Name wird später auch als Hostname für unsere Pi-Hole Instanz genutzt. Außerdem sollte das Auswahlfeld Autoneustart ausgewählt werden, damit unser Docker-Image nach einem Neustart des Servers bzw. der Docker Applikation ebenfalls automatisch startet.

Unter dem Menüpunkt Erweitere Einstellungen lassen sich dann die wesentlichen Umgebungsparameter für den reibungslosen Zugang sowie Betrieb festlegen. Die folgenden Parameter sollten hier ergänzt werden:

TZ = Europe/Berlin
ServerIP = IP-Adresse NAS
DNSMASQ_USER = root
DNSMAQ_LISTENING = all
WEBPASSWORD = Password für Weboberfläche
WEB_PORT = 8080

Unter dem Reiter Links müssen wir nichts einstellen.

Nachdem wir die Umgebungsparameter eingerichtet haben, gehen wir zurück in das Haupteingabefeld und hier auf den Reiter Volume Einstellungen. Der Reiter Port Einstellungen muss nicht weiter bearbeitet werden.

Volume Einstellungen

Im Bereich „Volume Einstellungen“ haben wir die Möglichkeit Dateien und Ordnerpfade sowie Mountpunkte einzurichten. Für unser Pi-Hole Setup müssen wir zwei Ordner hinzufügen. Hierbei empfiehlt es sich im Synology Ordnerverzeichnis die erforderlichen Ordner als Unterordner des Docker-Verzeichnisses einzurichten. Die folgenden zwei Ordner sind zwingend anzulegen:

/pihole-configs/
/dnsmasq.d-configs/

Der Ordnerpfad könnte daher wie folgt aussehen:

/docker/pihole/pihole-configs/
/docker/pihole/dnsmasq.d-configs/

Als Mount-Pfad geben wir in Bezug auf den jeweiligen Ordner das Folgende an:

/etc/pihole/
/etc/dnsmasq.d/

Im Anschluss an die Konfiguration starten wir den Container und rufen anschließend die soeben eingerichtet Pi-Hole Instanz mithilfe unseres Browsers unter Verwendung der hinterlegten ServerIP:8080 auf und schauen ob der Container ordnungsgemäß läuft. Mit Eingabe des WEBPASSWORD können wir uns auf der Webseite einloggen um die nachfolgenden Einstellungen vorzunehmen.

Einrichtung Pi-Hole

Nach Anmeldung auf dem Pi-Hole sollte über die linke Menüleiste der Bereich Settings aufgerufen werden um wesentliche Einstellungen für die beabsichtigte DNS Auflösung vornehmen zu können.

DNS Settings

Im Bereich Einstellungen wählen wir die Unterseite DNS Settings aus um Einstellungen für unseren Unbound DNS Upstream Server vornehmen zu können. Standardmäßig ist hier bereits der Google Upstream DNS Server angewählt. Dies gewährleistet, dass nach Vornahme der DNS Netzwerk Konfiguration, eine IP-Adressenauflösung durch Google vorgenommen wird. Da wir jedoch keinen Dritten (hier Google) mit der DNS Auflösung beauftragten möchten, sondern unseren eigenen Rekursiven DNS Server für die Auflösung von Hostnamen verwenden möchten, deaktivieren wir den ausgewählten Upstream Server durch entsprechende Abwahl. Stattdessen nutzen wir das Feld Custom 1 auf der rechten Seite der Einstellungsseite und tragen dort die IP-Adresse inkl. Port des durch Docker mit installierten Unbound-Servers ein. Dieser ist über 127.0.0.1#5335 zu erreichen.

Die Interface Settings sollten überdies permit all origins ausweisen, da wir dies über die Allgemeinen Einstellungen mittels DNSMAQ_LISTENING = all so eingerichtet haben.

Schließlich müssen wir noch dafür sorgen, dass unsere Clientgeräte mit ihrem Hostnamen und nicht mit der ihnen zugewiesenen IP-Adresse im Pi-Hole Query Log auftauchen. Hierzu navigieren wir in den Bereich Advanced DNS Settings im unteren Bereich der Seite. Dort wählen wir Use Conditional Forwarding aus und tragen folgende Werte z.B. für eine Fritzbox im Standard DHCP Adressbereich ein:

Local Network in CIDR Notation: 192.168.178.0/24
IP Adress of your DHCP Server: 192.168.178.1
Local Domain Name: fritz.box

Beachte: Die obigen Einstellungen sind in abhängig vom Router bzw. DHCP Server zu treffen.

Anschließend speichern wir die Einstellungen mit Klick auf Save.

Web Interface Settings

Im Bereich Webinterface können wir noch das Design der Weboberfläche anpassen und bestimmen, ob uns die Client Queries farblich hervorgehoben angezeigt werden sollen oder nicht.

Privacy Settings

In den Privacy Einstellungen kann für den DNS Resolver eingestellt werden, was über die Client Queries im Log ausgewiesen werden soll. Möglichst datenschutzfreundlich sind hierbei natürlich der Anonymous Modus, bei dem sämtliche Informationen über den Einzelrequest unkenntlich gemacht werden. Die andere Extreme bildet hierbei die Einstellung Show Everything bei der sowohl die Domain, der Zeitpunkt des Abrufs als auch der Reply dokumentiert werden.

Ad-Lists Settings

spannender ist jedoch die Konfiguration der anzuwendenden Ad-Listen. Pi-Hole kommt hier von Haus aus mit einer Standardblockliste. Über die Einstellung Adlists lassen sich jedoch auch individuelle Blocklisten hinzufügen. Die folgenden sind zu empfehlen:

https://dbl.oisd.nl/
https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
https://codeberg.org/spootle/blocklist/raw/branch/master/blocklist.txt

Die URL wird zum hinzufügen einfach in das Adressfeld eingegeben, Optional lässt sich eine Beschreibung zwecks Konkretisierung der Blockliste hinzufügen.

Gruppenmanagement

Im Bereich Gruppenmanagement lassen sich Nutzergruppen definieren für die spezielle Einstellungen gelten sollen. Exisitieren Personen im Haushalt die bspw. Werbung und Tracker bei Nutzung der Google- oder Bing-Suche erhalten möchten, empfiehlt es sich hier eine Nutzergruppe zu definieren bei der keine der vorher eingerichteten Adlists Anwendung finden.

Aktualisierung der Blocklisten

Die eingetragenen Blocklisten werden automatisch regelmäßig durch den Pi-Hole Server aktualisiert. Trotzdem exisitiert die Möglichkeit jederzeit eine Aktualisierung der Blocklisten zu erzwingen. Hierzu navigiert man einfach in den Bereich Tools und wählt Update Gravity aus. Mit Klick auf den Update Button werden die Einträge entsprechend aktualisiert.

Reverse Proxy Einstellungen

Der Pi-Hole Server kann standardmäßig über den Browser durch Eingabe der im Docker Container gewählten IP-Adressen-Port-Kombination erreicht werden (z.B. 192.168.178.7:8080). Möchte man seinen Pi-Hole Server mit einer individuellen Domain ansteuern wollen, empfiehlt es sich hierfür einen Proxy Server einzurichten.

Synology bietet hierfür von Haus aus eine Möglichkeit unter Systemeinstellungen -> Anmeldeportal -> Erweitert. Unter dem Punkt Reverse Proxy lassen sich entsprechende Einträge definieren. Um über eine eigene Domain (Intern oder mittels registrierter Domain) auf den Pi-Hole zuzugreifen erstellen wir zwei neue Einträge mit folgenden Werten:

Für die Weiterleitung auf Port 80 (http Server Request)

Reverse Proxy Name = Pi-Hole 80
Protokoll = http
Hostname = DOMAINNAMEN (z.B. pi.hole)
Port = 80
Zielprotokoll = http
Zielhostname = ServerIP
Zielport = 8080

Für die Weiterleitung auf Port 443 (https Server Request)

Reverse Proxy Name = Pi-Hole 443
Protokoll = https
Hostname = DOMAINNAMEN (z.B. pi.hole)
Port = 443
Zielprotokoll = http
Zielhostname = ServerIP
Zielport = 8080

DNS Netzwerk Konfiguration

Durch die vorgenommenen Einstellungen wird unser rekursiver DNS Server leider noch nicht durch die im Netzwerk befindlichen Clientgeräte genutzt. Hierfür müssen wir entweder unseren Clientgeräten beibringen den Pi-Hole Server zum Auflösen der DNS Request zu verwenden oder wir nehmen die Einstellung auf Netzwerkebene durch eine Anpassung der Router-Konfiguration vor. Nachfolgend hierzu eine kurze Erläuterung inkl. Vor- und Nachteile der jeweiligen Konfiguration.

DNS Konfiguration über Endgerät

Die DNS Konfiguration über das jeweilige Client Endgerät ist für Setups zu empfehlen, in denen nur einige wenige Geräte im Netzwerk über den Pi-Hole laufen sollen. Im jeweiligen Endgerät ist in den Netzwerkeinstellung nach dem Eintrag DNS Zuweisung oder IPv4-DNS-Server zu suchen. Dort trägt man dann die ServerIP aus dem Docker Setup ein. Der größte Nachteil an dieser Art der Konfiguration liegt auf der Hand. Er kann mitunter sehr zeitintensiv sein, hat jedoch keine Auswirkungen auf Netzwerkebene, sodass Pi-Hole-Serverausfälle z.B. keinen Einfluss auf das Funktionieren des Internets haben. Denn ohne DNS Auflösung lassen sich die Webseiten bekanntlich nicht mehr ansteuern.

DNS Konfiguration über Router

Sinnvoller ist in den meisten Fällen eine Konfiguration auf Netzwerkebene zu implementieren. Hierbei bieten sich zwei Lösungen mit unterschiedlichen Vor- und Nachteilen an.

Modifikation DNS Upstream Server

Zum einen kann über die meisten Router eine Modifikation des DNS Upstream Servers vorgenommen werden. Im Fritzbox Interface bspw. geht dies über den Menüpunkt Internet -> Zugangsdaten -> DNS-Server. Dort lassen sich zwei Alternativen für den DNSv4-Server eintragen. Üblicherweise greift man hierbei auf Anbieter wie Google mit 8.8.8.8 oder Cloudflare mit 1.1.1.1 für die Namensauflösung zurück. Um die DNS Auflösung über unseren Pi-Hole Server ausführen zu lassen, muss hier lediglich im bevorzugsten DNSv4-Server die ServerIP aus dem Docker Setup eingetragen werden. In das Alternativfeld lässt sich dann ein Backup DNS Resolver wie z.B. Google eintragen.

Diese Vorgehensweise hat den Vorteil, dass die Namensauflösung auch dann funktioniert, soweit und sofern der Pi-Hole Server nicht mehr erreichbar ist (z.B. aufgrund einer Störung). Dann nämlich greift der Router auf die im Alternativfeld hinterlegte Adresse zurück. Wer seine Daten keinem DNS Resolver Anvertrauen möchte kann sogar eine zweite Pi-Hole Instanz im Netzwerk einrichten (unter Verwendung einer anderen ServerIP) und die entsprechende Adresse im Alternativfeld hinterlegen.

Nachteilig ist jedoch, dass in einer solchen Konfiguration die Namensauflösung im Pi-Hole Log nicht das betreffende Clientgerät ausweist, sondern lediglich den Router, da dieser und nicht das Clientgerät die DNS-Anfrage an den Server kommuniziert (Kette: Client -> Router -> Pi-Hole -> Unbound). Wer ohnehin mit datenschutzfreundlichen Voreinstellungen unterwegs ist, kann den Nachteil leicht verschmerzen.

Modifikation DNS über DHCP Server

Alternativ lässt sich die ServerIP des Pi-Holes auch im DHCP Server des Routers konfigurieren. In der Fritzbox geht dies über den Menüpunkt Heimnetz -> Netzwerk -> Netzwerkeinstellungen -> IPv4-Einstellungen -> Heimnetz -> Lokaler DNS-Server. Ist die ServerIP eingetragen, wird diese bei DNS-Anfragen von Clientgeräten als Standardantwort für die Namensauflösung an das Clientgerät zurückgemeldet; mit der Folge, dass das Clientgerät direkt beim Pi-Hole Server anfragt. Hierdurch wird sichergestellt, dass die Clientanfragen auch als solche im Pi-Hole Log erfasst werden, was weitere Analysen und Fehlerbehebungen begünstigt.

Nachteil dieser Lösung ist jedoch, dass (zumindest bei Nutzung einer Fritzbox als Router) kein Alternativ DNS-Server für die Clientanfragen definiert werden kann. Ist der Pi-Hole Server also nicht erreichbar (z.B. aufgrund einer Störung) sind Clients nicht mehr in der Lage Namensauflösungen vorzunehmen. Nutzer (und vor allem technische Laien) gehen in einem solchen Fall davon aus, dass die Internetverbindung zum Provider gestört ist. Faktisch liegt damit das Internet brach.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert