← Volver a Sistemas

Servidor RustDesk en Windows sin Docker

rustdeskself-hostingwindowsnssmremote-desktop
Ilustración pixel art de un sysadmin triunfante sobre un rack de servidores brillante con una bandera de Windows, mientras una ballena de dibujos animados cae al vacío
Sin Docker. Sin licencia Pro. Solo dos binarios y NSSM.

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

RequisitoNotas
Windows 10/11 o Server 2019+Probado en Windows 11 24H2
IP estática en la LAN del servidorUna reserva DHCP también sirve
Acceso de administradorLa instalación de servicios requiere elevación
Cliente RustDesk instaladoEn 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.exe y hbbr.exe en tu directorio del servidor

NSSMv2.25 del fork dkxce (recomendado por la documentación oficial de RustDesk)

  • Extrae win64\nssm.exe en 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:

  1. AppNoConsole 1 — Sin esto, NSSM falla silenciosamente al iniciar el servicio. Es un bug documentado de NSSM en Windows moderno.
  2. AppDirectory — Sin esto, los archivos de claves y la base de datos terminan en C:\Windows\System32. Tu servidor no encontrará sus propias claves.
  3. 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.

Salida de PowerShell mostrando los servicios hbbs y hbbr ejecutándose con inicio automático
Ambos servicios corriendo con inicio automático diferido

Paso 4: Verificar puertos

RustDesk usa cinco puertos. Solo tres son necesarios para operación básica en LAN:

PuertoProtocoloServicioPropósitoRequerido
21115TCPhbbsTest de tipo NAT
21116TCP+UDPhbbsRegistro de ID + heartbeat
21117TCPhbbrRelay (sesiones remotas)
21118TCPhbbsCliente web (websocket)
21119TCPhbbrRelay 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.

Salida de netstat mostrando los puertos 21115, 21116 y 21117 de RustDesk escuchando en IPv4 e IPv6
Las seis conexiones confirmadas — tres puertos en IPv4 e IPv6

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)
Configuración de red del cliente RustDesk mostrando los campos de Servidor ID y Clave configurados para un servidor propio
Servidor ID y Clave son los únicos campos que necesitas — deja el resto en blanco

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

TareaComando
Estado del servicioGet-Service hbbs, hbbr
Logs del servidorGet-Content C:\RustDeskServer\hbbs_stdout.log -Tail 20
Reiniciar serviciosRestart-Service hbbs; Restart-Service hbbr
Detener serviciosStop-Service hbbs; Stop-Service hbbr
Eliminar serviciosnssm remove hbbs confirm; nssm remove hbbr confirm
Regenerar clavesEliminar 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.


Fuentes