Logotipo de Bitdoze

Instalar Nexterm con Docker: gestión autoalojada de SSH, VNC y RDP

Instala Nexterm con Docker Compose para gestionar SSH, VNC y RDP autoalojados. Guía paso a paso con proxy inverso Traefik, configuración del cifrado y consejos de seguridad.

Dragos

Actualizado Publicado 11 min de lectura

Instalar Nexterm con Docker: gestión autoalojada de SSH, VNC y RDP

Nexterm es una plataforma de gestión de servidores autoalojada y de código abierto para conexiones SSH, VNC, RDP, Telnet, SFTP y FTP. En la v1.2.2-BETA, con casi 5.000 estrellas en GitHub y licencia MIT, ya ha superado la fase experimental. Es apta para producción, siempre que hagas copias de seguridad de tus datos y fijes las versiones. Esta guía cubre una instalación completa de Nexterm con Docker usando Docker Compose con proxy inverso Traefik, la configuración obligatoria de la clave de cifrado y el endurecimiento de seguridad que necesitas antes de abrirla a la red.

¿Qué es Nexterm?

Nexterm es un panel de gestión de servidores basado en web que consolida SSH, VNC, RDP, Telnet, SFTP y FTP en una sola interfaz. Lo despliegas como un contenedor Docker, apuntas el navegador hacia él y gestionas todas tus conexiones remotas desde un solo lugar. Soporta OIDC SSO, LDAP, passkeys, 2FA, registro de auditoría, grabaciones de sesión y permisos basados en roles (añadidos en v1.2.2). Hay clientes de escritorio para Windows, macOS y Linux, una app móvil para Android y iOS, y un cliente CLI (nt) para los puristas del terminal.

Si estás comparando paneles de gestión de servidores autoalojados, Nexterm cubre más protocolos que la mayoría de las alternativas con una huella de recursos menor. También vale la pena mirar herramientas alternativas de gestión SSH como Termix si quieres algo con una arquitectura diferente.

Características de Nexterm

  • Multiprotocolo: SSH, VNC, RDP, Telnet, SFTP, FTP, todo desde un panel
  • Seguridad: 2FA (TOTP), passkeys, OIDC SSO, LDAP, cifrado en reposo del lado del servidor, registro de auditoría, permisos basados en roles, claves API
  • Gestión de sesiones: vista dividida, grabaciones de sesión, sesión en ventana emergente/compartida en vivo, túneles de puertos, jump hosts
  • Snippets y scripts dinámicos: comandos rápidos, scripts, importación de config SSH (implementada por completo desde v1.0.3)
  • Apps de escritorio y móviles: conector de escritorio (Win/Mac/Linux), app móvil (Android/iOS) para VNC/RDP/SFTP, cliente CLI (nt)
  • Monitorización del servidor e IA: monitorización de servidores integrada (v1.0.4+), integración de IA para asistencia en el terminal
  • Infraestructura: organizaciones, etiquetas, búsqueda difusa, internacionalización, temas personalizables, Nerd Fonts, gestión de Proxmox LXC/QEMU

Si estás montando un home lab, consulta otros contenedores Docker autoalojados para tu servidor casero para más ideas.

Cómo instalar Nexterm con Docker Compose

Esto usa la imagen oficial nexterm/aio (todo en uno: servidor + cliente web + motor). La antigua imagen germannewsmaker/nexterm está obsoleta. Si migras desde ella, consulta la sección de resolución de problemas más abajo.

Requisitos previos

Los precios de los VPS subieron en todos los proveedores en 2026 — si estás reconsiderando una máquina alquilada, mira qué cambió y cuándo gana un mini PC.

Consumo ligero de recursos

Nexterm es ligero. Un VPS de 1 vCPU / 512 MB es suficiente para gestionar docenas de conexiones. La imagen AIO ocupa ~95 MB comprimida. No necesitas 8 CPU y 16 GB de RAM. Eso era para otra cosa completamente distinta.

Paso 1: Genera tu clave de cifrado

Desde la v1.0.3, Nexterm requiere cifrado del lado del servidor para las contraseñas almacenadas y las claves privadas SSH. La variable de entorno ENCRYPTION_KEY es obligatoria. El contenedor no arrancará sin ella.

bash
openssl rand -hex 32

Salida de ejemplo:

text
a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2

Copia esta clave. La pegarás en el archivo docker-compose.

Guarda esta clave en un lugar seguro

Si pierdes la ENCRYPTION_KEY, todas las credenciales almacenadas serán irrecuperables. Guárdala en un gestor de contraseñas. Nunca la subas a git. Los secrets de Docker también son compatibles a través de /run/secrets/encryption_key. Mira cómo gestionar secrets de forma segura con Docker Compose.

Paso 2: Configuración de Docker Compose

Crea un archivo docker-compose.yml:

