Cuando hablamos de exponer servicios locales a Internet de forma segura, muchas soluciones actuales pasan inevitablemente por depender de terceros como Cloudflare Tunnel. Funciona, sí, pero también implica ceder parte del control de tu infraestructura. En este tutorial vamos a ver cómo hacerlo con Pangolin, una alternativa que te permite acceder a tus servicios locales de forma segura, cifrada y controlada, sin depender de Cloudflare.
Antes de entrar en la configuración, conviene entender cómo organiza Pangolin el acceso a los servicios. Pangolin trabaja con el concepto de sitio, que representa una ubicación o entorno desde el que se publican servicios, como puede ser tu homelab, una red local o un servidor en casa. A partir de ese sitio se definen los recursos, que no son más que los servicios concretos que quieres exponer: un panel web, una aplicación interna o cualquier servicio que escuche en un puerto específico.
Esta separación permite a Pangolin gestionar de forma clara y segura qué servicios se publican, desde dónde y bajo qué dominio, sin necesidad de abrir puertos directamente ni exponer tu red local.
Si antes utilizabas Cloudflare Tunnel y esos subdominios resolvían a una IP pública asociada al túnel, será necesario actualizar los registros DNS para que apunten ahora a la IP del servidor donde se ejecuta Pangolin.
A partir de aquí, veremos paso a paso cómo desplegar Pangolin y configurar el acceso seguro a servicios locales de forma sencilla y totalmente bajo tu control.
Crear un sitio nuevo
Para crear un sitio nuevo, deberemos de ir al apartado del menú lateral donde pone Sitios:

En este apartado se mostrarán todos los sitios disponibles para acceder. Para crear un sitio nuevo hacemos clic sobre el botón Añadir sitio:

En este caso tendremos que seleccionar el primer tipo de sitio llamado Sitio nuevo, le daremos un nombre y más abajo tendremos las credenciales que usaremos más tarde para conectar nuestro LXC de Proxmox a Pangolin. De esta manera tendremos acceso a los recursos locales de nuestra red.

Si queremos podemos usar Docker para levantar un contenedor en alguna MV que tengamos docker para hacerlo más sencillo. En este tutorial usamos la forma tradicional de instalar el cliente y configurarlo.
Instalación del cliente
Nos vamos a nuestro LXC y ejecutamos el primer comando para descargar la instalación y el segundo para conectarlo a nuestro servidor de Pangolin.
curl -fsSL https://static.pangolin.net/get-newt.sh | bash
newt --id XXXXX --secret XXXX --endpoint https://pangolin.tudominio.com--id, --secret y --endpoint por los que te aparecen en tu configuración del sitio.Con este comando veremos que se conecta a nuestro Pangolin de forma correcta:
INFO: 2026/01/21 11:05:45 Newt version 1.8.1
INFO: 2026/01/21 11:05:46 Server version: 1.14.1
INFO: 2026/01/21 11:05:46 Websocket connected
INFO: 2026/01/21 11:05:46 Connecting to endpoint: pangolin.tudominio.com
INFO: 2026/01/21 11:05:46 Tunnel connection to server established successfully!Crear servicio systemd
Si queremos un servicio que levante esta conexión siempre que iniciemos sesión en nuestro ordenador personal, tendremos que crear el fichero /etc/systemd/system/pangolin.service y añadir el siguiente contenido dentro:
[Unit]
Description=Newt
After=network.target
[Service]
ExecStart=/usr/local/bin/newt --id XXXXX --secret XX --endpoint https://pangolin.tudominio.com
Restart=always
User=root
[Install]
WantedBy=multi-user.target--id, --secret y --endpoint por los que te aparecen en tu configuración del sitio.Guardamos el fichero y recargamos los servicios y lo habilitamos:
systemctl daemon-reload
systemctl start pangolin.service
# Si quieres iniciarlo siempre al arranque del SO:
systemctl enable pangolin.serviceAhora si volvemos al apartado de sitios de Pangolin, veremos que aparece el que hemos creado y aparece en linea:

