Seit einigen Jahren suche ich nach einer komfortablen Möglichkeit, meine Dienste im HomeLAB mit eigenen Zertifikaten auszustatten. Dies gestaltet sich als äußerst aufwendig, da jeder Docker-Container mit eigenen selbstsignierten Zertifikaten versehen werden muss. Natürlich gibt es auch Proxy-Lösungen, und hier kommen wir bereits zum eigentlichen Thema.
Der Nginx Proxy Manager (NPM) dürfte einigen Lesern bereits bekannt sein oder wird vielleicht sogar schon verwendet. Hier besteht die Möglichkeit, Letsencrypt-Zertifikate einfach zu erstellen. Die Erstellung erfolgt über eine „HTTP-01 Challenge“, wobei die Prüfung über http://deine-domain/.well-known/acme-challenge/ auf Port 80 erfolgt, der in der Firewall freigeschaltet werden muss. Ebenso muss der Port 443 in der Firewall geöffnet sein.
Was wird benötigt:
- Eine beliebige Domain bei DuckDNS inkl. API-Token
- Einen lauffähigen NPM z.B. http://192.168.10.8:81
- Eine beliebige interne Anwendung z.B. Nextcloud / Portainer etc.
Zuerst wird eine Domain bei DuckDNS angelegt. In diesen Artikel wurde die Domain „home1lab.duckdns.org“ erstellt. Im Kopfbereich der Webseite findet man auch den Token, der für NPM benötigt wird. Bei „Current IP“ muss die IP-Adresse des NPM im lokalen Netzwerk eingetragen werden.
Hinweis: Dort auf keinen Fall die IP-Adresse des Internet Anschluss eingeben !!! Sonst sind alle Dienste öffentlich erreichbar.
Nun wird die neue Domain im NPM als SSL-Zertifikat angelegt. Dort zwei Domainnamen eintragen „home1lab.duckdns.org *.home1lab.duckdns.org“ , „use a DNS-Challenge“ aktivieren, DNS-Provider „DuckDNS“ auswählen, Token eintragen bei „Credentials File Content“, die „Propagation Seconds“ auf 120 Sekunden setzen, aktivieren „I Agree to the Lets Encrypt Terms of Service“ , dann auf „Save“ klicken.
Hinweis: Bei Domain Names müssen zwei Domains eintragen werden, sonst funktioniert die Nutzung mit internen Diensten mit SSL nicht. Ganz wichtig dieser Wildcard Eintrag *.home1lab.duckdns.org muss vorhanden sein, bevor das Zertifikat mit Letsencrypt erstellt wird. Achte exakt darauf dass kein Schreibfehler eingetragen wird. Wenn es zu Fehlermeldung kommt, ist der Regel der Eintrag schon vorhanden und hat das aktuelle Datum. Dort dann einfach nochmal auf „Renew now“ klicken, der Fehler sollte damit behoben sein.
Nun ist ein neuer Proxy Host im NPM Eintrag zu erstellen :
Hier auch wieder darauf zu achten, dass keine Schreibfehler eingetragen werden. Im Reiter SSL wird das neu erstelle Wildcard Zertifikat ausgewählt und dem Proxy Eintrag hinzugefügt. Das Feld „Forward Hostname“ die IP des NPM mit Port 81 eingetragen. Nachfolgend kann die URL aufgerufen werden : https://home1lab.duckdns.org/ und es sollte dort die Login Seite des NPM sichtbar sein.
Nun erfolgt die Eintragung des ersten lokalen Proxy-Hosts für eine beliebige Anwendung im NPM, der mit dem neuen Wildcard SSL-Zertifikat verbunden wird. In diesem Beispiel wähle ich die Anwendung „Portainer“, die über die IP-Adresse 192.168.10.7 und den Port 9000 in meinem lokalen Netzwerk erreichbar ist. Die Anwendung soll über die folgende URL aufrufbar sein: docker.home1lab.duckdns.org.
Jetzt können weitere beliebige lokale Dienste dem NPM hinzugefügt werden. Wenn alles richtig installiert und eingerichtet wurde, sollten die Dienste aus dem Internet nicht erreichbar sein. Der Traffic läuft dann nur über die interne IP-Adresse 192.168.10.8 des Nginx Proxy Manager. Es ist keine Firewall Freischaltung nötig, keine Änderung des Routing erforderlich.
Viel Spaß beim einrichten des lokalen SSL-Proxy Server mit kostenlosen Letsencrypt Zertifikaten.
Bei Fragen wie immer die Kommentarfunktion nutzen.