Pangolin: Plataforma SASE de código abierto para acceso seguro y conectividad

Publicado por


pangolin
Plataforma SASE Open Source

Pangolin: Plataforma SASE de código abierto para acceso seguro y conectividad

Construida sobre WireGuard, unifica redes y seguridad en una sola plataforma autoalojable con VPN zero-trust, proxy inverso, PAM y gateway IA

Vídeo tutorial en YouTube

Mira el vídeo completo sobre cómo instalar y usar Pangolin: Plataforma SASE de código abierto para acceso seguro y conectividad en el canal GENBYTE:

¿Qué es Pangolin: Plataforma SASE de código abierto para acceso seguro y conectividad?

Pangolin es una plataforma SASE (Secure Access Service Edge) de código abierto, construida sobre WireGuard, con una misión simple: conectar y proteger a los usuarios, dondequiera que estén. Reúne redes y seguridad en un solo sistema que incluye una VPN zero-trust, un proxy inverso zero-trust, gestión de acceso privilegiado (PAM) y un gateway IA consciente de la identidad, todos compartiendo un mismo modelo de identidad y políticas. Es la misma idea detrás de plataformas como Cloudflare One, Zscaler y Prisma, pero abierta, autoalojable y diseñada para mantenerse ligera y fácil de desplegar.

A diferencia de las plataformas SASE heredadas que entregan conectividad y seguridad como una pila cerrada, pesada y atada a la nube, Pangolin hace esa unificación en abierto, autoalojable y lo suficientemente simple para que los administradores disfruten ejecutándola. El código es auditable, la plataforma es ligera por diseño y se puede ejecutar en un servidor pequeño con un conector en espacio de usuario que entra en redes privadas.

Características principales

Conectar redes remotas con sitios y traversia NAT

Los conectores de sitio de Pangolin proporcionan puertas de enlace a redes para acceder a cualquier recurso en red. Los sitios usan túneles salientes y traversia NAT inteligente para hacer disponibles redes detrás de firewalls restrictivos sin IPs públicas ni puertos abiertos. Despliegue fácil como binario o contenedor en cualquier plataforma. Conector ligero en espacio de usuario, atraviesa cualquier firewall, no requiere puertos abiertos ni IP pública, segmentación estricta de red, basado en WireGuard, alertas cuando un dispositivo o recurso de red cae.

Acceso por proxy inverso basado en navegador

Expone aplicaciones web HTTPS y conecta a VNC, RDP y SSH completamente en el navegador a través de proxies inversos tunelizados conscientes de identidad y contexto. Los usuarios acceden a recursos con autenticación y control de acceso granular sin instalar cliente. Pangolin maneja enrutamiento, balanceo de carga, health checks y certificados SSL automáticos sin exponer la red directamente a internet. Acceso a paneles web en cualquier lugar, SSO único en todos los recursos, recursos HTTPS, escritorio remoto en navegador con VNC y RDP, terminal SSH en navegador con PAM, códigos PIN, passcodes, email OTP, geobloqueo, allow-lists.

Acceso a recursos privados basado en cliente

Accede a recursos privados como servidores SSH, bases de datos, RDP y rangos de red completos a través de clientes Pangolin. La traversia NAT inteligente permite conexiones incluso a través de firewalls restrictivos, mientras que los alias DNS proporcionan nombres amigables y conexiones rápidas a recursos en todos los sitios. Redundancia enrutando tráfico a través de múltiples conectores. Peer-to-peer con traversia NAT inteligente, hosts/IPs y rangos de puertos, rangos de red/CIDR, alias DNS amigables, PAM con recursos SSH, recursos HTTPS privados solo accesibles en red privada.

Gateway IA consciente de identidad

Pon un proxy consciente de identidad frente a modelos en la nube pública (OpenAI, Anthropic, Gemini, etc.) y servidores de modelos autoalojados (Ollama, vLLM, Mistral, etc.) para que agentes de código y clientes IA llamen a una sola URL de Pangolin. Publícalo como recurso público con claves API personales, o mantenlo privado en un túnel de cliente donde el cliente conectado es la credencial para acceso sin claves. Presupuestos, historial de sesiones y analíticas de uso frente a cada llamada. Acceso a modelos autoalojados y en la nube en un solo lugar, acceso sin claves autenticando usuarios con el cliente de escritorio Pangolin, claves API personales, control de costos y uso de tokens con presupuestos, auditoría con historial de sesiones detallado y analíticas, integración con clientes IA y agentes de código (Claude Code, Codex, OpenCode, etc.).

Dar acceso a usuarios y roles a recursos

