Tutorial

RustDesk: escritorio remoto self-hosted en un VPS

Autoalojamiento13 min de lectura7 pasos

TeamViewer y AnyDesk cobran licencias anuales elevadas mientras enrutan cada sesión a través de su propia infraestructura. RustDesk, open source bajo licencia AGPL-3.0, invierte ese modelo: despliegas dos servicios ligeros en tu VPS, el tráfico nunca sale de tu infraestructura y el cifrado extremo a extremo está garantizado por diseño, no por contrato. Esta guía cubre la arquitectura completa, el despliegue paso a paso, la configuración TLS, el control de acceso y el mantenimiento continuo.

Contenido· Por qué alojar tu propio servidor de escritorio remoto1/12
  1. 01Por qué alojar tu propio servidor de escritorio remoto
  2. 02Lo que te ofrece RustDesk self-hosted
  3. 03Arquitectura RustDesk: hbbs y hbbr
  4. 04Requisitos del VPS
  5. 05Desplegar RustDesk Server en un VPS
  6. 06Configurar TLS para conexiones seguras
  7. 07Activar autenticación y control de acceso
  8. 08Optimizar la calidad de imagen y el rendimiento
  9. 09RustDesk vs TeamViewer vs AnyDesk vs Guacamole
  10. 10Despliegue enterprise: aprovisionamiento masivo de clientes
  11. 11Monitorizar y mantener el servidor
  12. 12Resolver problemas comunes

Por qué alojar tu propio servidor de escritorio remoto

Las soluciones comerciales como TeamViewer y AnyDesk comparten una característica: cada conexión pasa por su infraestructura de relay, independientemente de la distancia real entre las dos máquinas. Esto genera tres problemas concretos.

Privacidad y cumplimiento. Los datos fluyen a través de servidores de terceros sujetos a la legislación de su país de alojamiento. Para proveedores IT que acceden a sistemas financieros, médicos o legales, esta delegación implícita puede invalidar un acuerdo de cumplimiento (RGPD, ISO 27001, HIPAA). RustDesk self-hosted elimina esta dependencia: el tráfico cifrado permanece en tu datacenter.

Historial de vulnerabilidades. TeamViewer ha sufrido varios incidentes notables — en 2016, miles de cuentas fueron comprometidas mediante credential stuffing; en 2024, una intrusión en el entorno corporativo fue atribuida a un grupo APT. Estos incidentes no implican al protocolo, pero destacan que depender de un tercero significa depender de su superficie de ataque.

Coste de licencias. TeamViewer Business parte de más de 600 €/año para un solo usuario simultáneo. AnyDesk es más barato pero sigue un modelo por puesto. RustDesk self-hosted reduce el coste al de tu VPS — un ServOrbit desde 99 DH/mes cubre a todo un equipo.

Lo que te ofrece RustDesk self-hosted

  • Sin límites de sesión — sin licencia por puesto ni cuota de conexiones simultáneas; tu servidor atiende a tantos usuarios como tu VPS pueda manejar
  • Cifrado extremo a extremo garantizado — curva Ed25519 para intercambio de claves, ChaCha20-Poly1305 para el flujo de vídeo y las entradas de teclado/ratón: la clave pública de tu servidor está integrada en el cliente, haciendo la interceptación estructuralmente imposible
  • Latencia controlada — tu relay está en el datacenter de tu elección; al elegir la región más cercana a tus equipos, el RTT es consistentemente inferior al de un relay SaaS genérico en Europa del Norte
  • Clientes multiplataforma — Windows, macOS, Linux, Android, iOS y navegador web desde un único servidor central, sin configuraciones diferentes por plataforma
  • IDs personalizados — asigna identificadores memorables (SERVIDOR-DB-01, LAPTOP-ALICIA) en lugar de los IDs numéricos aleatorios generados por defecto
  • API REST integrada — RustDesk Server Pro expone una API REST para consultar el estado de conexiones, listar máquinas registradas y automatizar el aprovisionamiento mediante tus propios scripts o un CMDB
  • Registro de auditoría completo — cada conexión, desconexión y transferencia de archivo queda registrada con marca temporal en el servidor; imprescindible en entornos con requisitos de trazabilidad

