Skip to main content

Practical architecture for combining Pi-hole and Nginx Proxy Manager

✔️ Überblick:Overview: RollenRoles derof einzelnenEach KomponentenComponent

Pi-hole

  • BetreibtRuns lokalenlocal DNS (Portport 53)
  • DientServes alsas DNS-Resolverthe fürDNS deinresolver Netzwerkfor your network
  • StelltProvides lokalelocal DNS-EinträgeDNS bereit,records damitso Gerätedevices Servicenamenresolve auflösenservice könnennames (z. B.e.g., home.lab, jellyfin.lab)
  • MussDoes keinnot HTTPneed (Portto serve HTTP(80) oderor HTTPS (Port HTTPS(443) ausliefern

Nginx Proxy Manager (NPM)

  • BearbeitetHandles den gesamtenall HTTP/HTTPS-VerkehrHTTPS fürtraffic diefor Diensteservices
  • VerwaltetManages SSL-ZertifikateSSL certificates (Let’s Encrypt,Encrypt fallsif gewünscht)you choose)
  • LeitetRoutes eingehendeincoming Anfragenapplication anrequests dieto interneninternal Diensteservices aufon unterschiedlichendifferent Ports/ports/IPs weiter

KernprinzipKey Principle

Pi-hole isthandles ausschließlichDNS fürresolution die DNS-Auflösung zuständig.
only. NPM kümmerthandles sichweb umtraffic Web-Traffic-Routingrouting undand HTTPS-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:hole Lighttpd-Konfigurationhost: anpassen,change sodassLighttpd config so /admin auflistens z.on B. Port 8081 lauscht
  • DNS aufon PortPi-hole still runs on port 53 bleibtand davonis unberü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äteDevices fragenquery Pi-hole-hole DNS aband undget erhaltenyour deineinternal internen Namennames
  • NPM leitetthen dannroutes anhandbased deson Host-HeadersHost weiterheader

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:

Domain / Domain/Hostname Forward To Port HinweiseNotes
pihole.lab.zn80.net 192.168.10.105 8081 Pi-hole Admin-admin UI
jellyfin.lab.zn80.net 192.168.10.xxx 8096 Jellyfin-DienstJellyfin service
bookstack.lab.zn80.net WeitereOther Diensteservices

WichtigeImportant Detailsdetails

  • BeiFor Pi-hole ggf.you denmay Pfadneed to forward /admin korrektcorrect weiterleitenpaths
  • Idealerweise für alle HostsEnable SSL aktivierenfor all hosts (ideally) via Let’s Encrypt (even auchinternal beiDNS) internen Domains)
    → FallsIf Let’s Encrypt diecan’t internenvalidate Domainsvia nichtDNS validierenchallenge kann,for lokalesinternal CA-Zertifikatdomains, oderyou vertrauenswürdigescan selbstsigniertesuse Zertifikata verwendenlocal undCA aufor denself-signed Clientscert einpflegen.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 → expliziteexplicit A-RecordsA prorecords Hostnameper hostname
  • Pi-hole → NPM-NPM IP
  • NPM → internerinternal Dienstservice

ExpliziteExplicit Einträgerecords helfen bei:help:

  • TTL-VerwaltungTTL management
  • SSL-ZertifikatsausstellungSSL certificate issuance
  • FehlersucheTroubleshooting

🧠 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:

  1. A-RecordAdd A record in Pi-hole anlegen
  2. Add Proxy Host in NPM erstellen
  3. 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:

unter:
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: deine

    Domain lokalenames: Domainyour local domain

  • Forward-Hostname/-IP +

    Forward Port:hostname: echteractual Dienstservice IP/port (Pi-hole Adminadmin =UI at 8081)

  • SSL:

    • NeuesRequest Zertifikatnew anforderncert (wennif öffentlichepublic Domaindomain oderor DNS-ChallengeDNS möglich)challenge available)
    • OderOr lokalesuse local CA / vertrauenswürdigesself-signed selbstsigniertestrusted Zertifikat verwendencert

EmpfohleneSet Standard-Optionen:common options:

  • Block exploitsexploits: → aktiviertenabled
  • Expires headers →headers: optional
  • WebsocketsWebsockets: if falls 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!