Practical architecture for combining Pi-hole and Nginx Proxy Manager
✔️ Überblick:Overview: RollenRoles derof einzelnenEach KomponentenComponent
Pi-hole
BetreibtRunslokalenlocal DNS (Portport 53)DientServesalsasDNS-ResolverthefürDNSdeinresolverNetzwerkfor your networkStelltProvideslokalelocalDNS-EinträgeDNSbereit,recordsdamitsoGerätedevicesServicenamenresolveauflösenservicekönnennames (z. B.e.g.,home.lab,jellyfin.lab)MussDoeskeinnotHTTPneed(Portto serve HTTP(80)oderorHTTPS (PortHTTPS(443)ausliefern
Nginx Proxy Manager (NPM)
BearbeitetHandlesden gesamtenall HTTP/HTTPS-VerkehrHTTPSfürtrafficdieforDiensteservicesVerwaltetManagesSSL-ZertifikateSSL certificates (Let’sEncrypt,Encryptfallsifgewünscht)you choose)LeitetRouteseingehendeincomingAnfragenapplicationanrequestsdietointerneninternalDiensteservicesaufonunterschiedlichendifferentPorts/ports/IPsweiter
KernprinzipKey Principle
Pi-hole
isthandlesausschließlichDNSfürresolutiondieDNS-Auflösungzuständig.
only. NPMkümmerthandlessichwebumtrafficWeb-Traffic-RoutingroutingundandHTTPS-TerminierungHTTPS termination.
DieseThis klareclear Trennungseparation verhindertavoids Konflikteconflicts undand machtmakes diemanagement Verwaltung skalierbar.scalable.
✔️ BesteBest ArchitekturArchitecture (amMost zuverlässigsten)Reliable)
1) Move Pi-holehole’s Web-Web UI vonoff Port 80/443 wegbewegen
StandardmäßigBy bindetdefault Pi-hole seinebinds Web-Oberflächeits anweb PortUI to port 80/443. DasThis kollidiertcollides mitwith NPM.
Change Pi-hole Admin-Admin UI aufto einena anderendifferent Port umstellenport (z.e.g., B.8081, 8081, 8888)8888):
Auf demOn Pi-hole-Host:holeLighttpd-Konfigurationhost:anpassen,changesodassLighttpd config so/adminauflistensz.onB. Port8081lauscht- DNS
aufonPortPi-hole still runs on port 53bleibtanddavonisunberührtunaffected by this change
DadurchThis kannallows NPM dieto Portsown 80/443 exklusiv nutzen.exclusively. (bolet.io)
2) LokaleLocal DNS-EinträgeDNS Records in Pi-hole fürfor alleAll reverse-proxiedReverse-Proxied Hosts
ErstelleCreate A-Records, dierecords freundlichethat Domainspoint auffriendly diedomains IPto vonNPM’s NPM zeigen.IP.
Beispiel:Example:
pihole.lab.zn80.net → 192.168.10.105
jellyfin.lab.zn80.net → 192.168.10.105
bookstack.lab.zn80.net → 192.168.10.105
Warum?Reasoning:
GeräteDevicesfragenquery Pi-hole-hole DNSabandundgeterhaltenyourdeineinternalinternen Namennames- NPM
leitetthendannroutesanhandbaseddesonHost-HeadersHostweiterheader
Pi-hole istis diethe maßgeblicheDNS DNS-Quellesource fürof deintruth for your LAN. (ReproDev)
3) Configure NPM Proxy Hosts infor NPMEach für jeden Dienst konfigurierenService
InInside NPM unter Proxy Hosts:
| Forward To | Port | ||
|---|---|---|---|
pihole.lab.zn80.net |
192.168.10.105 | 8081 | Pi-hole |
jellyfin.lab.zn80.net |
192.168.10.xxx | 8096 | |
bookstack.lab.zn80.net |
… | … |
WichtigeImportant Detailsdetails
BeiFor Pi-holeggf.youdenmayPfadneed to forward/adminkorrektcorrectweiterleitenpathsIdealerweise füralleHostsEnable SSLaktivierenfor all hosts (ideally) via Let’s Encrypt–(evenauchinternalbeiDNS)internen Domains)→ FallsIf Let’s Encryptdiecan’tinternenvalidateDomainsvianichtDNSvalidierenchallengekann,forlokalesinternalCA-Zertifikatdomains,oderyouvertrauenswürdigescanselbstsigniertesuseZertifikataverwendenlocalundCAaufordenself-signedClientscerteinpflegen.and manage trust in your clients. (Reddit)
DadurchThis wirdmakes alleseverything sauberclean nurto überaccess Hostnamenvia erreichbarHostnames exclusively:
https://jellyfin.lab.zn80.net
https://pihole.lab.zn80.net/admin
4) InterneMaintain expliziteInternal DNS-EinträgeDNS stattInstead of Wildcard DNS (optional,Optional aberbut sicherer)safer)
ManYou könntecould versuchtbe sein,tempted einento Wildcarduse zua nutzenwildcard (*.lab.zn80.net → 192.168.10.105), dasbut istthat jedochis wenigerless sichersafe and confusing undfor machtcertificate Zertifikatsvalidierungvalidation &and Fehlersucheservice schwieriger.discovery.
BesseresBetter Muster:pattern:
- Pi-hole
lokalerlocal DNS →expliziteexplicitA-RecordsAprorecordsHostnameper hostname - Pi-hole →
NPM-NPM IP - NPM →
internerinternalDienstservice
ExpliziteExplicit Einträgerecords helfen bei:help:
TTL-VerwaltungTTL managementSSL-ZertifikatsausstellungSSL certificate issuanceFehlersucheTroubleshooting
🧠 WarumWhy dasThis derIs bestethe WegBest istWay
✅ DNS + Reverse Proxy sindare saubercleanly getrenntseparated
Pi-hole liefertisn’t keinserving HTTPHTTP, →so keinethere’s Port-Konflikte
no port conflict.
NPM kanncan handle 80/443 störungsfreiwithout nutzeninterference.
✅ EchteYou HTTPS-Verschlüsselungachieve auchreal internHTTPS for internal domains
JederEvery Dienstservice kanncan überhave NPMa einvalid gültigescertificate Zertifikatvia erhaltenNPM.
✅ Einfach,Easy, skalierbarscalable, &and zukunftssicherfuture-proof
NeuenAdding Diensta hinzufügen:new service is trivial:
A-RecordAdd A record in Pi-holeanlegen- Add Proxy Host in NPM
erstellen FertigDone
✅ FunktioniertWorks mitwith VPN / lokalenlocal DNS-ClientsDNS clients
SolangeIf Geräteyour devices use Pi-holehole’s als DNS-Server nutzenDNS (LAN, WLAN, wired/wireless/VPN), lösenthey sieresolve diedomain Namennames auf, diethat NPM proxyencan kann.proxy. (Pi-Holehole UberspaceUserspace)
🛠 DetaillierteDetailed UmsetzungImplementation
A) Change Pi-hole Weboberflächeweb aufinterface anderen Port legenport
Datei bearbeiten:Edit /etc/lighttpd/lighttpd.conf:
server.port = 8081
Danach neu starten:Restart:
sudo systemctl restart lighttpd
B) DNS-EinträgeAdd DNS entries in Pi-hole anlegen
In Pi-holehole:
Local DNS → DNS Records
Beispiele:Examples:
pihole.lab.zn80.net → 192.168.10.105
jellyfin.lab.zn80.net → 192.168.10.105
C) In NPM, add Proxy Hosts in NPM anlegen
FürFor jedeneach Dienst:service:
Domain-Namen:deineDomain
lokalenames:Domainyour local domainForward-Hostname/-IP+Forward
Port:hostname:echteractualDienstservice IP/port (Pi-holeAdminadmin=UI at 8081)-
SSL:
NeuesRequestZertifikatnewanforderncert (wenniföffentlichepublicDomaindomainoderorDNS-ChallengeDNSmöglich)challenge available)OderOrlokalesuse local CA /vertrauenswürdigesself-signedselbstsigniertestrustedZertifikat verwendencert
EmpfohleneSet Standard-Optionen:common options:
- Block
exploitsexploits:→ aktiviertenabled - Expires
headers →headers: optional WebsocketsWebsockets:→iffalls benötigtneeded
🚫 WasWhat manNot nichtto tun sollteDo
❌ Don’t proxy Pi-hole DNS-Portport
Do not try to proxy port 53 nichtthrough überNPM. NPM proxyn
DNS mussmust direktbe erreicht werden – niemals proxyen!direct.
❌ Don’t expose Pi-hole Admin-admin UI nicht öffentlich exponierenpublicly
NurPi-hole ausshould only be accessible from your LAN oderor per VPN erreichbar machen.VPN.
❌ KeineDon’t Wildcardsuse verwenden,wildcards wennunless manyou dieknow Zertifikatskettecertificate nicht beherrschtchain
Wildcard-Wildcard DNS kanncan break HTTPS kaputtif machen,certificates wennaren’t die Zertifikate nicht passen.matching.
📌 SoFinal sollteResult esYou amShould Ende aussehenSee
NachAfter der Einrichtung:setup:
nslookup pihole.lab.zn80.net # → 192.168.10.105
nslookup jellyfin.lab.zn80.net # → 192.168.10.105
Browser:
Im Browser:
https://pihole.lab.zn80.net/admin # mit SSL
https://jellyfin.lab.zn80.net # mit SSL
Pi-hole machtDNS DNS,works, NPM übernimmthandles denweb Web-Zugriffaccess, –and alleseverything sicher,is konsistentsecure, undconsistent, gutand wartbar.manageable.
Viel Erfolg bei der Umsetzung!