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

Synology DS718+

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 zusammen zu bringen; so habe ich nun auf dem Synology NAS meinen Plex Mediaserver und mein Pi-Hole Adblock laufen. Dies lief vorher separat über ein kleines Lenovo Thinkcentre mit Windows Server und einem Raspberry Pi.

Dieses Tutorial beschäftigt sich ausschließlich mit der Einrichtung eines Pi-Holes 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-Holes 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 macht schlichtweg keinen Sinn bei der NAS Speichergröße) mounten da sie einen Steckplatz dafür übrighat. ...von dem mehr Speicherplatz natürlich abgesehen.

Bevor wir loslegen eine kleine Warnung: Als Pi-Hole DNS Server wird das NAS nicht mehr in den Standby gehen! Siehe Dazu meine Anmerkung ganz unten bei der "Fehlerbehebung"!
-> direkt zum Bereich springen


Konfiguration und Vorbereitung

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


Docker

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.

Docker Installation via Paketzentrum

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.
Anschließend öffnen wir Docker.


Pi-Hole Container

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".
Nun warten wir bis die ~270 MB runtergeladen sind.

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


Pi-Hole Installation

Wie erwähnt "starten" wir das Abbild nach erfolgreichen 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 was passieren sollte. Nach einem Stromausfall zum Beispiel.

Volume

Den Tab "Volume" können wir überspringen. Wer sich damit auskennt kann hier sicherlich noch ein wenig ändern. Zur Grundkonfiguration ist es jedoch nicht notwendig.
Wenn jemand Wert auf eine ausführlichere Konfiguration legt, findet hier die Mounting Einstellungen:
-> 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

Nur relevant, wenn nicht der Host-Mode verwendet wird! Ansonsten können keine Ports konfiguriert werden.
Wer die Clients nicht einzeln aufgelistet haben will, kann hier die Ports wie folgt konfigurieren (und benutzt nicht den Host-Mode):

Lokaler PortContainer-PortTyp
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!

Wieso 8181 auf 80?
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 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.

Umgebung

Nur relevant wenn wir den Host-Mode nutzen.

Wir klicken auf das große Plus-Zeichen um eine neue Variable hinzuzufügen.

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

Wenn der Host-Mode nicht 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.

VariableWert
ServerIP ip_deines_NAS
WEB_PORT 8181

Sollte der Port 8181 nicht funktionieren, kann natürlich ein anderer gewählt werden!


Pi-Hole Konfiguration

Grundsätzlich ist Pi-Hole nun konfiguriert. Wir können jetzt noch ein paar optionale Einstellungen vornehmen.

Optionale Einstellungen

Erweiterte Einstellungen nachträglich ändern

Um Einstellungen vornehmen zu können, wechseln wir nun auf unseren konfigurierten "Container" und stoppen ihn wieder, indem wir auf den blauen Ein-/Ausschalter klicken.
Anschließend können wir auf "Bearbeiten" klicken und können zum Beispiel den Namen usw. ändern.

Mounting konfigurieren

Die Einstellungen des Pi-Holes können in den Docker-Einstellungen "gemounted" werden und sind dann containerübergreifend verfügbar. Aber auch Updates profitieren hiervon.

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

Datei/OrdnerMount-PfadTyp (Schreibbar)
docker/pi-hole/etc-pihole /etc/pihole/ rw (ja)
docker/pi-hole/etc-dnsmasq.d /etc/dnsmasq.d/ rw (ja)

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

-> zurück zur Einrichtung weiter oben

Weitere Einstellungen per Konsole

Wenn der Pi-Hole wieder gestartet wurde, klicken wir auf "Details". Es öffnet sich das Detail-Fenster des Pi-Holes 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 Linux-Konsole.

Updates

Von Zeit zu Zeit 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 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-Holes zu deaktivieren, geben wir folgenden Befehl ein:

  • pihole -a -p

Nochmal das leere Passwort mit Enter bestätigen, fertig!


Pi-Hole Admin Oberfläche

Oberfläche aufrufen

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

