Direkt zu den Inhalten springen

Pi-Hole AdBlock via Docker auf dem NAS Synology DS718+ (Update 12.05.2023)

Vor ein paar Wochen kaufte ich mir für gar nicht so wenig Geld ein Synology DS718+ NAS. Die Gründe waren vielseitig und die aktuelle Generation von NAS geben einiges her.
Nach einiger Recherche habe ich mich für das DS718+ entschieden, auch wenn das DS918+ die bessere Wahl gewesen wäre.

Eins der Gründe für den Kauf war die Möglichkeit mehrere eigenständige Geräte auf ein Einziges zusammenzubringen; so habe ich nun auf dem Synology NAS meinen Plex Media Server und mein Pi-Hole Adblock laufen. Dies lief vorher separat über ein kleines Lenovo ThinkCentre mit Windows Server und einem Raspberry Pi.

Diese Anleitung beschäftigt sich ausschließlich mit der Einrichtung eines Pi-Hole auf dem Synology NAS, inkl. grundsätzlicher Konfiguration. Ich setze ab einem bestimmten Punkt ebenfalls voraus, dass sowohl die Funktion als auch grundlegend die Oberfläche des Pi-Hole bekannt ist!

Die Qual der Wahl

Zugegeben: Ich bin nicht ganz selbst draufgekommen. Ja, die Anforderungen waren mir klar, aber den Stein ins Rollen gebracht hat letztlich mein Arbeitskollege Florian W.
Da er schon seit einiger Zeit ein DS918+ in Betrieb hat, konnte ich mich gut mit ihm austauschen und die Rahmenbedingungen abklopfen. Nach ein bisschen intensiverer Recherche hatte ich die Wahl zwischen dem DS918+ (4x4 Festplatten) und dem DS718+ (2x4 TB Festplatten). Wieso also die kleinere Version? Ganz einfach: Ich war nicht bereit, 1.100€ auszugeben. Punkt. 🙂

Wer jedoch dazu bereit ist für ein Vier-Festplatten NAS ca. 1.100€ hinzublättern: Das DS918+ kann optional als Cache eine M.2-SSD (z. B. Samsung MZ-V7E1T0BW SSD 970 EVO 1 TB M.2). Kleiner ergibt schlichtweg keinen Sinn bei der NAS Speichergröße) mounten, da sie einen Steckplatz dafür übrighat. ... von dem mehr Speicherplatz natürlich abgesehen.

Eine kleine Warnung

Bevor wir loslegen und die Arbeit dann doch umsonst war, ein wichtiger Punkt vorweg:
Als Pi-Hole DNS-Server wird das NAS nicht mehr in das Stand-by gehen! Siehe dazu meine Anmerkung ganz unten bei der "Fehlerbehebung"!

🔗 Direkt zum Abschnitt springen ⬇

Konfiguration und Vorbereitung

Natürlich setze ich für die weitere Konfiguration des Pi-Hole ein bereits funktionierendes und eingerichtetes NAS voraus. Diese Einrichtung ist die Grundkonfiguration zur Inbetriebnahme.

Docker Installation

Über das Paketzentrum installieren wir zuerst Docker. Dieses Paket ist für die Virtualisierung des Pi-Hole Containers notwendig. Statt also ein eigenes Raspberry-Pi System oder anderes Linux aufzubauen, setzen wir auf eine saubere, virtuelle Umgebung, die wie für unsere Zwecke gemacht wurde.

Da Docker bei mir bereits installiert ist, steht dort "öffnen". Im Urzustand steht dort "installieren". ;-)

Wir suchen also nach Docker und drücken unter dem blauen "Container-Wal" auf installieren. Der Rest passiert automatisch.
Nach ein paar Minuten ist die Installation abgeschlossen und wir können Docker öffnen

Pi-Hole Container bereitstellen

In Docker wählen wir den Tab "Registrierung" aus.
In der Suche geben wir "pi-hole" ein. Nun wählen wir das "offizielle Pi-Hole Docker Image" aus und klicken oben auf "Download".
Jetzt warten wir bis die ~270 MB heruntergeladen sind.

Für die frische Installation irrelevant:
🔗 Zurück zu "Docker Container aktualisieren"

