← सिस्टम्स पर वापस

RustDesk सर्वर Windows पर — बिना Docker के

rustdeskself-hostingwindowsnssmremote-desktop
एक sysadmin का pixel art illustration जो Windows flag के साथ चमकते server rack पर खड़ा है, जबकि एक cartoon whale नीचे अंधेरे में गिर रहा है
Docker नहीं। Pro लाइसेंस नहीं। बस दो binaries और NSSM।

तुम क्या बना रहे हो

दो binaries — hbbs (ID/Rendezvous) और hbbr (Relay) — NSSM से manage होते हैं auto-start Windows services के रूप में। तुम्हारे LAN के clients तुम्हारे server से connect होते हैं, RustDesk के public infrastructure की बजाय।

तुम्हारा server पहली बार run होने पर Ed25519 keypair generate करता है। हर client को तुम्हारे server पर trust करने के लिए public key चाहिए। Private key खो दो, तो सब दोबारा generate करो।


जरूरतें

जरूरतनोट्स
Windows 10/11 या Server 2019+Windows 11 24H2 पर टेस्ट किया
Server पर static LAN IPDHCP reservation भी काम करता है
Admin accessService installation के लिए elevation चाहिए
RustDesk client installedServer और remote machines दोनों पर

Step 1: Binaries डाउनलोड करो

एक dedicated directory बनाओ। यह guide C:\RustDeskServer\ use करती है — कोई भी path चुनो, लेकिन service installation के बाद move मत करो।

RustDesk ServerLatest release

  • rustdesk-server-windows-x86_64-unsigned.zip डाउनलोड करो
  • hbbs.exe और hbbr.exe अपने server directory में extract करो

NSSMdkxce fork का v2.25 (official RustDesk docs में recommended)

  • win64\nssm.exe उसी directory में extract करो

तुम्हारे पास होना चाहिए:

C:\RustDeskServer\
├── hbbs.exe
├── hbbr.exe
└── nssm.exe

dkxce fork क्यों? Original NSSM 2014 से update नहीं हुआ। Official RustDesk documentation इस maintained fork को link करता है। Version 2.25 modern Windows पर critical service management issues fix करता है।


Step 2: Keys Generate करो

Keypair generate करने के लिए hbbs को एक बार manually run करो। Elevated PowerShell खोलो:

cd C:\RustDeskServer

# पहले hbbr start करो (hbbs इसे expect करता है)
Start-Process .\hbbr.exe -WindowStyle Hidden
Start-Sleep -Seconds 3

# hbbs start करो — YOUR_SERVER_IP को अपने static LAN IP से replace करो
Start-Process .\hbbs.exe -ArgumentList "-r YOUR_SERVER_IP" -WindowStyle Hidden
Start-Sleep -Seconds 5

# दोनों बंद करो
Get-Process hbbs, hbbr -ErrorAction SilentlyContinue | Stop-Process -Force

तुम्हारी directory में अब ये हैं:

C:\RustDeskServer\
├── ...
├── id_ed25519           ← Private key (कभी share मत करो)
├── id_ed25519.pub       ← Public key (clients को चाहिए)
└── db_v2.sqlite3        ← बाद में बनता है, पहले client connection पर

अपनी public key पढ़ो — हर client के लिए चाहिए:

Get-Content .\id_ed25519.pub
# Output: "OeVXq8zY1r3kP7mN=..." जैसा कुछ — इसे save करो।

Step 3: NSSM Services Install करो

यहाँ ज्यादातर guides fail होती हैं। Windows 10/11 पर तीन settings non-negotiable हैं:

  1. AppNoConsole 1 — इसके बिना, NSSM silently service start करने में fail हो जाता है। यह modern Windows पर एक documented NSSM bug है।
  2. AppDirectory — इसके बिना, key files और database C:\Windows\System32 में land होते हैं। तुम्हारा server अपनी keys नहीं ढूंढ पाएगा।
  3. DependOnService NlaSvc — इसके बिना, service network adapter ready होने से पहले start हो जाती है और ports bind करने में fail हो जाती है।
$DIR = "C:\RustDeskServer"
$IP  = "YOUR_SERVER_IP"   # ← अपने static LAN IP से replace करो

# --- hbbr (Relay) Install ---
& $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 (ID/Rendezvous) Install ---
& $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

# --- दोनों Start करो ---
& $DIR\nssm.exe start hbbr
Start-Sleep -Seconds 3
& $DIR\nssm.exe start hbbs

Verify करो:

Get-Service hbbs, hbbr | Format-Table Name, Status, StartType

दोनों Running / Automatic दिखना चाहिए।

