Kết nối Remote Desktop trực tiếp từ trình duyệt với Go WebAssembly
Dự án grdpwasm là một trình khách RDP chạy trên nền tảng web, được xây dựng bằng Go WebAssembly, cho phép người dùng truy cập máy chủ Windows Remote Desktop ngay trong trình duyệt mà không cần cài đặt thêm phần mềm. Hệ thống sử dụng một proxy Go nhẹ để chuyển đổi kết nối WebSocket từ trình duyệt sang kết nối TCP đến máy chủ RDP, hỗ trợ đầy đủ bàn phím, chuột và cả truyền tải âm thanh.

Một dự án mã nguồn mở mới có tên grdpwasm đang thu hút sự chú ý của cộng đồng lập trình viên nhờ khả năng biến trình duyệt web thành một trình khách RDP (Remote Desktop Protocol) đầy đủ chức năng. Được xây dựng dựa trên ngôn ngữ lập trình Go và công nghệ WebAssembly (WASM), công cụ này cho phép người dùng kết nối đến máy chủ Windows từ xa mà không cần cài đặt bất kỳ plugin hay ứng dụng khách nào khác.
Kiến trúc và Nguyên lý hoạt động
Điểm thú vị nhất của grdpwasm nằm ở cách nó xử lý kết nối mạng. Vì các trình duyệt web hiện đại không cho phép mở các raw TCP sockets (socket TCP thô) trực tiếp, dự án đã triển khai một kiến trúc sử dụng máy chủ trung gian (proxy).
Luồng dữ liệu đi theo cấu trúc sau:
Trình duyệt (WASM) ──WebSocket──► Proxy (Go) ──TCP──► Máy chủ RDP
Một proxy nhẹ được viết bằng Go đóng vai trò là cầu nối, chuyển đổi kết nối WebSocket an toàn từ trình duyệt sang kết nối TCP để giao tiếp với cổng 3389 mặc định của máy chủ RDP.
Các tính năng chính
Mặc dù chạy trong môi trường sandbox của trình duyệt, grdpwasm cung cấp trải nghiệm người dùng khá hoàn thiện:
- Hỗ trợ nhập liệu: Tất cả các sự kiện bàn phím tiêu chuẩn đều được chuyển tiếp đến máy tính từ xa thông qua các mã quét RDP.
- Điều khiển chuột: Hoạt động di chuyển chuột, nhấp chuột và cuộn trang đều được hỗ trợ đầy đủ.
- Truyền âm thanh: Âm thanh từ máy chủ được truyền trực tiếp qua giao thức RDPSND và phát lại thông qua Web Audio API của trình duyệt (PCM 44100 Hz, stereo, 16-bit).
Cách cài đặt và sử dụng
Để chạy grdpwasm, bạn cần cài đặt Go phiên bản 1.24 trở lên và một máy chủ RDP có thể kết nối được.
Quy trình cài đặt khá đơn giản:
- Clone mã nguồn từ GitHub.
- Chạy lệnh
make allđể biên dịch tệp nhị phân WASM và proxy. - Sử dụng lệnh
make serve(hoặc chạy trực tiếp tệp proxy) để khởi động máy chủ tại địa chỉhttp://localhost:8080.
Sau khi khởi động, người dùng chỉ cần mở trình duyệt, nhập thông tin máy chủ (Host, Port, Domain, User, Password) và độ phân giải màn hình mong muốn, sau đó nhấn Connect. Màn hình desktop từ xa sẽ hiển thị ngay trên canvas của trình duyệt.
Lưu ý về bảo mật
Các nhà phát triển cảnh báo rằng proxy hiện tại chấp nhận kết nối từ mọi nguồn (any origin). Do đó, nó chỉ nên được chạy trên các mạng tin cậy.
Nếu triển khai trên Internet, người dùng cần:
- Thêm lớp xác thực (authentication) cho proxy.
- Sử dụng giao thức HTTPS/WSS bằng cách đặt proxy sau một reverse proxy như nginx hoặc Caddy để mã hóa lưu lượng truyền tin, đặc biệt là thông tin đăng nhập.
Dự án này là một ví dụ điển hình cho thấy sức mạnh của WebAssembly trong việc mang các ứng dụng desktop phức tạp lên nền tảng web một cách mượt mà.