Crear un nuevo recurso
Ahora tenemos que crear un recurso publico para acceder a un servicio que tengamos en nuestro NAS o nuestro Proxmox. Para hacer una prueba yo voy a probar con mi servidor de Immich que tengo en mi NAS con contenedores docker.
Immich está escuchando a la IP del NAS por el puerto 2283 y tiene unr egistro de dominio para ello (immich.midominio.com).
Para acceder al recuro es necesario crear un recurso público.
Crear Recurso Público
Vamos a la interfaz de Pangolin y nos vamos a Recursos - Público y hacmeos clic en añadir recurso nuevo.

Al crar un recuro tendremos que seleccionar primero el tipo de recurso, en este caso será un Recurso HTTPS (porque tendremos que acceder a una web).

Le pondremos un nombre y luego configuramos el subdominio que hemos configurado.
EN configuración de objetivos hacemos clic sobre Añadir destino y rellenamos los datos del acceso local de nuestro servicio

Primero tenemos que seleccionar nuestro sitio, en este caso el que hemos creado anteriormente y que yo he llamado Gateway. Luego tenemos que rellenar la URL, en mi caso Immich se encuentra en http://IP_LOCAL:2283 tenemos que rellenar eso. Luego podemos también activar el Chequeo de salud, donde podemos hacer un GET a la misma URL.
Con esto guardamos y ya podremos acceder a nuestro subdominio en un navegador que deberíamos de entrar al recurso local de nuestra red.
Métodos de autenticación
Una cosa que me parece muy interesante de Pangolin, es la opción de configurar uno o varios métodos de autenticación como puede ser correo electrónico y contraseña o un simple pin de 6 dígitos. Esto hace que nuestro sitio sea un poco más seguro, ya que pone una capa extra de seguridad
Para configurar esto, iremos a Recursos - Público y editaremos el recurso que queremos configurar autenticación.

Nos iremos a la pestaña de Autenticación y en Métodos de autenticación podremos editar y configurar varias opciones

- Protección de contraseña: Añade una capa de autenticación clásica mediante usuario y contraseña antes de acceder al recurso. Es el método más seguro y adecuado para servicios sensibles o paneles de administración, ya que controla de forma explícita quién puede acceder al servicio.
- Protección del código PIN: Protege el recurso con un código numérico compartido. Es una opción rápida y sencilla, pensada para accesos personales o de uso ocasional, donde se prioriza la comodidad frente a un control detallado de usuarios.
- Autenticación de cabecera: En este modo, Pangolin valida el acceso y añade cabeceras HTTP al backend para que la aplicación confíe en ellas. Es ideal para integraciones internas o sistemas que soportan autenticación delegada, permitiendo una experiencia de acceso más fluida sin mostrar pantallas de login adicionales.
Por ejemplo para activar el código pin, tendremos que hacer clic sobre añadir código PIN y definir un PIN:

Hacemos clic en Activar Protección de código PIN y en este punto, cuando accedamos a nuestro subdominio se verá primero esto:

Si además hemos configurado la opción de Protección con contraseña nos saldrán las dos opciones.
Crear recurso privado
Ahora necesitamos crear un recurso privado, como por ejemplo el acceso a Proxmox a través de web y de SSH. Para esto necesitaremos una conexión segura que luego explicaremos como levantarla. Primero de todo vamos a configurar ese recurso privado.
Vamos a Recursos - Privado y luego a Añadir Recurso:

Aquí configuraremos lo siguiente:
- Nombre: Un nombre que identifique al recurso privado.
- Sitio: Utilizaremos el sitio que hemos creado anteriormente.
- Modo: Tenemos dos modos, el anfitrión donde indicamos la IP concreta o bien el modo CIDR donde hay que indicar una red y la máscara.
- Destino: En destino tendremos que poner la IP, en este caso pondremos la IP de nuestro Proxmox.
- Alias: Permite configurar un dominio para usarlo de forma interna, por ejemplo para el ejemplo podemos usar
proxmox.internal. - Restricciones de puerto: En la configuración de puertos, podemos dejarlo por defecto, aún que si queremos que únicamente haya acceso a los puertos 22 (SSH) y 8006 (Interfaz web de Proxmox) se puede configurar.

Una vez configurado todo, hacemos clic en Crear recurso y ya tendremos nuestro recurso privado.

