Pangolin ist eine OpenSource-Alternative zu Cloudflared, die man selbst hosten kann. Voraussetzung ist ein (virtueller) Server und eine frei erreichbare Domain. Für den Server reicht eine minimale Ausstattung von 1 CPU, 1 GB RAM und 8 GB Massenspeicher. Die kleinsten VPS der gängigsten Hoster sind also völlig ausreichend. Man benötigt aber eine echte Domain und keine Subdomain oder DYNDNS-Adresse.
Voraussetzung ist ein Linux-Server, der ordnungsgemäß installiert und aktualisiert wurde. Hierauf kann man nun das Installer-Script herunterladen und ausführbar machen:
wget -O installer "https://github.com/fosrl/pangolin/releases/download/1.0.0-beta.8/installer_linux_amd64" && chmod +x ./installer
Hier wird die Version 1.0.0 Beta 8 für AMD-Umgebungen geladen. Das ist zum Zeitpunkt der Installation und der Erstellung dieses Beitrages die aktuelle Version. Der Installer wird mit
sudo ./installer
ausgeführt. Der Installer fragt dann ein paar Daten ab.
Base Domain Name: Domain-Name des Servers
Dashboard Domain Name: Name, unter dem der Dienst installiert werden soll; das kann auch die vorgenannte Root-Domain sein.
Let's Encrypt Email: Email-Adresse für die Zertifikatsverwaltung
Dann muss man ein Admin-Email-Postfach angeben. Damit loggt man sich später auch ein. Für das Admin-Passwort gelten folgende Vorgaben:
Dann folgen noch zwei Parameter mit Sicherheitsrelevanz: Sollen sich neue User ohne Einladung anmelden können? Neien! Sollen User eigene Organisationen einrichten können? Nope!
Im Anschluss daran kann man, wenn man will, Email-Credentials eingeben, damit der Server Emails versenden kann. Muss man aber nicht.
Wenn alles stimmt, dann installiert der Installer Docker auf dem Server (falls noch nicht vorhanden) und startet die benötigten Container. Danach kann man sich unter https://pangolin.[domain] einloggen, falls man keinen anderen Dashboard Name vorgegeben hat.
Eine Organisation ist quasi ein Pool von Sites. Die erste Organisation muss bei erster Konfiguration erstellt werden. Weitere können später eingerichtet werden. Organisationen haben Sites.
Sites werden benötigt, um eine Verbindung mit einer Ressource herzustellen. Ein System in dem Netzwerk, in dem man Dienste über Pangolin veröffentlichen möchte, muss quasi als Einfallstor dienen. Zwischen dem Sitesystem und dem Pangolin-Server wird dann ein Tunnel aufgebaut.
Wenn man den Button "+ Add Site" anklickt, dann erscheint ein Dialog, bei dem zunächst die Methode "newt" vorausgewählt ist. In diesem Dialog werden die Codes für die Einrichtung des Newt-Dienstes auf dem Zielsystem einmalig eingeblendet. Später kommt man da nicht mehr dran! Diese Codezeile muss man sich also gut sichern. Darauf wird man mit hinreichender Deutlichkeit hingewiesen. Man kann den Dialog nur bestätigen, wenn man das Häkchen gesetzt hat, mit dem man Stein und Bein schwört, dass man den Code kopiert hat.
Wenn man den Tunnel mit Newt erstellen möchte, dann lädt man zunächst Newt auf das Einfallstor
wget -O newt "https://github.com/fosrl/newt/releases/download/1.0.0-beta.3/newt_linux_amd64" && chmod +x ./newt
und führt Newt dann mit dem Code, den man sich vorher beim Erstellen der Site (hoffentlich) kopiert hat, aus z.B.:
newt --id 4sb04v8jl5j41tu --secret 0zt0zwc5j752f8m5615i7ddmv5raur3i8qlgpxcwgbuixe02 --endpoint https://pangolin.meinedomain.de
Wenn dabei kein Fehler auftritt, dann ist danach die Site online (ggf. muss die Seite im Browser aktualisiert werden).
Wenn man statt Newt Wireguard verwenden möchte, dann erhält man bei Einrichtung der Site den Inhalt einer Config-Datei für Wireguard angezeigt. Man installiert also zunächst Wireguard auf dem System, erstellt eine Config-Datei mit z.B. dem Namen "wg0.conf" in /etc/wireguard/ und startet den Tunnel mit
sudo wg-quick up wg0
Wenn dabei kein Fehler passiert, dann wird ein VPN-Tunnel zwischen dem lokalen System und dem Pangolin-Server aufgebaut.
Jetzt endlich kann man die lokalen Systeme per Pangolin der bösen, kalten Welt aussetzen. Man klickt unter dem Reiter Ressources auf den Button "+Add Resource". Der nachfolgende Dialog ist eigentlich selbsterklärend. Man denkt sich einen Namen für die Ressource aus, eine Subdomain, unter der sie erreichbar sein soll (z.B. jellyfin.meinedomain.de) und wählt aus, welcher Site diese Ressource angehören soll. Dann wird man auf die Seite "Ressources/Connectivity" gelenkt, wo man eingeben kann, ob die Seite per https erreichbar sein soll (ja bitte). Unter Target Configuration kann man nun die Parameter angeben, unter denen die Ressource intern erreichbar ist. Hier kann man ruhig eine Ressource freigeben, die nicht verschlüsselt ist. Die Verschlüsselung übernimmt der Reverse-Proxy Traefik freundlicherweise für uns.
Wenn ich also z.B. als Resource "nextcloud.meinedomain.de" eingegeben habe und bei Target Configuration eingebe:
Dann ist später die Nextcloud unter "https://nextloud.meinedomain.de" erreichbar
Das Erstinstallationsscript erstellt eine Datei "docker-compose.yml" in der die Version von Pangolin hart vorgegeben ist. Diese Datei bearbeitet man (mit Rootrechten) und ändert die Versionsnummer, also z.B.
pangolin:1.0.0.-beta.7
in latest also
pangolin:latest
ab. Wenn man den Container nun stoppt, aktualisiert und neustartet, dann hat man die aktuelle Version. Dazu setzt man in dem Verzeichnis, in dem sich die Datei docker-compose.yml befindet folgende Kommandos ab:
sudo docker-compose down
sudo docker-compose pull
sudo docker-compose up -d