Sowohl den Prozess des Downloads als auch wann das Docker-Image fertiggestellt ist und wir es "starten" wollen, können wir im Reiter "Abbild" verfolgen.

Pi-Hole Installation

Wie erwähnt "starten" wir das Abbild nach erfolgreichem Download und es öffnet sich ein neues Fenster.
Die dort abgebildete Konfiguration kann eins zu eins übernommen werden. Natürlich haben wir im Hinterkopf, dass mein NAS eine andere IP-Adresse im Netzwerk hat als Deins. :-)

Allgemeine Einstellungen

Als Containername habe ich "Pi-Hole" gewählt. Es ist letztlich nur ein Name zur Identifikation. Es kann auch beim Standardname "pihole-pihole1" bleiben. Der Name kann übrigens im Nachhinein geändert werden!
Nachdem wir den Namen bestimmt haben, klicken wir auf "Erweiterte Einstellungen". Es öffnet sich ein weiteres Fenster.

Erweiterte Einstellungen

Die "Verknüpfung auf Desktop" ist rein optional.
Den "automatischen Neustart" hingegen empfehle ich, damit der Container auch in der Lage ist zu starten, wenn mal etwas passieren sollte. Nach einem Stromausfall zum Beispiel.

Volume

Den Tab "Volume" können wir überspringen. Dies ist zur schnellen Inbetriebnahme und Grundkonfiguration nicht notwendig.
Wer jedoch plant, den Container respektive den Docker gelegentlich auf eine neuere Version aktualisieren zu wollen, kann hier ein "mounting" erstellen.
Dies geht auch noch nachträglich, da die Dateien in jedem Fall vorliegen. Durch das Mounting bilden wir den Ordner lediglich für uns zugänglich auf dem NAS ab.

🔗 Direkt zum Bereich springen ⬇

Netzwerk

Diese Einstellung entscheidet, ob wir in der Pi-Hole Oberfläche jeden Client einzeln sehen oder nicht. Wenn wir stattdessen jeden Port einzeln konfigurieren, wird nur die IP des NAS angezeigt und wir werden niemals herausfinden, welches Gerät welche Anfrage gestellt hat.
Wer grundsätzlich eine gewisse Anonymität im eigenen Netzwerk pflegt, nutzt somit nicht den Host-Mode!

Im Screenshot entscheiden wir uns für den Host-Mode und für die korrekte, einzelne Auflistung jedes Clients, der unseren Pi-Hole als DNS abruft.

Der HOST-Modus ist der empfohlene Weg!

Ports-Einstellungen

Dieser Schritt ist nur relevant, wenn nicht der Host-Mode verwendet wird! Ansonsten können keine Ports konfiguriert werden.

Ferner gibt es durch den Bridge-Mode sogar noch einen gravierenden Nachteil:
Später in der Pi-Hole-Oberfläche werden Clients, die mit dem Netzwerk verbunden sind, nicht einzeln aufgeführt. Das sind erhebliche Einschränkungen, da dadurch nur Einstellungen für das gesamte Netzwerk vorgenommen werden können.

Lokaler Port Container-Port Typ
53 53 TCP
53 53 UDP
8181 80 TCP

Es ist wirklich wichtig, dass die Ports, die auf "automatisch" stehen, auch festgelegt werden. Sonst wird es nicht funktionieren!

Der Netzwerk-Port 53 wird für das Domain Name System (DNS) verwendet, also das, wofür wir das Ganze hier überhaupt machen.

Wieso 8181 auf 80?
Der Port 80 ist bereits vom NAS belegt und würde uns unweigerlich auf die NAS-Oberfläche umleiten. Deswegen setzen wir einen anderen Port, über die wir die Weboberfläche des Pi-Hole zukünftig aufrufen.
Es muss auch nicht zwingend dieser Port sein. Wir können hier jeden anderen (freien) Port wählen.

Links

Auch diesen Tab können wir in der Grundkonfiguration überspringen.

Im HOST-Modus kann dies ohnehin, wie auch die Ports, nicht konfiguriert.

Umgebung

Pauschal nur relevant, wenn wir den Host-Mode nutzen.

Wir klicken auf das große Plus-Zeichen, um eine neue Variable hinzuzufügen.
Nebenbei erwähnt: Das Minus-Zeichen löscht die Zeile, in der der Cursor aktiv ist.

