- 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
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.
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/