PowerShell output जिसमें hbbs और hbbr services automatic start type के साथ running दिख रही हैं
दोनों services delayed auto-start के साथ running

Step 4: Ports Verify करो

RustDesk पाँच ports use करता है। Basic LAN operation के लिए सिर्फ तीन जरूरी हैं:

PortProtocolServicePurposeजरूरी
21115TCPhbbsNAT type test
21116TCP+UDPhbbsID registration + heartbeat
21117TCPhbbrRelay (actual remote sessions)
21118TCPhbbsWeb client (websocket)
21119TCPhbbrWeb relay (websocket)

Quick check:

netstat -an | findstr /R "2111[5-7].*LISTENING"

छह lines दिखनी चाहिए (तीन ports × IPv4 + IPv6)। अगर कोई missing है, stderr logs check करो।

Netstat output जिसमें RustDesk ports 21115, 21116 और 21117 IPv4 और IPv6 दोनों पर listening दिख रहे हैं
सभी छह listeners confirmed — तीन ports IPv4 और IPv6 पर

Firewall: अगर Windows Firewall enabled है, inbound rules बनाओ:

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

YOUR_SUBNET/24 को अपने LAN range से replace करो (जैसे 192.168.1.0/24) ताकि access सिर्फ local machines तक सीमित रहे।


Step 5: Clients Configure करो

हर client — server machine पर वाला भी — तुम्हारे server को point करना चाहिए।

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

RustDesk → Settings (⚙) → Network → ID/Relay Server:

  • ID Server: YOUR_SERVER_IP
  • Key: id_ed25519.pub का content
  • Relay Server: blank छोड़ दो (auto-detected)
  • API Server: blank छोड़ दो (Pro feature only)
RustDesk client network settings जिसमें self-hosted server के लिए ID Server और Key fields configure दिख रहे हैं
ID Server और Key ही जरूरी fields हैं — बाकी blank छोड़ दो

Client Registration Verify करो

Configure करने के बाद, server log check करो:

Get-Content C:\RustDeskServer\hbbs_stdout.log -Tail 5

हर connecting client के लिए update_pk <CLIENT_ID> entries दिखनी चाहिए। अगर client का ID “does not exist” दिखता है connect करते समय, तो वो client तुम्हारे server पर register नहीं हुआ है।

हर connection के दोनों sides को same server use करना चाहिए। यह support issue नंबर एक है।


Maintenance

TaskCommand
Service statusGet-Service hbbs, hbbr
Server logsGet-Content C:\RustDeskServer\hbbs_stdout.log -Tail 20
Services restartRestart-Service hbbs; Restart-Service hbbr
Services stopStop-Service hbbs; Stop-Service hbbr
Services removenssm remove hbbs confirm; nssm remove hbbr confirm
Keys regenerateid_ed25519* delete करो, hbbs restart करो

समय बर्बाद करने वाली समस्याएँ

NSSM service silently start होने में fail हो जाती है। AppNoConsole 1 set करो। यह Windows 10/11 पर NSSM का known issue है जहाँ service context में console allocation fail होता है। इस flag के बिना, service बिना useful error के start-stop loop में चली जाती है।

Keys और database System32 में दिखते हैं। AppDirectory को अपने server folder पर set करो। NSSM default में system directory को working directory के रूप में use करता है। hbbs working directory के relative files लिखता है।

Service boot पर fail होती है, लेकिन manually start करने पर काम करती है। SERVICE_DELAYED_AUTO_START और DependOnService NlaSvc add करो। जब early-start services शुरू होती हैं तब network adapter ready नहीं होता। Network dependency के साथ delayed start इसे solve करता है।

Connect करते समय “ID does not exist”। Source और target दोनों machines को तुम्हारे server use करने के लिए configure होना चाहिए। Public RustDesk servers को point करने वाले client की ID सिर्फ वहाँ exist करती है — तुम्हारे server पर उसका कोई record नहीं है।

RustDesk Server GUI wrapper को NSSM के साथ मत चलाओ। GUI installer RustDeskServer.Setup.exe और NSSM दोनों same binaries manage करने की कोशिश करते हैं। कोई एक चुनो। यह guide NSSM use करती है क्योंकि यह user login के बिना reboots survive करता है।

-k _ flag जरूरी नहीं है। Key-based authentication server version 1.1.11 से default है। इसे include करना harmless है लेकिन unnecessary।

Client config में relay server optional है। जब relay hbbs के साथ same machine पर run होता है (common case), clients auto-detect करते हैं। सिर्फ तब set करो जब relay different host पर हो।


Sources