- Ini adalah klien RDP berbasis web yang dapat terhubung ke Windows Remote Desktop hanya dengan browser, dan bekerja tanpa plugin
- Dengan memisahkan Go WebAssembly di browser dan proxy WebSocket-ke-TCP di sisi server, koneksi TCP RDP yang tidak bisa dibuka langsung oleh browser ditangani sebagai pengganti
- Koneksi mengikuti alur
Browser -> WebSocket -> proxy -> TCP -> RDP Server; setelah tersambung, layar jarak jauh ditampilkan di canvas dan input keyboard serta mouse diteruskan
- Perangkat input mendukung keyboard berbasis RDP scan codes dan mouse dengan gerakan, klik, serta roda gulir; audio jarak jauh diterima melalui RDPSND dan diputar dengan Web Audio API
- Karena struktur proxy mengizinkan semua origin, ini sebaiknya hanya dijalankan di jaringan tepercaya, atau dilengkapi HTTPS/WSS dan lapisan autentikasi sebelum diekspos ke luar
Gambaran proyek
- Berfungsi sebagai klien RDP berbasis web untuk mengakses Windows Remote Desktop dari browser tanpa plugin
- Implementasinya menggunakan kombinasi Go WebAssembly dan grdp, dengan arsitektur yang memisahkan bagian eksekusi di browser dan bagian perantara proxy
- Karena browser tidak dapat membuka soket TCP mentah secara langsung, dibutuhkan proxy Go ringan yang meneruskan 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, sementara proxy menangani sekaligus peran sebagai jembatan WebSocket-ke-TCP dan server file statis
- Hasil
make all dibagi menjadi static/main.wasm yang berjalan di browser, file dukungan runtime Go static/wasm_exec.js, dan server proxy proxy/proxy
- Berkat struktur ini, sisi browser menangani koneksi dengan teknologi web standar, sedangkan komunikasi TCP aktual 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 berhasil, desktop jarak jauh akan ditampilkan di canvas, dan untuk menerima input keyboard Anda perlu 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 dapat diteruskan; jika input tombol berhenti, Anda perlu mengklik kembali area canvas
- 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 tujuan dapat berupa Windows atau host yang kompatibel dengan RDP
- Proxy mengizinkan koneksi dari semua origin, sehingga sebaiknya hanya dijalankan di jaringan tepercaya, atau tambahkan lapisan autentikasi sebelum diekspos ke internet
- Kredensial dikirim dari browser ke proxy melalui WebSocket, jadi pada jaringan yang tidak tepercaya diperlukan penggunaan HTTPS/WSS
- README juga menyebutkan pendekatan menggunakan reverse proxy terminasi TLS seperti nginx atau Caddy
Bentuk eksekusi dan informasi tambahan
- Program dapat dijalankan dengan
make serve atau ./proxy/proxy -listen :8080 -static static
- Opsi proxy menggunakan
-listen untuk menentukan alamat dan port yang didengarkan, serta -static untuk menentukan direktori file statis
- Target untuk pengembangan dibagi menjadi
make wasm untuk membangun ulang WASM saja, make proxy untuk membangun ulang proxy saja, 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
1 komentar
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
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
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/
Ini memang terlihat menarik, tetapi agak mengejutkan bahwa fitur yang paling penting tidak disebutkan. Saya penasaran seberapa baik berbagi clipboard benar-benar bekerja
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
https://guacamole.apache.org/