Nach eventuellen Login (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.

DNS Tab

Als erstes deaktivieren wir sämtliche Upstream Server.

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

Wir belassen das "Interface listening behavior" auf "Listen only on interface eth0", sofern nur ein Netzwerkanschluss vom NAS genutzt wird.
Wer die Link-Aggregation via BOND-Modus 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.

API/Web Interface Tab

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 total verwursteln. Also entfernen wir ihn aus der Übersicht indem wir unter "Top Clients" die IP des Routers eintragen.
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ärungen:
  • "name_deines_interfaces": Mit Anführungsstrichen muss dies der Name deines Interfaces sein. Dies ist häufig "LAN-Verbindung" mit irgendeiner 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 Fritzbox. Zu anderen Routern kann ich leider keine Hilfe bieten, hingegen müssen wir die Einstellung des lokalen DHCP Servers auf die IP unseres NAS ändern.

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

Die Fritzbox verlangt nach Änderung und Klick auf "Okay" außerdem die Betätigung einer Taste an der Box selbst.
Alle im Netzwerk vorhandenen Geräte haben jedoch noch die alten DNS Server Einstellungen, also den Router selbst. Diese übernehmen die neuen Einstellungen nach Ablauf der Gültigkeit (Screenshot oben: "Gültigkeit 10 Tage"), nachdem sie neugestartet wurden oder die Netzwerkverbindung neu aufgebaut wurden.


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

Backup ziehen bzw. duplizieren

Naja, es ist so betrachtet weniger ein Backup, 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.

Aktualisierten Container runterladen

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 der Installation (weiter oben).
Das Image mit dem Namen "pihole/pihole" markeiren, 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 wirder zurück zu "Container". Dort wählen wir den kopierten Container aus. Anschließend per Rechtsklick "Aktionen" und "Inhalt löschen".
Da wir ein Mountin verwenden, bleiben alle Daten erhalten und lediglich der Inhalt des Containers wird gelöscht. Unsere Daten sind ja außerhalb - dafür das Mounting.

Abschluss

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

Fertig.


Fehlerbehebung

Ich kann keine Webseiten mehr aufrufen.

Natürlich wurden die Einstellungen vorher getestet und das Problem ist nicht im kompletten Netzwerk. Sollte es doch im Netzwerk sein, so kann der DNS Server wieder auf die Router IP geändert werden.
Wenn die Fritzbox 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. ;-)

Meine Handyspiele zeigen keine Werbung mehr. Wie komme ich nun an meine Diamanten?

Richtig. Nicht mehr im heimischen Netzwerk. Der Pi-Hole blockiert Werbung. Das ist sein Job.
Im Query Log im Pi-Hole Interface kann bei notwendigem Bedarf eine Ausnahme deklariert werden. Diese gilt natürlich dann netzwerkweit.


Das NAS geht nicht mehr in den Standby

Ja, leider korrekt. Anders lässt sich kein DNS Server betreiben. Das ist ein relativer Nachteil. Genauer genommen ist der Docker Container Schuld, da ja ein virtuelles Betriebssystem läuft und deswegen aktiv bleibt.
Als einzige Alternative bleibt hier natürlich dann noch ein eigenständiger Raspberry Pi 4.

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, bzw. 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 meinen Standby 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 gehen ;-)
-> zurück zur Warnung ganz oben


Funktioniert diese Anleitung auch auf anderen Synology NAS Systemen?

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


Wie lange hast du für dieses Tutorial gebraucht?

Ca. 3 Stunden. :-)
Mit Änderungen und Anpassungen kumuliert ca. 6 Stunden. Danke für die vielen Rückmeldungen!


So, wir sind nun 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 besucht mich auch gerne auf meinem Discord den ich extra für krasse Leute wie Dich eingerichtet habe ;-).

Tags: Synology, Adblock

Obwohl meine Webseite eigentlich nur ein einziges (technisch notwendiges) Cookie einsetzt, bin ich gesetzlich dazu genötigt, diese Nachricht einzublenden, die, ohne Dich bei jedem Besuch damit zu nerven, somit ein weiteres technisch notwendiges Cookie (für einen Monat) speichert, um Dich darüber zu informieren, dass ich ein technisch notwendiges Cookie einsetze, das eigentlich mit der Schließung des Browserfensters endet.
Tracking findet explizit nicht statt.