RustDesk es una aplicación de escritorio remoto de código abierto, alternativa a TeamViewer y AnyDesk. Por defecto los clientes usan los servidores públicos de RustDesk, pero puedes alojar tu propio servidor para que el registro de equipos y el tráfico de relay pasen solo por tu infraestructura. En este tutorial desplegarás el servidor RustDesk con Docker Compose en Ubuntu 24.04, abrirás los puertos necesarios y configurarás los clientes para que lo usen.

Requisitos previos

Para seguir esta guía necesitas:

  • Un servidor con Ubuntu 24.04 LTS e IP pública, por ejemplo un VPS de CubePath. Con 1 vCPU y 1 GB de RAM es suficiente para un equipo pequeño; el consumo crece con el tráfico que pasa por el relay.
  • Un usuario no root con privilegios sudo.
  • Docker Engine y el plugin de Docker Compose instalados desde el repositorio oficial de Docker.
  • Opcional: un nombre de dominio con un registro A que apunte al servidor, por ejemplo rustdesk.your_domain. Si no lo tienes, usa la IP your_server_ip.

Cómo funciona el servidor RustDesk

El servidor open source tiene dos componentes:

ComponenteFunciónPuertos
hbbsServidor de ID (rendezvous): registra los equipos y les ayuda a conectarse directamente entre sí21115/tcp, 21116/tcp, 21116/udp, 21118/tcp
hbbrRelay: reenvía el tráfico cuando la conexión directa entre equipos no es posible21117/tcp, 21119/tcp

Los puertos 21118 y 21119 solo los usa el cliente web. Si no lo vas a usar, no hace falta abrirlos.

Paso 1: Crear el archivo de Docker Compose

Crea un directorio para el servicio. Los datos, incluido el par de claves del servidor, se guardarán en su subdirectorio data:

sudo mkdir -p /opt/rustdesk
cd /opt/rustdesk

Crea el archivo compose.yaml:

sudo nano /opt/rustdesk/compose.yaml
services:
  hbbs:
    container_name: hbbs
    image: rustdesk/rustdesk-server:latest
    command: hbbs
    volumes:
      - ./data:/root
    network_mode: host
    depends_on:
      - hbbr
    restart: unless-stopped

  hbbr:
    container_name: hbbr
    image: rustdesk/rustdesk-server:latest
    command: hbbr
    volumes:
      - ./data:/root
    network_mode: host
    restart: unless-stopped

network_mode: host hace que los contenedores escuchen directamente en los puertos del servidor. Así hbbs ve la IP pública real de los clientes, necesaria para la conexión directa entre equipos (hole punching). Ambos servicios comparten el directorio data, donde hbbs genera las claves.

Paso 2: Arrancar el servidor

Descarga la imagen y arranca los contenedores en segundo plano:

sudo docker compose up -d

Comprueba que los dos contenedores están en ejecución:

sudo docker compose ps
NAME      IMAGE                             COMMAND   SERVICE   CREATED          STATUS          PORTS
hbbr      rustdesk/rustdesk-server:latest   "hbbr"    hbbr      20 seconds ago   Up 19 seconds
hbbs      rustdesk/rustdesk-server:latest   "hbbs"    hbbs      20 seconds ago   Up 19 seconds

Verifica que los puertos están a la escucha:

sudo ss -tulpn | grep -E ':2111[5-9]'

Debes ver hbbs en 21115, 21116 (TCP y UDP) y 21118, y hbbr en 21117 y 21119.

Paso 3: Obtener la clave pública del servidor

En el primer arranque, hbbs genera un par de claves Ed25519 en data. Los clientes usan la clave pública para verificar que hablan con tu servidor y cifrar la conexión. Muéstrala:

sudo cat /opt/rustdesk/data/id_ed25519.pub
OeVuKk5nlHiXp+APNn0Y3pC1Iwpwn44JGqrQCsWqmBw=

Copia ese valor; lo necesitarás en cada cliente.

Paso 4: Abrir los puertos en el firewall