yaml
services:
  nexterm:
    image: nexterm/aio:latest
    environment:
      ENCRYPTION_KEY: "your-generated-key-here"
    volumes:
      - ./nexterm:/app/data
    networks:
      - traefik-net
    restart: always
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.nexterm.rule=Host(`nexterm.domain.com`)"
      - "traefik.http.routers.nexterm.entrypoints=websecure"
      - "traefik.http.routers.nexterm.tls.certresolver=letsencrypt"
      - "traefik.http.services.nexterm.loadbalancer.server.port=6989"

networks:
  traefik-net:
    external: true

Sustituye nexterm.domain.com por tu dominio real. La red traefik-net debe existir previamente (créala con docker network create traefik-net si es necesario).

La imagen es nexterm/aio:latest, el paquete todo en uno (servidor + cliente web + motor en C) que reemplaza al obsoleto germannewsmaker/nexterm. Pega la clave del Paso 1 en la variable ENCRYPTION_KEY. El volumen ./nexterm:/app/data persiste toda la configuración, las conexiones y las credenciales. Las etiquetas de Traefik enrutan el tráfico de nexterm.domain.com a través de Traefik con TLS automático de Let’s Encrypt en el puerto 6989.

Imágenes Docker

Nexterm distribuye tres imágenes: nexterm/aio (todo en uno, recomendada para la mayoría de usuarios), nexterm/server (solo servidor + cliente web, necesita un motor externo) y nexterm/engine (solo el motor, el servicio de conexiones en C). Para el 95 % de las instalaciones, aio es la opción correcta. Consulta la documentación oficial de instalación.

Paso 3: Arranca el contenedor

bash
docker compose up -d

Verifica que está en ejecución:

bash
docker compose ps
docker compose logs nexterm

Verifica el arranque

Ejecuta docker compose logs nexterm y busca el mensaje de arranque que confirma que el servidor escucha en el puerto 6989. Si usas Traefik, revisa el panel de Traefik. La ruta nexterm debería aparecer bajo tus entrypoints. docker compose ps debería mostrar el estado “Up”.

Si el contenedor se cierra inmediatamente, la causa más común es una ENCRYPTION_KEY ausente o mal formada. Consulta la sección de resolución de problemas más abajo.

Paso 4: Accede a Nexterm y añade tus primeras conexiones

Abre https://nexterm.domain.com en tu navegador (o http://ip-de-tu-servidor:6989 si omitiste el proxy inverso). El primer usuario que crees será el administrador. Tras iniciar sesión, añade conexiones:

  1. Haz clic en Servers en la barra lateral
  2. Crea una carpeta (p. ej., “Producción” o “Home Lab”)
  3. Haz clic en el botón + para añadir una nueva conexión
  4. Selecciona el protocolo (SSH, RDP, VNC, etc.), introduce el host, el puerto y las credenciales
  5. Guarda y haz doble clic para conectar
Panel de la interfaz web de Nexterm mostrando las conexiones de servidores Nexterm añadiendo una nueva conexión de servidor SSH

Red host vs red bridge: ¿cuál deberías usar?

La documentación oficial de Nexterm recomienda network_mode: host porque habilita Wake-on-LAN y la conectividad localhost con el host Docker. Pero la red host implica que las etiquetas del proveedor Docker de Traefik no funcionarán. Necesitarías un proveedor de archivos o un proxy inverso diferente.

Para la mayoría de los lectores de bitdoze con un stack Traefik existente, la red bridge (la configuración anterior) es la opción práctica. Usa la red host solo si necesitas Wake-on-LAN o acceso a servidores en localhost y no usas el proveedor Docker de Traefik.

Red bridge + Traefik

Lo que obtienes: funciona con tu proveedor Docker de Traefik existente. TLS automático mediante etiquetas de Let’s Encrypt. Integración limpia con traefik-net.

Lo que pierdes: sin soporte de Wake-on-LAN. Sin conectividad directa a localhost del host Docker desde dentro del contenedor. Los servidores de destino deben ser accesibles desde la red bridge de Docker.

Esta es la configuración del Paso 2 anterior.

Red host

Lo que obtienes: acceso completo a la pila de red del host. Wake-on-LAN funciona. Conecta directamente a servicios localhost del host.

Lo que pierdes: las etiquetas Docker de Traefik no funcionan. Tendrás que configurar el proxy inverso mediante un proveedor de archivos, o usar Nginx/Caddy con configuración estática. El puerto 6989 queda expuesto en todas las interfaces del host por defecto.

yaml
services:
  nexterm:
    image: nexterm/aio:latest
    environment:
      ENCRYPTION_KEY: "your-generated-key-here"
    network_mode: host
    restart: always
    volumes:
      - ./nexterm:/app/data

Si usas la red host en un VPS público, restringe el puerto 6989 con UFW/iptables o ponlo detrás de una VPN.

Usuarios de Cloudflare Tunnel

Si ejecutas Nexterm detrás de un Cloudflare Tunnel, asegúrate de que el proxy de WebSocket esté habilitado. Nexterm usa WebSocket para las sesiones de terminal. Sin él, obtendrás una conexión que se cae inmediatamente. Consulta la documentación oficial del proxy inverso.

Endurecimiento y notas de producción

Software en beta

