UGREEN NAS: Pi-hole trotz belegtem Port 53 einrichten
Teil 71 der UGREEN-Serie: Pi-hole 6 auf der UGREEN NAS, obwohl dnsmasq von UGOS Port 53 belegt, mit Bindung an die NAS-Adresse, Kennwort, Upstream per Variable, eigenen DNS-Namen und Ausnahmen.
Geprüft am 04.11.2026 · für UGOS Pro 1.21.0.0190, Pi-hole 2026.10.1
WerbelinksMit * markierte Links sind Werbelinks: Bei einem Kauf erhalten wir eine Provision, der Preis bleibt gleich. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen. Mehr dazu

Pi-hole filtert Werbung und Tracker für alle Geräte im Heimnetz, indem es DNS-Anfragen zu bekannten Werbedomains ins Leere laufen lässt. Diese Anleitung zeigt Pi-hole 6 auf der UGREEN NAS mit Docker. Die wichtigste Hürde kommt gleich am Anfang: Port 53, den jeder DNS-Server braucht, ist auf der UGREEN NAS schon belegt. Wir zeigen, wer ihn belegt, wie Pi-hole trotzdem auf der Adresse der NAS antwortet, und wie Sie Upstream-Server, eigene DNS-Namen und Ausnahmen einrichten.
Getestet auf einer UGREEN DXP4800 Pro mit UGOS Pro 1.21.0.0190 und Docker 29.6.2, mit Pi-hole 2026.10.1 (Core 6.5, FTL 6.8, Web 6.6.1) im Image pihole/pihole.
Voraussetzungen
- Eine UGREEN NAS mit der App Docker und fester IP-Adresse, siehe Teil 63
- SSH-Zugang, siehe Teil 52
- Grundwissen zu Compose, siehe Docker Compose als Grundlage
- Zugang zum Router, um den DNS-Server zu ändern
- Etwa 30 Minuten
Schritt 1: Prüfen, wer Port 53 belegt
Unser erster Versuch mit der üblichen Zeile 53:53 scheiterte beim Start:
failed to bind host port 0.0.0.0:53/tcp: address already in use
Der Befehl ss zeigt, wer den Port hält. Hier die gekürzte Ausgabe, nur die TCP-Zeilen:
sudo ss -ltnup | grep ":53 "
tcp LISTEN 0 32 127.0.0.1:53 users:(("dnsmasq",pid=2785,fd=5))
tcp LISTEN 0 32 [::1]:53 users:(("dnsmasq",pid=2785,fd=7))
tcp LISTEN 0 32 192.100.0.1:53 users:(("dnsmasq",pid=5965,fd=8))
tcp LISTEN 0 32 192.100.1.1:53 users:(("dnsmasq",pid=6102,fd=8))
tcp LISTEN 0 32 192.100.2.1:53 users:(("dnsmasq",pid=6016,fd=8))
Auf unserer NAS liefen mehrere dnsmasq-Prozesse: einer von UGOS auf 127.0.0.1 und ::1 und je einer für die Netze der virtuellen Maschinen auf 192.100.0.1, 192.100.1.1 und 192.100.2.1. Diese Prozesse dürfen Sie nicht beenden. Sie belegen aber nur einzelne Adressen. Die Adresse der NAS im Heimnetz ist frei, und dort kann Pi-hole lauschen.
Verifizieren: In der Ausgabe von ss steht weder die Adresse Ihrer NAS noch 0.0.0.0 mit Port 53.
Schritt 2: Ordner und Compose-Datei anlegen
Passen Sie volume2 an Ihre NAS an, auf vielen Geräten ist es volume1:
sudo mkdir -p /volume2/docker/pihole
cd /volume2/docker/pihole
sudo nano compose.yaml
services:
pihole:
image: pihole/pihole:2026.10.1
container_name: pihole
restart: unless-stopped
ports:
- "192.168.1.10:53:53/tcp"
- "192.168.1.10:53:53/udp"
- "192.168.1.10:8099:80/tcp"
environment:
TZ: Europe/Berlin
FTLCONF_dns_listeningMode: all
FTLCONF_dns_upstreams: "9.9.9.9;149.112.112.112"
volumes:
- ./etc-pihole:/etc/pihole
labels:
- wud.watch=false
Die wichtigsten Punkte:
- 192.168.1.10:53: Ersetzen Sie die Beispieladresse durch die feste Adresse Ihrer NAS. Docker bindet Port 53 dann nur dort und kommt dnsmasq nicht in die Quere.
- 8099:80: die Weboberfläche. Port 80 war auf unserer NAS schon vergeben, 8099 war frei. Auch sie binden wir an die Adresse der NAS, damit sie nicht auf weiteren Schnittstellen wie VPN oder IPv6 erreichbar ist.
- listeningMode all: Ab Werk beantwortet Pi-hole nur Anfragen aus Netzen, an denen es direkt hängt. Im Container ist das nur das Docker-Netz, die Dokumentation des Images empfiehlt deshalb all. Damit beantwortet Pi-hole Anfragen von jeder Adresse. Geben Sie Port 53 deshalb nie im Router nach außen frei, sonst missbrauchen Fremde Ihr Pi-hole als offenen Resolver für Angriffe.
- dns_upstreams: die Server, an die Pi-hole erlaubte Anfragen weiterreicht. Ab Werk leitete Pi-hole bei uns an Google mit 8.8.8.8 weiter, wir haben Quad9 eingetragen. Mehrere Server trennen Sie mit Semikolon.
- wud.watch=false: Fällt der DNS-Server durch ein automatisches Update aus, ist das ganze Netz offline. Aktualisieren Sie Pi-hole von Hand, siehe Teil 69.
Prüfen Sie den Webport vorher, keine Ausgabe bedeutet frei:
sudo ss -ltn | grep :8099
Verifizieren: sudo docker compose config --quiet bleibt ohne Ausgabe.
Schritt 3: Starten und Kennwort setzen
sudo docker compose up -d
Das Image war bei uns 99,5 MB groß, im Betrieb belegte Pi-hole rund 53 MiB Arbeitsspeicher. Nach kurzer Zeit meldete der Container healthy. Die eingebaute Gesundheitsprüfung fragt per dig den Namen pi.hole ab, mehr zu Gesundheitsprüfungen in Docker Compose absichern. Ohne gesetztes Kennwort erzeugt Pi-hole beim ersten Start ein zufälliges und schreibt es ins Protokoll. Legen Sie gleich ein eigenes fest, die Abfrage erscheint verdeckt:
sudo docker exec -it pihole pihole setpassword
Pi-hole speichert danach einen Hash des Kennworts in etc-pihole/pihole.toml, er bleibt auch beim Neuerstellen des Containers erhalten. Die Anmeldung dagegen nicht: Nach dem Neuerstellen des Containers mussten wir uns in unserem Test neu anmelden. Unabhängig davon meldet Pi-hole Sie laut Dokumentation nach 30 Minuten ohne Aktivität ab. Öffnen Sie http://ADRESSE-DER-NAS:8099/admin. Die Weboberfläche läuft über HTTP, das Kennwort geht also unverschlüsselt durchs Netz. Nutzen Sie sie nur im Heimnetz und geben Sie Port 8099 nie im Router frei.
Verifizieren: sudo docker ps zeigt pihole mit dem Status healthy. Nach der Anmeldung zeigt das Dashboard unter Domains on Lists die Zahl der gesperrten Domains, bei uns 77.759 aus der Standardliste.
Schritt 4: Pi-hole testen, bevor das Netz es nutzt
Fragen Sie Pi-hole von einem Rechner direkt ab, bevor Sie den Router umstellen. Auf Mac und Linux geht das mit dig:
dig +short @192.168.1.10 heise.de
dig +short @192.168.1.10 doubleclick.net
193.99.144.80
0.0.0.0
Normale Domains löst Pi-hole auf, Werbedomains beantwortet es mit 0.0.0.0. Unter Windows nutzen Sie nslookup heise.de 192.168.1.10.