Permite los puertos del servidor en UFW. Asegúrate de mantener permitido SSH antes de activar el firewall:

sudo ufw allow OpenSSH
sudo ufw allow 21115:21117/tcp
sudo ufw allow 21116/udp
sudo ufw enable

Si vas a usar el cliente web, añade también sudo ufw allow 21118:21119/tcp. Comprueba las reglas:

sudo ufw status
To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
21115:21117/tcp            ALLOW       Anywhere
21116/udp                  ALLOW       Anywhere

Paso 5: Configurar los clientes

Instala el cliente RustDesk en los equipos desde la página de descargas oficial o desde las versiones en GitHub. Después, en cada cliente:

  1. Abre Ajustes y entra en Red.
  2. Desbloquea la configuración de red si el cliente lo pide y abre Servidor de ID/Relay.
  3. En Servidor de ID, escribe rustdesk.your_domain o your_server_ip.
  4. Deja Servidor Relay vacío: el cliente usará el mismo host. Deja vacío también Servidor API, que solo se usa en la edición de pago.
  5. En Key, pega la clave pública del paso 3 y guarda.

En la parte inferior de la ventana principal, el cliente debe mostrar Listo en lugar de un error de conexión. Configura dos equipos de la misma forma y conéctate de uno a otro con el ID que muestra el equipo remoto.

Para no repetir la configuración a mano, en un cliente ya configurado abre Ajustes > Red, usa la opción de exportar la configuración del servidor y copia la cadena resultante. En los clientes Linux puedes importarla desde la terminal:

sudo rustdesk --config 'cadena_exportada'

Paso 6: Acceso desatendido en un equipo Linux

Para conectarte a un equipo sin que nadie acepte la conexión, define una contraseña permanente. En el cliente Linux, que instala el servicio rustdesk con el paquete .deb, ejecuta como root:

sudo rustdesk --password 'your_strong_password'

Usa una contraseña larga y única: cualquiera con el ID del equipo y esta contraseña puede controlarlo. Consulta el ID que debes usar desde el equipo que se conecta:

rustdesk --get-id

Comprueba que el servicio está activo para que el equipo acepte conexiones aunque no haya ninguna sesión iniciada:

systemctl status rustdesk

Paso 7: Actualizar y hacer copias de seguridad

Para actualizar el servidor, descarga la imagen nueva y recrea los contenedores. Los datos y las claves se conservan en data:

cd /opt/rustdesk
sudo docker compose pull
sudo docker compose up -d

Guarda una copia del directorio data, que contiene las claves y la base de datos de equipos registrados:

sudo tar -czf /root/rustdesk-data-$(date +%F).tar.gz -C /opt/rustdesk data

Solución de problemas

El cliente muestra un error de conexión o "Key mismatch". Comprueba que la clave del cliente coincide exactamente con el contenido de id_ed25519.pub, sin espacios ni saltos de línea. Revisa los logs del servidor:

sudo docker compose logs --tail 50 hbbs

Los clientes no llegan al servidor. Desde un equipo externo, comprueba que los puertos TCP responden:

nc -zv your_server_ip 21116
nc -zv your_server_ip 21117

Si fallan, revisa sudo ufw status y cualquier firewall externo al servidor.

Las conexiones son lentas. Si la conexión directa entre equipos no es posible (NAT estricto en alguno de los dos extremos), todo el tráfico pasa por hbbr y la latencia depende de la ubicación del servidor. Elige una ubicación cercana a tus usuarios. Verifica también que el puerto 21116/udp está abierto, porque se usa para la conexión directa.

Conclusión

Tienes un servidor RustDesk propio en Ubuntu 24.04 funcionando con Docker Compose, con los puertos necesarios abiertos y los clientes verificando la clave pública de tu servidor. Como siguientes pasos, puedes distribuir la cadena de configuración a todos tus equipos, programar la copia de seguridad del directorio data con un temporizador de systemd, o limitar en UFW el acceso a los puertos de RustDesk a los rangos de IP de tu oficina si todos los clientes se conectan desde allí.