Conectarse a un recurso privado
Para hacerlo, necesitamos instalar primero en nuestro ordenador un programa que permitirá configurar el cliente y luego en Pangolin configurar los accesos.
Para ello ejecutaremos este comando para la instalación del cliente:
curl -fsSL https://static.pangolin.net/get-cli.sh | bashY obtendremos esta salida:
[INFO] Installing latest version of Pangolin...
[INFO] Fetching latest version...
[INFO] Latest version: v0.2.1
[INFO] Detected platform: linux_amd64
[INFO] Install directory: /usr/local/bin
[INFO] Downloading Pangolin from https://github.com/fosrl/cli/releases/download/0.2.1/pangolin-cli_linux_amd64
[INFO] Pangolin installed to /usr/local/bin/pangolin
[INFO] Installation successful!
[INFO] pangolin version: 0.2.1
[INFO] Pangolin is ready to use!
[INFO] Run 'pangolin --help' to get started.Ahora para iniciar sesión ejecutaremos:
pangolin loginY seleccionaremos la opción de Self-hosted or Dedicated Instance con las flechas:
root@cliente:~# pangolin login
┃ Select your hosting option
┃ Pangolin Cloud (app.pangolin.net)
┃ > Self-hosted or Dedicated instance
↑ up • ↓ down • / filter • enter submitLuego configuramos la URL de nuestro Pangolin:
root@ubuntu24:~# pangolin login
┃ Enter hostname URL ┃ > https://pangolin.tudominio.com
enter submitPulsamos enter para que nos abra la ventana en un navegador y seguimos las instrucciones
root@ubuntu24:~# pangolin login
First copy your one-time code: XXXX-XXXX
Press Enter to open https://pangolin.tudominio.com/auth/login/device in your browser...Nos pedirá iniciar sesión a Pangolin y luego poner el código de un solo uso que se muestra en el dispositivo:

Tras añadir el código, nos indicará una serie de información y autorizaremos el acceso a Pangolin:


Al darle a autorizar veremos que en la terminal aparece
Device authorized
Logged in as usuario@correo.comAhora ya podemos conectarnos con
pangolin up
Y si vamos a Clientes - Usuarios veremos que nuestro usuario se ha conectado correctamente.
Además, si revisamos las interfaces de nuestro ordenador donde nos hemos conectado al cliente, podremos observar algo como esto:
13: pangolin: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1280 qdisc fq_codel state UNKNOWN group default qlen 500
link/none
inet XXX.XX.XXX.1/24 brd XXX.XX.XXX.255 scope global pangolin
valid_lft forever preferred_lft foreverUna vez nos hemos conectado, podemos hacer la prueba con el alias que hemos configurado usando el puerto SSH, por lo que si ejecutamos:
ssh root@proxmox.internalNos podremos conectar directamente usando el alias directamente a Promox, sin tener que abrir puertos ni nada.
Conclusión
Pangolin se presenta como una alternativa sólida para exponer servicios locales de forma segura sin depender de soluciones externas como Cloudflare Tunnel. Su modelo basado en sitios y recursos permite mantener una estructura clara, controlada y fácil de gestionar, incluso cuando el número de servicios crece.
A lo largo de este tutorial hemos visto cómo publicar servicios internos sin abrir puertos directamente, utilizando conexiones cifradas y un control centralizado del acceso. Todo ello manteniendo la soberanía sobre la infraestructura, el DNS y el flujo de tráfico, algo especialmente importante en entornos de homelab y autoalojamiento.
Si buscas una forma de acceder a tus servicios locales desde cualquier lugar, reduciendo dependencias externas y sin sacrificar seguridad ni flexibilidad, Pangolin es una opción que merece la pena tener en cuenta.
Más sobre ./voidNull
- 📖 Aprende todos sobre los comandos de GNU/Linux en nuestro Diccionario "De la A a la Z: Los comandos de GNU/Linux"
- 💪 ¡Forma parte de la Comunidad de ./voidNull!
- 🤖 Disfruta de todos nuestros Cursos sobre Ansible, Proxmox, Home Assistant entre otros.
- 📩 Mantente actualizado con lo último en GNU/Linux y Software Libre. Recibe nuestra Newsletter mensual.
Comentarios