8 पॉइंट द्वारा GN⁺ 4 일 전 | 2 टिप्पणियां | WhatsApp पर शेयर करें
  • यह एक वेब-आधारित RDP क्लाइंट है, जो सिर्फ ब्राउज़र के जरिए Windows Remote Desktop से कनेक्ट हो सकता है और बिना किसी plugin के काम करता है
  • यह ब्राउज़र के Go WebAssembly और सर्वर-साइड WebSocket-to-TCP प्रॉक्सी को अलग रखता है, ताकि ब्राउज़र जो RDP TCP कनेक्शन सीधे नहीं खोल सकता, उसे प्रॉक्सी संभाल सके
  • कनेक्शन Browser -> WebSocket -> proxy -> TCP -> RDP Server फ्लो में चलता है, और कनेक्ट होने के बाद रिमोट स्क्रीन canvas पर दिखाई देती है तथा कीबोर्ड और माउस इनपुट आगे भेजे जाते हैं
  • इनपुट डिवाइस में RDP scan codes आधारित कीबोर्ड और मूवमेंट, क्लिक, व्हील सहित माउस सपोर्ट है, जबकि रिमोट ऑडियो RDPSND से प्राप्त होकर Web Audio API से प्ले होता है
  • प्रॉक्सी संरचना सभी origin को अनुमति देती है, इसलिए इसे केवल विश्वसनीय नेटवर्क में चलाना चाहिए, या बाहरी एक्सपोज़र से पहले HTTPS/WSS और authentication layer साथ में लगानी चाहिए

प्रोजेक्ट अवलोकन

  • यह ब्राउज़र में बिना किसी plugin के Windows Remote Desktop से कनेक्ट करने वाला वेब-आधारित RDP क्लाइंट है
  • इसका इम्प्लीमेंटेशन Go WebAssembly और grdp के संयोजन से बना है, और इसमें ब्राउज़र रनटाइम भाग तथा प्रॉक्सी रिले भाग अलग संरचना में हैं
  • क्योंकि ब्राउज़र सीधे raw TCP socket नहीं खोल सकता, इसलिए WebSocket कनेक्शन को RDP सर्वर के TCP पोर्ट से जोड़ने के लिए एक हल्का Go प्रॉक्सी भी जरूरी है

आर्किटेक्चर और काम करने का तरीका

  • पूरा पथ Browser (WASM) -> WebSocket -> proxy (Go) -> TCP -> RDP Server क्रम में चलता है
  • ब्राउज़र में WASM binary चलती है, और प्रॉक्सी WebSocket-to-TCP bridge तथा static file server दोनों की भूमिका निभाता है
  • make all के आउटपुट ब्राउज़र में चलने वाला static/main.wasm, Go runtime support file static/wasm_exec.js, और प्रॉक्सी सर्वर proxy/proxy में बंटे होते हैं
  • इस संरचना की वजह से ब्राउज़र वाला हिस्सा standard web technologies से कनेक्शन संभालता है, जबकि RDP सर्वर के साथ वास्तविक TCP संचार प्रॉक्सी करता है

उपयोग प्रवाह और यूज़र इंटरफ़ेस

  • ब्राउज़र में http://localhost:8080 खोलकर कनेक्शन फ़ॉर्म में Host, Port, Domain, User, Password, Width, Height भरें और Connect दबाएँ, तो सत्र शुरू होता है
  • Port का डिफ़ॉल्ट मान 3389 है, और लोकल अकाउंट इस्तेमाल करने पर Domain को खाली छोड़ा जा सकता है
  • कनेक्शन पूरा होने पर रिमोट डेस्कटॉप canvas पर दिखता है, और कीबोर्ड इनपुट लेने के लिए canvas पर क्लिक करना होता है
  • Disconnect दबाने पर सत्र समाप्त हो जाता है

इनपुट डिवाइस और ऑडियो सपोर्ट

  • सभी standard keyboard input RDP scan codes के जरिए रिमोट डेस्कटॉप तक भेजे जाते हैं
  • माउस में movement, button click और scroll wheel तक का सपोर्ट है
  • कीबोर्ड इवेंट भेजने के लिए ब्राउज़र टैब का focused होना जरूरी है, और अगर key input रुक जाए तो canvas क्षेत्र पर फिर से क्लिक करना चाहिए
  • रिमोट ऑडियो RDPSND के जरिए stream होता है और ब्राउज़र में Web Audio API से प्ले किया जाता है
    • ऑडियो फ़ॉर्मैट PCM 44100 Hz, stereo, 16-bit signed little-endian के रूप में निर्दिष्ट है

