Dacă îți expui serviciile din home-lab prin Cloudflare Tunnels sau rutezi tot traficul prin Tailscale, prețul comodității este chiar controlul asupra rețelei tale. Cloudflare preia decriptarea traficului (TLS termination) pe serverele lor, îți analizează datele și îți poate tăia accesul oricând are chef. Tailscale îți trece traficul prin servere de relay care nu-ți aparțin — asta dacă nu cumva te complici să-ți găzduiești propriul server de coordonare (Headscale), caz în care tot argumentul de „soluție la cheie” dispare.
Pangolin este o platformă open-source care combină un tunel VPN pe bază de WireGuard, un reverse proxy și controlul accesului pe bază de identitate. Totul într-un singur stack Docker Compose pe care îl ții pe VPS-ul tău. Niciun terț nu-ți interceptează traficul. Fără abonamente. Fără vendor lock-in.
Aici îți arăt exact ce face Pangolin, cum e gândită arhitectura din spate și cum să-l ridici de la zero pe un VPS. La final o să ai un endpoint de tunel perfect funcțional, un dashboard de administrare web și un serviciu expus sigur, protejat de un ecran de autentificare.
Ce este, de fapt, Pangolin
Pangolin este o platformă self-hosted pentru acces remote, bazată pe identități și construită peste WireGuard. Este dezvoltată de Fossorial (o companie din acceleratorul Y Combinator W25) și vine cu licență open-source AGPL-3.0. Proiectul a adunat deja peste 20.000 de stele pe GitHub și primește update-uri solide în mod constant.
Rezolvă o singură problemă, dar o face impecabil: expunerea serviciilor private pe internet printr-un tunel criptat, aplicând politici de acces per-resursă, fără să te oblige să deschizi porturi inbound în rețeaua de acasă sau de la birou.
Stack-ul e format din patru componente care rulează împreună prin Docker Compose:
| Componentă | Rol |
|---|---|
| Pangolin | Control plane. Dashboard-ul web, managementul de useri, politicile de acces și configurarea resurselor. |
| Gerbil | Managerul de tuneluri WireGuard. Ridică și ține în viață tunelurile criptate între VPS și locațiile remote. |
| Newt | Clientul WireGuard din user-space. Rulează direct în rețeaua ta privată. Nu cere root, nu are nevoie de module de kernel și nu te pune să modifici firewall-ul. |
| Traefik | Reverse proxy-ul. Se ocupă de terminarea TLS prin Let's Encrypt și rutează requesturile HTTP către backend-ul corect, direct prin tunel. |
Traefik rezolvă SSL-ul și rutarea HTTP. Gerbil ține în picioare tunelul WireGuard. Newt îți leagă rețeaua privată de VPS. Iar Pangolin le orchestrează pe toate dintr-o interfață curată.
Cum circulă traficul
Arhitectura este clasică, de tip hub-and-spoke. VPS-ul tău e hub-ul central. Fiecare rețea privată (home-lab-ul, rețeaua de la birou, un VPC din cloud) e un spoke care inițiază conexiunea de ieșire (outbound) către hub.
- Un browser face un request HTTPS către
app.domeniultau.ro. - DNS-ul rezolvă adresa către IP-ul VPS-ului. Traefik (pe VPS) preia conexiunea și face terminarea TLS.
- Pangolin verifică dacă vizitatorul are o sesiune validă și drepturi pentru acea resursă.
- Dacă resursa e într-o locație remote, Traefik trimite requestul prin tunelul WireGuard ținut deschis de Gerbil.
- Clientul Newt din rețeaua ta locală primește requestul și îl dă mai departe către serviciul tău intern.
Routerul tău de acasă nu deschide absolut niciun port spre internet. IP-ul tău rezidențial nu ajunge niciodată în DNS. Singurul server expus public e VPS-ul.
Ce înlocuiește Pangolin (și ce nu)
| Instrument | Ce face | Îl poate înlocui Pangolin? |
|---|---|---|
| Cloudflare Tunnel | Reverse proxy prin tunel | Da. Fix același lucru, dar self-hosted. |
| Cloudflare Access | Control de acces pe bază de identitate | Da. E integrat nativ în Pangolin (useri locali, TOTP, OIDC). |
| Tailscale | VPN de tip mesh cu ACL-uri | Parțial. Pangolin expune servicii remote, dar nu creează un mesh complet în care fiecare device vede orice alt device. |
| Tailscale Funnel | Expunere de servicii pe internet | Da. Același use-case, dar fără să depinzi de un cont Tailscale. |
| frp / rathole | Tunel brut, fără strat de autentificare | Da, și vine în plus cu partea de identități și acces, pe care frp nu o are. |
| Authelia / Authentik | SSO / Identity Provider | Parțial. Pangolin știe să facă autentificare nativ. Pentru scenarii complexe, poți lega un provider extern prin OIDC. |
Pangolin nu este un VPN mesh complet. Dacă vrei ca fiecare laptop, telefon și server să comunice direct între ele, Tailscale sau un mesh curat de WireGuard rămân soluțiile corecte. Pangolin strălucește exclusiv la scenariul: „cum expun acest serviciu intern în siguranță pe web”.
Cerințele VPS-ului
Pangolin consumă extrem de puține resurse. Cele trei containere Docker (Pangolin, Gerbil, Traefik) mănâncă împreună undeva la 650 MB RAM. Un VPS amărât cu 1 vCPU și 1 GB RAM e arhisuficient pentru un home-lab cu câteva servicii și utilizatori.
Ai nevoie de o adresă IPv4 publică dedicată și patru porturi deschise la nivel de firewall:
| Port | Protocol | Scop |
|---|---|---|
| 80 | TCP | Trafic HTTP și validarea certificatelor Let's Encrypt |
| 443 | TCP | Trafic HTTPS (dashboard și toate serviciile din spate) |
| 51820 | UDP | Tunelul WireGuard (comunicarea dintre Gerbil și Newt) |
| 21820 | UDP | Conexiunile relay pentru clienți |
Un VPS KVM ServerSpan din gama ct.Ready (2 Core, 2 GB RAM, 25 GB SSD) îți oferă lejer mai multe resurse decât minimul necesar. Memoria RAM în plus te ajută enorm dacă plănuiești să expui zeci de servicii sau să legi mai multe locații fizice.
Sisteme de operare suportate nativ: Ubuntu 20.04+, Debian 11+, Fedora, RHEL, Amazon Linux. Ubuntu 24.04 LTS este de departe cea mai testată și stabilă variantă.
Pasul 1: Configurarea DNS
Înainte să te apuci de instalat, direcționează domeniul spre VPS.
- Creează o înregistrare A pentru
pangolin.domeniultau.rocătre IP-ul VPS-ului. Aceasta va fi adresa de administrare (dashboard-ul). - Creează o înregistrare A de tip wildcard pentru
*.domeniultau.rocătre același IP. Așa îi permiți lui Pangolin să genereze automat subdomenii pentru fiecare serviciu pe care vrei să-l expui.
Dacă îți ții DNS-ul la Cloudflare, asigură-te că proxy-ul este oprit („DNS only” / norul gri). Norul portocaliu rupe validarea certificatelor Let's Encrypt, pentru că traficul este interceptat și decriptat de Cloudflare înainte să ajungă vreodată la VPS-ul tău.
Pasul 2: Configurarea firewall-ului
Lasă deschise doar cele patru porturi esențiale și blochează restul. Pe Ubuntu cu UFW activat, comanda e simplă:
sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw allow 51820/udp sudo ufw allow 21820/udp sudo ufw reload
Verifică situația cu sudo ufw status. Acolo ar trebui să vezi strict porturile menționate mai sus, plus SSH-ul.
Pasul 3: Rulează installer-ul Pangolin
Conectează-te prin SSH la VPS și rulează scriptul oficial de instalare. Acesta îți bagă Docker și Docker Compose (dacă lipseau) și îți generează stack-ul complet automat.
mkdir -p /opt/pangolin && cd /opt/pangolin curl -fsSL [https://docs.fossorial.io/install.sh](https://docs.fossorial.io/install.sh) -o install.sh sudo bash install.sh
Installer-ul te va pune să introduci câteva setări în terminal. Iată ce trebuie să alegi:
- Ediția: Community Edition (varianta gratuită, open-source).
- Domeniul de bază: Domeniul tău principal (ex.
domeniultau.ro). - Domeniul dashboard-ului: Subdomeniul pentru interfața de administrare (ex.
pangolin.domeniultau.ro). - Email Let's Encrypt: O adresă de email validă pe care să primești alertele de expirare pentru certificate.
- Email admin: Adresa ta de login pentru primul cont de administrator.
- Parola admin: Alege o parolă solidă. O să poți activa 2FA ulterior.
- Activează tunelarea Gerbil: Da. Dacă sari pasul ăsta, Pangolin se transformă într-un banal reverse proxy, fără partea de tunel.
- CrowdSec: Opțional, pentru blocarea intruziunilor. Poți să-i dai skip acum și să-l activezi mai târziu.
- Setări SMTP: Opționale. E nevoie de ele doar dacă vrei să trimiți coduri unice de login pe email. Le poți configura și din interfață oricând.
- Instalare Docker: Da, presupunând că ai un VPS curat.
- Pornire containere: Da.
Scriptul va trage trei imagini (fosrl/pangolin, fosrl/gerbil, traefik), generează config-urile și ridică stack-ul. Tot procesul durează cel mult 2-3 minute.
Pasul 4: Verifică dashboard-ul
Deschide https://pangolin.domeniultau.ro într-un browser. Ar trebui să te lovești imediat de ecranul de autentificare Pangolin. Loghează-te cu datele de admin completate mai devreme.
Dacă pagina nu se încarcă, ai greșit ceva la baza setup-ului:
- Verifică de două ori dacă setările DNS duc la IP-ul corect al VPS-ului.
- Asigură-te că porturile 80 și 443 sunt de fapt vizibile din exterior (testează cu
curl -I https://pangolin.domeniultau.rode pe un alt dispozitiv). - Verifică dacă rulează containerele cu
sudo docker compose psîn folderul de instalare. - Citește log-urile ca să vezi unde crapă:
sudo docker logs pangolin.
Pasul 5: Creează un site și distribuie clientul Newt
Intră în dashboard la rubrica „Sites” și creează un site nou. Alege tipul „Newt Tunnel”. Sistemul îți va genera instant un ID de site, o cheie secretă și un URL pentru endpoint. Notează-le pe toate.
Mută-te pe o mașină din rețeaua ta locală de acasă (cea care vede serviciile tale interne) și instalează Newt tot cu Docker Compose:
mkdir -p ~/newt && cd ~/newt
Creează fișierul docker-compose.yml:
services:
newt:
image: docker.io/fosrl/newt:latest
container_name: newt
restart: unless-stopped
environment:
PANGOLIN_ENDPOINT: "https://pangolin.domeniultau.ro"
NEWT_ID: "id-newt"
NEWT_SECRET: "secret-newt"
network_mode: host
Și pornește tunelul:
docker compose up -d
Linia network_mode: host este critică aici. Newt trebuie să poată accesa serviciile din LAN-ul tău direct pe IP-urile lor locale. Dacă omiți asta, containerul Newt va rămâne izolat în rețeaua internă a Docker-ului și nu va vedea nimic altceva în rețeaua casei.
Dacă te întorci în dashboard-ul Pangolin, site-ul tău ar trebui să apară cu statusul „Online” în doar câteva secunde.
Pasul 6: Expune prima ta resursă
Du-te la tab-ul „Resources” și adaugă una nouă. Ai de completat doar trei câmpuri logice:
- Subdomeniu: Hostname-ul pe care îl vrei public (ex.
grafana.domeniultau.ro). - Target: Adresa de IP și portul local al serviciului tău (ex.
192.168.1.50:3000). - Site: Alegi instanța de Newt pe care tocmai ai conectat-o.
În spate, Pangolin va cere automat un certificat SSL de la Let's Encrypt și va configura Traefik-ul să pompeze traficul pe noul subdomeniu direct prin tunelul WireGuard.
Pasul 7: Alege cum te autentifici
Partea genială e că fiecare resursă poate avea propria regulă de acces. Pangolin știe să facă cinci tipuri de autentificare:
- Platform SSO: Utilizatorii se loghează cu un cont făcut direct în Pangolin. Asta e opțiunea standard.
- Parolă: O parolă statică pe care o poți da oricui are nevoie de acces.
- PIN cu 6 cifre: Un cod numeric simplu, util pentru acces rapid.
- Cod unic pe email: Soluția de magic link. Aici ai nevoie de setările SMTP funcționale.
- OIDC: Te legi la un provider extern de identitate (Authentik, Keycloak, Google Workspace, GitHub OAuth etc.).
Pentru tool-urile interne, mergi pe Platform SSO și obligă userii să folosească TOTP (2FA). Dacă vrei doar să-i dai acces rapid unui prieten la un serviciu, setează-i un PIN sau un cod pe mail.
Dacă folosești deja un IdP acasă, leagă-l din Settings și forțează politica OIDC pe resursele pe care le expui. Apropo, ghidul de depanare a buclelor de redirecționare Authentik acoperă fix greșelile clasice de configurare pe care le face lumea când leagă un IdP la un reverse proxy. Aceleași principii de forwardare a header-elor se aplică și aici la Pangolin.
Cum ții Pangolin actualizat
Developerii scot update-uri destul de des. Să faci upgrade e banal:
cd /opt/pangolin sudo cp -r config/ config_backup/ sudo docker compose pull sudo docker compose up -d
Regula de aur: fă-ți un backup la folderul config/ înainte de orice update. Baza de date Pangolin e pur și simplu un fișier SQLite aruncat acolo.
Pentru o producție curată, fixează o versiune minoră exactă în docker-compose.yml. Citește changelog-ul înainte să sari la un major release. Așa cum ne-a dovedit-o incidentul cu Docker 29, update-urile automate oarbe nu înseamnă mentenanță. Testează mereu versiunile noi separat înainte să-ți risti setup-ul de producție.
Când are sens să alegi Pangolin
- Vrei exact ce face Cloudflare Tunnel + Access, dar refuzi să-ți treci traficul prin serverele lor.
- Ai o mână de servicii interne și vrei reguli clare de acces pentru fiecare în parte.
- Ai deja un Identity Provider OIDC funcțional și vrei să-l integrezi ca metodă de remote access.
- Te descurci să administrezi un VPS mic și o mână de containere Docker.
- Ești blocat în spatele unui CGNAT nenorocit sau ai un ISP care nu te lasă să deschizi porturi inbound.
Când Pangolin NU te ajută cu nimic
- Vrei o rețea mesh reală în care laptopul tău să ping-uiască telefonul (pentru asta folosești Tailscale sau un WireGuard mesh pur).
- Nu vrei nicio bătaie de cap cu mentenanța și te doare fix undeva că Cloudflare îți face terminarea TLS (rămâi pe Cloudflare Tunnels). Dacă mergi pe drumul ăsta, ghidul complet de Cloudflare Zero Trust pe VPS îți arată setup-ul de la zero.
- Îți trebuie funcții de enterprise groase, gen loguri pentru audit de conformitate, DLP sau rapoarte SOC 2 (îți asumi și plătești o soluție comercială de ZTNA).
- Ai nevoie doar de un amărât de reverse proxy pentru chestii care sunt deja pe IP public. Pentru asta, un NGINX sau Traefik chior e de ajuns. Iar dacă vrei și push-to-deploy pe acel VPS, Coolify îți rezolvă reverse proxy-ul direct într-un workflow de tip PaaS.
De ce ai nevoie înainte să te apuci de treabă
- Un VPS cu adresă de IPv4 statică și publică (minim 1 vCPU, 1 GB RAM).
- O distribuție de Ubuntu 24.04 LTS proaspătă (sau alt Linux suportat).
- Un nume de domeniu la care controlezi înregistrările DNS.
- Docker și Docker Compose instalate (se ocupă installer-ul dacă nu le ai).
- Orice mașinărlie în rețeaua privată pe care să poți rula Docker (și un Raspberry Pi 4 vechi își face treaba).
Un VPS KVM ServerSpan cu IP public dedicat, acces root complet și porturile 80, 443, 51820 și 21820 libere în firewall bifează din prima secundă toate cerințele de mai sus.
Sursă și Atribuire
Aceast articol se bazează pe date originale ale serverspan.com. Pentru metodologia completă și pentru a asigura integritatea datelor, articolul original trebuie citat. Sursa canonică este disponibilă la: Pangolin pe un VPS: Scapă de Cloudflare Tunnels și Tailscale cu un singur instrument self-hosted.