Arquitectura RustDesk: hbbs y hbbr

RustDesk separa el rol de señalización del rol de relay en dos procesos distintos.

hbbs — el servidor de rendez-vous (servidor de ID). Es el punto de entrada. Cada cliente RustDesk que arranca se registra con un identificador numérico (o personalizado). Cuando se inicia una conexión, ambas partes contactan hbbs para intercambiar direcciones IP e intentar una conexión P2P directa. hbbs escucha en los puertos TCP 21115 y 21116, así como UDP 21116.

hbbr — el servidor relay. Si la conexión P2P falla (NAT simétrico, firewall restrictivo), el tráfico se retransmite a través de hbbr. El relay solo ve flujos cifrados — no puede leer el contenido. hbbr escucha en el puerto TCP 21117.

Flujo de una conexión. La máquina A contacta hbbs vía TCP para obtener la dirección de la máquina B. Ambas máquinas intentan una conexión UDP directa (hole punching). Si tiene éxito, hbbr no interviene y la latencia es mínima. Si falla, hbbs proporciona a A la dirección de hbbr para retransmitir — con un ligero overhead de pocos milisegundos. En la práctica, P2P funciona en la mayoría de redes domésticas y empresariales que no tienen NAT estricto.

Requisitos del VPS

Recursos mínimos. 1 GB de RAM y 1 vCPU son suficientes para hasta unas 20 conexiones simultáneas en modo relay. Más allá, el factor limitante es el ancho de banda: un flujo Full HD se codifica a aproximadamente 2-4 Mbit/s. Para 50 conexiones simultáneas en relay, planifica 2 vCPU, 2 GB de RAM y un VPS con un rendimiento garantizado de al menos 200 Mbit/s.

Puertos a abrir.
- TCP 21115 — negociación NAT
- TCP 21116 — registro de ID
- UDP 21116 — hole punching P2P
- TCP 21117 — flujo retransmitido
- TCP 21118 y 21119 — cliente web (opcional)
- TCP 443 — interfaz admin HTTPS (si se activa)

Software requerido. Docker Engine 24+ y Docker Compose v2 (comando docker compose sin guion). Se recomienda un dominio o subdominio para exponer la interfaz de administración detrás de TLS — de lo contrario las conexiones de administración usan HTTP en claro.