Im Query Log sehen Sie jede Anfrage mit dem anfragenden Gerät. Pi-hole sah bei uns die echte Adresse des Rechners, obwohl die Anfrage über den veröffentlichten Docker-Port kam. Die Statistik je Gerät funktioniert also. Wie das Query Log nach allen Schritten aussieht, zeigt Bild 3 am Ende von Schritt 6.
Verifizieren: dig @ADRESSE-DER-NAS doubleclick.net liefert 0.0.0.0, eine normale Domain eine echte Adresse.
Schritt 5: Eigene DNS-Namen vergeben
Unter Settings, Local DNS Records geben Sie Geräten im Netz eigene Namen. Wir haben nas.s-edv.test auf die Adresse der NAS gelegt. Auf der Kommandozeile geht dasselbe so:
sudo docker exec pihole pihole-FTL --config dns.hosts '["192.168.1.10 nas.s-edv.test"]'

Ein Hinweis zu diesem Befehl: Er ersetzt die ganze Liste. Wollen Sie einen Eintrag ergänzen, geben Sie alle bisherigen mit an oder nutzen die Weboberfläche. Nehmen Sie für interne Namen eine Endung, die für private Netze reserviert ist, etwa .home.arpa oder .internal. Wir haben für den Test .test verwendet, das ebenfalls reserviert ist.
Verifizieren: dig +short @ADRESSE-DER-NAS nas.s-edv.test liefert die eingetragene Adresse.
Schritt 6: Ausnahmen und Sperrlisten pflegen
Sperrt Pi-hole eine Domain, die Sie brauchen, geben Sie sie frei. Im Query Log klicken Sie dafür neben der Anfrage auf Allow, oder Sie nutzen die Kommandozeile:
sudo docker exec pihole pihole allow ads.google.com
[✓] Added 1 domain(s):
- ads.google.com
Danach löste Pi-hole ads.google.com bei uns sofort wieder auf. Die Sperrlisten aktualisiert Pi-hole selbst: Im Container steht ein Zeitplan, der sie jede Woche neu lädt, bei uns sonntags um 4:08 Uhr. Von Hand geht das mit:
sudo docker exec pihole pihole -g
[i] Number of gravity domains: 77759 (77759 unique domains)
Weitere Listen tragen Sie unter Lists ein. Mehr Listen sperren mehr, führen aber auch öfter zu Seiten, die nicht mehr richtig laden.

