RustDesk-Server unter Windows ohne Docker
Was du baust
Zwei Binaries — hbbs (ID/Rendezvous) und hbbr (Relay) — verwaltet von NSSM als Windows-Dienste mit automatischem Start. Clients in deinem LAN verbinden sich über deinen Server statt über die öffentliche Infrastruktur von RustDesk.
Dein Server generiert beim ersten Start ein Ed25519-Schlüsselpaar. Jeder Client braucht den öffentlichen Schlüssel, um deinem Server zu vertrauen. Verlierst du den privaten Schlüssel, generierst du alles neu.
Voraussetzungen
| Anforderung | Hinweise |
|---|---|
| Windows 10/11 oder Server 2019+ | Getestet unter Windows 11 24H2 |
| Statische LAN-IP auf dem Server | DHCP-Reservierung funktioniert auch |
| Admin-Zugriff | Dienst-Installation erfordert Elevation |
| RustDesk-Client installiert | Auf dem Server und allen Remote-Rechnern |
Schritt 1: Binaries herunterladen
Erstelle ein eigenes Verzeichnis. Diese Anleitung nutzt C:\RustDeskServer\ — wähle einen beliebigen Pfad, aber verschiebe ihn nicht nach der Dienst-Installation.
RustDesk Server — Neuestes Release
- Lade
rustdesk-server-windows-x86_64-unsigned.zipherunter - Entpacke
hbbs.exeundhbbr.exein dein Server-Verzeichnis
NSSM — v2.25 vom dkxce-Fork (empfohlen von der offiziellen RustDesk-Doku)
- Entpacke
win64\nssm.exeins selbe Verzeichnis
Du solltest haben:
C:\RustDeskServer\
├── hbbs.exe
├── hbbr.exe
└── nssm.exe
Warum der dkxce-Fork? Das Original-NSSM wurde seit 2014 nicht mehr aktualisiert. Die offizielle RustDesk-Dokumentation verlinkt auf diesen gepflegten Fork. Version 2.25 behebt kritische Dienst-Verwaltungsprobleme unter modernem Windows.
Schritt 2: Schlüssel generieren
Starte hbbs einmal manuell, um das Schlüsselpaar zu erzeugen. Öffne eine PowerShell mit Admin-Rechten:
cd C:\RustDeskServer
# Starte hbbr zuerst (hbbs erwartet es)
Start-Process .\hbbr.exe -WindowStyle Hidden
Start-Sleep -Seconds 3
# Starte hbbs — ersetze YOUR_SERVER_IP durch deine statische LAN-IP
Start-Process .\hbbs.exe -ArgumentList "-r YOUR_SERVER_IP" -WindowStyle Hidden
Start-Sleep -Seconds 5
# Beende beide
Get-Process hbbs, hbbr -ErrorAction SilentlyContinue | Stop-Process -Force
Dein Verzeichnis enthält jetzt:
C:\RustDeskServer\
├── ...
├── id_ed25519 ← Privater Schlüssel (NIEMALS teilen)
├── id_ed25519.pub ← Öffentlicher Schlüssel (Clients brauchen ihn)
└── db_v2.sqlite3 ← Wird später erstellt, bei der ersten Client-Verbindung
Lies deinen öffentlichen Schlüssel — du brauchst ihn für jeden Client:
Get-Content .\id_ed25519.pub
# Ausgabe: etwas wie "OeVXq8zY1r3kP7mN=..." — speichere das.
Schritt 3: NSSM-Dienste installieren
Hier scheitern die meisten Anleitungen. Drei Einstellungen sind unter Windows 10/11 nicht verhandelbar:
AppNoConsole 1— Ohne das scheitert NSSM leise beim Starten des Dienstes. Das ist ein dokumentierter NSSM-Bug unter modernem Windows.AppDirectory— Ohne das landen Schlüsseldateien und Datenbank inC:\Windows\System32. Dein Server findet seine eigenen Schlüssel nicht.DependOnService NlaSvc— Ohne das startet der Dienst, bevor der Netzwerk-Adapter bereit ist, und kann Ports nicht binden.
$DIR = "C:\RustDeskServer"
$IP = "YOUR_SERVER_IP" # ← Ersetze durch deine statische LAN-IP
# --- hbbr installieren (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
# --- hbbs installieren (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
# --- Beide starten ---
& $DIR\nssm.exe start hbbr
Start-Sleep -Seconds 3
& $DIR\nssm.exe start hbbs
Überprüfe:
Get-Service hbbs, hbbr | Format-Table Name, Status, StartType
Beide sollten Running / Automatic anzeigen.
Schritt 4: Ports überprüfen
RustDesk nutzt fünf Ports. Nur drei werden für den grundlegenden LAN-Betrieb benötigt:
| Port | Protokoll | Dienst | Zweck | Erforderlich |
|---|---|---|---|---|
| 21115 | TCP | hbbs | NAT-Typ-Test | ✅ |
| 21116 | TCP+UDP | hbbs | ID-Registrierung + Heartbeat | ✅ |
| 21117 | TCP | hbbr | Relay (eigentliche Remote-Sitzungen) | ✅ |
| 21118 | TCP | hbbs | Web-Client (WebSocket) | ❌ |
| 21119 | TCP | hbbr | Web-Relay (WebSocket) | ❌ |
Schnellcheck:
netstat -an | findstr /R "2111[5-7].*LISTENING"
Du solltest sechs Zeilen sehen (drei Ports × IPv4 + IPv6). Wenn welche fehlen, prüfe die stderr-Logs.
Firewall: Wenn deine Windows-Firewall aktiv ist, erstelle Eingangsregeln:
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
Ersetze YOUR_SUBNET/24 durch deinen LAN-Bereich (z.B. 192.168.1.0/24), um den Zugriff auf lokale Rechner zu beschränken.
Schritt 5: Clients konfigurieren
Jeder Client — einschließlich der auf dem Server — muss auf deinen Server zeigen.
Option A: Kommandozeile (Empfohlen)
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
In RustDesk → Einstellungen (⚙) → Netzwerk → ID/Relay-Server:
- ID-Server:
YOUR_SERVER_IP - Schlüssel: Inhalt von
id_ed25519.pub - Relay-Server: leer lassen (wird automatisch erkannt)
- API-Server: leer lassen (nur Pro-Funktion)
Client-Registrierung überprüfen
Nach der Konfiguration prüfe das Server-Log:
Get-Content C:\RustDeskServer\hbbs_stdout.log -Tail 5
Du solltest update_pk <CLIENT_ID>-Einträge für jeden verbundenen Client sehen. Wenn die ID eines Clients als “does not exist” angezeigt wird, hat sich dieser Client noch nicht bei deinem Server registriert.
Beide Seiten jeder Verbindung müssen denselben Server nutzen. Das ist das Support-Problem Nummer eins.
Wartung
| Aufgabe | Befehl |
|---|---|
| Dienststatus | Get-Service hbbs, hbbr |
| Server-Logs | Get-Content C:\RustDeskServer\hbbs_stdout.log -Tail 20 |
| Dienste neustarten | Restart-Service hbbs; Restart-Service hbbr |
| Dienste stoppen | Stop-Service hbbs; Stop-Service hbbr |
| Dienste entfernen | nssm remove hbbs confirm; nssm remove hbbr confirm |
| Schlüssel neu generieren | id_ed25519* löschen, hbbs neustarten |
Fallstricke, die dich Zeit kosten
NSSM-Dienst scheitert leise beim Start.
Setze AppNoConsole 1. Das ist ein bekanntes NSSM-Problem unter Windows 10/11, bei dem die Konsolen-Zuweisung im Dienst-Kontext fehlschlägt. Ohne dieses Flag gerät der Dienst in eine Start-Stop-Schleife ohne brauchbare Fehlermeldung.
Schlüssel und Datenbank tauchen in System32 auf.
Setze AppDirectory auf deinen Server-Ordner. NSSM nutzt standardmäßig das Systemverzeichnis als Arbeitsverzeichnis. hbbs schreibt seine Dateien relativ zum Arbeitsverzeichnis.
Dienst scheitert beim Booten, funktioniert aber bei manuellem Start.
Füge SERVICE_DELAYED_AUTO_START und DependOnService NlaSvc hinzu. Der Netzwerk-Adapter ist nicht bereit, wenn früh startende Dienste beginnen. Verzögerter Start mit Netzwerk-Abhängigkeit löst das.
“ID does not exist” beim Verbinden. Sowohl Quell- als auch Zielrechner müssen für deinen Server konfiguriert sein. Ein Client, der auf die öffentlichen RustDesk-Server zeigt, hat eine ID, die nur dort existiert — dein Server hat keinen Eintrag davon.
Starte nicht den RustDesk-Server-GUI-Wrapper zusammen mit NSSM.
Der GUI-Installer RustDeskServer.Setup.exe und NSSM versuchen beide, dieselben Binaries zu verwalten. Wähle eins. Diese Anleitung nutzt NSSM, weil es Neustarts überlebt, ohne eine Benutzeranmeldung zu erfordern.
Das -k _-Flag wird nicht benötigt. Schlüsselbasierte Authentifizierung ist seit Server-Version 1.1.11 Standard. Es einzufügen ist harmlos, aber unnötig.
Der Relay-Server in der Client-Konfiguration ist optional. Wenn der Relay auf derselben Maschine wie hbbs läuft (der Normalfall), erkennen Clients ihn automatisch. Setze ihn nur, wenn dein Relay auf einem anderen Host ist.