RustDesk स्वयं-होस्ट सेटअप — पूर्ण Docker + Caddy TLS मार्गदर्शिका

आप RustDesk को अपने सर्वर पर होस्ट करने की कोशिश कर रहे हैं, लेकिन बार-बार वही बाधाएँ आती हैं: NAT और फ़ायरवॉल, सर्वर घटकों की जटिलता, और यह सवाल कि क्या RustDesk की अपनी एन्क्रिप्शन के ऊपर TLS की आवश्यकता है। यह मार्गदर्शिका तकनीकी पाठक को एकल VPS पर पुनरुत्पादन योग्य सेटअप से होकर ले जाती है — Docker Compose में hbbs/hbbr और Caddy द्वारा TLS अग्रभाग ताकि क्लाइंट प्रतिबंधित नेटवर्क से 443 पर जुड़ सकें।
आप RustDesk को स्वयं-होस्ट करने की कोशिश कर रहे हैं, लेकिन बार-बार वही बाधाएँ आती रहती हैं: NAT और फ़ायरवॉल, सर्वर घटकों की जटिलता, और यह दबा हुआ प्रश्न कि क्या RustDesk की अपनी एन्क्रिप्शन के ऊपर TLS आवश्यक है। यह गाइड एक तकनीकी पाठक को एकल VPS पर एक पूर्ण, पुनरुत्पादन योग्य RustDesk स्वयं-होस्टेड सेटअप के माध्यम से ले जाता है — hbbs/hbbr के लिए Docker Compose, और Caddy का उपयोग कर TLS अग्रभाग ताकि क्लाइंट प्रतिबंधित नेटवर्क से 443 पर कनेक्ट कर सकें।
हम क्या बना रहे हैं और क्यों
लक्ष्य: एकल VPS पर RustDesk रेंडेज़वस और रिले जिसे आपके क्लाइंट DNS नाम के द्वारा इंगित करें। उपयोग में घटक:
- RustDesk सर्वर घटक (hbbs और hbbr) Docker में चल रहे हैं — यहाँ rustdesk-server v1.2.1 इमेज के साथ परखा गया।
- Caddy v2 (प्रमाणपत्र प्रबंधन via Let's Encrypt) पोर्ट 443 पर TLS फ्रंट-डोर देगा ताकि क्लाइंट तब भी आपके रिले तक पहुंच सकें जब outbound 21115 ब्लॉक हो।
- वैकल्पिक UDP पासथ्रू या स्केल के लिए अतिरिक्त रिले (नोट्स में कवर किया गया)।
क्यों यह करना चाहिए? RustDesk का प्रोटोकॉल पहले से ही डेस्कटॉप सत्र के लिए end-to-end क्रिप्टो प्रदान करता है, लेकिन कई नेटवर्क केवल outbound 443/80 की अनुमति देते हैं। VPS पर TLS समाप्त करना (और Caddy को प्रमाणपत्र प्राप्त करने और ऑटो-नवीनीकरण करने देना) एक व्यावहारिक तरीका है ताकि सर्विस बिना गैर-मानक पोर्ट खोले पहुंच योग्य बने। यदि आप केवल LAN एक्सेस चाहते हैं या रिवर्स टनल्स से NAT नियंत्रित करना चाहते हैं, तो हमारे लेख remote-desktop-without-port-forwarding देखें।
पूर्वापेक्षाएँ और विकल्प
लिखते समय मैंने जो इस्तेमाल किया:
- Ubuntu 22.04 LTS पर एक सार्वजनिक VPS (परीक्षण उपयोग के लिए 1 vCPU / 2 GB RAM पर्याप्त है; कई क्लाइंट के लिए 4+ CPU पर स्केल करें और CPU/RAM की निगरानी करें)।
- Docker 24.x और Docker Compose v2 (compose V2 CLI सिंटैक्स)।
- rustdesk-server Docker इमेज (इस गाइड में tag v1.2.1) — यदि नए स्थिर रिलीज़ मौजूद हों तो समायोजित करें।
- Caddy v2.6+ (Caddy का स्वचालित ACME सर्टिफिकेट नवीनीकरण आसान बनाता है)।
- एक DNS A रिकॉर्ड जैसे rustdesk.example.com जो आपके VPS के सार्वजनिक IP की ओर इशारा करे, और 80/443 पोर्ट अनुमति दें (Caddy को सत्यापन के लिए 80/443 चाहिए)।
जब कोई होस्टेड वाणिज्यिक उत्पाद बेहतर फिट होता है: यदि आपको एंटरप्राइज़-ग्रेड SLA, उन्नत सत्र ऑडिटिंग, या वाणिज्यिक सहायता चाहिए तो TeamViewer/AnyDesk बेहतर हो सकते हैं — देखें rustdesk-vs-anydesk और हमारे मूल्य तुलना लेख। अपने सर्वर पर होस्ट करना तब बेहतर है जब आप नियंत्रण, कम आवर्ती लागत, या तृतीय-पक्ष सर्वरों से बचना चाहते हैं।
चरण 1 — Docker Compose के साथ RustDesk सर्वर तैनात करें
VPS पर एक प्रोजेक्ट डायरेक्टरी बनाएं और नीचे docker-compose.yml डालें। यह उदाहरण होस्ट पर सामान्य RustDesk सर्वर पोर्ट्स को एक्सपोज़ करता है। अपनी पर्यावरण वेरिएबल और इमेज टैग अपने परिवेश के अनुसार बदलें।
mkdir -p ~/rustdesk-server
cd ~/rustdesk-server
cat > docker-compose.yml <<'EOF'
version: '3.8'
services:
rustdesk-server:
image: rustdesk/rustdesk-server:1.2.1
container_name: rustdesk-server
restart: unless-stopped
ports:
- "21115:21115/tcp" # rendezvous / TCP relay
- "21115:21115/udp" # optional UDP relay (if your image supports it)
- "21116:21116/udp" # additional UDP (some builds use multiple UDP ports)
volumes:
- ./data:/root/.config/rustdesk-server
environment:
- RUSTDESK_RELAY_IPV4=0.0.0.0
- RUSTDESK_RELAY_PORT=21115
EOF
शुरू करें:
docker compose up -d # watch logs docker compose logs -f rustdesk-server
पुष्टि करें कि कंटेनर शुरू हुआ और 21115 पर सुन रहा है। अपने VPS पर चलाएँ:
ss -tuln | grep 21115
यदि आपके द्वारा उपयोग की जाने वाली इमेज अलग पोर्ट एक्सपोज़ करती है या अलग कॉन्फ़िगरेशन शैली है तो उस इमेज के README से परामर्श करें। कुछ ऑपरेटर hbbs/hbbr को मैन्युअली संकलित करते हैं और कस्टम पोर्ट का उपयोग करते हैं; इन चरणों को तदनुसार अनुकूलित करें।
चरण 2 — relay पर TLS लगाने के लिए Caddy का उपयोग करें (443)
RustDesk को 443 पर पहुंचने योग्य बनाने के दो सामान्य पैटर्न हैं:
- TCP TLS termination Caddy 2.6+ के साथ (Caddy TLS समाप्त करता है और raw TCP को RustDesk रिले पर अग्रेषित करता है)। Caddy ने v2.6 में बेहतर TCP सुविधाएँ जोड़ीं; इस दृष्टिकोण का उपयोग करने पर आपको स्वचालित ACME प्रमाणपत्र और नवीनीकरण मिलता है।
- Caddy केवल प्रमाणपत्र प्रबंधित करे, और प्रमाणपत्र फ़ाइलों का उपयोग करने के लिए एक TCP प्रॉक्सी (stunnel, HAProxy, या Nginx stream) का उपयोग करें। यह एक fallback है यदि आपका Caddy वर्शन या पर्यावरण आवश्यक TCP प्रॉक्सी सुविधाएँ समर्थित नहीं करता।
नीचे एक न्यूनतम, व्यावहारिक Caddy सेटअप है जो Caddy को पोर्ट 443 पर TLS करने और raw TCP कनेक्शन को localhost:21115 पर RustDesk रिले को फॉरवर्ड करने के लिए उपयोग करता है। इसके लिए Caddy v2.6+ चाहिए (जाँच करने के लिए caddy version चलाएं)।
# Caddyfile (save as ./Caddyfile in the same folder as docker-compose.yml)
rustdesk.example.com:443 {
# Caddy will obtain/renew certificates automatically
reverse_proxy 127.0.0.1:21115 {
# Use plain TCP transport; Caddy will accept TLS from clients and connect to the backend via TCP
transport http {
# We don't speak HTTP to the backend; keep minimal transport settings
}
}
}
इसी प्रोजेक्ट में rustdesk सर्वर के बगल में Caddy चलाने के लिए Docker-compose स्निपेट:
cat >> docker-compose.yml <<'EOF'
caddy:
image: caddy:2.6.4
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config
volumes:
caddy_data:
caddy_config:
EOF
docker compose up -d caddy
महत्वपूर्ण चेतावनी: Caddy का इन-बिल्ट reverse_proxy HTTP-उन्मुख है, इसलिए non-HTTP raw TCP को प्रॉक्सी करते समय व्यवहार Caddy वर्शन और ट्रांसपोर्ट विकल्पों पर निर्भर करेगा। व्यवहार में कई ऑपरेटर Caddy की 2.6 में पेश की गई TCP प्रॉक्सी सुविधाओं का उपयोग करते हैं ताकि किसी भी TCP बैकएंड के लिए TLS समाप्त किया जा सके। यदि आपको प्रोटोकॉल समस्याएँ आती हैं, तो ऊपर विकल्प (2) का उपयोग करें: Caddy को सर्टिफिकेट संभालने दें और उन सर्ट फ़ाइलों को एक छोटे TCP TLS लेयर (stunnel या HAProxy stream) के पास दें जो फिर plain TCP को RustDesk पर प्रॉक्सी करे।
उदाहरण: Caddy को सर्ट मैनेजर के रूप में रखें + TLS समाप्ति के लिए stunnel (संक्षिप्त अवलोकन)।
# 1) Ensure Caddy is running and has issued certs for rustdesk.example.com # 2) Copy cert/key from Caddy storage into a place stunnel can read, or mount the same volume. # 3) Run stunnel with a config that points TLS 443 -> 127.0.0.1:21115 # stunnel.conf snippet [rustdesk] accept = 443 connect = 127.0.0.1:21115 cert = /etc/stunnel/fullchain.pem key = /etc/stunnel/privkey.pem # In Docker world, mount Caddy's certificate files into the stunnel container path above.
इनमें से किसी भी दृष्टिकोण से आपको क्लाइंट के लिए एक होस्टनाम (rustdesk.example.com) और पोर्ट 443 मिलता है। किसी दूसरी मशीन से कनेक्टिविटी टेस्ट करें: nc -vz rustdesk.example.com 443 — यदि Caddy/stunnel सही से कॉन्फ़िगर हैं तो आपको TLS हैंडशेक स्थापित होना चाहिए।
चरण 3 — अपने क्लाइंट्स को अपने स्वयं-होस्टेड सर्वर की ओर निर्देशित करें
RustDesk क्लाइंट सेटिंग्स में कस्टम ID/relay सर्वर की अनुमति देते हैं। UI प्लेटफ़ॉर्म और संस्करण के अनुसार भिन्न हो सकता है, पर आवश्यक मान हैं:
- ID Server / Rendezvous: rustdesk.example.com:443 (या आपका डोमेन और पोर्ट)
- Relay Server: rustdesk.example.com:443
Windows पर: RustDesk खोलें > Settings > ID/Server और Id server और Relay server को rustdesk.example.com:443 पर सेट करें। Linux और macOS पर वही सेटिंग्स Preferences में हैं। हेडलेस इंस्टॉल के लिए, क्लाइंट को कभी-कभी कमांड-लाइन फ्लैग या कॉन्फ़िग फ़ाइल के साथ दिया जा सकता है — विवरण के लिए क्लाइंट रेपो देखें।
पक्का करें कि क्लाइंट हाल के हों (लिखते समय 1.2.x या नया)। नए क्लाइंट प्रोटोकॉल फिक्स और बेहतर NAT ट्रैवर्सल शामिल करते हैं। बहुत पुराने क्लाइंट का उपयोग करने पर व्यवहार भिन्न हो सकता है।
समस्या निवारण और हार्डनिंग
आम समस्याएँ और उन्हें डिबग करने के तरीके:
- फ़ायरवॉल: पुष्टि करें कि VPS फ़ायरवॉल (ufw/iptables/क्लाउड प्रदाता) 80/443 इनबाउंड की अनुमति देता है। RustDesk सर्वर कंटेनर जो स्थानीय रूप से 21115 पर सुन रहा है, सुनिश्चित करें कि TCP सॉकेट मौजूद है (ss/netstat)।
- प्रमाणपत्र जारी करना: यदि Let's Encrypt सत्यापित नहीं कर पाता तो Caddy लॉग में त्रुटि देगा। पुष्टि करें कि आपका DNS A रिकॉर्ड VPS की ओर इशारा करता है और प्रारंभिक जारीगी के दौरान पोर्ट 80 पहुँच योग्य है।
- प्रोटोकॉल असंगति: यदि आप TLS हैंडशेक सफल देखते हैं पर क्लाइंट से कनेक्शन फेल होते हैं, तो संभवतः आप गलती से Caddy के साथ HTTP-ओनली प्रॉक्सी कर रहे हैं। ऐसे मामलों में stunnel दृष्टिकोण का उपयोग करें।
- UDP रिले: स्क्रीन फ़्रेम के लिए RustDesk प्रदर्शन UDP के साथ बेहतर होता है; यदि UDP आवश्यक है और आपका नेटवर्क पथ UDP ब्लॉक करता है, तो आप TCP रिले पर वापस आ जाएंगे। UDP पोर्ट केवल तब एक्सपोज़/फ़ॉरवर्ड करें जब आप अपने नेटवर्क को नियंत्रित करते हों और जानते हों कि क्या कर रहे हैं।
सुरक्षा कठोरकरण सुझाव:
- RustDesk सर्वर को समर्पित अनप्रिविलेज्ड उपयोगकर्ता के रूप में चलाएँ और Docker इमेज को अद्यतित रखें।
- बार-बार विफल कनेक्शनों को थ्रॉटल करने के लिए fail2ban या समान सक्षम करें, और लॉग की निगरानी करें (
docker compose logs -f rustdesk-server)। - अपने rustdesk सर्वर डेटा डायरेक्टरी (उदाहरण में यह ./data है) का नियमित रूप से बैकअप लें।
- यदि आप कई रिले चला रहे हैं तो रिले को निजी नेटवर्क या VPC के पीछे चलाने पर विचार करें।
स्केलिंग नोट्स: छोटे टीमों के लिए एकल रिले ठीक है। बड़े परिकल्पनाओं के लिए, अलग मशीनों पर कई hbbr प्रोसेस चलाएँ और DNS लोड-बैलेंसिंग या एक उचित L4 लोड बैलेंसर का उपयोग करें। यदि आपको केंद्रीकृत एंटरप्राइज़ सुविधाएँ जैसे ऑडिटिंग चाहिए, तो वाणिज्यिक समाधान आगे हो सकते हैं। ट्रेडऑफ़ के लिए हमारे लेख देखें: self-hosted-remote-desktop और rustdesk-vs-anydesk।
रखरखाव, लागत और अंतिम सिफारिशें
ऑपरेशनल लागत ज्यादातर VPS फीस और आपका समय हैं। एक सामान्य छोटा VPS (1–2 CPU, 2–4 GB) $5–10/month में मिल सकता है (DigitalOcean, Vultr, Hetzner)। Caddy और RustDesk सर्वर ओपन-सोर्स हैं; प्राथमिक आवर्ती लागत होस्टिंग है। यदि आपको GUI-आधारित बिलिंग या एंटरप्राइज़ सपोर्ट चाहिए, तो वाणिज्यिक विक्रेता प्रति-सीट या प्रति-सत्र शुल्क लेते हैं — संदर्भ के लिए हमारी मूल्य तुलना देखें जैसे anydesk-pricing-explained और godeskflow-vs-teamviewer-pricing।
सिफारिशें:
- ऊपर दिए Docker Compose लेआउट के साथ एकल VPS से शुरू करें। उन नेटवर्कों से कनेक्शन टेस्ट करें जिन पर आपके उपयोगकर्ता होंगे (होम ISP, कॉर्पोरेट फ़ायरवॉल)।
- यदि क्लाइंट अक्सर बहुत कड़े फ़ायरवॉल के पीछे हैं, तो अपना रिले 443 पर रखें और TLS समाप्ति को विश्वसनीय तरीके से काम करता हुआ सत्यापित करें; यदि Caddy-ओनली TCP प्रॉक्सीइंग समस्याएँ उत्पन्न करे तो Caddy+stunnel का उपयोग करें।
- सर्वर डेटा डायरेक्टरी के बैकअप को ऑटोमेट करें और इमेज अपग्रेड का ट्रैक रखें। RustDesk सर्वर रिलीज़ बदलते रहते हैं; यदि आप प्रोडक्शन अपटाइम पर निर्भर हैं तो स्टेजिंग पर्यावरण में अपग्रेड टेस्ट करें।
यदि आप रिमोट एक्सेस पैटर्न या विकल्पों के लिए एक संक्षिप्त वॉक-थ्रू चाहते हैं, तो हमारे संबंधित लेख पढ़ें: remote-access-setup-guide और remote-desktop-security।
पढ़ना पूरा हुआ? यदि आप एक पूरी तरह से ओपन-सोर्स रिमोट डेस्कटॉप आज़माना चाहते हैं जो स्वयं-होस्टिंग के साथ अच्छी तरह एकीकृत हो, तो GoDesk डाउनलोड करें या इसकी मूल्य संरचना की तुलना करें — देखें GoDesk download और GoDesk pricing। यदि आप इस RustDesk सेटअप को तैनात करने के लिए तैयार हैं, तो ऊपर दिया docker-compose.yml और Caddyfile बनाकर docker compose up -d चलाकर शुरू करें। त्वरित शुरुआत के लिए, क्लाइंट लेने और कनेक्ट होने के लिए /download पर जाएँ।