RustDesk: Escritorio Remoto Self-Hosted en Linux

RustDesk es una alternativa open-source a TeamViewer y AnyDesk que permite desplegar tu propio servidor de escritorio remoto con control total sobre los datos. Al alojar el servidor relay en tu propio VPS o servidor baremetal, eliminas la dependencia de servicios externos y garantizas la privacidad de las conexiones. Esta guía cubre la instalación completa del servidor RustDesk y la configuración de clientes en Linux.

Requisitos Previos

  • VPS o servidor baremetal con Ubuntu 20.04+, Debian 11+ o CentOS 8+
  • Mínimo 1 GB de RAM y 1 vCPU (2 GB recomendados para múltiples usuarios)
  • IP pública estática
  • Docker y Docker Compose instalados
  • Puertos 21115-21119 (TCP/UDP) y 8000 (TCP) abiertos

Instalación del Servidor RustDesk

El servidor RustDesk consta de dos componentes:

  • hbbs: Servidor de ID y señalización (rendezvous server)
  • hbbr: Servidor relay para conexiones cuando el P2P no es posible

Instalación sin Docker

# Descargar los binarios del servidor RustDesk
RUSTDESK_VERSION="1.1.10"
wget https://github.com/rustdesk/rustdesk-server/releases/download/${RUSTDESK_VERSION}/rustdesk-server-linux-amd64.zip

# Extraer los binarios
unzip rustdesk-server-linux-amd64.zip
cd rustdesk-server-linux-amd64

# Mover los binarios al sistema
sudo mv hbbs hbbr /usr/local/bin/
sudo chmod +x /usr/local/bin/hbbs /usr/local/bin/hbbr

# Crear directorio de datos
sudo mkdir -p /var/lib/rustdesk

Crear servicios systemd para hbbs y hbbr:

# Servicio para hbbs (servidor de señalización)
sudo tee /etc/systemd/system/rustdesk-hbbs.service << 'EOF'
[Unit]
Description=RustDesk Rendezvous Server
After=network.target

[Service]
Type=simple
WorkingDirectory=/var/lib/rustdesk
ExecStart=/usr/local/bin/hbbs -r IP-PUBLICA-DEL-SERVIDOR
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

# Servicio para hbbr (servidor relay)
sudo tee /etc/systemd/system/rustdesk-hbbr.service << 'EOF'
[Unit]
Description=RustDesk Relay Server
After=network.target

[Service]
Type=simple
WorkingDirectory=/var/lib/rustdesk
ExecStart=/usr/local/bin/hbbr
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

# Habilitar e iniciar los servicios
sudo systemctl daemon-reload
sudo systemctl enable --now rustdesk-hbbs rustdesk-hbbr

# Verificar el estado
sudo systemctl status rustdesk-hbbs rustdesk-hbbr

Configuración con Docker Compose

La forma recomendada de desplegar RustDesk Server usando Docker:

# Crear directorio del proyecto
mkdir -p ~/rustdesk && cd ~/rustdesk

# Crear archivo docker-compose.yml
cat > docker-compose.yml << 'EOF'
version: '3'

services:
  hbbs:
    container_name: hbbs
    image: rustdesk/rustdesk-server:latest
    command: hbbs -r IP-PUBLICA-DEL-SERVIDOR:21117
    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
EOF

# Iniciar los servicios
docker compose up -d

# Ver los logs
docker compose logs -f

Configuración del Cifrado

Al iniciar por primera vez, RustDesk genera automáticamente un par de claves para el cifrado. Obtener la clave pública:

# Si usas instalación directa
cat /var/lib/rustdesk/id_ed25519.pub

# Si usas Docker
cat ~/rustdesk/data/id_ed25519.pub

# Copiar la clave pública (se necesita para configurar los clientes)
# La clave tiene el formato: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=

Para generar un nuevo par de claves manualmente:

# Generar claves manualmente (opcional)
cd /var/lib/rustdesk  # o ~/rustdesk/data
hbbs --genkeypair

# Verificar los archivos generados
ls -la id_ed25519*

Configuración del Cliente RustDesk

Descargar el cliente RustDesk desde rustdesk.com para cualquier plataforma.

En el cliente, configurar el servidor self-hosted:

  1. Abrir RustDesk > Ajustes (icono de engranaje)
  2. Ir a "Red"
  3. En "Servidor ID/Relay": IP-PUBLICA-DEL-SERVIDOR o el dominio
  4. En "Clave": pegar el contenido de id_ed25519.pub
  5. Guardar y reiniciar el cliente

Para configuración masiva mediante archivo de configuración:

# En Linux, el archivo de configuración del cliente está en:
~/.config/rustdesk/RustDesk2.toml

