8 poin oleh GN⁺ 22 hari lalu | 2 komentar | Bagikan ke WhatsApp
  • Ini adalah klien RDP berbasis web yang memungkinkan terhubung ke desktop jarak jauh Windows hanya dengan browser, dan berjalan tanpa plugin apa pun
  • Dengan memisahkan Go WebAssembly di browser dan proxy WebSocket-to-TCP di sisi server, koneksi TCP RDP yang tidak bisa dibuka langsung oleh browser dapat ditangani sebagai gantinya
  • Koneksi mengikuti alur Browser -> WebSocket -> proxy -> TCP -> RDP Server, lalu setelah terhubung layar jarak jauh ditampilkan di canvas dan input keyboard serta mouse diteruskan
  • Perangkat input mendukung keyboard berbasis RDP scan codes dan mouse yang mencakup gerakan, klik, serta roda gulir, sementara audio jarak jauh diterima melalui RDPSND dan diputar dengan Web Audio API
  • Karena struktur proxy mengizinkan semua origin, aplikasi ini hanya boleh dijalankan di jaringan tepercaya, atau sebelum diekspos ke luar harus dilengkapi dengan HTTPS/WSS dan lapisan autentikasi

Gambaran proyek

  • Berfungsi sebagai klien RDP berbasis web untuk mengakses desktop jarak jauh Windows dari browser tanpa plugin
  • Implementasinya menggunakan kombinasi Go WebAssembly dan grdp, dengan struktur yang memisahkan bagian yang berjalan di browser dan bagian proxy perantara
  • Karena browser tidak bisa membuka soket TCP mentah secara langsung, diperlukan proxy Go ringan yang menghubungkan koneksi WebSocket ke port TCP server RDP

Arsitektur dan cara kerja

  • Jalur keseluruhan mengikuti urutan Browser (WASM) -> WebSocket -> proxy (Go) -> TCP -> RDP Server
  • Di browser, biner WASM dijalankan, sedangkan proxy berperan sekaligus sebagai jembatan WebSocket-to-TCP dan server file statis
  • Hasil make all terbagi menjadi static/main.wasm yang dijalankan di browser, file pendukung runtime Go static/wasm_exec.js, dan server proxy proxy/proxy
  • Berkat struktur ini, sisi browser menangani koneksi dengan teknologi web standar, sementara komunikasi TCP sebenarnya dengan server RDP ditangani oleh proxy

Alur penggunaan dan antarmuka pengguna

  • Buka http://localhost:8080 di browser, masukkan nilai Host, Port, Domain, User, Password, Width, Height pada formulir koneksi, lalu tekan Connect untuk memulai sesi
  • Nilai default Port adalah 3389, dan Domain dapat dikosongkan saat menggunakan akun lokal
  • Setelah koneksi selesai, desktop jarak jauh ditampilkan di canvas, dan untuk menerima input keyboard pengguna harus mengklik canvas
  • Menekan Disconnect akan mengakhiri sesi

Perangkat input dan dukungan audio

  • Semua input keyboard standar diteruskan ke desktop jarak jauh melalui RDP scan codes
  • Mouse mendukung pergerakan, klik tombol, hingga roda gulir
  • Tab browser harus memiliki fokus agar event keyboard diteruskan, dan jika input tombol berhenti, area canvas perlu diklik kembali
  • Audio jarak jauh di-streaming melalui RDPSND dan diputar di browser menggunakan Web Audio API
    • Format audio dinyatakan sebagai PCM 44100 Hz, stereo, 16-bit signed little-endian

Kondisi operasional dan perhatian keamanan

  • Persyaratannya adalah Go 1.24 atau lebih baru dan satu server RDP yang dapat diakses; server target bisa berupa Windows atau host yang kompatibel dengan RDP
  • Proxy mengizinkan koneksi dari semua origin, jadi hanya boleh dijalankan di jaringan tepercaya, atau lapisan autentikasi harus ditambahkan sebelum diekspos ke internet
  • Karena kredensial dikirim dari browser ke proxy melalui WebSocket, penggunaan HTTPS/WSS diperlukan di jaringan yang tidak tepercaya
    • README juga mencantumkan metode menggunakan reverse proxy terminasi TLS seperti nginx atau Caddy

Bentuk eksekusi dan informasi tambahan

  • Aplikasi dapat dijalankan dengan make serve atau ./proxy/proxy -listen :8080 -static static
  • Opsi proxy menggunakan -listen untuk menentukan alamat dengar dan port, dan -static untuk menentukan direktori file statis
  • Target pengembangan dibagi menjadi make wasm untuk hanya membangun ulang WASM, make proxy untuk hanya membangun ulang proxy, make wasm_exec untuk memperbarui wasm_exec.js, dan make clean untuk menghapus hasil build
  • Lisensinya adalah GPLv3 dan juga disertai rujukan ke grdp LICENSE

2 komentar

 
yeobi222 21 hari lalu

