Manchmal gibt es Dienste, die möchte man nicht offen im Internet erreichbar machen.
Nun ist es gerade bei einer steigenden Anzahl dieser Dienste nicht sonderlich komfortabel diese immer per IP-Adresse zu nutzen. Zudem zeigt der Browser ständig die Zertifikatswarnungen an.
Nun könnte man natürlich eine interne Zertifizierungsstelle einrichten und darüber Zertifikate ausstellen. Dies ist aber mit einem erheblichen Aufwand verbunden und macht nur in größeren IT-Umgebungen Sinn. Im Homelab wäre das der Overkill.

In kleinen Umgebungen kann auch mit einem Trick gearbeitet werden.
Nämlich mit den Nginx Proxy Manager.
Dieser bietet die Option, Let’s Encrypt Zertifikate mithilfe einer DNS Challange zu erstellen und automatisch zu erneuern, ohne dass dabei ein Port von außen erreichbar sein muss.

Alles was ihr dafür braucht ist eine Domain bei einem unterstütztem Anbieter. Da ich meine Domain über Cloudflare administriere, bezieht sich dieses Tutorial darauf. Es kann aber auch eine ganze Palette anderer Domainanbieter genutzt werden.

Vorraussetzungen:
– Domain bei Cloudflare oder einem anderen unterstützten Anbieter
– Linux Server mit Docker und Docker-Compose
– Konfigurierbarer DNS-Server im Netzwerk

Schritt 1:
Nginx Proxy Manager mit Docker-Compose installieren:

mkdir -p ~/npm
cd npm/
nano docker-compose.yml
------------------------
version: '3'
services:
  app:
    image: jc21/nginx-proxy-manager:latest
    restart: always
    ports:
      - 80:80    # HTTP
      - 81:81    # Admin-Interface
      - 443:443  # HTTPS
    environment:
      DB_SQLITE_FILE: "/data/database.sqlite"
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

Anschließend kann der Container gestartet werden:

sudo nano docker-compose up -d

Der Nginx Proxy Manager sollte nun per IP erreichbar sein (z.B. http://192.168.1.2:81).


Schritt 2:
Um das SSL-Zertifikat ohne Portfreigabe zu erstellen benötigen wir nun ein Cloudflare API-Token.
Wie das erstellt wird, habe ich bereits in diesem Beitrag erklärt:

Im Nginx Proxy Manager können wir nun im Menü „SSL Certificates“ über den Button „Add SSL Certificate –> Let’s Encrypt“ das Zertifikat erstellen.
Im Feld „Domain Names“ kann die root Domain nach folgendem Muster eingetragen werden: *.domain.bsp
Damit wird ein Wildcard-Zertifikat erstellt, welches für jede Subdomain gültig ist.
Achtet darauf, das Token gegen das eben erstellte auszutauschen.

Schritt 3:
Nun kann im Menü „Hosts“ über den Button „Add Proxy Host“ die erste Adresse erstellt werden.
Tragt dabei die IP ein, die intern erreichbar sein soll und wählt unter „SSL“ das Wildcard-Zertifikat aus.
Bei manchen Diensten muss auch die Option „Websocket Supprt“ aktiviert werden. Probiert einfach aus, welche Einstellungen für euren Dienst funktionieren.

Schritt 4:
Im letzten Schritt müssen wir die Domain noch über unseren DNS-Server bekannt machen. Legt hierfür einfach einen A-Record mit der Subdomain an, welche auf die interne IP Adresse zeigt.

Hinweis:
Wenn euer DNS-Server im Homelab z.B. eine Fritzbox oder ein Router vom Netzbetreiber ist, kann es sein, dass ihr einen separaten DNS-Server wie z.B Technitium o.ä. nutzen müsst, da einige Router diese Funktion nicht bieten. Hier gibt es diverse Möglichkeiten und Anleitungen im Internet.

Von NRTX

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert