Servidor RustDesk en Windows sin Docker
Lo que vas a construir
Dos binarios — hbbs (ID/Rendezvous) y hbbr (Relay) — gestionados por NSSM como servicios de Windows con inicio automático. Los clientes en tu LAN se conectan a través de tu servidor en lugar de la infraestructura pública de RustDesk.
Tu servidor genera un par de claves Ed25519 en la primera ejecución. Cada cliente necesita la clave pública para confiar en tu servidor. Si pierdes la clave privada, regeneras todo.
Requisitos previos
| Requisito | Notas |
|---|---|
| Windows 10/11 o Server 2019+ | Probado en Windows 11 24H2 |
| IP estática en la LAN del servidor | Una reserva DHCP también sirve |
| Acceso de administrador | La instalación de servicios requiere elevación |
| Cliente RustDesk instalado | En el servidor y en las máquinas remotas |
Paso 1: Descargar binarios
Crea un directorio dedicado. Esta guía usa C:\RustDeskServer\ — elige cualquier ruta, pero no la muevas después de instalar los servicios.
RustDesk Server — Última versión
- Descarga
rustdesk-server-windows-x86_64-unsigned.zip - Extrae
hbbs.exeyhbbr.exeen tu directorio del servidor
NSSM — v2.25 del fork dkxce (recomendado por la documentación oficial de RustDesk)
- Extrae
win64\nssm.exeen el mismo directorio
Deberías tener:
C:\RustDeskServer\
├── hbbs.exe
├── hbbr.exe
└── nssm.exe
¿Por qué el fork dkxce? El NSSM original no se ha actualizado desde 2014. La documentación oficial de RustDesk enlaza a este fork mantenido. La versión 2.25 corrige problemas críticos de gestión de servicios en Windows moderno.
Paso 2: Generar claves
Ejecuta hbbs una vez manualmente para generar el par de claves. Abre un PowerShell elevado:
cd C:\RustDeskServer
# Inicia hbbr primero (hbbs lo espera)
Start-Process .\hbbr.exe -WindowStyle Hidden
Start-Sleep -Seconds 3
# Inicia hbbs — reemplaza YOUR_SERVER_IP con tu IP estática de LAN
Start-Process .\hbbs.exe -ArgumentList "-r YOUR_SERVER_IP" -WindowStyle Hidden
Start-Sleep -Seconds 5
# Cierra ambos
Get-Process hbbs, hbbr -ErrorAction SilentlyContinue | Stop-Process -Force
Tu directorio ahora contiene:
C:\RustDeskServer\
├── ...
├── id_ed25519 ← Clave privada (NUNCA la compartas)
├── id_ed25519.pub ← Clave pública (los clientes la necesitan)
└── db_v2.sqlite3 ← Se crea después, con la primera conexión de cliente
Lee tu clave pública — la necesitarás para cada cliente:
Get-Content .\id_ed25519.pub
# Resultado: algo como "OeVXq8zY1r3kP7mN=..." — guárdalo.
Paso 3: Instalar servicios NSSM
Aquí es donde la mayoría de guías fallan. Tres configuraciones son innegociables en Windows 10/11:
AppNoConsole 1— Sin esto, NSSM falla silenciosamente al iniciar el servicio. Es un bug documentado de NSSM en Windows moderno.AppDirectory— Sin esto, los archivos de claves y la base de datos terminan enC:\Windows\System32. Tu servidor no encontrará sus propias claves.DependOnService NlaSvc— Sin esto, el servicio arranca antes de que el adaptador de red esté listo y falla al vincular los puertos.
$DIR = "C:\RustDeskServer"
$IP = "YOUR_SERVER_IP" # ← Reemplaza con tu IP estática de LAN
# --- Instalar hbbr (Relay) ---
& $DIR\nssm.exe install hbbr "$DIR\hbbr.exe"
& $DIR\nssm.exe set hbbr AppDirectory $DIR
& $DIR\nssm.exe set hbbr AppNoConsole 1
& $DIR\nssm.exe set hbbr Start SERVICE_DELAYED_AUTO_START
& $DIR\nssm.exe set hbbr DependOnService NlaSvc
& $DIR\nssm.exe set hbbr AppStdout "$DIR\hbbr_stdout.log"
& $DIR\nssm.exe set hbbr AppStderr "$DIR\hbbr_stderr.log"
& $DIR\nssm.exe set hbbr AppRotateFiles 1
& $DIR\nssm.exe set hbbr AppRotateOnline 1
& $DIR\nssm.exe set hbbr AppRotateBytes 1048576
# --- Instalar hbbs (ID/Rendezvous) ---
& $DIR\nssm.exe install hbbs "$DIR\hbbs.exe" "-r $IP"
& $DIR\nssm.exe set hbbs AppDirectory $DIR
& $DIR\nssm.exe set hbbs AppNoConsole 1
& $DIR\nssm.exe set hbbs Start SERVICE_DELAYED_AUTO_START
& $DIR\nssm.exe set hbbs DependOnService "NlaSvc" "hbbr"
& $DIR\nssm.exe set hbbs AppStdout "$DIR\hbbs_stdout.log"
& $DIR\nssm.exe set hbbs AppStderr "$DIR\hbbs_stderr.log"
& $DIR\nssm.exe set hbbs AppRotateFiles 1
& $DIR\nssm.exe set hbbs AppRotateOnline 1
& $DIR\nssm.exe set hbbs AppRotateBytes 1048576
# --- Iniciar ambos ---
& $DIR\nssm.exe start hbbr
Start-Sleep -Seconds 3
& $DIR\nssm.exe start hbbs
Verifica:
Get-Service hbbs, hbbr | Format-Table Name, Status, StartType
Ambos deberían mostrar Running / Automatic.
Paso 4: Verificar puertos
RustDesk usa cinco puertos. Solo tres son necesarios para operación básica en LAN:
| Puerto | Protocolo | Servicio | Propósito | Requerido |
|---|---|---|---|---|
| 21115 | TCP | hbbs | Test de tipo NAT | ✅ |
| 21116 | TCP+UDP | hbbs | Registro de ID + heartbeat | ✅ |
| 21117 | TCP | hbbr | Relay (sesiones remotas) | ✅ |
| 21118 | TCP | hbbs | Cliente web (websocket) | ❌ |
| 21119 | TCP | hbbr | Relay web (websocket) | ❌ |
Verificación rápida:
netstat -an | findstr /R "2111[5-7].*LISTENING"
Deberías ver seis líneas (tres puertos × IPv4 + IPv6). Si falta alguno, revisa los logs de stderr.
Firewall: Si tu Firewall de Windows está activado, crea reglas de entrada:
New-NetFirewallRule -DisplayName "RustDesk hbbs TCP" -Direction Inbound -Protocol TCP -LocalPort 21115-21116 -Action Allow -RemoteAddress YOUR_SUBNET/24
New-NetFirewallRule -DisplayName "RustDesk hbbs UDP" -Direction Inbound -Protocol UDP -LocalPort 21116 -Action Allow -RemoteAddress YOUR_SUBNET/24
New-NetFirewallRule -DisplayName "RustDesk hbbr TCP" -Direction Inbound -Protocol TCP -LocalPort 21117 -Action Allow -RemoteAddress YOUR_SUBNET/24
Reemplaza YOUR_SUBNET/24 con el rango de tu LAN (por ejemplo, 192.168.1.0/24) para restringir el acceso solo a máquinas locales.
Paso 5: Configurar clientes
Cada cliente — incluyendo el del servidor — debe apuntar a tu servidor.
Opción A: Línea de comandos (Recomendada)
Windows:
& "$env:ProgramFiles\RustDesk\rustdesk.exe" --config "host=YOUR_SERVER_IP,key=YOUR_PUBLIC_KEY"
macOS:
sudo /Applications/RustDesk.app/Contents/MacOS/RustDesk --config "host=YOUR_SERVER_IP,key=YOUR_PUBLIC_KEY"
Opción B: GUI
En RustDesk → Configuración (⚙) → Red → Servidor ID/Relay:
- Servidor ID:
YOUR_SERVER_IP - Clave: contenido de
id_ed25519.pub - Servidor Relay: dejar en blanco (se detecta automáticamente)
- Servidor API: dejar en blanco (función solo para Pro)
Verificar registro de clientes
Después de configurar, revisa el log del servidor:
Get-Content C:\RustDeskServer\hbbs_stdout.log -Tail 5
Deberías ver entradas update_pk <CLIENT_ID> para cada cliente que se conecte. Si el ID de un cliente aparece como “does not exist” al intentar conectar, ese cliente aún no se ha registrado en tu servidor.
Ambos lados de cada conexión deben usar el mismo servidor. Este es el problema de soporte número uno.
Mantenimiento
| Tarea | Comando |
|---|---|
| Estado del servicio | Get-Service hbbs, hbbr |
| Logs del servidor | Get-Content C:\RustDeskServer\hbbs_stdout.log -Tail 20 |
| Reiniciar servicios | Restart-Service hbbs; Restart-Service hbbr |
| Detener servicios | Stop-Service hbbs; Stop-Service hbbr |
| Eliminar servicios | nssm remove hbbs confirm; nssm remove hbbr confirm |
| Regenerar claves | Eliminar id_ed25519*, reiniciar hbbs |
Problemas que te harán perder tiempo
El servicio NSSM falla silenciosamente al iniciar.
Configura AppNoConsole 1. Es un problema conocido de NSSM en Windows 10/11 donde la asignación de consola falla en el contexto del servicio. Sin este flag, el servicio entra en un bucle de inicio-parada sin error útil.
Las claves y la base de datos aparecen en System32.
Configura AppDirectory con la carpeta de tu servidor. NSSM usa el directorio del sistema como directorio de trabajo por defecto. hbbs escribe sus archivos relativos al directorio de trabajo.
El servicio falla al arrancar, pero funciona al iniciarlo manualmente.
Añade SERVICE_DELAYED_AUTO_START y DependOnService NlaSvc. El adaptador de red no está listo cuando los servicios de inicio temprano comienzan. El inicio diferido con dependencia de red resuelve esto.
“ID does not exist” al conectar. Ambas máquinas, la de origen y la de destino, deben estar configuradas para usar tu servidor. Un cliente apuntando a los servidores públicos de RustDesk tiene un ID que solo existe allí — tu servidor no tiene registro de él.
No ejecutes el wrapper GUI de RustDesk Server junto con NSSM.
El instalador GUI RustDeskServer.Setup.exe y NSSM intentan gestionar los mismos binarios. Elige uno. Esta guía usa NSSM porque sobrevive a los reinicios sin requerir un inicio de sesión de usuario.
El flag -k _ no es necesario. La autenticación por clave es el comportamiento por defecto desde la versión 1.1.11 del servidor. Incluirlo es inofensivo pero innecesario.
El servidor relay en la configuración del cliente es opcional. Cuando el relay corre en la misma máquina que hbbs (el caso común), los clientes lo detectan automáticamente. Solo configúralo si tu relay está en un host diferente.