Nexterm todavía está en beta (v1.2.x). Haz siempre una copia de seguridad de tu directorio de datos antes de actualizar. Pueden producirse cambios que rompan la compatibilidad entre versiones.

Haz copias de seguridad antes de actualizar. Nexterm está en beta. Puede haber pérdida de datos entre saltos de versión importantes. Haz siempre una copia de seguridad del directorio de datos ./nexterm antes de descargar una nueva imagen:

bash
docker compose down
cp -r ./nexterm ./nexterm-backup-$(date +%Y%m%d)
docker compose pull
docker compose up -d

Gestión de ENCRYPTION_KEY. Guarda la clave en un gestor de contraseñas. Nunca la subas a git ni la pegues en foros públicos. Si la pierdes, todas las credenciales almacenadas serán irrecuperables. Los secrets de Docker son compatibles. Monta en /run/secrets/encryption_key en lugar de usar la variable de entorno. Aprende más sobre cómo gestionar secrets de forma segura con Docker Compose.

Cortafuegos. Si usas el modo de red host en un VPS público, el puerto 6989 queda expuesto directamente en todas las interfaces. Usa UFW o iptables para restringir el acceso, o pon Nexterm detrás de un proxy inverso. Si usas Hetzner, lee cómo securizar tu servidor Docker. Para un endurecimiento más amplio del VPS, securiza tu VPS con CrowdSec.

Consumo de recursos. Nexterm suele funcionar con menos de 200 MB de RAM. La imagen AIO ocupa ~95 MB comprimida. No necesita mucho. Un VPS pequeño maneja docenas de conexiones.

Actualizaciones periódicas. Revisa los lanzamientos de GitHub periódicamente. Usa nexterm/aio:latest para actualizar automáticamente al hacer pull, o fija una versión específica como nexterm/aio:1.2.2-BETA para mayor estabilidad.

Resolución de problemas comunes

El contenedor no arranca (falta ENCRYPTION_KEY)

Síntoma: el contenedor se cierra inmediatamente después de docker compose up -d.

Solución: asegúrate de que ENCRYPTION_KEY esté definida en la sección environment de tu archivo docker-compose. Revisa los logs:

bash
docker compose logs nexterm

Si ves errores relacionados con el cifrado, regenera la clave con openssl rand -hex 32 y reinicia.

Verificación: docker compose ps debería mostrar el estado “Up” tras la corrección.

No se puede conectar por SSH desde Nexterm

Síntoma: tiempo de espera agotado o conexión rechazada al intentar SSH a un servidor de destino.

Solución: si usas la red bridge, verifica que el destino sea accesible desde el contenedor:

bash
docker compose exec nexterm ping target-ip

Revisa las reglas del cortafuegos en el servidor de destino. Si el destino está en una red diferente, la red bridge de Docker podría no tener ruta hacia él.

Verificación: revisa los logs de Nexterm en busca de errores de conexión del motor.

RDP/VNC muestra una pantalla negra

Síntoma: conecta al servidor remoto pero muestra una pantalla negra.

Solución: para RDP, intenta ajustar el método de seguridad. Desde la v1.2.2, Nexterm soporta configuración de NLA y Kerberos. Para VNC, verifica que el servidor VNC esté en ejecución y aceptando conexiones en el destino. Algunos servidores VNC solo aceptan conexiones desde localhost por defecto.

Errores de WebSocket del proxy inverso

Síntoma: el terminal conecta pero se desconecta inmediatamente.

Solución: Nexterm requiere soporte de WebSocket. Si usas Nginx como proxy inverso, añade estas cabeceras:

nginx
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

Para Cloudflare, habilita el proxy de WebSocket en el panel. Consulta la documentación oficial del proxy inverso.

Migración desde la antigua imagen germannewsmaker/nexterm

Síntoma: cambiar a nexterm/aio:latest falla o los datos parecen incompatibles.

Solución: primero haz una copia de seguridad de tu directorio de datos ./nexterm. Cambia la imagen en docker-compose:

yaml
# old (deprecated)
image: germannewsmaker/nexterm:1.0.1-OPEN-PREVIEW
# new
image: nexterm/aio:latest

Si el contenedor no arranca tras el cambio (problemas de migración del cifrado con datos anteriores a la 1.0.3), empieza de cero: borra el directorio ./nexterm y vuelve a añadir tus conexiones manualmente. Las notas de la versión v1.2.1-BETA advierten que la migración desde versiones muy antiguas puede ser inestable.

Conclusión

Nexterm en la v1.2.2-BETA es una plataforma de gestión de servidores autoalojada capaz y ligera. La instalación de Nexterm con Docker mediante Docker Compose te da SSH, VNC, RDP, Telnet y SFTP desde un único panel web, con cifrado en reposo adecuado, soporte de 2FA/passkeys y grabación de sesiones. Funciona cómodamente en un VPS pequeño y se integra bien con Traefik para acceso HTTPS.

Si estás explorando el tema, consulta los paneles de gestión de servidores autoalojados para una comparación más amplia, o mira herramientas alternativas de gestión SSH como Termix para otras ventajas e inconvenientes.

Visita la documentación de Nexterm