Servidor RustDesk no Windows sem Docker
O que você vai construir
Dois binários — hbbs (ID/Rendezvous) e hbbr (Relay) — gerenciados pelo NSSM como serviços Windows com início automático. Os clientes na sua LAN se conectam pelo seu servidor em vez da infraestrutura pública do RustDesk.
Seu servidor gera um par de chaves Ed25519 na primeira execução. Cada cliente precisa da chave pública para confiar no seu servidor. Perdeu a chave privada? Regenera tudo.
Pré-requisitos
| Requisito | Notas |
|---|---|
| Windows 10/11 ou Server 2019+ | Testado no Windows 11 24H2 |
| IP estático na LAN do servidor | Reserva DHCP também funciona |
| Acesso de administrador | Instalação de serviços requer elevação |
| Cliente RustDesk instalado | No servidor e nas máquinas remotas |
Passo 1: Baixar os binários
Crie um diretório dedicado. Este guia usa C:\RustDeskServer\ — escolha qualquer caminho, mas não mova depois da instalação dos serviços.
RustDesk Server — Último release
- Baixe
rustdesk-server-windows-x86_64-unsigned.zip - Extraia
hbbs.exeehbbr.exeno seu diretório do servidor
NSSM — v2.25 do fork dkxce (recomendado pela documentação oficial do RustDesk)
- Extraia
win64\nssm.exeno mesmo diretório
Você deve ter:
C:\RustDeskServer\
├── hbbs.exe
├── hbbr.exe
└── nssm.exe
Por que o fork dkxce? O NSSM original não é atualizado desde 2014. A documentação oficial do RustDesk aponta para este fork mantido. A versão 2.25 corrige problemas críticos de gerenciamento de serviços no Windows moderno.
Passo 2: Gerar chaves
Execute hbbs uma vez manualmente para gerar o par de chaves. Abra um PowerShell elevado:
cd C:\RustDeskServer
# Inicie hbbr primeiro (hbbs espera por ele)
Start-Process .\hbbr.exe -WindowStyle Hidden
Start-Sleep -Seconds 3
# Inicie hbbs — substitua YOUR_SERVER_IP pelo seu IP estático da LAN
Start-Process .\hbbs.exe -ArgumentList "-r YOUR_SERVER_IP" -WindowStyle Hidden
Start-Sleep -Seconds 5
# Encerre ambos
Get-Process hbbs, hbbr -ErrorAction SilentlyContinue | Stop-Process -Force
Seu diretório agora contém:
C:\RustDeskServer\
├── ...
├── id_ed25519 ← Chave privada (NUNCA compartilhe)
├── id_ed25519.pub ← Chave pública (os clientes precisam dela)
└── db_v2.sqlite3 ← Criado depois, na primeira conexão de cliente
Leia sua chave pública — você vai precisar para cada cliente:
Get-Content .\id_ed25519.pub
# Saída: algo como "OeVXq8zY1r3kP7mN=..." — salve isso.
Passo 3: Instalar serviços NSSM
É aqui que a maioria dos guias falha. Três configurações são inegociáveis no Windows 10/11:
AppNoConsole 1— Sem isso, o NSSM falha silenciosamente ao iniciar o serviço. É um bug documentado do NSSM no Windows moderno.AppDirectory— Sem isso, os arquivos de chaves e o banco de dados vão parar emC:\Windows\System32. Seu servidor não vai encontrar suas próprias chaves.DependOnService NlaSvc— Sem isso, o serviço inicia antes do adaptador de rede estar pronto e falha ao vincular as portas.
$DIR = "C:\RustDeskServer"
$IP = "YOUR_SERVER_IP" # ← Substitua pelo seu IP estático da 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
Verifique:
Get-Service hbbs, hbbr | Format-Table Name, Status, StartType
Ambos devem mostrar Running / Automatic.
Passo 4: Verificar portas
O RustDesk usa cinco portas. Apenas três são necessárias para operação básica em LAN:
| Porta | Protocolo | Serviço | Finalidade | Obrigatória |
|---|---|---|---|---|
| 21115 | TCP | hbbs | Teste de tipo NAT | ✅ |
| 21116 | TCP+UDP | hbbs | Registro de ID + heartbeat | ✅ |
| 21117 | TCP | hbbr | Relay (sessões remotas) | ✅ |
| 21118 | TCP | hbbs | Cliente web (websocket) | ❌ |
| 21119 | TCP | hbbr | Relay web (websocket) | ❌ |
Verificação rápida:
netstat -an | findstr /R "2111[5-7].*LISTENING"
Você deve ver seis linhas (três portas × IPv4 + IPv6). Se alguma estiver faltando, verifique os logs de stderr.
Firewall: Se o seu Firewall do Windows estiver ativado, crie regras 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
Substitua YOUR_SUBNET/24 pela faixa da sua LAN (por exemplo, 192.168.1.0/24) para restringir o acesso apenas a máquinas locais.
Passo 5: Configurar clientes
Cada cliente — incluindo o da máquina servidor — deve apontar para o seu servidor.
Opção A: Linha de comando (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"
Opção B: GUI
No RustDesk → Configurações (⚙) → Rede → Servidor ID/Relay:
- Servidor ID:
YOUR_SERVER_IP - Chave: conteúdo de
id_ed25519.pub - Servidor Relay: deixe em branco (detectado automaticamente)
- Servidor API: deixe em branco (recurso apenas Pro)
Verificar registro de clientes
Após configurar, verifique o log do servidor:
Get-Content C:\RustDeskServer\hbbs_stdout.log -Tail 5
Você deve ver entradas update_pk <CLIENT_ID> para cada cliente que se conecta. Se o ID de um cliente mostra “does not exist” quando você tenta conectar, esse cliente ainda não se registrou no seu servidor.
Ambos os lados de cada conexão devem usar o mesmo servidor. Este é o problema de suporte número um.
Manutenção
| Tarefa | Comando |
|---|---|
| Status do serviço | Get-Service hbbs, hbbr |
| Logs do servidor | Get-Content C:\RustDeskServer\hbbs_stdout.log -Tail 20 |
| Reiniciar serviços | Restart-Service hbbs; Restart-Service hbbr |
| Parar serviços | Stop-Service hbbs; Stop-Service hbbr |
| Remover serviços | nssm remove hbbs confirm; nssm remove hbbr confirm |
| Regenerar chaves | Deletar id_ed25519*, reiniciar hbbs |
Armadilhas que vão te fazer perder tempo
O serviço NSSM falha silenciosamente ao iniciar.
Configure AppNoConsole 1. É um problema conhecido do NSSM no Windows 10/11 onde a alocação de console falha no contexto do serviço. Sem esse flag, o serviço entra num loop de início-parada sem erro útil.
Chaves e banco de dados aparecem no System32.
Configure AppDirectory para a pasta do seu servidor. O NSSM usa o diretório do sistema como diretório de trabalho por padrão. O hbbs escreve seus arquivos relativos ao diretório de trabalho.
O serviço falha na inicialização, mas funciona quando iniciado manualmente.
Adicione SERVICE_DELAYED_AUTO_START e DependOnService NlaSvc. O adaptador de rede não está pronto quando serviços de início antecipado começam. Início atrasado com dependência de rede resolve isso.
“ID does not exist” ao conectar. Ambas as máquinas, origem e destino, devem estar configuradas para usar seu servidor. Um cliente apontando para os servidores públicos do RustDesk tem um ID que só existe lá — seu servidor não tem registro dele.
Não rode o wrapper GUI do RustDesk Server junto com o NSSM.
O instalador GUI RustDeskServer.Setup.exe e o NSSM tentam gerenciar os mesmos binários. Escolha um. Este guia usa NSSM porque sobrevive a reinicializações sem exigir login de usuário.
O flag -k _ não é necessário. A autenticação por chave é o padrão desde a versão 1.1.11 do servidor. Incluí-lo é inofensivo, mas desnecessário.
O servidor relay na configuração do cliente é opcional. Quando o relay roda na mesma máquina que o hbbs (o caso comum), os clientes o detectam automaticamente. Só configure se seu relay estiver em um host diferente.