--- title: "Cómo instalar un servidor RustDesk propio en Ubuntu 24.04" description: "Despliega tu servidor RustDesk (hbbs y hbbr) con Docker Compose en Ubuntu 24.04, abre los puertos necesarios y configura los clientes con la clave pública." category: "Acceso Remoto" language: es source: https://cubepath.com/es/docs/acceso-remoto/rustdesk-escritorio-remoto-self-hosted updated: 2026-09-25 --- # Cómo instalar un servidor RustDesk propio en Ubuntu 24.04 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: | Componente | Función | Puertos | |-----------|---------|---------| | `hbbs` | Servidor de ID (rendezvous): registra los equipos y les ayuda a conectarse directamente entre sí | 21115/tcp, 21116/tcp, 21116/udp, 21118/tcp | | `hbbr` | Relay: reenvía el tráfico cuando la conexión directa entre equipos no es posible | 21117/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`: ```bash sudo mkdir -p /opt/rustdesk cd /opt/rustdesk ``` Crea el archivo `compose.yaml`: ```bash sudo nano /opt/rustdesk/compose.yaml ``` ```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: ```bash sudo docker compose up -d ``` Comprueba que los dos contenedores están en ejecución: ```bash sudo docker compose ps ``` ```output 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: ```bash 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: ```bash sudo cat /opt/rustdesk/data/id_ed25519.pub ``` ```output OeVuKk5nlHiXp+APNn0Y3pC1Iwpwn44JGqrQCsWqmBw= ``` Copia ese valor; lo necesitarás en cada cliente. > Importante: el archivo `data/id_ed25519` es la clave privada del servidor. Inclúyelo en tus copias de seguridad. Si se pierde y se genera una nueva, tendrás que actualizar la clave en todos los clientes. ## 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: ```bash 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: ```bash sudo ufw status ``` ```output To Action From -- ------ ---- OpenSSH ALLOW Anywhere 21115:21117/tcp ALLOW Anywhere 21116/udp ALLOW Anywhere ``` > Nota: Docker modifica iptables para los puertos que publica, pero aquí los contenedores usan la red del host, así que las reglas de UFW sí se aplican a RustDesk. ## Paso 5: Configurar los clientes Instala el cliente RustDesk en los equipos desde la [página de descargas oficial](https://rustdesk.com/) o desde las [versiones en GitHub](https://github.com/rustdesk/rustdesk/releases). 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: ```bash 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: ```bash 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: ```bash rustdesk --get-id ``` Comprueba que el servicio está activo para que el equipo acepte conexiones aunque no haya ninguna sesión iniciada: ```bash 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`: ```bash 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: ```bash 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: ```bash sudo docker compose logs --tail 50 hbbs ``` **Los clientes no llegan al servidor.** Desde un equipo externo, comprueba que los puertos TCP responden: ```bash 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í.