Verifizieren: Nach pihole allow liefert dig für die Domain wieder eine echte Adresse.
Schritt 7: Einstellungen per Variable festschreiben
Pi-hole 6 speichert seine Einstellungen in etc-pihole/pihole.toml. Alles, was Sie mit einer Variable FTLCONF_ in der Compose-Datei setzen, ist in der Weboberfläche gesperrt. Unter Settings, DNS zeigte Pi-hole bei uns ein Schloss neben Upstream DNS Servers, und ein Versuch auf der Kommandozeile scheiterte:
sudo docker exec pihole pihole-FTL --config dns.upstreams '["1.1.1.1"]'
Config option dns.upstreams is read-only (set via environmental variable)

Das ist gewollt: Die Compose-Datei bleibt die einzige Quelle für diese Werte. Laut Dokumentation gilt nach dem Entfernen einer Variable wieder der Standardwert. Ohne FTLCONF_dns_upstreams fragt Pi-hole also wieder 8.8.8.8, bis Sie in der Weboberfläche andere Server wählen. Einstellungen ohne Variable, etwa die eigenen DNS-Namen aus Schritt 5, ändern Sie weiter in der Weboberfläche. Sie blieben bei uns auch nach dem Neuerstellen des Containers erhalten.
Verifizieren: Unter Settings, DNS steht neben Upstream DNS Servers ein Schloss.
Schritt 8: Die NAS im Router als DNS-Server eintragen
Erst wenn der Router die NAS als DNS-Server an alle Geräte verteilt, filtert Pi-hole das ganze Netz. Den Eintrag finden Sie im Router bei den Einstellungen für DHCP oder das Heimnetz, oft als lokaler DNS-Server. Tragen Sie dort die Adresse der NAS ein. Die Geräte übernehmen den neuen Server, wenn sie ihre Adresse neu beziehen, spätestens nach einem Neustart der Verbindung.
Achten Sie auch auf IPv6. Pi-hole lauscht in dieser Anleitung nur auf der IPv4-Adresse der NAS. Verteilt Ihr Router über IPv6 einen eigenen DNS-Server, fragen Geräte teilweise an Pi-hole vorbei. Stellen Sie in den IPv6-Einstellungen des Routers ein, dass er im Heimnetz keinen eigenen DNS-Server für IPv6 bekannt gibt.
Bedenken Sie: Ist die NAS aus oder startet neu, hat das Netz keinen DNS mehr. Tragen Sie keinen zweiten öffentlichen DNS-Server daneben ein, sonst fragen Geräte teilweise an Pi-hole vorbei. Fällt Pi-hole aus, stellen Sie im Router den DNS-Server wieder auf automatisch, dann läuft das Netz sofort ohne Filter weiter. Planen Sie Neustarts der NAS, und behalten Sie den Container mit Uptime Kuma im Blick.
Verifizieren: Auf einem Gerät im Netz zeigt der Query Log nach dem Neuverbinden Anfragen mit dessen Adresse, und in den Netzwerkeinstellungen des Geräts steht nur die Adresse der NAS als DNS-Server.
Eigene Adresse für Pi-hole mit macvlan
Statt der Adresse der NAS kann Pi-hole auch eine eigene Adresse im Heimnetz bekommen. Dafür gibt es in Docker Netzwerke vom Typ macvlan. In unserem eigenen Betrieb läuft ein Pi-hole so, mit einem macvlan-Netz für das Heimnetz und einem kleinen Adressbereich nur für Container. Der Container ist dann ein eigenes Gerät im Netz und braucht keine Portfreigaben. Laut Docker-Dokumentation kann die NAS selbst einen Container im macvlan-Netz aber nicht direkt erreichen, die NAS und ihre anderen Container können dieses Pi-hole dann nicht als DNS-Server nutzen. Außerdem muss das Netz den sogenannten Promiscuous Mode zulassen. Für den Einstieg ist die Bindung an die Adresse der NAS aus dieser Anleitung einfacher.
Typische Fehler
- address already in use bei Port 53: Die Zeile
53:53ohne Adresse kollidiert mit dnsmasq. Adresse der NAS davorsetzen. - Pi-hole antwortet nicht: listeningMode steht nicht auf all. Variable FTLCONF_dns_listeningMode setzen.
- Einstellung lässt sich nicht ändern: Sie ist per FTLCONF_-Variable gesetzt. In der Compose-Datei ändern.
- Plötzlich abgemeldet: Nach 30 Minuten ohne Aktivität endet die Sitzung, bei uns auch nach dem Neuerstellen des Containers. Neu anmelden.
- Port 53 in einer Portfreigabe: Port 53 gehört nie in eine Portfreigabe des Routers.
- Eigener DNS-Eintrag verschwunden:
--config dns.hostsersetzt die ganze Liste. Alle Einträge mitgeben. - Seite lädt nicht mehr: Eine nötige Domain steht auf der Sperrliste. Im Query Log suchen und mit Allow freigeben.
Häufige Fragen
Kann Pi-hole auch DHCP übernehmen?
Pi-hole hat einen eigenen DHCP-Server unter Settings, DHCP. Laut Dokumentation muss der Container dafür Broadcasts im Heimnetz empfangen: im Host-Netz, per macvlan oder über ein DHCP-Relay. Außerdem braucht er die Berechtigung NET_ADMIN. Im Host-Netz stößt Pi-hole auf der UGREEN NAS wieder auf den belegten Port 53. Lassen Sie DHCP beim Router und stellen Sie dort nur den DNS-Server um.
Wie aktualisiere ich Pi-hole?
Lesen Sie die Versionshinweise, ändern Sie das Tag in der Compose-Datei und starten Sie neu. Während des Neustarts gibt es kurz keinen DNS:
sudo docker compose pull
sudo docker compose up -d
Was gehört in die Sicherung?
Der Ordner etc-pihole mit Einstellungen, Listen und Kennwort sowie die Compose-Datei. Unter Settings, Teleporter exportieren Sie die Einstellungen zusätzlich als Datei. Wie Sie Docker-Daten sichern, zeigt Teil 61.
Fazit
Pi-hole läuft auf der UGREEN NAS mit einem Container und rund 53 MiB Arbeitsspeicher. Der einzige Kniff ist Port 53: Weil dnsmasq von UGOS und die VM-Netze ihn auf einzelnen Adressen belegen, binden Sie Pi-hole an die Adresse der NAS. Danach filtert es zuverlässig, sieht jedes Gerät mit seiner Adresse und lässt sich über Variablen sauber festschreiben. Zum Schluss stellen Sie den Router um und planen Neustarts der NAS, weil sonst das ganze Netz ohne DNS dasteht.