Usa los usuarios integrados de Pangolin o trae tu propio proveedor de identidad y configura control de acceso basado en roles (RBAC). Otorga a usuarios acceso a recursos específicos, no a redes enteras. A diferencia de VPNs tradicionales que exponen acceso completo a la red, el modelo zero-trust de Pangolin asegura que los usuarios solo puedan alcanzar las aplicaciones, servicios y rutas que definas explícitamente. Trae tu IdP existente o usa identidades Pangolin, sincroniza usuarios y roles desde tu IdP, control de acceso basado en usuario y rol, auditoría completa de red y logs de acceso.

Encontrar y lanzar recursos desde una página de inicio personalizada

Da a los usuarios una página de aterrizaje para encontrar y abrir rápidamente los recursos a los que pueden acceder. Los recursos se agrupan por sitio o etiqueta, son buscables y filtrables, con vistas de cuadrícula o lista. Las vistas guardadas capturan filtros, agrupación y diseño como valores predeterminados personales o de toda la organización. Un solo lugar para admins y no-admins para ver recursos accesibles, crea vistas reutilizables para patrones de acceso comunes.

Requisitos del sistema

  • Docker y Docker Compose
  • Node.js 24.18.1 (para builds desde fuente)
  • Python 3, make, g++ (dependencias de build)
  • curl, tzdata (runtime)
  • Base de datos: SQLite (por defecto) o PostgreSQL
  • Arquitectura: linux/amd64, linux/arm64 (imagen multiarch)

Instalación con Docker Compose

Despliegue rápido con Docker Compose (producción)

La imagen oficial se publica en Docker Hub como fosrl/pangolin. Para producción se recomienda usar la imagen preconstruida con base de datos PostgreSQL y volúmenes persistentes. El siguiente compose.yaml de ejemplo está adaptado de la documentación oficial para autoalojamiento.

services:
pangolin:
image: fosrl/pangolin:latest
container_name: pangolin
ports:
– "443:443"
– "80:80"
– "51820:51820/udp"
environment:
– ENVIRONMENT=prod
– DATABASE_URL=postgresql://pangolin:password@db:5432/pangolin
volumes:
– pangolin_data:/app/data
– ./config:/app/config
depends_on:
– db
restart: unless-stopped

db:
image: postgres:16-alpine
container_name: pangolin_db
environment:
– POSTGRES_USER=pangolin
– POSTGRES_PASSWORD=password
– POSTGRES_DB=pangolin
volumes:
– postgres_data:/var/lib/postgresql/data
restart: unless-stopped

volumes:
pangolin_data:
postgres_data:

Despliegue de desarrollo con Docker Compose

El repositorio incluye un compose.yaml para desarrollo con hot reload montando el código fuente. Útil para contribuir o probar cambios locales.

services:
app:
build:
context: .
dockerfile: Dockerfile.dev
container_name: dev_pangolin
ports:
– "3000:3000"
– "3001:3001"
– "3002:3002"
– "3003:3003"
environment:
– NODE_ENV=development
– ENVIRONMENT=dev
volumes:
– ./src:/app/src
– ./server:/app/server
– ./public:/app/public
– ./messages:/app/messages
– ./components.json:/app/components.json
– ./next.config.mjs:/app/next.config.mjs
– ./tsconfig.json:/app/tsconfig.json
– ./tailwind.config.js:/app/tailwind.config.js
– ./postcss.config.mjs:/app/postcss.config.mjs
– ./eslint.config.js:/app/eslint.config.js
– ./config:/app/config
restart: no

Instalación en DigitalOcean Marketplace

Instalación con un clic preconfigurada disponible en DigitalOcean Marketplace para Pangolin Community Edition.

https://marketplace.digitalocean.com/apps/pangolin-ce-1?refcode=edf0480eeb81

Pangolin Cloud (gestionado)

Servicio totalmente gestionado sin infraestructura requerida. Regístrate en app.pangolin.net para empezar gratis.

https://app.pangolin.net/auth/signup

Acceder al proyecto

Interfaz web (producción)

Por defecto en puertos 80 (HTTP) y 443 (HTTPS) del host. La UI del dashboard y el portal de recursos están disponibles en https://<tu-dominio-o-ip>.

Puerto WireGuard

Puerto UDP 51820 expuesto para tráfico de túnel WireGuard entre clientes y conectores de sitio.

Interfaz de desarrollo

En modo desarrollo (compose.yaml del repo) la UI está en http://localhost:3000, con puertos adicionales 3001-3003 para servicios auxiliares.

Casos de uso

  • Acceso remoto zero-trust a infraestructura y aplicaciones internas sin VPN tradicional
  • Exposición segura de paneles de administración, bases de datos y servicios internos via proxy inverso con autenticación y SSO
  • Escritorio remoto en navegador (VNC/RDP) y terminal SSH con gestión de acceso privilegiado (PAM)
  • Conexión de redes completas detrás de CGNAT o firewalls restrictivos sin IPs públicas ni puertos abiertos
  • Gateway unificado para modelos IA (OpenAI, Anthropic, Ollama, vLLM, Mistral) con control de costos, auditoría y acceso sin claves
  • Sustitución de VPNs legacy por modelo zero-trust con RBAC y auditoría completa de acceso
  • Portal de recursos personalizado para usuarios finales con vistas guardadas y agrupación por sitio/etiqueta

