RustDesk Server na Windows bez Dockeru
Co budeš stavět
Dva binární soubory — hbbs (ID/Rendezvous) a hbbr (Relay) — spravované NSSM jako automaticky spouštěné Windows služby. Klienti na tvém LAN se připojují přes tvůj server místo veřejné infrastruktury RustDesku.
Tvůj server při prvním spuštění vygeneruje pár klíčů Ed25519. Každý klient potřebuje veřejný klíč, aby tvému serveru důvěřoval. Ztratíš privátní klíč — regeneruješ všechno.
Předpoklady
| Požadavek | Poznámky |
|---|---|
| Windows 10/11 nebo Server 2019+ | Testováno na Windows 11 24H2 |
| Statická LAN IP na serveru | Funguje i DHCP rezervace |
| Administrátorský přístup | Instalace služeb vyžaduje elevaci |
| Nainstalovaný klient RustDesk | Na serveru i vzdálených strojích |
Krok 1: Stáhni binární soubory
Vytvoř vyhrazený adresář. Tento návod používá C:\RustDeskServer\ — zvol si libovolnou cestu, ale po instalaci služeb ji nepřesouvej.
RustDesk Server — Nejnovější release
- Stáhni
rustdesk-server-windows-x86_64-unsigned.zip - Rozbal
hbbs.exeahbbr.exedo adresáře serveru
NSSM — v2.25 z forku dkxce (doporučeno oficiální dokumentací RustDesku)
- Rozbal
win64\nssm.exedo stejného adresáře
Měl bys mít:
C:\RustDeskServer\
├── hbbs.exe
├── hbbr.exe
└── nssm.exe
Proč fork dkxce? Původní NSSM nebyl aktualizován od roku 2014. Oficiální dokumentace RustDesku odkazuje na tento udržovaný fork. Verze 2.25 opravuje kritické problémy se správou služeb na moderním Windows.
Krok 2: Vygeneruj klíče
Spusť hbbs jednou ručně pro vygenerování páru klíčů. Otevři PowerShell s právy administrátora:
cd C:\RustDeskServer
# Nejdřív spusť hbbr (hbbs ho očekává)
Start-Process .\hbbr.exe -WindowStyle Hidden
Start-Sleep -Seconds 3
# Spusť hbbs — nahraď YOUR_SERVER_IP svou statickou LAN IP
Start-Process .\hbbs.exe -ArgumentList "-r YOUR_SERVER_IP" -WindowStyle Hidden
Start-Sleep -Seconds 5
# Ukonči oba
Get-Process hbbs, hbbr -ErrorAction SilentlyContinue | Stop-Process -Force
Tvůj adresář teď obsahuje:
C:\RustDeskServer\
├── ...
├── id_ed25519 ← Privátní klíč (NIKDY ho nesdílej)
├── id_ed25519.pub ← Veřejný klíč (klienti ho potřebují)
└── db_v2.sqlite3 ← Vytvoří se později, při prvním připojení klienta
Přečti si svůj veřejný klíč — budeš ho potřebovat pro každého klienta:
Get-Content .\id_ed25519.pub
# Výstup: něco jako "OeVXq8zY1r3kP7mN=..." — ulož si to.
Krok 3: Nainstaluj služby NSSM
Tady většina návodů selhává. Tři nastavení jsou na Windows 10/11 nezbytná:
AppNoConsole 1— Bez toho NSSM tiše selže při spuštění služby. Je to zdokumentovaný bug NSSM na moderním Windows.AppDirectory— Bez toho skončí soubory klíčů a databáze vC:\Windows\System32. Tvůj server nenajde vlastní klíče.DependOnService NlaSvc— Bez toho se služba spustí dřív, než je síťový adaptér připravený, a selže při navázání portů.
$DIR = "C:\RustDeskServer"
$IP = "YOUR_SERVER_IP" # ← Nahraď svou statickou LAN IP
# --- Nainstaluj 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
# --- Nainstaluj 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
# --- Spusť oba ---
& $DIR\nssm.exe start hbbr
Start-Sleep -Seconds 3
& $DIR\nssm.exe start hbbs
Ověř:
Get-Service hbbs, hbbr | Format-Table Name, Status, StartType
Obě by měly ukazovat Running / Automatic.
Krok 4: Ověř porty
RustDesk používá pět portů. Pro základní LAN provoz jsou potřeba jen tři:
| Port | Protokol | Služba | Účel | Povinný |
|---|---|---|---|---|
| 21115 | TCP | hbbs | Test typu NAT | ✅ |
| 21116 | TCP+UDP | hbbs | Registrace ID + heartbeat | ✅ |
| 21117 | TCP | hbbr | Relay (vzdálené relace) | ✅ |
| 21118 | TCP | hbbs | Webový klient (websocket) | ❌ |
| 21119 | TCP | hbbr | Webový relay (websocket) | ❌ |
Rychlá kontrola:
netstat -an | findstr /R "2111[5-7].*LISTENING"
Mělo by se zobrazit šest řádků (tři porty × IPv4 + IPv6). Pokud některý chybí, zkontroluj stderr logy.
Firewall: Pokud je Windows Firewall zapnutý, vytvoř příchozí pravidla:
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
Nahraď YOUR_SUBNET/24 rozsahem tvého LAN (např. 192.168.1.0/24), abys omezil přístup jen na lokální stroje.
Krok 5: Nakonfiguruj klienty
Každý klient — včetně toho na stroji serveru — musí směřovat na tvůj server.
Varianta A: Příkazový řádek (Doporučeno)
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"
Varianta B: GUI
V RustDesk → Nastavení (⚙) → Síť → ID/Relay Server:
- ID Server:
YOUR_SERVER_IP - Klíč: obsah
id_ed25519.pub - Relay Server: nech prázdné (autodetekce)
- API Server: nech prázdné (funkce pouze pro Pro)
Ověř registraci klientů
Po konfiguraci zkontroluj log serveru:
Get-Content C:\RustDeskServer\hbbs_stdout.log -Tail 5
Měly by se zobrazit záznamy update_pk <CLIENT_ID> pro každého připojeného klienta. Pokud se při pokusu o připojení zobrazí „does not exist” u ID klienta, tento klient se ještě nezaregistroval na tvém serveru.
Obě strany každého spojení musí používat stejný server. To je problém podpory číslo jedna.
Údržba
| Úloha | Příkaz |
|---|---|
| Stav služeb | Get-Service hbbs, hbbr |
| Logy serveru | Get-Content C:\RustDeskServer\hbbs_stdout.log -Tail 20 |
| Restart služeb | Restart-Service hbbs; Restart-Service hbbr |
| Zastavení služeb | Stop-Service hbbs; Stop-Service hbbr |
| Odstranění služeb | nssm remove hbbs confirm; nssm remove hbbr confirm |
| Regenerace klíčů | Smaž id_ed25519*, restartuj hbbs |
Nástrahy, které tě budou stát čas
Služba NSSM tiše selže při spuštění.
Nastav AppNoConsole 1. Je to známý problém NSSM na Windows 10/11, kde alokace konzole selže v kontextu služby. Bez tohoto příznaku služba vstoupí do smyčky start-stop bez užitečné chybové zprávy.
Klíče a databáze se objeví v System32.
Nastav AppDirectory na složku tvého serveru. NSSM ve výchozím nastavení používá systémový adresář jako pracovní adresář. hbbs zapisuje soubory relativně k pracovnímu adresáři.
Služba selže při startu, ale funguje při ručním spuštění.
Přidej SERVICE_DELAYED_AUTO_START a DependOnService NlaSvc. Síťový adaptér není připravený, když začínají služby s předčasným startem. Opožděný start se závislostí na síti to řeší.
„ID does not exist” při připojení. Zdrojový i cílový stroj musí být nakonfigurované pro použití tvého serveru. Klient směřující na veřejné servery RustDesku má ID, které existuje jen tam — tvůj server o něm nemá záznam.
Nespouštěj GUI wrapper RustDesk Serveru společně s NSSM.
GUI instalátor RustDeskServer.Setup.exe a NSSM se oba snaží spravovat stejné binární soubory. Vyber si jeden. Tento návod používá NSSM, protože přežije restarty bez nutnosti přihlášení uživatele.
Příznak -k _ není potřeba. Autentizace klíčem je výchozí od verze serveru 1.1.11. Zahrnout ho je neškodné, ale zbytečné.
Relay server v konfiguraci klienta je volitelný. Když relay běží na stejném stroji jako hbbs (běžný případ), klienti ho autodetekují. Nastav ho jen pokud je tvůj relay na jiném hostu.