ऑपरेटिंग शर्तें और सुरक्षा संबंधी सावधानियाँ

  • आवश्यकताओं में Go 1.24 या उससे ऊपर और एक सुलभ RDP सर्वर शामिल है; लक्ष्य सर्वर Windows या RDP-संगत होस्ट हो सकता है
  • प्रॉक्सी सभी origin से कनेक्शन की अनुमति देता है, इसलिए इसे केवल विश्वसनीय नेटवर्क में चलाना चाहिए, या इंटरनेट पर एक्सपोज़ करने से पहले authentication layer जोड़नी चाहिए
  • credentials ब्राउज़र से प्रॉक्सी तक WebSocket के जरिए भेजे जाते हैं, इसलिए अविश्वसनीय नेटवर्क में HTTPS/WSS का उपयोग जरूरी है
    • README में TLS termination वाले reverse proxy के रूप में nginx या Caddy लगाने का तरीका भी दिया गया है

चलाने का तरीका और अतिरिक्त जानकारी

  • इसे make serve या ./proxy/proxy -listen :8080 -static static के रूप में चलाया जा सकता है
  • प्रॉक्सी विकल्पों में -listen से listen address और port, तथा -static से static file directory तय की जाती है
  • development targets में केवल WASM को दोबारा build करने के लिए make wasm, केवल प्रॉक्सी को दोबारा build करने के लिए make proxy, wasm_exec.js अपडेट करने के लिए make wasm_exec, और आउटपुट हटाने के लिए make clean शामिल हैं
  • लाइसेंस GPLv3 है, और साथ में grdp LICENSE का संदर्भ भी दिया गया है

2 टिप्पणियां

 
yeobi222 3 일 전