Sollte der Port 8181 nicht funktionieren, kann nachträglich ein anderer gewählt werden!

Variable Wert
ServerIP ip_deines_NAS
WEB_PORT 8181

Wenn der Bridge-Mode (nicht Host-Mode) verwendet wird, im Tab "Umgebung" niemals (niemals!) die "ServerIP" ändern.
Diese Variable unbedingt auf 0.0.0.0 belassen, nicht verändern oder der gesamte Container wird zerschossen und muss neu erstellt werden!
Selbst ein Zurückändern funktioniert nicht.

Diese Variablen müssen gesetzt werden, bevor der Container im Bridge-Mode das erste Mal gestartet wird!
Ansonsten wird es Probleme mit duplizierter ServerIP-Variable geben oder dass der Port nicht zugewiesen werden kann.

Der Pi-Hole ist nun konfiguriert und kann in Betrieb genommen werden.

Pi-Hole Konfiguration

Zuerst stoppen wir den Container im Docker.

Beachte, dass nun keine DNS-Abfragen im Netzwerk mehr beantwortet werden. Das bedeutet grob vereinfacht: kein Internet.

Mounting konfigurieren

Die Einstellungen des Pi-Hole können in den Docker-Einstellungen "gemounted" werden und sind dann containerübergreifend verfügbar. Besonders der Update-Mechanismus profitiert hiervon, da die Einstellungen erhalten bleiben.

Docker hat im Synology Dateisystem bereits einen Docker-Ordner erstellt. Sollte dies nicht der Fall sein, kann egal wo ein neuer Ordner erstellt werden. In diesen werden wir dann die Konfiguration speichern.
Ich nutze den Pfad "docker/pi-hole/".

Die weiteren Unterordner "etc-pihole" und "etc-dnsmasq.d" müssen händisch auf dem NAS erstellt werden. Hierzu hilft die "File Station".

Weitere Ordner für das optionale Mounting können hier gefunden werden: 
What files does Pi-hole use? (Archiv-Link)

🔗 Zurück zur Einrichtung weiter oben ⬆

Datei/Ordner Mount-Pfad Typ (Schreibbar)
docker/pi-hole/etc-pihole /etc/pihole/ rw (ja)
docker/pi-hole/etc-dnsmasq.d /etc/dnsmasq.d/ rw (ja)

Weitere Einstellungen per Konsole

Wenn der Pi-Hole-Container wieder gestartet wurde, klicken wir auf "Details".

Es öffnet sich das Detail-Fenster des Pi-Hole und wir können die Systemeigenschaften, Ressourcenverbrauch und -auslastung, laufende Prozesse und das Protokoll einsehen.

Was wir auch haben, ist ein Terminal: Im entsprechenden Tab können wir per Klick auf "Erstellen" eine Bash (ähnlich im Windows der CMD) öffnen und bekommen die gewohnte Konsolenansicht.

Updates

Vereinzelt bietet es sich an, folgende Befehle durchzuführen:

  • apt-get update
  • apt-get dist-upgrade

Letzteres muss ggf. mit "Y" [Yes] bestätigt werden.

Passwort der Pi-Hole-Oberfläche entfernen

Mein Netzwerk ist sauber und insgesamt sehe ich es unkritisch, weswegen ich zur einfacheren Konfiguration gerne das Passwort ausschalte.
Um das Passwort des Pi-Hole zu deaktivieren, geben wir folgenden Befehl ein:

  • pihole -a -p

Noch einmal das leere Passwort mit Enter bestätigen, fertig!

Die Pi-Hole Admin-Oberfläche

Oberfläche aufrufen

Auf die Oberfläche kommen wir nun über folgende Adresse: ip_deines_NAS/admin/.
Bei mir ist es zum Beispiel: 192.168.2.25/admin/
Natürlich wird meine Adresse bei Dir nicht funktionieren. Ansonsten wäre das ein großer Zufall. ;-)

Nach eventuellen Log-in (je nachdem, ob das Passwort entfernt wurde oder nicht) klicken wir auf der Oberfläche auf "Settings" und landen direkt im Tab "System".

Auffällig ist dort die "Pi-hole IPv4 address 0.0.0.0". Das bleibt auch so. Alles ganz normal.

