← Zurück zu Systeme

RustDesk-Server unter Windows ohne Docker

rustdeskself-hostingwindowsnssmremote-desktop
Pixel-Art-Illustration eines Sysadmins, der triumphierend auf einem leuchtenden Server-Rack mit Windows-Flagge steht, während ein Cartoon-Wal ins Nichts stürzt
Kein Docker. Keine Pro-Lizenz. Nur zwei Binaries und NSSM.

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

AnforderungHinweise
Windows 10/11 oder Server 2019+Getestet unter Windows 11 24H2
Statische LAN-IP auf dem ServerDHCP-Reservierung funktioniert auch
Admin-ZugriffDienst-Installation erfordert Elevation
RustDesk-Client installiertAuf 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 ServerNeuestes Release

  • Lade rustdesk-server-windows-x86_64-unsigned.zip herunter
  • Entpacke hbbs.exe und hbbr.exe in dein Server-Verzeichnis

NSSMv2.25 vom dkxce-Fork (empfohlen von der offiziellen RustDesk-Doku)

  • Entpacke win64\nssm.exe ins 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:

  1. AppNoConsole 1 — Ohne das scheitert NSSM leise beim Starten des Dienstes. Das ist ein dokumentierter NSSM-Bug unter modernem Windows.
  2. AppDirectory — Ohne das landen Schlüsseldateien und Datenbank in C:\Windows\System32. Dein Server findet seine eigenen Schlüssel nicht.
  3. 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.

PowerShell-Ausgabe mit den laufenden Diensten hbbs und hbbr bei automatischem Start
Beide Dienste laufen mit verzögertem Autostart

Schritt 4: Ports überprüfen

RustDesk nutzt fünf Ports. Nur drei werden für den grundlegenden LAN-Betrieb benötigt:

PortProtokollDienstZweckErforderlich
21115TCPhbbsNAT-Typ-Test
21116TCP+UDPhbbsID-Registrierung + Heartbeat
21117TCPhbbrRelay (eigentliche Remote-Sitzungen)
21118TCPhbbsWeb-Client (WebSocket)
21119TCPhbbrWeb-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.

Netstat-Ausgabe mit den RustDesk-Ports 21115, 21116 und 21117, die auf IPv4 und IPv6 lauschen
Alle sechs Listener bestätigt — drei Ports auf IPv4 und IPv6

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)
RustDesk-Client-Netzwerkeinstellungen mit konfigurierten Feldern für ID-Server und Schlüssel
ID-Server und Schlüssel sind die einzigen Felder, die du brauchst — lass den Rest leer

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

AufgabeBefehl
DienststatusGet-Service hbbs, hbbr
Server-LogsGet-Content C:\RustDeskServer\hbbs_stdout.log -Tail 20
Dienste neustartenRestart-Service hbbs; Restart-Service hbbr
Dienste stoppenStop-Service hbbs; Stop-Service hbbr
Dienste entfernennssm remove hbbs confirm; nssm remove hbbr confirm
Schlüssel neu generierenid_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.


Quellen