# Configuración de ejemplo
cat > ~/.config/rustdesk/RustDesk2.toml << 'EOF'
rendezvous_server = 'IP-PUBLICA-DEL-SERVIDOR'
nat_type = 1
serial = 0

[options]
custom-rendezvous-server = 'IP-PUBLICA-DEL-SERVIDOR'
key = 'TU_CLAVE_PUBLICA_AQUI='
relay-server = 'IP-PUBLICA-DEL-SERVIDOR'
api-server = 'http://IP-PUBLICA-DEL-SERVIDOR:21114'
EOF

Acceso Desatendido

Configurar acceso sin supervisión en máquinas remotas:

# Establecer contraseña permanente en el cliente Linux
rustdesk --password TU_CONTRASENA_SEGURA

# Verificar el ID del dispositivo
rustdesk --get-id

# Conectar a un dispositivo remoto desde la línea de comandos
rustdesk --connect ID-DEL-DISPOSITIVO

# Iniciar RustDesk en modo servicio (para acceso siempre disponible)
sudo systemctl enable rustdesk
sudo systemctl start rustdesk

Para automatizar la instalación y configuración del cliente en múltiples máquinas:

#!/bin/bash
# Script de instalación masiva del cliente RustDesk

SERVIDOR="IP-DEL-SERVIDOR"
CLAVE="TU_CLAVE_PUBLICA="
CONTRASENA="contrasena-segura-123"

# Instalar el cliente
wget -O /tmp/rustdesk.deb "https://github.com/rustdesk/rustdesk/releases/download/1.2.6/rustdesk-1.2.6-x86_64.deb"
sudo dpkg -i /tmp/rustdesk.deb
sudo apt-get install -f -y

# Configurar el servidor
rustdesk --config "config=eyJzZXJ2ZXIiOiAiSVAifQ=="

# Establecer contraseña de acceso
rustdesk --password "$CONTRASENA"

echo "RustDesk instalado y configurado. ID: $(rustdesk --get-id)"

Configuración del Firewall

Abrir los puertos necesarios:

# UFW (Ubuntu/Debian)
sudo ufw allow 21115/tcp comment "RustDesk NAT test"
sudo ufw allow 21116/tcp comment "RustDesk ID server TCP"
sudo ufw allow 21116/udp comment "RustDesk ID server UDP"
sudo ufw allow 21117/tcp comment "RustDesk relay"
sudo ufw allow 21118/tcp comment "RustDesk WebSocket"
sudo ufw allow 21119/tcp comment "RustDesk WebSocket SSL"
sudo ufw reload

# firewalld (CentOS/Rocky)
sudo firewall-cmd --permanent --add-port=21115-21119/tcp
sudo firewall-cmd --permanent --add-port=21116/udp
sudo firewall-cmd --reload

# Verificar que los puertos están escuchando
sudo ss -tlnp | grep -E "211(15|16|17|18|19)"

Despliegue Empresarial

Para entornos empresariales con múltiples usuarios y gestión centralizada:

# RustDesk Pro (versión de pago) incluye panel web de administración
# Para la versión open-source, el panel básico está en el puerto 21114

# Ver estadísticas del servidor
docker exec hbbs /usr/bin/hbbs --help

# Monitorear conexiones activas
docker exec hbbr cat /proc/net/tcp | wc -l

# Revisar logs de conexiones
docker compose logs hbbr | grep "relay from"

# Backup de la configuración y claves
tar -czf rustdesk-backup-$(date +%Y%m%d).tar.gz ~/rustdesk/data/

Solución de Problemas

El cliente no puede conectar al servidor:

# Verificar que los servicios están activos
docker compose ps
# o
sudo systemctl status rustdesk-hbbs rustdesk-hbbr

# Probar conectividad a los puertos
nc -zv IP-SERVIDOR 21116
nc -zv IP-SERVIDOR 21117

# Ver logs en tiempo real
docker compose logs -f hbbs

El cliente muestra "Connection failed" o "Timeout":

# Verificar que la clave pública es correcta
cat ~/rustdesk/data/id_ed25519.pub

# Comprobar la configuración del cliente (debe coincidir exactamente)
# La clave no debe tener espacios ni saltos de línea adicionales

# Reiniciar los servicios
docker compose restart

Alta latencia en las conexiones:

# Verificar si se usa relay o conexión directa (P2P es más rápido)
# Los logs del cliente muestran "relay" o "direct" en la conexión

# Si siempre usa relay, revisar configuración NAT
# Asegurarse de que el servidor tiene IP pública accesible

Conclusión

RustDesk self-hosted proporciona una solución de escritorio remoto privada y sin límites de usuarios, con cifrado de extremo a extremo garantizado. Al controlar tu propio servidor relay en un VPS, obtienes mayor velocidad para conexiones locales y total independencia de servicios de terceros para tu infraestructura de acceso remoto.