Als Erstes deaktivieren wir sämtliche Upstream-Server.

Würden wir dies nicht tun, ist die Oberfläche der Fritz!Box nicht aufrufbar, da der jeweilige Upstream-Server diese nicht kennt.

Dann setzen wir unseren Router als "Custom 1". Meine Fritz!Box hat die IP 192.168.2.1. und der Port #53 setzt sich automatisch dahinter.

Wir können das "Interface listening behavior" auf "Listen only on interface eth0" eingestellt lassen, sofern nur ein Netzwerkanschluss vom NAS genutzt wird.

Wer im NAS die Link-Aggregation via BOND-Modus (Archiv-Link) nutzt, muss auf "Listen on all interfaces" einstellen! [Danke an Alex für diesen Hinweis!]

Auch im Zweifel kann "Listen on all interfaces" genutzt werden. ;-)

Und zuletzt deaktivieren wir noch den "non-FQDNs Forward" und ignorieren das "Conditional Forwarding" ganz unten vollständig.

Anschließend klicken wir dann ganz unten auf "Save" um die Änderungen zu speichern.

Das Dashboard beinhaltet eine Top-Liste. Dort werden die meisten Abfragen und andere Informationen angezeigt.

Da unser Router jedoch unser Upstream Server ist, wird dieser immer ganz oben auftauchen, immer die meisten Abfragen haben und grundsätzlich die schöne Ansicht vollkommen verwursten. Also entfernen wir ihn aus der Übersicht, indem wir unter "Top Clients" die IP des Routers eintragen.

Dies können im "API/Web Interface"-Tab ändern.

Diese Änderung ist optional und kann auch später noch jederzeit und ohne Einschränkungen vorgenommen werden.

Einstellungen testen

DNS-Server lokal ändern

Um die Einstellungen lokal zu testen, öffnen wir nun eine Kommandozeile als Administrator und tippen Folgendes ein:
netsh interface ip set dns "name_deines_interfaces" static ip_deines_nas

Erklärung:

  • "name_deines_interfaces": Mit Anführungsstrichen muss dies der Name deines Interfaces sein.
    Dieses heißt häufig "LAN-Verbindung", ggf. mit einer Nummer.
    Dies herauszufinden geht schnell per [win]+[R], dann "ncpa.cpl".

Wenn dies passiert ist, können wir im CMD per ipconfig -all in der Spalte DNS-Server gegenprüfen, dass er die Änderung genommen hat.

Nun können wir eine Webseite aufrufen und schauen, was passiert. Der Aufruf lässt sich außerdem auf dem Pi-Hole im "Query Log" nachvollziehen.

Wenn das nun funktioniert, setzen wir uns im CMD lokal wieder zurück auf DHCP per
netsh interface ip set dns "name_deines_interfaces" dhcp

Einstellungen im Netzwerk ausrollen

Nachdem wir den Test erfolgreich durchgeführt haben, können wir im Router den DNS des DHCP Servers ändern.
Wichtig: Bitte dringend aufpassen und nicht den DNS-Server der Internetverbindung ändern. Sonst wird keine Webseite mehr funktionieren.

DNS-Server im Router ändern

Ich habe eine Fritz!Box. Zu anderen Routern kann ich leider keine Hilfe bieten, im Grundsatz sollten sich die Einstellungen jedoch gleichen. Grob zusammengefasst, müssen wir die DNS-Einstellung des lokalen DHCP-Servers (i. d. R. unser Router) auf die IP unseres NAS ändern (wo der Pi-Hole läuft), damit dieser zukünftig die DNS-Anfragen bearbeitet.

Für die Fritz!Box gehen wir wie folgt vor:

  1. In der Fritz!Box finden wir die Einstellung hier:
  2. Menü: Heimnetz
  3. Menü: Netzwerk
  4. Tab: Netzwerkeinstellungen
  5. Überschrift: IP-Adressen
  6. Knopf: IPv4-Adressen
  7. Lokaler DNS-Server

Abschluss der Installation

Die Installation ist nun beendet und der Pi-Hole bearbeitet ab nun die DNS-Anfragen.

Auf dem Dashboard des Pi-Hole sollte auch bereits die ersten Anfragen protokolliert sein.