लेकिन सच में इसका फ़ायदा समझ नहीं आ रहा।
यह तो बस एक client है, इसलिए server side पर किसी भी requirement को enforce भी नहीं किया जा सकता।
और इसे केवल pure browser से access भी नहीं किया जा सकता।

 
GN⁺ 4 일 전
Hacker News की राय
  • काफ़ी बढ़िया लग रहा है। अगर इसमें session recording और SSO authentication का सपोर्ट भी आ जाए, तो इसे सीधे RDP jump host की तरह इस्तेमाल किया जा सकता है
    मैंने Azure Bastion के साथ कुछ ऐसा ही इस्तेमाल किया है: tenant में configured authentication method से Azure portal में लॉग इन करें, फिर browser से VM पर RDP कनेक्ट करें, और VM की तरफ़ local account से लॉग इन कर लें। files और clipboard handling भी काफ़ी अच्छी है, और browser के अंदर console session का भी सपोर्ट है
    Windows/RDP वाले हिस्से को मैंने इस्तेमाल नहीं किया, इसलिए पता नहीं वहाँ कैसा है, लेकिन GCP का browser SSH अब तक देखी गई चीज़ों में सबसे अच्छी implementations में से एक था
    Linux में भी कभी-कभी लगा कि xrdp दूसरे alternatives से बेहतर है
    यह जिस बड़ी समस्या को हल करता है, उनमें से एक है VM/server के management interface का separation। सिर्फ़ इतना सुनिश्चित कर देना कि web server की management service, HTTP service वाले उसी IP/domain/interface पर न हो, security को काफ़ी बेहतर बना देता है

    • हम इस काम के लिए Apache Guacamole के साथ अपना OIDC proxy जोड़कर इस्तेमाल कर रहे हैं
  • browser RDP में clipboard एक छिपा हुआ दुःस्वप्न है। wire protocol negotiation खुद तो ठीक चलता है, लेकिन browser side का Clipboard API permissions और user gesture requirements से बंधा होता है
    read side पर ज़्यादातर browsers लगभग हर बार user confirmation मांगते हैं। इसलिए या तो page के अंदर एक अलग clipboard buffer बनाना पड़ता है, या फिर RDP के अंदर paste तो सहज हो जाता है लेकिन RDP से बाहर copy करते समय हर बार क्लिक झेलना पड़ता है
    दोनों में से कोई भी तरीका वैसा व्यवहार नहीं देता जिसकी लोग web RDP client से उम्मीद करते हैं। इसे native mstsc के बराबर मानने से पहले Chrome और Firefox में इसका व्यवहार कैसे अलग है, यह ज़रूर देखना चाहिए

    • शायद ऐसा हमेशा नहीं है। Google Docs, Office 365, Notion बार-बार permission नहीं मांगते और काम करते हैं
  • HP के Anyware / Teradici / PCoIP बंद करने के बाद काफ़ी लोग alternatives ढूँढ रहे हैं। ख़ासकर high-resolution multi-monitor, 60fps, high bit-depth playback, Wacom tablet support, और तीनों OS का सपोर्ट चाहिए
    paid options में Parsec और DCV हैं, और open source प्रयासों को देखना अच्छा लगता है। rustdesk, kyber, teraguchi जैसे projects हैं, इसलिए community को high-performance open source options की सच में ज़रूरत लगती है
    https://github.com/rustdesk/rustdesk
    https://github.com/thedepartmentofexternalservices/teraguchi
    https://kyber.tech/

    • जानकारी के लिए, DCV EC2 पर मुफ़्त है, और दूसरे environments में भी license न होने पर इसकी warning काफ़ी हल्की रहती है
  • दिलचस्प लग रहा है, लेकिन हैरानी है कि सबसे अहम feature का ज़िक्र नहीं है। clipboard sharing वास्तव में कितना अच्छा काम करता है, यह जानने की उत्सुकता है

    • मुझे Windows ख़ास पसंद नहीं, लेकिन RDP की 3-स्तरीय nested sessions के बीच आना-जाना करते हुए जब भी file copy/paste काम करता है, वह अब भी जादू जैसा लगता है
    • हम भी एक custom RDP client बना रहे हैं, इसलिए इस तरह के implementation का कुछ अनुभव है। हमने भी लगभग ऐसा ही किया
      clipboard sharing और shared drives के ज़रिए upload/download, ये FreeRDP features हैं इसलिए इन्हें अपेक्षाकृत सीधे इस्तेमाल किया जा सकता है
      और session recording PAM environment में बिल्कुल अनिवार्य है
      [1] https://adaptive.live
  • desktop scaling, multi-monitor support, file transfer, drive redirection, और peripheral redirection भी सब महत्वपूर्ण हैं

  • सोच रहा हूँ कि CyberArk PAM से मिली RDP file खोलते समय भी यह काम करेगा या नहीं

  • यह भी जानना है कि browser tab के अंदर Alt-Tab को RDP client intercept कर सकता है या नहीं
    पहले Guacamole के browser RDP में यही सबसे बड़ी समस्या थी

  • तकनीकी रूप से दिलचस्प है, लेकिन लगभग हर platform पर native RDP client पहले से मौजूद है, इसलिए समझ नहीं आता कि इसकी ज़रूरत आख़िर क्यों है

    • अगर यह browser में चल जाए, तो local machine पर कुछ भी install करने की ज़रूरत नहीं रहती। पहले जब दफ़्तर में क्यूबिकल में बैठे रहना पड़ता था, तब घर के कंप्यूटर से जुड़ने के लिए मैं अक्सर Apache Guacamole इस्तेमाल करता था
      https://guacamole.apache.org/
    • contributor 1, commits 1, नया project है, इसलिए थोड़ा vibe-coding जैसा एहसास आता है
    • browser एक sandbox है, जबकि native clients आमतौर पर नहीं होते, इसलिए इसका फ़ायदा साफ़ है। portability और embedding भी आसान है, और traffic को inspect करना या MITM करना भी ज़्यादा सरल है
    • native RDP/RDG के लिए अच्छे MFA options बहुत नहीं हैं। इसे browser में लाने पर पूरी चीज़ को OAuth या passkey जैसी चीज़ों से wrap किया जा सकता है
    • शायद यह BMC chip से जुड़े remote desktop के web client के रूप में भी काम आ सकता है