Desplegar RustDesk Server en un VPS

  1. Crear el directorio y docker-compose.yml

    Crea la estructura de directorios y el archivo Compose:

    mkdir -p /opt/rustdesk/data
    cd /opt/rustdesk

    Contenido de docker-compose.yml:

    services:
      hbbs:
        image: rustdesk/rustdesk-server:latest
        command: hbbs
        ports:
          - "21115:21115"
          - "21116:21116"
          - "21116:21116/udp"
          - "21118:21118"
        volumes:
          - ./data:/root
        restart: unless-stopped
        depends_on:
          - hbbr
    
      hbbr:
        image: rustdesk/rustdesk-server:latest
        command: hbbr
        ports:
          - "21117:21117"
          - "21119:21119"
        volumes:
          - ./data:/root
        restart: unless-stopped

    El volumen compartido ./data garantiza que hbbs y hbbr usen el mismo par de claves generado en el primer arranque.

  2. Iniciar los contenedores y recuperar las claves

    Inicia los dos servicios en segundo plano:

    docker compose up -d

    En el primer arranque, hbbs genera automáticamente un par de claves Ed25519 en ./data/. Recupera la clave pública:

    cat /opt/rustdesk/data/id_ed25519.pub

    Anota este valor — lo necesitarás para configurar cada cliente. Sin él, los clientes se negarán a conectarse a tu servidor. Guarda también id_ed25519 (clave privada) en un lugar seguro; si se ve comprometida, todos los clientes necesitarán reconfiguración con una clave nueva.

  3. Configurar el firewall (puertos TCP/UDP)

    Abre los puertos necesarios en ufw:

    ufw allow 21115/tcp
    ufw allow 21116/tcp
    ufw allow 21116/udp
    ufw allow 21117/tcp
    ufw allow 21118/tcp
    ufw allow 21119/tcp
    ufw reload

    Si tu VPS también está protegido por un firewall de red en el panel ServOrbit, aplica las mismas reglas allí. Luego verifica que los puertos estén escuchando:

    ss -tlnup | grep -E '2111[5-9]'
  4. Exponer la interfaz admin detrás de un reverse proxy HTTPS

    RustDesk Server Pro proporciona una interfaz web de administración en el puerto 21114 (HTTP). Para exponerla en HTTPS, añade nginx como reverse proxy.

    Vhost nginx mínimo para rustdesk.tu-dominio.com:

    server {
        listen 443 ssl;
        server_name rustdesk.tu-dominio.com;
        ssl_certificate /etc/letsencrypt/live/rustdesk.tu-dominio.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/rustdesk.tu-dominio.com/privkey.pem;
        location / {
            proxy_pass http://127.0.0.1:21114;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }

    Obtén el certificado con Certbot:

    certbot --nginx -d rustdesk.tu-dominio.com
  5. Configurar los clientes desktop (Windows, macOS, Linux)

    Descarga el cliente RustDesk desde [rustdesk.com](https://rustdesk.com) y abre la configuración de red (icono de engranaje → Red). Introduce:
    - Servidor ID: dirección IP o nombre de dominio de tu VPS
    - Servidor Relay: mismo valor
    - Clave: el valor copiado de id_ed25519.pub

    Confirma. El indicador de conexión se pone verde si el servidor es accesible y la clave es correcta. A partir de ese momento, ningún intento de conexión pasará por los servidores públicos de RustDesk.

  6. Configurar los clientes móviles (Android e iOS)

    En Android, instala RustDesk desde Play Store o directamente mediante APK (útil si Play Store está restringido en algunos dispositivos empresariales). En iOS, RustDesk está disponible en App Store.

    En ambos casos, ve a Ajustes → Servidor ID/Relay e introduce los mismos valores que para el cliente desktop: dirección del servidor y clave pública. La clave puede compartirse mediante código QR desde la interfaz admin de RustDesk Server Pro, lo que simplifica el despliegue masivo en flotas móviles.

  7. Probar una conexión extremo a extremo

    En dos máquinas configuradas con tu servidor, anota el identificador mostrado en la máquina destino. Desde la máquina origen, introduce ese identificador en el campo de conexión de RustDesk e inicia la sesión.

    Verifica en los logs que la conexión pasa por tu infraestructura:

    docker logs rustdesk-hbbr-1 --tail 20

    Una línea con [RELAY] indica que se usa el relay (NAT estricto). Una línea [DIRECT] o la ausencia de líneas en los logs de hbbr indica una conexión P2P directa — ideal para la latencia.

Configurar TLS para conexiones seguras

Por defecto, los flujos RustDesk están cifrados extremo a extremo con ChaCha20-Poly1305 — no se requiere TLS adicional para las sesiones de escritorio remoto en sí. Sin embargo, la interfaz de administración (puerto 21114) y la API REST funcionan en HTTP en claro si no las proteges.

Opción 1: Certbot + nginx (recomendado). Como se muestra en el paso 4, nginx actúa como reverse proxy frente al puerto 21114. Certbot renueva el certificado automáticamente mediante un timer systemd.

Opción 2: Traefik como edge proxy. Si ya usas Traefik para otros servicios en el mismo VPS, simplemente añade labels al servicio hbbr en Compose:

labels:
  - "traefik.enable=true"
  - "traefik.http.routers.rustdesk-admin.rule=Host(`rustdesk.tu-dominio.com`)"
  - "traefik.http.routers.rustdesk-admin.tls.certresolver=letsencrypt"
  - "traefik.http.services.rustdesk-admin.loadbalancer.server.port=21114"

Lo que permanece sin cifrar por diseño. Los puertos 21115-21119 no usan HTTPS porque emplean sus propios protocolos binarios. El cifrado de esos flujos lo gestionan las claves Ed25519 y ChaCha20 — no TLS. No intentes forzar HTTPS en estos puertos.

Activar autenticación y control de acceso

La versión open source de RustDesk Server no tiene interfaz de autenticación nativa — cualquier cliente que conozca tu clave pública puede intentar conectarse a una máquina registrada (si esa máquina acepta la petición). RustDesk Server Pro (auto-alojable, gratuito hasta 20 usuarios) añade varias capas de control.

Cuentas de usuario y grupos. La interfaz de administración permite crear cuentas con nombre, agruparlas y definir políticas de acceso por grupo. Un técnico puede tener acceso solo a las máquinas del grupo 'Infraestructura', no a los equipos de RRHH.

Aprobación de conexión. Cada máquina puede configurarse para requerir confirmación física del usuario local antes de permitir el control remoto — el cuadro de diálogo 'Aceptar conexión' aparece en la pantalla de la máquina destino.

Registro de auditoría completo. Cada evento (conexión iniciada, aceptada, rechazada, duración, transferencia de archivo) queda registrado con la identidad del iniciador y la marca temporal. Los logs son exportables como CSV desde la interfaz de administración.

Deshabilitar los servidores públicos. Para forzar el uso exclusivo de tu servidor — sin fallback a los relays públicos de RustDesk si no está disponible — añade la opción --key con tu clave privada al comando hbbs. Los clientes configurados con tu clave pública rechazarán cualquier servidor alternativo, incluido el servidor oficial de RustDesk.

Optimizar la calidad de imagen y el rendimiento

RustDesk usa por defecto su propio códec de vídeo (VP9 o H.264 según la plataforma) con calidad adaptativa basada en el ancho de banda detectado. Varios parámetros permiten ajustar este comportamiento.

Calidad de imagen. En la configuración del cliente, 'Calidad de imagen' puede ajustarse a Baja, Media, Alta o Personalizada. En entornos empresariales sobre LAN o un VPS cercano geográficamente, 'Alta' es utilizable sin saturar el ancho de banda. En una conexión móvil o de larga distancia, 'Media' reduce la latencia percibida.

Códec. RustDesk selecciona automáticamente el mejor códec disponible: H.265 si ambos extremos tienen codificación/decodificación por hardware, VP9 en caso contrario. En un VPS sin GPU, VP9 es el predeterminado — razonable en uso de CPU para flujos ofimáticos. Evita forzar H.264 en un VPS con poco CPU si tienes múltiples conexiones simultáneas.

P2P vs relay. Una conexión P2P directa es siempre preferible: evita el salto adicional a través de hbbr, eliminando el intermediario y reduciendo el tiempo de ida y vuelta. Si tus usuarios se conectan desde la misma LAN que la máquina destino, verifica que el firewall no bloquee las conexiones UDP directas entre hosts — RustDesk intenta P2P primero antes de recurrir al relay.

RustDesk vs TeamViewer vs AnyDesk vs Guacamole

Desplace la tabla

CriterioRustDesk (self-hosted)TeamViewerAnyDeskGuacamole
Modelo de alojamientoSelf-hosted (VPS)SaaS (nube del proveedor)SaaS (nube del proveedor)Self-hosted (servidor web)
Coste de licenciaGratis (OSS) / Pro de pagoDesde 600 €/año/usuarioDesde 180 €/año/usuarioGratis (Apache 2.0)
ProtocoloPropietario cifrado (Ed25519 + ChaCha20)Propietario (híbrido RDP/VNC)DeskRT (códec propietario)VNC / RDP / SSH vía navegador
Conexión P2PSí (con fallback relay)No (siempre vía nube)Sí (con fallback)No (proxy central)
Clientes móviles nativosAndroid + iOS nativosAndroid + iOS nativosAndroid + iOS nativosSolo navegador
Registro de auditoríaSí (Pro)Sí (Business+)Sí (Business+)Limitado (logs de servidor brutos)
API RESTSí (Pro)Sí (de pago)No (API de terceros)Sí (REST parcial)
Soberanía de datosTotal (tu infraestructura)Nula (nube TeamViewer)Parcial (relay AnyDesk)Total (tu infraestructura)

Despliegue enterprise: aprovisionamiento masivo de clientes

RustDesk admite configuración automática mediante un archivo de configuración integrado en el ejecutable del cliente. Al compilar o empaquetar para tu flota, coloca un archivo RustDesk2.toml en el directorio de configuración con tus valores:

relay-server = "tu-vps.ejemplo.com"
id-server = "tu-vps.ejemplo.com"
key = "<tu_clave_pública_ed25519>"

En Windows, este archivo va en %APPDATA%\RustDesk\config\. En Linux, en ~/.config/rustdesk/. Puedes desplegar esta configuración mediante tu herramienta de gestión de flota (Ansible, Intune, Puppet) sin interacción del usuario. La clave pública y la dirección del servidor están precargadas — el usuario instala RustDesk y queda directamente conectado a tu infraestructura.

Monitorizar y mantener el servidor

Métricas Docker. Monitoriza el consumo de recursos en tiempo real con docker stats — un pico de CPU en hbbr indica un número inusualmente alto de conexiones retransmitidas. Si la media supera el 80% durante varios minutos, considera aumentar el vCPU o verificar si conexiones bloqueadas están generando bucles de reintento.

Rotación de logs. Los contenedores escriben en stdout/stderr, gestionados por el demonio Docker. Añade una política de rotación en docker-compose.yml para evitar que los logs llenen el disco:

logging:
  driver: "json-file"
  options:
    max-size: "10m"
    max-file: "5"

Actualización de la imagen. RustDesk publica nuevas versiones regularmente. Para actualizar con mínimo tiempo de inactividad percibido:

docker compose pull
docker compose up -d

Docker reemplaza los contenedores uno a uno. Las sesiones en curso a través de hbbr se cortan durante el reinicio (pocos segundos) — prefiere las actualizaciones en horas de menor actividad. Las claves en ./data/ se conservan — no se requiere reconfiguración de clientes.

Resolver problemas comunes

Conexión imposible, ID no encontrado. Verifica que hbbs está ejecutándose (docker ps) y que los puertos TCP 21115-21116 y UDP 21116 son accesibles desde el exterior: nc -vz <ip-vps> 21116. Si el test falla, el firewall de red (ufw o regla del VPS) está bloqueando el puerto.

'Clave incorrecta' en el cliente. La clave mostrada en el cliente no coincide con id_ed25519.pub en el servidor. Vuelve a leer el valor exacto con cat /opt/rustdesk/data/id_ed25519.pub y reconfigura el cliente — ojo con los espacios o saltos de línea al copiar y pegar.

Siempre en modo relay, nunca P2P. El hole punching UDP falla si una de las dos redes usa NAT simétrico (habitual en algunas redes móviles 4G/5G y VPN corporativas). No es un bug — el relay funciona correctamente, con una latencia ligeramente mayor. Para forzar el diagnóstico, compara los logs de hbbr con y sin VPN activo en el lado del cliente.

Interfaz de administración inaccesible. El puerto 21114 no está expuesto en el docker-compose.yml base — hay que añadirlo explícitamente o acceder a través del reverse proxy nginx del paso 4. Comprueba también que estás usando la imagen rustdesk-server-pro (la versión open source no tiene interfaz de administración).

Actualización de imagen sin regenerar claves. Tras docker compose pull && docker compose up -d, verifica que ./data/id_ed25519.pub no ha cambiado — no debería, pero la corrupción del volumen puede en raras ocasiones regenerar el par. Si la clave ha cambiado, todos los clientes necesitarán reconfiguración.

¿Listo para desplegar tu servidor RustDesk?

Los planes VPS de ServOrbit incluyen una IP pública dedicada, un firewall configurable y Docker listo para usar — todo lo que necesitas para alojar tu propia infraestructura de escritorio remoto en minutos.

¿Necesita ayuda?

Consulte nuestro centro de ayuda y nuestra FAQ, o contacte con nuestro equipo: llamada, WhatsApp o correo electrónico. Soporte en francés, inglés y árabe.

Escribir por WhatsAppse abre en una pestaña nueva