Berücksichtige, dass der DNS-Server bei vielen Netzwerk-Geräten zwischengespeichert ist. Zwar hat dieser einen sogenannten "Lease", der besagt, dass nach der eingestellten Zeit der DNS-Server erneut vom DHCP-Server (unverändert der Router) abgerufen werden soll, jedoch ist dieser einige Tage lang.
Um diesen Prozess zu beschleunigen, entweder das Gerät neu starten oder einmal stromlos machen.

Solange der alte DNS-Server (Router) im jeweiligen Gerät eingetragen ist, wird es nicht im Pi-Hole protokolliert oder eingeschränkt.

Docker Container aktualisieren

In der Pi-Hole Oberfläche selbst kann man gelegentlich (recht selten) ganz unten im "Footer" den Hinweis sehen, dass eine neue Version zur Verfügung steht.
Das Update ist unter bestimmten Voraussetzungen sehr einfach und schnell durchzuführen.

Voraussetzungen

  • Es wird ein Mounting benutzt. Sonst sind alle Einstellungen und historische Daten weg.
  • Es liegt wirklich ein Update vor. Sonst ist die Arbeit umsonst. ;-)
  • Es ist noch Platz auf dem NAS
  • Der mentale Zustand des Admins ist ausreichend, um keine Fehler zu machen

Vorbereitungen

Sicherungskopien ziehen, genauer gesagt duplizieren.

Na ja, es ist so betrachtet weniger eine Sicherung, denn wir duplizieren einfach den Container. Damit haben wir noch den alten und können notfalls wieder umschalten, ohne, dass was verloren geht.

Das Duplizieren geht im Punkt "Container". Dort auf dem Pi-Hole Container ein Rechtsklick und "Einstellungen" [oder markieren und oben im Menü Einstellungen wählen]. Dann "Einstellungen duplizieren", einen Namen wählen und es taucht ein zweiter Container auf.
Ich habe mich dazu entschieden als neuen Namen nicht "...-copy" zu verwenden, sondern packe das aktuelle Datum dahinter. Zum Beispiel: "...-20200402". Aber muss jeder selbst wissen.

Den aktualisierten Container herunterladen

Im Punkt "Abbild" suchen wir den Container "pihole/pihole:latest" raus. Manch einer hat auch nur diesen. Diesen markieren, oben im Menü auf "Löschen" drücken.

Im Punkt "Registrierung" nutzen wir oben die Suchfunktion und geben "pihole" ein. Dieser Schritt gleicht sich dem der frischen Installation.

🔗 Pi-Hole Container bereitstellen

Das Image mit dem Namen "pihole/pihole" markieren, oben auf "Download" drücken. Das NAS sendet eine Benachrichtigung, wenn der Download abgeschlossen ist. Dies kann ein paar Minuten dauern.

Container austauschen

Wenn der Download fertig ist, gehen wir wieder zurück zu "Container". Dort wählen wir den kopierten Container aus. Anschließend per Rechtsklick "Aktionen" und "Inhalt löschen".
Da wir ein Mounting verwenden, bleiben alle Daten erhalten und lediglich der Inhalt des Containers wird gelöscht. Unsere Daten sind außerhalb - dafür das Mounting.

Abschluss

Der Container ist nun aktualisiert.
Sofern der alte Container noch im Betrieb ist, diesen einfach herunterfahren und den neuen starten.
Bitte prüfen, dass auch wirklich alles funktioniert hat, die historischen Daten und alle Einstellungen (besonders die Blocklisten usw.) noch da sind und dann kann der alte Container gelöscht werden.

Fertig.

Fehlerbehebung

Das NAS geht nicht mehr in das Stand-by

Ja, leider korrekt. Anders kann kein DNS-Server betrieben werden, da ansonsten für eine bestimmte Zeit keine Anfragen im Netzwerk verarbeitet werden können. Das ist ein relativer Nachteil. Genauer genommen ist der Docker-Container Schuld, da ja ein virtuelles Betriebssystem läuft und deswegen aktiv bleibt.

Bedauerlicherweise gibt es in dieser Konfiguration nur die Möglichkeit, einen eigenständigen Raspberry Pi 4 nutzen. 

