Pangolin: Selbstgehosteter Reverse Proxy mit WireGuard-Tunnel
Du kennst das Problem: Du hast einen Haufen cooler Services in deinem Homelab laufen, aber wie bekommst du die sicher ins Internet? Port-Forwarding ist ein Sicherheitsalptraum, deine dynamische IP nervt, und mit CGNAT geht sowieso nichts mehr. Pangolin löst genau dieses Problem auf elegante Weise: Ein selbstgehosteter Reverse Proxy mit WireGuard-Tunnel, der deine Dienste nach außen bringt, ohne dass du auch nur einen einzigen Port in deinem Heimnetz öffnen musst. Klingt zu gut? Lass uns einen Blick darauf werfen.
Das Problem: Homelab-Dienste im Internet
Wenn du Services wie Jellyfin, Nextcloud oder Home Assistant von unterwegs nutzen möchtest, stehst du vor mehreren Herausforderungen:
flowchart LR
Internet([Internet]) -.Port 443.-> Router[Home Router]
Router --> FW{Port Forwarding}
FW --> Service[Homelab Service]
style Router fill:#ff6b6b
style FW fill:#ff6b6b
style Service fill:#51cf66
Die klassischen Probleme:
- Port Forwarding: Jeder offene Port ist ein potentielles Sicherheitsrisiko
- Dynamische IP: Du brauchst DDNS und musst hoffen, dass es zuverlässig funktioniert
- CGNAT: Viele ISPs vergeben gar keine öffentliche IPv4 mehr
- Exponierte Home-IP: Deine echte IP-Adresse ist für jeden sichtbar
- SSL-Zertifikate: Let’s Encrypt HTTP-Challenge wird kompliziert
- Firewall-Regeln: Jeder Service braucht seine eigene Regel
Die meisten Homelab-Betreiber greifen zu VPN-Lösungen wie WireGuard oder Tailscale. Das funktioniert gut für persönlichen Zugriff, aber was ist mit Services, die du öffentlich teilen willst? Nicht jeder will einen VPN-Client installieren.
Wie Pangolin funktioniert
Pangolin dreht das Problem um: Statt eingehende Verbindungen zu deinem Homelab zu routen, baut dein Homelab eine ausgehende Verbindung zu einem VPS auf. Das ist der Schlüssel, denn ausgehende Verbindungen funktionieren immer, egal ob CGNAT, restriktive Firewall oder dynamische IP.
Der Datenfluss sieht so aus:
sequenceDiagram
participant User
participant VPS as VPS (Pangolin)
participant WG as WireGuard Tunnel
participant Newt as Newt Agent
participant Service as Homelab Service
Note over Newt,VPS: Newt initiiert Verbindung (outbound)
Newt->>VPS: WireGuard Handshake
VPS-->>Newt: Tunnel established (10.0.0.x)
Note over User,Service: User greift auf Service zu
User->>VPS: HTTPS Request (jellyfin.domain.com)
VPS->>VPS: Traefik: SSL Termination
VPS->>Newt: Forward via WireGuard
Newt->>Service: HTTP Request (local)
Service-->>Newt: Response
Newt-->>VPS: Response via WireGuard
VPS-->>User: HTTPS Response
Der Workflow:
- Pangolin läuft auf einem VPS mit öffentlicher IP
- Newt (der Agent) läuft in deinem Homelab und verbindet sich ausgehend via WireGuard
- Traffic-Flow: Benutzer → VPS (Pangolin/Traefik) → WireGuard-Tunnel → Homelab (Newt → lokaler Service)
- Kein einziger eingehender Port muss in deinem Heimnetz geöffnet werden
Pangolin nutzt WireGuard für den Tunnel, was bedeutet: State-of-the-art Verschlüsselung, minimaler Overhead und rock-solid Performance.
Die Komponenten
Pangolin ist ein Ökosystem aus mehreren Komponenten, die zusammenarbeiten:
| Komponente | Zweck | Wo läuft es | Port |
|---|---|---|---|
| Pangolin | Management-UI, Konfiguration, API | VPS | 443 (HTTPS) |
| Gerbil | WireGuard-Server, Tunnel-Management | VPS | 51820 (UDP) |
| Traefik | Reverse Proxy, SSL-Termination, Routing | VPS | 80, 443 |
| Newt | WireGuard-Client, Agent für Homelab | Homelab | - |
Pangolin ist das Gehirn der Operation. Über die Web-UI verwaltest du Sites (Homelabs), Resources (Services) und Konfigurationen. Es generiert automatisch Traefik-Configs und steuert Let’s Encrypt-Zertifikate.
Gerbil ist der WireGuard-Server. Für jeden Newt-Agent wird ein WireGuard-Peer konfiguriert. Gerbil verwaltet die Tunnel-Konfigurationen und Schlüssel.
Traefik ist der eigentliche Reverse Proxy. Es nimmt HTTPS-Requests entgegen, terminiert SSL, und routet den Traffic durch den WireGuard-Tunnel zum richtigen Service im Homelab.
Newt ist der Agent, den du in deinem Homelab installierst. Er baut die WireGuard-Verbindung auf, hält sie aufrecht, und leitet Traffic zu deinen lokalen Services weiter.
Pangolin bringt sein eigenes Traefik mit, das auf dem VPS laeuft. Das hat nichts mit dem Reverse Proxy in deinem Homelab zu tun. Wenn du lokal Nginx Proxy Manager (oder einen anderen Reverse Proxy) nutzt, aendert sich daran nichts - Pangolin arbeitet unabhaengig davon. Der Newt-Agent leitet Traffic direkt an die IP:Port-Kombination deiner lokalen Services weiter.
Voraussetzungen
Bevor du loslegst, brauchst du:
Auf der VPS-Seite:
- Einen VPS mit öffentlicher IPv4 (1 vCPU, 1GB RAM reicht völlig)
- Root-Zugriff oder zumindest Docker-Berechtigungen
- Eine Domain mit DNS-Zugriff (z.B. über Cloudflare, Hetzner DNS, etc.)
- Docker und Docker Compose installiert
Im Homelab:
- Docker installiert
- Ausgehende Verbindungen zu Port 51820/UDP erlaubt (normalerweise kein Problem)
- Zugriff auf die Services, die du exposen willst
Nice to have:
- Grundkenntnisse in Docker und Reverse Proxies
- SSH-Zugang zum VPS für Troubleshooting
- Ein Text-Editor deiner Wahl
Für den VPS empfehle ich Anbieter wie Hetzner Cloud (ab 4,15€/Monat), Netcup (ab 2,99€/Monat) oder Contabo. Du brauchst keine High-End-Maschine, eine kleine Instanz reicht völlig.
Installation auf dem VPS
Schritt 1: DNS-Records einrichten
Zuerst richten wir die DNS-Einträge für Pangolin ein. Du brauchst einen A-Record für die Pangolin-UI und einen Wildcard-Record für deine Services:
A pangolin.example.com -> 198.51.100.42
A *.pangolin.example.com -> 198.51.100.42
Ersetze 198.51.100.42 mit der IP deines VPS und example.com mit deiner Domain.
Wenn du Cloudflare nutzt, deaktiviere den Proxy (orange cloud) für diese Records. Let’s Encrypt braucht direkten Zugriff für die HTTP-Challenge.
Schritt 2: Verzeichnisse und Dateien vorbereiten
SSH dich auf deinen VPS und erstelle das Pangolin-Verzeichnis:
1
2
3
4
5
6
7
8
9
10
# Verzeichnisstruktur anlegen
mkdir -p /opt/pangolin/{config,data}
cd /opt/pangolin
# Beispiel-Dateien herunterladen
curl -o docker-compose.yml https://raw.githubusercontent.com/fosrl/pangolin/main/docker-compose.yml
curl -o config.example.yml https://raw.githubusercontent.com/fosrl/pangolin/main/config.example.yml
# Konfiguration kopieren
cp config.example.yml config.yml
Schritt 3: Konfiguration anpassen
Öffne die config.yml und passe sie an deine Umgebung an:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# Pangolin Hauptkonfiguration
pangolin:
domain: pangolin.example.com
email: [email protected]
dashboardPort: 443
# Admin-User für erste Anmeldung
adminUser: admin
adminPassword: changeme123 # WICHTIG: Sofort ändern!
# Gerbil (WireGuard Server)
gerbil:
wireguardPort: 51820
subnet: 10.0.0.0/24
# Öffentliche IP des VPS
publicEndpoint: 198.51.100.42
# Interface-Name
interface: wg0
# Traefik (Reverse Proxy)
traefik:
httpPort: 80
httpsPort: 443
# Let's Encrypt
letsencryptEmail: [email protected]
letsencryptServer: https://acme-v02.api.letsencrypt.org/directory
# Für Testing: staging-Server nutzen
# letsencryptServer: https://acme-staging-v02.api.letsencrypt.org/directory
# Datenbank
database:
type: sqlite
path: /data/pangolin.db
Das Standard-Admin-Passwort solltest du sofort nach der ersten Anmeldung ändern. Pangolin speichert es gehasht in der Datenbank.
Schritt 4: Docker Compose anpassen
Die heruntergeladene docker-compose.yml sollte bereits passen, aber prüfe sie trotzdem:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
version: '3.8'
services:
pangolin:
image: fosrl/pangolin:latest
container_name: pangolin
restart: unless-stopped
volumes:
- ./config.yml:/app/config.yml:ro
- ./data:/data
ports:
- "443:443"
environment:
- CONFIG_PATH=/app/config.yml
depends_on:
- gerbil
- traefik
gerbil:
image: fosrl/gerbil:latest
container_name: gerbil
restart: unless-stopped
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.forwarding=1
volumes:
- ./config.yml:/app/config.yml:ro
- ./data/wireguard:/etc/wireguard
ports:
- "51820:51820/udp"
traefik:
image: traefik:v2.10
container_name: traefik
restart: unless-stopped
command:
- --api.dashboard=false
- --providers.file.directory=/etc/traefik/dynamic
- --providers.file.watch=true
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
- --certificatesresolvers.letsencrypt.acme.email=${ACME_EMAIL}
- --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json
- --certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web
ports:
- "80:80"
- "443:443"
volumes:
- ./data/traefik:/etc/traefik/dynamic
- ./data/letsencrypt:/letsencrypt
environment:
- ACME_EMAIL=${ACME_EMAIL:[email protected]}
Schritt 5: Starten und testen
Jetzt können wir Pangolin starten:
1
2
3
4
5
6
7
8
# Container starten
docker compose up -d
# Logs prüfen
docker compose logs -f
# Status prüfen
docker compose ps
Nach etwa 30 Sekunden sollte Pangolin unter https://pangolin.example.com erreichbar sein. Melde dich mit dem Admin-User an und ändere sofort das Passwort.
Newt-Agent im Homelab installieren
Jetzt kommt der spannende Teil: Wir verbinden das Homelab mit Pangolin.
Schritt 1: Site in Pangolin erstellen
- Login in die Pangolin-UI
- Navigiere zu Sites → Add New Site
- Vergib einen Namen (z.B. “Homelab”)
- Klicke auf Generate Config
- Kopiere die angezeigten Werte:
SITE_IDundSITE_SECRET
Pangolin generiert automatisch:
- WireGuard-Schlüsselpaar für den Newt-Agent
- Peer-Konfiguration in Gerbil
- Eine IP aus dem konfigurierten Subnet (z.B.
10.0.0.2)
Schritt 2: Newt-Agent konfigurieren
Erstelle auf deinem Homelab-Server eine docker-compose.yml für Newt:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
version: '3.8'
services:
newt:
image: fosrl/newt:latest
container_name: newt
restart: unless-stopped
# Network-Mode host für optimale Performance
network_mode: host
cap_add:
- NET_ADMIN
environment:
# Pangolin-Endpunkt
- PANGOLIN_ENDPOINT=https://pangolin.example.com
# Site-Credentials aus Pangolin-UI
- SITE_ID=homelab-abc123
- SITE_SECRET=super-secret-token-xyz
# WireGuard-Konfiguration (wird von Pangolin bereitgestellt)
- WIREGUARD_ENDPOINT=198.51.100.42:51820
- WIREGUARD_ALLOWED_IPS=10.0.0.0/24
# Logging
- LOG_LEVEL=info
volumes:
# Persistente WireGuard-Config
- ./newt-data:/etc/wireguard
Schritt 3: Newt starten und Verbindung prüfen
1
2
3
4
5
6
7
8
# Container starten
docker compose up -d
# Logs prüfen
docker compose logs -f newt
# Verbindung testen
docker exec newt wg show
Du solltest eine Ausgabe wie diese sehen:
1
2
3
4
5
6
7
8
9
10
interface: wg0
public key: ABC123...
private key: (hidden)
listening port: 51820
peer: XYZ789...
endpoint: 198.51.100.42:51820
allowed ips: 10.0.0.0/24
latest handshake: 15 seconds ago
transfer: 2.43 MiB received, 1.87 MiB sent
Wenn “latest handshake” nicht aktualisiert wird, prüfe, ob Port 51820/UDP ausgehend erlaubt ist. Manche restriktive Firewalls blockieren auch ausgehenden UDP-Traffic.
Dienst freigeben (Step-by-Step)
Jetzt kommt der magische Moment: Wir machen einen Service öffentlich zugänglich.
Beispiel: Jellyfin nach außen bringen
Angenommen, Jellyfin läuft in deinem Homelab unter http://192.168.1.100:8096.
Schritt 1: Resource in Pangolin erstellen
- Login in Pangolin-UI
- Wähle deine Site (z.B. “Homelab”)
- Klicke auf Resources → Add Resource
- Fülle das Formular aus:
- Name: Jellyfin
- Target URL:
http://192.168.1.100:8096 - Public Hostname:
jellyfin.pangolin.example.com - Protocol: HTTP (da lokal kein SSL)
- Enable SSL: Ja (Let’s Encrypt)
- Klicke auf Save
Schritt 2: DNS-Record prüfen
Der Wildcard-Record *.pangolin.example.com sollte bereits existieren. Wenn nicht, füge ihn hinzu:
A *.pangolin.example.com -> 198.51.100.42
Schritt 3: Warten und testen
Pangolin macht jetzt automatisch:
- Traefik-Regel erstellen
- Let’s Encrypt-Zertifikat anfordern (dauert 1-2 Minuten)
- Routing via WireGuard konfigurieren
Nach etwa 2 Minuten sollte https://jellyfin.pangolin.example.com erreichbar sein.
1
2
3
4
5
6
7
# Zertifikat prüfen
curl -I https://jellyfin.pangolin.example.com
# Sollte zeigen:
# HTTP/2 200
# server: traefik
# ...
Schritt 4: Weitere Services hinzufügen
Wiederhole den Prozess für weitere Services:
| Service | Target URL | Public Hostname |
|---|---|---|
| Nextcloud | http://192.168.1.101:80 |
cloud.pangolin.example.com |
| Home Assistant | http://192.168.30.85:8123 |
hass.pangolin.example.com |
| Vaultwarden | http://192.168.1.102:8000 |
vault.pangolin.example.com |
| Uptime Kuma | http://192.168.1.103:3001 |
status.pangolin.example.com |
Du kannst theoretisch unbegrenzt viele Services über einen Newt-Agent tunneln. Der einzige Flaschenhals ist die Bandbreite deines VPS.
Sicherheitsfeatures
Pangolin ist nicht nur ein Tunnel, sondern bringt auch wichtige Security-Features mit.
SSL/TLS-Verschlüsselung
Alle öffentlichen Endpunkte werden automatisch mit Let’s Encrypt-Zertifikaten ausgestattet. Der Traffic zwischen User und VPS ist immer verschlüsselt. Der Traffic im WireGuard-Tunnel ist ebenfalls verschlüsselt.
flowchart LR
User([User]) -->|HTTPS/TLS| Traefik[Traefik]
Traefik -->|WireGuard/Encrypted| Newt[Newt Agent]
Newt -->|HTTP/Local| Service[Service]
style User fill:#51cf66
style Traefik fill:#4dabf7
style Newt fill:#4dabf7
style Service fill:#51cf66
Authentication Middleware
Pangolin unterstützt verschiedene Auth-Methoden, die du pro Resource aktivieren kannst:
Basic Auth:
1
2
3
4
5
# In Pangolin-UI: Resource → Authentication
type: basic
users:
- username: admin
password: securepass123 # wird gehasht gespeichert
OAuth2/OIDC:
1
2
3
4
5
6
type: oauth2
provider: google
clientId: your-client-id
clientSecret: your-secret
allowedDomains:
- example.com
SSO via Authentik/Authelia:
1
2
type: forward-auth
endpoint: https://auth.example.com/api/verify
Rate Limiting
Schütze deine Services vor Brute-Force-Angriffen:
1
2
3
4
5
6
# Pro Resource konfigurierbar
rateLimit:
enabled: true
requests: 100
period: 60s # 100 Requests pro Minute
burst: 20
IP Whitelisting
Beschränke Zugriff auf bestimmte IP-Bereiche:
1
2
3
4
5
ipWhitelist:
enabled: true
sourceRange:
- 203.0.113.0/24
- 198.51.100.0/24
Sicherheitsebenen im Überblick
flowchart TB
User([User]) --> CF[Optional: Cloudflare]
CF --> Traefik[Traefik + SSL/TLS]
Traefik --> Auth[Auth Middleware]
Auth --> Rate[Rate Limiter]
Rate --> IP[IP Whitelist]
IP --> WG[WireGuard Tunnel]
WG --> Newt[Newt Agent]
Newt --> Service[Homelab Service]
style Traefik fill:#4dabf7
style Auth fill:#fab005
style Rate fill:#fab005
style IP fill:#fab005
style WG fill:#4dabf7
style Service fill:#51cf66
Access Logs und Monitoring
Pangolin loggt alle Zugriffe:
1
2
3
4
5
6
# Logs auf dem VPS
docker compose logs traefik | grep jellyfin
# Beispiel-Output:
# 2026-02-02T12:34:56Z [jellyfin] 203.0.113.42 - GET /web/index.html 200 1.2ms
# 2026-02-02T12:35:12Z [jellyfin] 203.0.113.42 - GET /api/items 200 45ms
Du kannst auch Metriken nach Prometheus exportieren:
1
2
3
4
5
# In config.yml
monitoring:
prometheus:
enabled: true
port: 9090
Für Production-Umgebungen empfehle ich zusätzlich Fail2Ban auf dem VPS zu installieren, um automatisch IPs nach zu vielen fehlgeschlagenen Login-Versuchen zu blocken.
Vergleich: Pangolin vs. Alternativen
Wie schlägt sich Pangolin im Vergleich zu anderen Lösungen?
| Feature | Pangolin | Cloudflare Tunnel | Tailscale Funnel | FRP |
|---|---|---|---|---|
| Self-Hosted | Ja | Nein | Nein | Ja |
| Management-UI | Ja | Ja (Cloud) | Ja (Cloud) | Nein |
| Eigene Domain | Ja | Ja | Eingeschränkt | Ja |
| SSL/Let’s Encrypt | Automatisch | Automatisch | Automatisch | Manuell |
| Auth-Middleware | Ja | Ja | Nein | Nein |
| Multi-Site | Ja | Ja | Nein | Ja |
| Tunnel-Protokoll | WireGuard | QUIC/HTTP2 | WireGuard | TCP |
| Bandbreite | VPS-abhängig | Unlimitiert | Unlimitiert | VPS-abhängig |
| Kosten | VPS (ca. 3-5€) | Kostenlos | Kostenlos (Beta) | VPS (ca. 3-5€) |
| Open Source | Ja | Nein | Nein | Ja |
| Datenschutz | Volle Kontrolle | CF sieht Traffic | Tailscale sieht Metadata | Volle Kontrolle |
| Komplexität | Mittel | Niedrig | Niedrig | Hoch |
Cloudflare Tunnel ist die einfachste Lösung, aber du gibst Kontrolle ab. Cloudflare terminiert SSL und sieht allen Traffic. Für sensible Daten nicht ideal.
Tailscale Funnel ist super einfach, aber noch in Beta. Es fehlen Features wie Auth-Middleware oder Multi-Site-Support. Gut für simple Use-Cases.
FRP (Fast Reverse Proxy) ist der Klassiker, aber ohne UI sehr mühsam zu konfigurieren. Jede Änderung erfordert manuelle Config-Edits.
Pangolin bietet die beste Balance: Self-Hosted, volle Kontrolle, einfache UI, und moderne Features. Der Preis ist ein günstiger VPS.
Wann welche Lösung?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Cloudflare Tunnel:
- Du willst maximale Einfachheit
- Datenschutz ist nicht kritisch
- Du brauchst DDoS-Protection
Tailscale Funnel:
- Du nutzt bereits Tailscale
- Sehr simple Use-Cases
- Keine Auth-Anforderungen
FRP:
- Du magst Config-Files
- Minimale Dependencies
- Du brauchst absolute Kontrolle
Pangolin:
- Du willst Self-Hosting
- Multi-Site-Management
- Volle Kontrolle + UI
- Production-Ready Features
Tipps für den Betrieb
VPS-Sizing
Für die meisten Homelabs reicht eine kleine VPS-Instanz:
| Dienste | vCPU | RAM | Bandbreite | Kosten/Monat |
|---|---|---|---|---|
| 1-5 Services | 1 | 1GB | 1TB | ~3€ |
| 5-15 Services | 2 | 2GB | 2TB | ~5€ |
| 15+ Services | 2 | 4GB | 3TB | ~8€ |
Bandbreite ist meist der limitierende Faktor, nicht CPU oder RAM. Für Media-Streaming (Jellyfin etc.) solltest du mindestens 2TB/Monat einplanen.
Monitoring mit Uptime Kuma
Überwache die Verfügbarkeit deiner Services:
1
2
3
4
5
6
7
8
9
10
# In deinem Homelab: Uptime Kuma aufsetzen
services:
uptime-kuma:
image: louislam/uptime-kuma:latest
container_name: uptime-kuma
ports:
- "3001:3001"
volumes:
- ./data:/app/data
restart: unless-stopped
Dann über Pangolin exposen: status.pangolin.example.com
Füge Checks hinzu für:
- Alle öffentlichen Services
- Pangolin-UI selbst
- WireGuard-Tunnel (via ping zu 10.0.0.1)
Backup-Strategie
Sichere regelmäßig die wichtigen Daten:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Auf dem VPS
#!/bin/bash
# /opt/pangolin/backup.sh
BACKUP_DIR="/opt/backups/pangolin"
DATE=$(date +%Y%m%d-%H%M%S)
mkdir -p "$BACKUP_DIR"
# Config und Datenbank sichern
tar -czf "$BACKUP_DIR/pangolin-$DATE.tar.gz" \
/opt/pangolin/config.yml \
/opt/pangolin/data/pangolin.db \
/opt/pangolin/data/wireguard
# Alte Backups löschen (älter als 30 Tage)
find "$BACKUP_DIR" -name "pangolin-*.tar.gz" -mtime +30 -delete
echo "Backup erstellt: pangolin-$DATE.tar.gz"
Cronjob einrichten:
1
2
# Täglich um 3 Uhr morgens
0 3 * * * /opt/pangolin/backup.sh
Update-Strategie
Pangolin-Updates sollten mit Bedacht durchgeführt werden:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 1. Backup erstellen
/opt/pangolin/backup.sh
# 2. Changelog prüfen
curl -s https://api.github.com/repos/fosrl/pangolin/releases/latest | jq -r '.body'
# 3. Images pullen (ohne zu starten)
docker compose pull
# 4. Container neu starten
docker compose up -d
# 5. Logs prüfen
docker compose logs -f
Für Production-Umgebungen: Teste Updates zuerst auf einem separaten VPS, bevor du sie auf deinen Live-VPS ausspielst.
Log-Rotation
Verhindere, dass Logs die Disk vollschreiben:
1
2
3
4
5
6
7
8
# In docker-compose.yml für alle Services
services:
pangolin:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
Das limitiert jeden Container auf 3 Log-Files à 10MB.
Performance-Tuning
Für high-traffic Services:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# In config.yml
performance:
# HTTP/2 für bessere Multiplexing
http2:
enabled: true
# Gzip-Kompression
compression:
enabled: true
types:
- text/html
- text/css
- application/json
# Caching für statische Assets
cache:
enabled: true
maxAge: 3600
Wartungsfenster kommunizieren
Nutze Uptime Kuma’s Status-Page Feature, um geplante Wartungen anzukündigen. Alternativ ein simples HTML auf dem VPS:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!-- /opt/pangolin/maintenance.html -->
<!DOCTYPE html>
<html>
<head>
<title>Wartung</title>
<style>
body { font-family: sans-serif; text-align: center; padding: 50px; }
h1 { color: #e03131; }
</style>
</head>
<body>
<h1>Wartungsarbeiten</h1>
<p>Diese Dienste sind vorübergehend nicht verfügbar.</p>
<p>Voraussichtlich wieder online: 14:00 Uhr</p>
</body>
</html>
Traefik so konfigurieren, dass es bei gestoppten Containern diese Seite zeigt.
Fazit
Pangolin ist die perfekte Lösung, wenn du Homelab-Services öffentlich zugänglich machen willst, ohne:
- Ports in deinem Heimnetz zu öffnen
- Deine echte IP zu exposen
- Dich mit DDNS rumzuschlagen
- Auf Cloud-Dienste angewiesen zu sein
Die Kombination aus WireGuard-Tunnel, Traefik-Reverse-Proxy und einer übersichtlichen Management-UI macht Pangolin zur besten self-hosted Alternative zu Cloudflare Tunnel oder anderen Cloud-Lösungen.
Wann solltest du Pangolin nutzen?
Du brauchst öffentlich zugängliche Services (nicht nur VPN für dich persönlich):
- Blog, Portfolio, oder andere Websites
- APIs für externe Clients
- Shared Services (Jellyfin für Familie/Freunde)
- Status-Pages, Monitoring, etc.
Du willst volle Kontrolle über deine Daten:
- Kein Traffic durch Third-Party-Provider
- Selbst gehostete Zertifikate
- Voller Zugriff auf Logs und Metriken
Du hast mehrere Homelabs oder Sites:
- Multi-Site-Support out-of-the-box
- Zentrale Verwaltung aller Tunnel
- Ein VPS für alle Standorte
Wann solltest du Alternativen in Betracht ziehen?
Für persönlichen VPN-Zugriff reicht Tailscale oder WireGuard direkt. Wenn Datenschutz keine Rolle spielt und du maximale Einfachheit willst, ist Cloudflare Tunnel super. Und für extrem simple Use-Cases ohne Auth-Anforderungen könnte Tailscale Funnel ausreichen.
Aber für die meisten Homelab-Betreiber, die ihre Services professionell nach außen bringen wollen, ist Pangolin die beste Wahl. Die Investition in einen günstigen VPS zahlt sich durch Flexibilität, Sicherheit und Kontrolle schnell aus.
Ressourcen
Pangolin:
- GitHub: https://github.com/fosrl/pangolin
- Dokumentation: https://pangolin.fosrl.dev
- Discord Community: https://discord.gg/pangolin
VPS-Anbieter:
- Hetzner Cloud: https://www.hetzner.com/cloud (ab 4,15€/Monat)
- Netcup: https://www.netcup.de/vserver/ (ab 2,99€/Monat)
- Contabo: https://contabo.com/en/vps/ (ab 4,99€/Monat)
Alternativen:
- Cloudflare Tunnel: https://www.cloudflare.com/products/tunnel/
- Tailscale Funnel: https://tailscale.com/kb/1223/tailscale-funnel/
- FRP: https://github.com/fatedier/frp
Tools:
- WireGuard: https://www.wireguard.com/
- Traefik: https://traefik.io/
- Uptime Kuma: https://github.com/louislam/uptime-kuma
Viel Erfolg beim Exposen deiner Homelab-Services!