Serveur RustDesk sur Windows sans Docker
Ce que tu construis
Deux binaires — hbbs (ID/Rendezvous) et hbbr (Relay) — gérés par NSSM en tant que services Windows à démarrage automatique. Les clients sur ton LAN se connectent via ton serveur au lieu de l’infrastructure publique de RustDesk.
Ton serveur génère une paire de clés Ed25519 au premier lancement. Chaque client a besoin de la clé publique pour faire confiance à ton serveur. Perds la clé privée, tu régénères tout.
Prérequis
| Exigence | Notes |
|---|---|
| Windows 10/11 ou Server 2019+ | Testé sur Windows 11 24H2 |
| IP statique LAN sur le serveur | Une réservation DHCP fonctionne aussi |
| Accès administrateur | L’installation des services nécessite l’élévation |
| Client RustDesk installé | Sur le serveur et les machines distantes |
Étape 1 : Télécharger les binaires
Crée un répertoire dédié. Ce guide utilise C:\RustDeskServer\ — choisis n’importe quel chemin, mais ne le déplace pas après l’installation des services.
RustDesk Server — Dernière version
- Télécharge
rustdesk-server-windows-x86_64-unsigned.zip - Extrais
hbbs.exeethbbr.exedans ton répertoire serveur
NSSM — v2.25 du fork dkxce (recommandé par la doc officielle RustDesk)
- Extrais
win64\nssm.exedans le même répertoire
Tu devrais avoir :
C:\RustDeskServer\
├── hbbs.exe
├── hbbr.exe
└── nssm.exe
Pourquoi le fork dkxce ? Le NSSM original n’a pas été mis à jour depuis 2014. La documentation officielle de RustDesk renvoie vers ce fork maintenu. La version 2.25 corrige des problèmes critiques de gestion de services sur Windows moderne.
Étape 2 : Générer les clés
Lance hbbs une fois manuellement pour générer la paire de clés. Ouvre un PowerShell en mode administrateur :
cd C:\RustDeskServer
# Démarre hbbr d'abord (hbbs s'y attend)
Start-Process .\hbbr.exe -WindowStyle Hidden
Start-Sleep -Seconds 3
# Démarre hbbs — remplace YOUR_SERVER_IP par ton IP statique LAN
Start-Process .\hbbs.exe -ArgumentList "-r YOUR_SERVER_IP" -WindowStyle Hidden
Start-Sleep -Seconds 5
# Arrête les deux
Get-Process hbbs, hbbr -ErrorAction SilentlyContinue | Stop-Process -Force
Ton répertoire contient maintenant :
C:\RustDeskServer\
├── ...
├── id_ed25519 ← Clé privée (ne la partage JAMAIS)
├── id_ed25519.pub ← Clé publique (les clients en ont besoin)
└── db_v2.sqlite3 ← Créé plus tard, à la première connexion client
Lis ta clé publique — tu en auras besoin pour chaque client :
Get-Content .\id_ed25519.pub
# Résultat : quelque chose comme "OeVXq8zY1r3kP7mN=..." — garde-le.
Étape 3 : Installer les services NSSM
C’est là que la plupart des guides échouent. Trois paramètres sont non négociables sur Windows 10/11 :
AppNoConsole 1— Sans ça, NSSM échoue silencieusement au démarrage du service. C’est un bug documenté de NSSM sur Windows moderne.AppDirectory— Sans ça, les fichiers de clés et la base de données atterrissent dansC:\Windows\System32. Ton serveur ne trouvera pas ses propres clés.DependOnService NlaSvc— Sans ça, le service démarre avant que l’adaptateur réseau soit prêt et échoue à lier les ports.
$DIR = "C:\RustDeskServer"
$IP = "YOUR_SERVER_IP" # ← Remplace par ton IP statique LAN
# --- Installer 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
# --- Installer 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
# --- Démarrer les deux ---
& $DIR\nssm.exe start hbbr
Start-Sleep -Seconds 3
& $DIR\nssm.exe start hbbs
Vérifie :
Get-Service hbbs, hbbr | Format-Table Name, Status, StartType
Les deux devraient afficher Running / Automatic.
Étape 4 : Vérifier les ports
RustDesk utilise cinq ports. Seuls trois sont nécessaires pour un fonctionnement LAN basique :
| Port | Protocole | Service | Fonction | Requis |
|---|---|---|---|---|
| 21115 | TCP | hbbs | Test de type NAT | ✅ |
| 21116 | TCP+UDP | hbbs | Enregistrement ID + heartbeat | ✅ |
| 21117 | TCP | hbbr | Relay (sessions distantes) | ✅ |
| 21118 | TCP | hbbs | Client web (websocket) | ❌ |
| 21119 | TCP | hbbr | Relay web (websocket) | ❌ |
Vérification rapide :
netstat -an | findstr /R "2111[5-7].*LISTENING"
Tu devrais voir six lignes (trois ports × IPv4 + IPv6). S’il en manque, vérifie les logs stderr.
Pare-feu : Si ton pare-feu Windows est activé, crée des règles entrantes :
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
Remplace YOUR_SUBNET/24 par la plage de ton LAN (par exemple, 192.168.1.0/24) pour restreindre l’accès aux machines locales uniquement.
Étape 5 : Configurer les clients
Chaque client — y compris celui sur la machine serveur — doit pointer vers ton serveur.
Option A : Ligne de commande (Recommandée)
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"
Option B : GUI
Dans RustDesk → Paramètres (⚙) → Réseau → Serveur ID/Relay :
- Serveur ID :
YOUR_SERVER_IP - Clé : contenu de
id_ed25519.pub - Serveur Relay : laisser vide (détecté automatiquement)
- Serveur API : laisser vide (fonction Pro uniquement)
Vérifier l’enregistrement des clients
Après la configuration, vérifie le log du serveur :
Get-Content C:\RustDeskServer\hbbs_stdout.log -Tail 5
Tu devrais voir des entrées update_pk <CLIENT_ID> pour chaque client qui se connecte. Si l’ID d’un client affiche “does not exist” quand tu essaies de te connecter, ce client ne s’est pas encore enregistré sur ton serveur.
Les deux côtés de chaque connexion doivent utiliser le même serveur. C’est le problème de support numéro un.
Maintenance
| Tâche | Commande |
|---|---|
| État des services | Get-Service hbbs, hbbr |
| Logs du serveur | Get-Content C:\RustDeskServer\hbbs_stdout.log -Tail 20 |
| Redémarrer les services | Restart-Service hbbs; Restart-Service hbbr |
| Arrêter les services | Stop-Service hbbs; Stop-Service hbbr |
| Supprimer les services | nssm remove hbbs confirm; nssm remove hbbr confirm |
| Régénérer les clés | Supprimer id_ed25519*, redémarrer hbbs |
Pièges qui vont te faire perdre du temps
Le service NSSM échoue silencieusement au démarrage.
Configure AppNoConsole 1. C’est un problème connu de NSSM sur Windows 10/11 où l’allocation de console échoue dans le contexte du service. Sans ce flag, le service entre dans une boucle démarrage-arrêt sans erreur utile.
Les clés et la base de données apparaissent dans System32.
Configure AppDirectory vers le dossier de ton serveur. NSSM utilise le répertoire système comme répertoire de travail par défaut. hbbs écrit ses fichiers relativement au répertoire de travail.
Le service échoue au démarrage, mais fonctionne quand il est lancé manuellement.
Ajoute SERVICE_DELAYED_AUTO_START et DependOnService NlaSvc. L’adaptateur réseau n’est pas prêt quand les services à démarrage précoce commencent. Le démarrage différé avec une dépendance réseau résout ça.
“ID does not exist” à la connexion. Les deux machines, source et cible, doivent être configurées pour utiliser ton serveur. Un client pointant vers les serveurs publics RustDesk a un ID qui n’existe que là-bas — ton serveur n’en a aucune trace.
Ne lance pas le wrapper GUI de RustDesk Server en même temps que NSSM.
L’installateur GUI RustDeskServer.Setup.exe et NSSM essaient tous les deux de gérer les mêmes binaires. Choisis l’un ou l’autre. Ce guide utilise NSSM parce qu’il survit aux redémarrages sans nécessiter une session utilisateur.
Le flag -k _ n’est pas nécessaire. L’authentification par clé est le comportement par défaut depuis la version 1.1.11 du serveur. L’inclure est inoffensif mais inutile.
Le serveur relay dans la config client est optionnel. Quand le relay tourne sur la même machine que hbbs (le cas courant), les clients le détectent automatiquement. Ne le configure que si ton relay est sur un hôte différent.