Wir könnten optional im DHCP-Server (DHCP-Einstellungen des Routers) einen zweiten DNS-Server konfigurieren und hier zum Beispiel einen im Internet nutzen (1.1.1.1 oder 8.8.8.8). Damit sind die Anfragen natürlich im 

Hingegen ist es für mechanische Festplatten ohnehin nicht so gesund, immer und immer wieder anzudrehen. Mechanische Festplatten haben sogenannte "Anlauf-Zyklen" und diese liegen bei ca. 50.000. Das heißt, wenn die Festplatten einen Spindown macht oder ganz steht, kann diese 50.000-mal anlaufen.
Wenn wir auf das NAS nur immer kurz zugreifen und es dann z. B. nach 10 Minuten wieder schlummern soll, dreht die Platte im schlimmsten Falle 140-mal am Tag an. Natürlich ist das eine sehr grobe Rechnung, jedoch zerrt es an der Langlebigkeit. Ich würde behaupten eine neue Platte, genauer gesagt neue Platten kaufen kostet mehr als der Stromverbrauch, der dadurch stattdessen entsteht. Und ökologisch betrachtet ist die Herstellung einer neuen Platte ebenfalls sicherlich aufwendiger als der Stromverbrauch selbst.
Aber das muss jeder für sich selbst entscheiden. Ich habe mein Stand-by auf 4 Stunden gestellt. So bleibt es tagsüber aktiv und schlummert nur nachts und morgens. Aber durch den Pi-Hole im Docker wird es ohnehin nicht mehr schlummern gehe.n 😉

🔗 Zurück zur Warnung ganz oben ⬆

Ich kann keine Webseiten mehr aufrufen

Natürlich wurden die Einstellungen vorher getestet und das Problem ist nicht im kompletten Netzwerk. Oder??? 😉

Sollte es doch im gesamten Netzwerk sein, so kann der DNS-Server wieder auf die Router-IP geändert werden.

Wenn die Fritz!Box plötzlich nicht mehr per Namen (im Browser "fritz.box") aufgerufen werden kann, muss zwangsläufig die IP genutzt werden.
Ganz ehrlich gesagt: Wenn wir an diesem Punkt sind, sollten dringend grundlegende Netzwerkkenntnisse und das Verständnis von "Testen" angeeignet werden!

Ansonsten in den Docker Containereinstellungen nachprüfen, dass die Ports korrekt gesetzt sind (sofern nicht der Host-Mode verwendet wird) und nichts mehr auf automatisch stehen. Dies passiert mal gerne aus Faulheit. 😅

Relevante Sprungmarken:

Meine Handyspiele zeigen keine Werbung mehr. Wie bekomme ich nun Diamanten?!?!

Erst einmal "herzlichen Glückwunsch"; der Pi-Hole arbeitet korrekt. Der Pi-Hole blockiert Werbung. Das ist sein Job. Er kann nicht unterscheiden, ob Du nun absichtlich oder unabsichtlich Werbung angezeigt bekommst. Dein heimisches Netzwerk ist jetzt vollständig werbefrei.

Im Query Log im Pi-Hole Interface kann bei notwendigem Bedarf eine Ausnahme für bestimmte Adressen deklariert werden. Diese gilt natürlich dann für das gesamte Netzwerk.

Eleganter ist es, für das Handy oder das bestimmte Gerät eine eigene Gruppe im Pi-Hole anzulegen und dafür dann andere Listen zu deklarieren.

Funktioniert diese Anleitung auch auf anderen Synology NAS Systemen?

Mit Sicherheit.

Jedes Synology NAS, welches mit DSM 6.2 oder jünger läuft, sollte ähnlich oder gar gleich aufgebaut sein.

Wie lange hast Du für diese Anleitung gebraucht?

Ca. 3 Stunden. 🙂
Mit Änderungen und Anpassungen kumuliert ca. 9 Stunden. Danke für die vielen Rückmeldungen!

So, wir sind jetzt am Ende angekommen. Ich hoffe, ich konnte helfen. Selbstverständlich freue ich mich immer über ein paar nette Worte, Vorschläge, Verbesserungen oder Anmerkungen.

Schreibt mir ruhig per Telegram oder besuche mich auch gerne auf meinem Discord, den ich gezielt für erstklassige Leute, wie Dich, eingerichtet habe. 😎

Chatbot