Tapi saya benar-benar tidak melihat kelebihannya.
Ini pada dasarnya cuma klien, jadi dari sisi server juga tidak bisa memaksakan persyaratan tertentu.
Dan juga tidak bisa diakses hanya dengan browser murni saja.

 
GN⁺ 22 hari lalu
Komentar Hacker News
  • Terlihat cukup keren. Kalau sampai mendukung perekaman sesi dan autentikasi SSO, ini bisa langsung dipakai sebagai jump host RDP
    Saya pernah memakai Azure Bastion dengan cara serupa: login ke portal Azure memakai metode autentikasi yang dikonfigurasi di tenant, lalu melakukan koneksi RDP ke VM dari browser, dan login di sisi VM memakai akun lokal. Penanganan file dan clipboard juga cukup bagus, dan sesi konsol di dalam browser juga didukung
    Saya belum pernah mencoba sisi Windows/RDP jadi tidak tahu apakah itu juga didukung, tetapi browser SSH milik GCP termasuk yang paling rapi yang pernah saya lihat
    Di Linux pun kadang terasa xrdp lebih baik daripada alternatif lain
    Salah satu nilai besar yang diselesaikan ini adalah pemisahan antarmuka administrasi untuk VM/server. Hanya dengan memastikan layanan administrasi server web tidak berada pada IP/domain/antarmuka yang sama dengan layanan HTTP, keamanan sudah meningkat jauh

    • Untuk kebutuhan ini kami memakai Apache Guacamole dengan proxy OIDC kami
  • Di RDP dalam browser, clipboard itu mimpi buruk tersendiri. Negosiasi protokol wire-nya sendiri berjalan baik, tetapi Clipboard API di sisi browser terikat pada izin dan persyaratan user gesture
    Untuk membaca, kebanyakan browser hampir selalu meminta konfirmasi pengguna. Jadi pilihannya biasanya membuat buffer clipboard terpisah di dalam halaman, atau paste ke dalam RDP berjalan mulus tetapi saat menyalin keluar dari RDP pengguna harus klik setiap kali
    Keduanya jauh dari perilaku yang diharapkan orang dari klien RDP web. Sebelum menganggapnya setara dengan mstsc native, pastikan untuk memeriksa bagaimana perilakunya berbeda di Chrome dan Firefox

    • Sepertinya tidak selalu begitu. Google Docs, Office 365, dan Notion bisa berjalan tanpa terus-menerus meminta izin
  • Karena HP menghentikan Anyware / Teradici / PCoIP, cukup banyak orang sekarang mencari alternatif. Yang paling dibutuhkan terutama adalah dukungan multi-monitor resolusi tinggi, 60fps, pemutaran dengan kedalaman bit tinggi, dukungan tablet Wacom, dan dukungan untuk ketiga OS
    Di sisi berbayar ada Parsec dan DCV, dan menyenangkan melihat upaya open source. Ada proyek seperti rustdesk, kyber, dan teraguchi, jadi komunitas tampaknya benar-benar membutuhkan opsi open source berperforma tinggi
    https://github.com/rustdesk/rustdesk
    https://github.com/thedepartmentofexternalservices/teraguchi
    https://kyber.tech/

    • Sebagai catatan, DCV gratis di EC2, dan bahkan di lingkungan lain pun peringatannya sangat ringan saat tidak ada lisensi
  • Ini memang terlihat menarik, tetapi agak mengejutkan bahwa fitur yang paling penting tidak disebutkan. Saya penasaran seberapa baik berbagi clipboard benar-benar bekerja

    • Saya tidak terlalu suka Windows, tetapi saat sesi RDP bertingkat 3 lapis tetap bisa saling copy/paste file, itu masih terasa seperti sihir
    • Kami juga sedang membuat klien RDP kustom, jadi punya sedikit pengalaman implementasi seperti ini. Kami mengimplementasikannya dengan cara yang mirip
      Berbagi clipboard serta upload/download melalui drive bersama adalah fitur FreeRDP, jadi relatif bisa langsung dimanfaatkan
      Dan perekaman sesi adalah hal yang tidak bisa ditawar dalam lingkungan PAM
      [1] https://adaptive.live
  • Penskalaan desktop, dukungan multi-monitor, transfer file, pengalihan drive, dan pengalihan periferal juga semuanya penting

  • Saya penasaran apakah ini juga bekerja saat membuka file RDP yang diterima dari CyberArk PAM

  • Saya juga penasaran apakah klien RDP bisa menangkap Alt-Tab dari dalam tab browser
    Dulu itu masalah terbesar pada RDP browser milik Guacamole

  • Secara teknis ini menarik, tetapi saya kurang paham kenapa ini diperlukan karena hampir semua platform sudah punya klien RDP native

    • Kalau bisa dari browser, tidak perlu memasang apa pun di mesin lokal. Dulu saat saya harus diam di kubikel kantor, saya sering memakai Apache Guacamole untuk mengakses komputer rumah
      https://guacamole.apache.org/
    • Baru 1 kontributor, 1 commit, dan proyek baru, jadi terasa agak seperti vibe-coding
    • Browser itu sandbox, sedangkan klien native umumnya tidak, jadi jelas ada kelebihannya. Portabilitas dan kemudahan embed juga ada, dan lebih mudah juga untuk menginspeksi trafik atau melakukan MITM
    • Di native RDP/RDG, pilihan MFA yang layak tidak banyak. Kalau dipindahkan ke browser, seluruhnya bisa dibungkus dengan OAuth atau passkey
    • Ini juga sepertinya bisa dipakai untuk klien web remote desktop yang terhubung ke chip BMC