{"id":32048,"date":"2026-07-06T13:22:00","date_gmt":"2026-07-06T11:22:00","guid":{"rendered":"https:\/\/contabo.com\/blog\/?p=32048"},"modified":"2026-07-08T12:55:15","modified_gmt":"2026-07-08T10:55:15","slug":"alojar-pangolin-vps-cloudflare-tunnels","status":"publish","type":"post","link":"https:\/\/contabo.com\/blog\/es\/alojar-pangolin-vps-cloudflare-tunnels\/","title":{"rendered":"C\u00f3mo alojar Pangolin en un VPS (reemplaza Cloudflare Tunnels)"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1200\" height=\"630\" src=\"https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/07\/blog-head_how2-self-host-pangolin-on-a-vps-.webp\" alt=\"C\u00f3mo alojar Pangolin en un VPS (reemplaza Cloudflare Tunnels)\" class=\"wp-image-31996\" srcset=\"https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/07\/blog-head_how2-self-host-pangolin-on-a-vps-.webp 1200w, https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/07\/blog-head_how2-self-host-pangolin-on-a-vps--600x315.webp 600w, https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/07\/blog-head_how2-self-host-pangolin-on-a-vps--768x403.webp 768w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/figure>\n\n\n\n<p><strong>En resumen.<\/strong> Pangolin es una alternativa a Cloudflare Tunnels o Tailscale. Alojas el servidor de Pangolin en un VPS con IP p\u00fablica, instalas el cliente Newt en tu red privada y enrutas el tr\u00e1fico de forma segura a trav\u00e9s de t\u00faneles WireGuard. No necesitas abrir ning\u00fan puerto en tu router. La configuraci\u00f3n toma menos de 30 minutos con Docker Compose. Pangolin gestiona certificados SSL, reverse proxying y control de acceso desde un solo dashboard.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-requisitos-previos\">Requisitos previos<\/h2>\n\n\n\n<p>Antes de instalar Pangolin, verifica que tienes lo siguiente:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un VPS con IP p\u00fablica. Un Contabo VPS de nivel b\u00e1sico maneja todo el stack sin problema y tiene capacidad para correr servicios adicionales junto a \u00e9l.<\/li>\n\n\n\n<li>Ubuntu 22.04, 24.04 o 26.04 (se recomienda una instalaci\u00f3n limpia).<\/li>\n\n\n\n<li>Docker y el plugin de Docker Compose instalados.<\/li>\n\n\n\n<li>Un dominio o subdominio con un registro A apuntando a la IP del VPS. Necesitas acceso a la gesti\u00f3n de zona DNS de tu dominio.<\/li>\n\n\n\n<li>Los puertos 22\/TCP, 80\/TCP, 443\/TCP, 51820\/UDP y 21820\/UDP abiertos en tu firewall. Puedes configurarlo f\u00e1cilmente con el <a href=\"https:\/\/contabo.com\/es\/firewall\/\">Contabo Firewall<\/a>.<\/li>\n<\/ul>\n\n\n\n<p>En el lado de tu red privada \u2014 tu servidor casero, m\u00e1quina de oficina o cualquier dispositivo remoto \u2014 solo necesitas Docker o el binario de Newt. Sin puertos abiertos, sin reenv\u00edo de puertos, sin IP p\u00fablica en esa m\u00e1quina.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-paso-1-preparar-el-vps\">Paso 1: Preparar el VPS<\/h2>\n\n\n\n<p>Con\u00e9ctate por SSH como root y actualiza el sistema antes de continuar.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Con\u00e9ctate: <code>ssh root@&lt;tu-ip-del-vps><\/code><\/li>\n\n\n\n<li>Actualiza: <code>apt update &amp;&amp; apt upgrade -y<\/code><\/li>\n\n\n\n<li>Instala Docker y el plugin de Compose desde el repositorio oficial de Docker:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>apt install -y ca-certificates curl gnupg\n\ninstall -m 0755 -d \/etc\/apt\/keyrings\n\ncurl -fsSL https:\/\/download.docker.com\/linux\/ubuntu\/gpg \\\n  -o \/etc\/apt\/keyrings\/docker.asc\n\nchmod a+r \/etc\/apt\/keyrings\/docker.asc\n\necho \\\n  \"deb &#91;arch=$(dpkg --print-architecture) signed-by=\/etc\/apt\/keyrings\/docker.asc] \\\n  https:\/\/download.docker.com\/linux\/ubuntu \\\n  $(. \/etc\/os-release &amp;&amp; echo \"$VERSION_CODENAME\") stable\" \\\n  | tee \/etc\/apt\/sources.list.d\/docker.list &gt; \/dev\/null\n\napt update\n\napt install -y docker-ce docker-ce-cli containerd.io \\\n  docker-buildx-plugin docker-compose-plugin<\/code><\/pre>\n\n\n\n<p>Verifica con <code>docker compose version<\/code>. Deber\u00edas ver una versi\u00f3n 2.x.<\/p>\n\n\n\n<p>Luego abre los puertos que necesita Pangolin. Cada Contabo VPS y VDS incluye un <a href=\"https:\/\/contabo.com\/es\/firewall\/\">firewall integrado gratuito<\/a> que administras directamente desde el Customer Control Panel, sin instalar software adicional. Abre la <a href=\"https:\/\/help.contabo.com\/en\/support\/solutions\/articles\/103000390430-firewall-what-is-it-and-how-does-it-protect-my-vps-vds-\">gu\u00eda del Contabo Firewall<\/a> y agrega reglas de entrada para: 22\/TCP, 80\/TCP, 443\/TCP, 51820\/UDP y 21820\/UDP.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-paso-2-instalar-pangolin-con-docker-compose\">Paso 2: Instalar Pangolin con Docker Compose<\/h2>\n\n\n\n<p>El stack del servidor de Pangolin corre como tres contenedores. <strong>Pangolin<\/strong> se encarga del dashboard, la API y el control de acceso. <strong>Gerbil<\/strong> administra la interfaz de WireGuard en el VPS y gestiona los puertos expuestos. Traefik corre dentro del namespace de red de Gerbil, no directamente en el host. <strong>Traefik<\/strong> termina TLS, aprovisiona certificados de Let&#8217;s Encrypt de forma autom\u00e1tica y enruta el tr\u00e1fico HTTP al destino correcto. CrowdSec puede agregarse despu\u00e9s como plugin opcional de Traefik para bloqueo basado en reputaci\u00f3n.<\/p>\n\n\n\n<p>Crea el directorio del proyecto y los subdirectorios necesarios:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir -p \/opt\/pangolin\/config\/db \\\n         \/opt\/pangolin\/config\/letsencrypt \\\n         \/opt\/pangolin\/config\/traefik\/logs\n\ncd \/opt\/pangolin<\/code><\/pre>\n\n\n\n<p>Genera un secret para la firma de sesiones de Pangolin. Necesitar\u00e1s el resultado en <code>config.yml<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl rand -hex 32<\/code><\/pre>\n\n\n\n<p>Crea los cuatro archivos de configuraci\u00f3n a continuaci\u00f3n. Escribe cada uno en la ruta indicada antes de pasar al siguiente.<\/p>\n\n\n\n<p><strong><code>docker-compose.yml<\/code><\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>name: pangolin\n\nservices:\n\n  pangolin:\n    image: docker.io\/fosrl\/pangolin:latest\n    container_name: pangolin\n    restart: unless-stopped\n    volumes:\n      - .\/config:\/app\/config\n    healthcheck:\n      test: &#91;\"CMD\", \"curl\", \"-f\", \"http:\/\/localhost:3001\/api\/v1\/\"]\n      interval: \"10s\"\n      timeout: \"10s\"\n      retries: 15\n\n  gerbil:\n    image: docker.io\/fosrl\/gerbil:latest\n    container_name: gerbil\n    restart: unless-stopped\n    depends_on:\n      pangolin:\n        condition: service_healthy\n    command:\n      - --reachableAt=http:\/\/gerbil:3004\n      - --generateAndSaveKeyTo=\/var\/config\/key\n      - --remoteConfig=http:\/\/pangolin:3001\/api\/v1\/\n    volumes:\n      - .\/config\/:\/var\/config\n    cap_add:\n      - NET_ADMIN\n      - SYS_MODULE\n    ports:\n      - 51820:51820\/udp\n      - 21820:21820\/udp\n      - 443:443\n      - 80:80\n      - 22:22\n\n  traefik:\n    image: docker.io\/traefik:v3.6\n    container_name: traefik\n    restart: unless-stopped\n    network_mode: service:gerbil\n    depends_on:\n      pangolin:\n        condition: service_healthy\n    command:\n      - --configFile=\/etc\/traefik\/traefik_config.yml\n    volumes:\n      - .\/config\/traefik:\/etc\/traefik:ro\n      - .\/config\/letsencrypt:\/letsencrypt\n      - .\/config\/traefik\/logs:\/var\/log\/traefik\n\nnetworks:\n  default:\n    driver: bridge\n    name: pangolin<\/code><\/pre>\n\n\n\n<p><strong><code>config\/traefik\/traefik_config.yml<\/code><\/strong> \u2014 reemplaza <code>admin@example.com<\/code> con tu direcci\u00f3n de correo real:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>api:\n  insecure: true\n  dashboard: true\n\nproviders:\n  http:\n    endpoint: \"http:\/\/pangolin:3001\/api\/v1\/traefik-config\"\n    pollInterval: \"5s\"\n  file:\n    filename: \"\/etc\/traefik\/dynamic_config.yml\"\n\nexperimental:\n  plugins:\n    badger:\n      moduleName: \"github.com\/fosrl\/badger\"\n      version: \"v1.4.0\"\n\nlog:\n  level: \"INFO\"\n  format: \"common\"\n  maxSize: 100\n  maxBackups: 3\n  maxAge: 3\n  compress: true\n\ncertificatesResolvers:\n  letsencrypt:\n    acme:\n      httpChallenge:\n        entryPoint: web\n      email: \"admin@example.com\"\n      storage: \"\/letsencrypt\/acme.json\"\n      caServer: \"https:\/\/acme-v02.api.letsencrypt.org\/directory\"\n\nentryPoints:\n  web:\n    address: \":80\"\n  websecure:\n    address: \":443\"\n    transport:\n      respondingTimeouts:\n        readTimeout: \"30m\"\n    http:\n      tls:\n        certResolver: \"letsencrypt\"\n      encodedCharacters:\n        allowEncodedSlash: true\n        allowEncodedQuestionMark: true\n\nserversTransport:\n  insecureSkipVerify: true\n\nping:\n  entryPoint: \"web\"<\/code><\/pre>\n\n\n\n<p><strong><code>config\/traefik\/dynamic_config.yml<\/code><\/strong> \u2014 reemplaza cada instancia de <code>pangolin.example.com<\/code> con el hostname de tu dashboard:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>http:\n  middlewares:\n    badger:\n      plugin:\n        badger:\n          disableForwardAuth: true\n    redirect-to-https:\n      redirectScheme:\n        scheme: https\n\n  routers:\n    main-app-router-redirect:\n      rule: \"Host(`pangolin.example.com`)\"\n      service: next-service\n      entryPoints:\n        - web\n      middlewares:\n        - redirect-to-https\n        - badger\n\n    next-router:\n      rule: \"Host(`pangolin.example.com`) &amp;&amp; !PathPrefix(`\/api\/v1`)\"\n      service: next-service\n      entryPoints:\n        - websecure\n      middlewares:\n        - badger\n      tls:\n        certResolver: letsencrypt\n\n    api-router:\n      rule: \"Host(`pangolin.example.com`) &amp;&amp; PathPrefix(`\/api\/v1`)\"\n      service: api-service\n      entryPoints:\n        - websecure\n      middlewares:\n        - badger\n      tls:\n        certResolver: letsencrypt\n\n    ws-router:\n      rule: \"Host(`pangolin.example.com`)\"\n      service: api-service\n      entryPoints:\n        - websecure\n      middlewares:\n        - badger\n      tls:\n        certResolver: letsencrypt\n\n  services:\n    next-service:\n      loadBalancer:\n        servers:\n          - url: \"http:\/\/pangolin:3002\"\n    api-service:\n      loadBalancer:\n        servers:\n          - url: \"http:\/\/pangolin:3000\"\n\ntcp:\n  serversTransports:\n    pp-transport-v1:\n      proxyProtocol:\n        version: 1\n    pp-transport-v2:\n      proxyProtocol:\n        version: 2<\/code><\/pre>\n\n\n\n<p><strong><code>config\/config.yml<\/code><\/strong> \u2014 reemplaza los tres dominios de ejemplo y pega el secret generado con <code>openssl<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gerbil:\n    start_port: 51820\n    base_endpoint: \"pangolin.example.com\"\n\napp:\n    dashboard_url: \"https:\/\/pangolin.example.com\"\n    log_level: \"info\"\n    telemetry:\n        anonymous_usage: true\n\ndomains:\n    domain1:\n        base_domain: \"example.com\"\n\nserver:\n    secret: \"paste-your-openssl-output-here\"\n    cors:\n        origins: &#91;\"https:\/\/pangolin.example.com\"]\n        methods: &#91;\"GET\", \"POST\", \"PUT\", \"DELETE\", \"PATCH\"]\n        allowed_headers: &#91;\"X-CSRF-Token\", \"Content-Type\"]\n        credentials: false\n\nflags:\n    require_email_verification: false\n    disable_signup_without_invite: false\n    disable_user_create_org: false\n    allow_raw_resources: true<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-paso-3-iniciar-pangolin-y-acceder-al-dashboard\">Paso 3: Iniciar Pangolin y acceder al dashboard<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Inicia el stack: <code>docker compose up -d<\/code><\/li>\n\n\n\n<li>Verifica que los tres contenedores est\u00e9n corriendo: <code>docker compose ps<\/code>. Gerbil y Traefik esperan a que el healthcheck de Pangolin pase antes de arrancar, as\u00ed que dale unos 30 segundos.<\/li>\n\n\n\n<li>Obt\u00e9n el token de configuraci\u00f3n inicial desde los logs de Pangolin:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>docker compose logs pangolin<\/code><\/pre>\n\n\n\n<p>Busca el bloque <code>=== SETUP TOKEN GENERATED ===<\/code> y copia el token.<\/p>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>Abre <code>https:\/\/pangolin.example.com\/auth\/initial-setup<\/code> en el navegador. La primera solicitud de certificado de Let&#8217;s Encrypt puede tardar hasta 60 segundos. Si ves una advertencia de certificado al cargar por primera vez, espera un minuto y recarga la p\u00e1gina.<\/li>\n\n\n\n<li>Pega el token de configuraci\u00f3n, define tu correo y contrase\u00f1a de administrador y crea tu primera organizaci\u00f3n.<\/li>\n<\/ol>\n\n\n\n<p>Si Traefik no puede obtener un certificado, confirma que tu registro A de DNS ya propag\u00f3 y que ning\u00fan otro proceso est\u00e1 usando los puertos 80 o 443 en el host.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-paso-4-conectar-una-red-privada-con-newt-sobre-wireguard\">Paso 4: Conectar una red privada con Newt sobre WireGuard<\/h2>\n\n\n\n<p>Newt es el agente conector de sitios de Pangolin. Corre en tu red privada, establece una conexi\u00f3n WireGuard saliente hacia el hub de Pangolin y reenv\u00eda el tr\u00e1fico a tus servicios locales. Como Newt inicia la conexi\u00f3n de forma saliente, tu router no necesita puertos abiertos, reenv\u00edo de puertos ni IP p\u00fablica.<\/p>\n\n\n\n<p>En el dashboard de Pangolin, ve a <strong>Sites<\/strong>, haz clic en <strong>Add Site<\/strong>, elige <strong>Newt Tunnel<\/strong> y dale un nombre al sitio. Pangolin te muestra tres credenciales: la URL del endpoint, el Newt ID y el Newt secret. C\u00f3pialos todos. Solo se muestran una vez.<\/p>\n\n\n\n<p>En tu servidor casero, despliega Newt con Docker Compose:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>services:\n  newt:\n    image: fosrl\/newt\n    container_name: newt\n    restart: unless-stopped\n    environment:\n      - PANGOLIN_ENDPOINT=https:\/\/pangolin.example.com\n      - NEWT_ID=&lt;tu-newt-id&gt;\n      - NEWT_SECRET=&lt;tu-newt-secret&gt;<\/code><\/pre>\n\n\n\n<p>In\u00edcialo con <code>docker compose up -d<\/code>. En segundos, el indicador del sitio en el dashboard de tu Pangolin cambia a verde y muestra <strong>Online<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-paso-5-exponer-tu-primer-servicio-con-reverse-proxy\">Paso 5: Exponer tu primer servicio con reverse proxy<\/h2>\n\n\n\n<p>Con el t\u00fanel de Newt activo, no necesitas editar ning\u00fan archivo de configuraci\u00f3n para exponer un servicio. Todo se hace desde el dashboard de Pangolin:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Abre tu sitio y haz clic en <strong>Add Resource<\/strong>.<\/li>\n\n\n\n<li>Dale un nombre a la resource y elige una subdominio.<\/li>\n\n\n\n<li>En <strong>Target Configuration<\/strong>, ingresa la direcci\u00f3n interna del servicio tal como Newt la ve. Para un servicio en 192.168.1.10:3000 en tu red local, ingresa <code>http:\/\/192.168.1.10:3000<\/code>. Para un servicio en la misma red Docker que Newt, usa el nombre del contenedor y el puerto.<\/li>\n\n\n\n<li>Activa HTTPS. Traefik aprovisiona el certificado de forma autom\u00e1tica.<\/li>\n\n\n\n<li>Define una pol\u00edtica de acceso: p\u00fablica, protegida por contrase\u00f1a o restringida a usuarios o dominios de correo espec\u00edficos.<\/li>\n<\/ul>\n\n\n\n<p>La resource queda disponible en su subdominio en cuesti\u00f3n de segundos. Si agregas un registro A wildcard (*.pangolin.example.com apuntando a la IP del VPS), cada nueva resource es accesible de inmediato sin necesidad de un registro DNS separado por servicio.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-paso-6-acceso-ssh-rdp-desde-el-navegador-desde-v1-19\">Paso 6: Acceso SSH\/RDP desde el navegador (desde v1.19)<\/h2>\n\n\n\n<p>Desde Pangolin 1.19, SSH, RDP y VNC son tipos de resource p\u00fablicos de primera clase junto a HTTP. El usuario abre la URL de la resource, se autentica a trav\u00e9s de Pangolin y obtiene una sesi\u00f3n interactiva completa en el navegador. No se requiere un cliente SSH separado, una app de escritorio remoto ni un visor de VNC.<\/p>\n\n\n\n<p>Para habilitar SSH desde el navegador en un VPS, haz clic en <strong>Add Resource<\/strong>, selecciona <strong>SSH<\/strong> como protocolo y elige el modo <strong>Pangolin SSH<\/strong>. Este modo solo requiere que Newt corra como root en la m\u00e1quina destino. No hacen falta cambios en <code>sshd_config<\/code> ni configuraci\u00f3n de PAM. Asigna una subdominio y una pol\u00edtica de acceso, y el terminal queda disponible en el navegador.<\/p>\n\n\n\n<p>Para RDP, selecciona <strong>RDP<\/strong> como protocolo, apunta el destino a la IP del host Windows y el puerto 3389, y asigna un dominio. La sesi\u00f3n se renderiza en el navegador con soporte completo de portapapeles y transferencia de archivos.<\/p>\n\n\n\n<p>SSH, RDP y VNC desde el navegador requieren Newt 1.13.0 o posterior. Ejecuta <code>docker compose pull &amp;&amp; docker compose up -d<\/code> en tu servidor casero antes de habilitar estos tipos de resource.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-lista-de-verificacion-de-seguridad\">Lista de verificaci\u00f3n de seguridad<\/h2>\n\n\n\n<p>Antes de exponer algo sensible, revisa esta lista:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Define una contrase\u00f1a de administrador fuerte y c\u00e1mbiala de inmediato si usaste una d\u00e9bil durante la configuraci\u00f3n inicial.<\/li>\n\n\n\n<li>Restringe el acceso al dashboard a direcciones IP conocidas mediante una pol\u00edtica de acceso de Pangolin.<\/li>\n\n\n\n<li>Mant\u00e9n actualizadas las im\u00e1genes de Pangolin, Gerbil y Traefik. Ejecuta <code>docker compose pull &amp;&amp; docker compose up -d<\/code> desde <code>\/opt\/pangolin<\/code> de forma regular. Desde Pangolin 1.19 hay actualizaciones autom\u00e1ticas opcionales de Newt que puedes activar por sitio desde el dashboard.<\/li>\n\n\n\n<li>Confirma que las reglas de tu <a href=\"https:\/\/help.contabo.com\/en\/support\/solutions\/articles\/103000390430-firewall-what-is-it-and-how-does-it-protect-my-vps-vds-\">Contabo Firewall<\/a> solo permiten los puertos que realmente necesitas.<\/li>\n\n\n\n<li>Habilita CrowdSec como plugin opcional de Traefik si tus resources reciben tr\u00e1fico p\u00fablico. Bloquea IPs con mala reputaci\u00f3n en el borde antes de que las solicitudes lleguen a tus servicios.<\/li>\n\n\n\n<li>Haz backup del directorio <code>config\/<\/code> en el VPS de forma regular. Contiene la base de datos SQLite, los certificados TLS y toda la configuraci\u00f3n de resources.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-faq-alojar-pangolin-por-tu-cuenta\">FAQ: Alojar Pangolin por tu cuenta<\/h2>\n\n\n\n<div class=\"schema-faq wp-block-yoast-faq-block\"><div class=\"schema-faq-section\" id=\"faq-question-1783507982330\"><strong class=\"schema-faq-question\">\u00bfCu\u00e1nta RAM necesita Pangolin en un VPS?<\/strong> <p class=\"schema-faq-answer\">Los contenedores de Pangolin, Gerbil y Traefik juntos consumen solo unos cientos de MB de RAM en reposo. Un VPS con 4 GB de RAM cubre el stack sin problema y tiene margen para varios t\u00faneles activos. Si planeas correr servicios adicionales en el mismo VPS \u2014 un stack de monitoreo, una wiki o una base de datos \u2014 sube a 8 GB o m\u00e1s para que los servicios no compitan bajo carga.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1783507989986\"><strong class=\"schema-faq-question\">\u00bfPuedo alojar Pangolin sin un dominio propio?<\/strong> <p class=\"schema-faq-answer\">Con la configuraci\u00f3n est\u00e1ndar, no. Traefik usa el HTTP-01 challenge de Let&#8217;s Encrypt para aprovisionar certificados, lo que requiere un dominio con un registro A v\u00e1lido apuntando al VPS. Un dominio cuesta solo unos euros al a\u00f1o y vale la pena para cualquier setup de acceso remoto permanente. Pangolin Cloud es una alternativa si quieres el plano de control gestionado sin correr un VPS.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1783507996352\"><strong class=\"schema-faq-question\">\u00bfQu\u00e9 es el cliente Newt en Pangolin?<\/strong> <p class=\"schema-faq-answer\">Newt es el conector de sitios de Pangolin: un cliente WireGuard en espacio de usuario que corre en tu red privada y establece una conexi\u00f3n cifrada saliente hacia el servidor de Pangolin. Como Newt inicia la conexi\u00f3n de forma saliente, tu router no necesita abrir ning\u00fan puerto, ni siquiera el UDP 51820 por defecto de WireGuard. Newt tambi\u00e9n act\u00faa como proxy TCP\/UDP, reenviando el tr\u00e1fico del reverse proxy de Pangolin a servicios en cualquier parte de tu red local.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1783508004633\"><strong class=\"schema-faq-question\">\u00bfC\u00f3mo actualizo Pangolin?<\/strong> <p class=\"schema-faq-answer\">Desde el directorio <code>\/opt\/pangolin<\/code>, ejecuta <code>docker compose pull &amp;&amp; docker compose up -d<\/code>. Haz siempre un backup del directorio <code>config\/<\/code> primero. Contiene la base de datos SQLite y los certificados TLS, y no hay un camino sencillo de reversi\u00f3n una vez que las migraciones ya corrieron. Para Newt en tu servidor casero, aplica el mismo proceso. Desde Pangolin 1.19 hay actualizaciones autom\u00e1ticas opcionales de Newt: act\u00edvalas en el dashboard a nivel de organizaci\u00f3n o por sitio para mantener los dispositivos edge actualizados sin intervenci\u00f3n manual.<\/p> <\/div> <\/div>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Alojar Pangolin en un VPS significa t\u00faneles WireGuard propios, sin reenv\u00edo de puertos en el router y control total de tu stack. Con Docker Compose, certificados SSL autom\u00e1ticos y el cliente Newt, lo tienes listo en menos de 30 minutos.<\/p>\n","protected":false},"author":65,"featured_media":31998,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":"","_members_access_role":[],"_members_access_error":""},"categories":[1988],"tags":[],"ppma_author":[1489],"class_list":["post-32048","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutoriales"],"uagb_featured_image_src":{"full":["https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/07\/blog-head_how2-self-host-pangolin-on-a-vps-.webp",1200,630,false],"thumbnail":["https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/07\/blog-head_how2-self-host-pangolin-on-a-vps--150x150.webp",150,150,true],"medium":["https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/07\/blog-head_how2-self-host-pangolin-on-a-vps--600x315.webp",600,315,true],"medium_large":["https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/07\/blog-head_how2-self-host-pangolin-on-a-vps--768x403.webp",768,403,true],"large":["https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/07\/blog-head_how2-self-host-pangolin-on-a-vps-.webp",1200,630,false],"1536x1536":["https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/07\/blog-head_how2-self-host-pangolin-on-a-vps-.webp",1200,630,false],"2048x2048":["https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/07\/blog-head_how2-self-host-pangolin-on-a-vps-.webp",1200,630,false]},"uagb_author_info":{"display_name":"Julia Mink","author_link":"https:\/\/contabo.com\/blog\/es\/author\/julia-mink\/"},"uagb_comment_info":0,"uagb_excerpt":"Alojar Pangolin en un VPS significa t\u00faneles WireGuard propios, sin reenv\u00edo de puertos en el router y control total de tu stack. Con Docker Compose, certificados SSL autom\u00e1ticos y el cliente Newt, lo tienes listo en menos de 30 minutos.","authors":[{"term_id":1489,"user_id":65,"is_guest":0,"slug":"julia-mink","display_name":"Julia Mink","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/26ce5d4ae17d160425d842da4ea00c56716ffb5d4c58ee0cfb73de57b1de5272?s=96&d=mm&r=g","author_category":"","user_url":"","last_name":"Mink","first_name":"Julia","job_title":"","description":""}],"_links":{"self":[{"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/posts\/32048","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/users\/65"}],"replies":[{"embeddable":true,"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=32048"}],"version-history":[{"count":1,"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/posts\/32048\/revisions"}],"predecessor-version":[{"id":32049,"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/posts\/32048\/revisions\/32049"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/media\/31998"}],"wp:attachment":[{"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=32048"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=32048"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=32048"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=32048"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}