Zum Inhalt

Ein eigenes Let's Encrypt Zertifikat für die Nextcloud im eigenen Netzwerk

Foto von Jordan Harrison auf Unsplash

In diesem Beitrag geht es darum eine Nextcloud im eigenen Netzwerk mit einem offiziellen Let's Encrypt Zertifikat auszustatten, die eigentlich NICHT über das Internet erreichbar ist.

Im folgenden Beispiel wird die Domain nextcloud.meine-domain.de verwendet.

Warum nicht über das Internet erreichbar?

Die Nextcloud ist nicht über das Internet erreichbar, da alle Teilnehmer über eine VPN-Verbindung auf das eigene, lokale Netzwerk zugreifen. Damit können alle Geräte auch den eigenen Pi-hole verwenden, um auch unterwegs effektiv Werbung zu blockieren.

Mit diesem Setup ist der Austausch von Dateien mit Dritten NICHT möglich. Eine elementare Funktion der Nextcloud ist damit nicht nutzbar.

Welches VPN wird verwendet?

Als VPN wird WireGuard der FRITZ!Box verwendet. Es muss dazu die Funktion MyFritz!Konto aktiviert werden.

MyFRITZ!-Konto aktivieren

WireGuard VPN

Wird ein DynDNS verwendet?

Nein, es wird kein DynDNS verwendet. Es wird eine Domain bei einem Domain Hoster, wie z.B. Strato, verwaltet. Es wird nur für die Erstellung bzw. Aktualisierung eine "temporäre" Weiterleitung der Domain auf die eigenen FRITZ!Box eingerichtet.

Pi-hole ist der Local DNS Records A/AAAA

Im eigenen Netzwerk ist ein Dienst, wie z.B. Pi-hole, der sämtliche DNS-Anfragen aller Geräte beantwortet.

Pi-hole ist ein Werbeblocker, der auf Grundlage von DNS-Anfragen Werbung blockiert.

Beantworten bedeutet, dass der Dienst die Anfrage gegen eine Whitelist und eine Blacklist abgleicht.

  • Whitelist - Anfrage wird ins Internet weitergeleitet und die Website kann aufgerufen werden
  • Blacklist - Anfrage wird geblockt, es erfolgt keine Weiterleitung.

Diese Funktion machen wir uns zunutze!

Der Pi-hole solle als DNS-Server im eigenen LAN den Geräten mitteilen, dass Anfragen an die Nextcloud-Adresse nextcloud.meine-domain.de nicht ins Internet gehen, sondern sofort an die IP-Adresse im eigene Netzwerk.

Die Funktionalität bietet Pi-hole im Standard mit Local DNS Records [A/AAAA].

Stellt ein Gerät die Anfrage bei Pi-hole nextcloud.meine-domain.de, dann sagt er dem Gerät die Zieladresse ist eine IP-Adresse im eigenen Netzwerk.
Das Internet ist für die Beantwortung der Anfrage nicht erforderlich.

Ist die Nextcloud permanent über das Internet erreichbar?

Nein, die Nextcloud ist nur im eigenen LAN, WLAN oder über ein VPN, wie WireGuard, erreichbar, aber über die eigene Domain.

Die Erreichbarkeit der Nextcloud über das Internet ist nur temporär für die Erstellung und / oder Aktualisierung der Let's Encrypt Zertifikats erforderlich.

Warum?

In diesem Beispiel wird die Nextcloud nur in einem bekannten Benutzerkreis verwendet, um Dateien zu tauschen, auf Kalender zuzugreifen, Kontakte zu teilen, etc.

Es ist nicht gewollt, dass externe Dritte auf die Nextcloud zugreifen oder Dateien getauscht werden.

Die wichtige Frage ist, warum der ganze Aufwand?

Der Nextcloud Client hat ein Problem mit der Verwendung von IP-Adressen und selbst signierten Zertifikaten. Da motzt er auf den unterschiedlichen Endgeräten. Deshalb ist eine gute Lösung diese Probleme mit einem offiziellen Let's Encrypt Zertifikat zu umgehen und dafür benötigt man zumindest alle 90 Tage einen temporären Zugang zum Internet.

Diese Anleitung kann auch für andere Dienste adaptiert werden.

Update Let's Encrypt Zertifikat

FRITZ!Box

Für die Erstellung und / oder Aktualisierung eines Let's Encrypt Zertifikats, muss Port 80 auf der FRITZ!Box temporär geöffnet werden.

Der Port 443 muss nicht zwingend geöffnet werden.

Port 80 öffnen

Auf dem Screenshot wird die IP-Adresse der FRITZ!Box angezeigt. Die wird später für die Strato-DNS-Konfiguration benötigt.

Wird ein OpenWrt nach der FRITZ!Box betrieben, dann ist die Port-Weiterleitung dorthin zu leiten. Die Weiterleitung auf das jeweilige Gerät ist in OpenWrt einzustellen. (= Port Forwarding)

Info

Zur 👉 OpenWrt Artikelserie

Alle 👉 OpenWrt Beiträge

Strato

Ohne DynDNS

In Strato ist für die Dauer der Erstellung und / oder Aktualisierung des Let's Encrypt Zertifikats eine Sub-Domain anzulegen.

A-Record

In den Einstellungen der Sub-Domain ist anschließend ein A-Record zu erstellen, der auf die IP-Adresse der FRITZ!Box verweist.

A-Record

Nun kann die Erstellung und / oder Aktualisierung des Let's Encrypt Zertifikats beginnen.

Nach dem erfolgreichen Erstellen / Aktualisieren sollte die Sub-Domain wieder gelöscht werden.

A-Record

Die Freigaben auf der FRITZ!Box sind ebenfalls zu deaktivieren.

FRITZ!Box Freigaben deaktivieren

Let's Encrypt Befehle

Dry-run

sudo certbot renew --dry-run -v

Zertifikate anzeigen

sudo certbot certificates

Zertifikate löschen

sudo certbot delete

Aktualisierung

Nach dem erfolgreichen Trockenlauf kann das bestehende Zertifikat aktualisiert werden.

sudo certbot renew

Zertifikat neu erstellen und automatische Anpassung von Apache

Die komplette Neuinstallation eines Zertifikats und der Anpassung der Apache-Konfiguration funktioniert mit

sudo certbot --apache

Pi-hole

Damit die lokale Auflösung des Domain Name auch bei geschlossenem Port bei der AVM FRITZ!Box und OpenWrt funktioniert, ist ein Local DNS Records [A/AAAA] beim Pi-hole zu erstellen.

Pi-hole Local DNS Records A/AAAA

Manuelle Option mit DNS Challenge

Let's Encrypt Zertifikate lassen sich anstatt mit einer HTTP eine DNS Challenge verwendet.

Tipp: Die Nextcloud muss nicht über das Internet erreichbar sein, wenn man statt der HTTP- die DNS-Challenge verwendet. Dabei erstellt man eine Sub-Domain namens _acme-challenge vom Typ TXT und gibt als Wert das Token ein, das man vom Certbot bekommt. So weiß Let's Encrypt, dass einem die Domain gehört. Nach der Zertifikatsgenerierung kann die Sub-Domain gelöscht werden. (So muss man weder mit DynDNS noch mit Portfreigaben herumfrickeln.)

Danke an @pixelcode@social.tchncs.de 😀

Gib mir gerne einen Kaffee ☕ aus ❗️

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.

Donation via PayPalDonation via LiberaPay

Donation via Bitcoin
Bitcoin Address: bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj

Source

Foto von Jordan Harrison auf Unsplash