Configuración avanzada

Tipos de build (OSS, Enterprise, SaaS)

El Dockerfile soporta tres variantes de build controladas por ARG BUILD: oss (Community Edition, AGPL-3), enterprise (open-core, Fossorial Commercial License) y saas (Pangolin Cloud). Cada variante usa tsconfig distinto y puede incluir/excluir código privado (server/private).

docker build –build-arg BUILD=oss –build-arg DATABASE=sqlite -t pangolin:oss .
# Opciones: BUILD=oss|enterprise|saas, DATABASE=sqlite|pg

Base de datos: SQLite vs PostgreSQL

Por defecto usa SQLite (archivo local). Para producción multi-instancia o alta concurrencia se recomienda PostgreSQL. Controlado por ARG DATABASE en build y variable DATABASE_URL en runtime.

# Build con PostgreSQL
docker build –build-arg BUILD=oss –build-arg DATABASE=pg -t pangolin:oss-pg .

# Runtime con PostgreSQL
environment:
– DATABASE_URL=postgresql://user:pass@host:5432/dbname

Configuración mediante archivo YAML

La configuración principal reside en config/config.yml (copia de config/config.example.yml). Incluye ajustes de servidor, base de datos, autenticación, certificados, sitios, recursos, IA gateway, etc. Montar como volumen en /app/config.

volumes:
– ./config:/app/config

# config/config.example.yml existe en el repo como plantilla

Bases de datos MaxMind GeoIP (solo builds SaaS)

Los builds saas incluyen bases de datos MaxMind (GeoLite2-Country.mmdb, GeoLite2-ASN.mmdb) para geolocalización. En builds oss/enterprise se eliminan al final del build para reducir tamaño.

# Se copian en build stage y se eliminan si BUILD != saas
ARG BUILD=oss
RUN if [ "$BUILD" != "saas" ]; then rm -rf ./maxmind; fi

CLI pangctl incluida en la imagen

El wrapper cli/wrapper.sh se instala en /usr/local/bin/pangctl dentro del contenedor para administración vía línea de comandos.

docker exec -it pangolin pangctl –help

Gestión y mantenimiento

Actualizar imagen

Descargar la última imagen y recrear contenedores preservando volúmenes de datos.

docker compose pull
docker compose up -d

Migraciones de base de datos

Las migraciones se ejecutan automáticamente al iniciar el contenedor (dist/migrations.mjs). Para forzar o inspeccionar:

docker exec -it pangolin node –enable-source-maps dist/migrations.mjs

Logs de la aplicación

Usa winston con rotación diaria. Logs en stdout/stderr del contenedor y archivos en volumen de datos.

docker logs -f pangolin
# Archivos en /app/data/logs dentro del contenedor

Backup de base de datos SQLite

Si usas SQLite, el archivo de base de datos está en el volumen pangolin_data (/app/data). Copia en frío o usa sqlite3 .backup.

docker exec pangolin sqlite3 /app/data/pangolin.db ".backup /app/data/backup-$(date +%F).db"

Backup de PostgreSQL

Usa pg_dump desde el contenedor de base de datos.

docker exec pangolin_db pg_dump -U pangolin pangolin > backup-$(date +%F).sql

Comandos de desarrollo (desde repo)

Scripts definidos en package.json para desarrollo local sin Docker.

# Setup inicial
npm run dev:setup

# Desarrollo con hot reload
npm run dev

# Build de producción
npm run build

# Lint y type-check
npm run dev:check

# Formateo
npm run format

Stack técnico

  • TypeScript 7.0
  • Next.js 16.4 (App Router, React 19)
  • React 19.3 con Radix UI, Tailwind CSS 4.3
  • Express 5.2 (API backend)
  • Drizzle ORM 0.45 (SQLite / PostgreSQL)
  • Better-sqlite3 11.9 / pg 8.23
  • WireGuard (userspace via wgctrl/go)
  • Node.js 24.18 (runtime)
  • Docker multi-stage build (node:24.18-slim)
  • ESBuild para bundling CLI y server
  • Zod 4.6 (validación)
  • Winston 3.19 (logging)
  • Arctic 3.7 (OAuth/OIDC)
  • Acme-client 5.4 (certificados SSL automáticos)
  • PostHog (analytics opcional)
  • Stripe (billing Enterprise/SaaS)

Referencias oficiales

Apoya el canal GENBYTE

Sígueme en mis redes sociales

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *