Trước đây mỗi khi cần truy cập vào máy tính chạy Windows ở nhà, mình phải sử dụng WireGuard VPN để kết nối vào mạng LAN. Sau đó sẽ truy cập RDP thông qua Local IP. Ưu điểm của phương pháp này là không cần phải mở port 3389 ra Internet, không sợ bị hack. Tuy nhiên nhược điểm là không thể sử dụng trên máy tính của công ty (vì máy công ty thường không cho cài đặt thêm phần mềm bên ngoài: WireGuard client).
Giải pháp cho vấn đề truy cập RDP bảo mật mà không cần dùng đến VPN là sử dụng Cloudflare Tunnel. Cloudflare sẽ đóng vai trò trung gian xác thực kết nối từ bên ngoài, và sẽ chuyển hướng đến máy tính trong mạng LAN nếu kết nối được xác thực là tin cậy.
Dưới đây là hướng dẫn tạo kết nối bảo mật Remote Desktop sử dụng Cloudflare Tunnel.
Mục Lục
I. Yêu cầu chuẩn bị
- Máy tính chạy Windows trong mạng LAN đã được kích hoạt cho phép kết nối RDP từ bên ngoài vào.
- Đã có sẵn tài khoản Cloudflare và biết cách thiết lập Cloudflare Tunnel. Xem bài hướng dẫn dưới đây:
II. Tạo Public hostname
Truy cập vào Tunnel hiện có, tạo thêm tên miền mới để dùng cho truy cập RDP: bấm vào nút Add a public hostname.
- Chọn subdomain và domain bạn muốn sử dụng.
- Type: chọn RDP
- URL: nhập vào LAN IP của máy tính cần được điều khiển và port (mặc định: 3389)
Bấm Save hostname để lưu lại.
III. Kết nối RDP
Mình sử dụng 1 máy tính nằm bên ngoài mạng LAN ở nhà để thử nghiệm kết nối RDP thông qua Cloudflare Tunnel.
1. Cài đặt cloudflared
Đầu tiên, cần phải cài đặt cloudflared lên máy tính đang muốn tạo kết nối RDP vào mạng LAN. Mình sử dụng EndeavourOS nên cài đặt bằng lệnh sau
yay -S cloudflared
Code language: Nginx (nginx)
Nếu sử dụng macOS hay Windows, tham khác các cách cài đặt cloudlfared ở đây: https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/installation/
2. Cài đặt RDP client
Do trên EndeavourOS chưa có sẵn RDP client nên mình sẽ cài thêm remmina và freerdp để tạo kết nối RDP
yay -S remmina freerdp
Code language: Nginx (nginx)
Nếu bạn đang dùng Windows, bấm vào Start Menu, gõ Remote Desktop là sẽ thấy ngay công cụ kết nối RDP có sẵn.
3. Thiết lập kết nối
Mở Terminal, nhập vào lệnh sau để thiết lập kết nối đến Cloudflare Tunnel
cloudflared access rdp --hostname rdp.thuanbui.me --url rdp://localhost:3389
Code language: JavaScript (javascript)
Sau đó mở RDP, tạo kết nối vào địa chỉ localhost:3389
Nếu thiết lập đúng, bạn sẽ được yêu cầu nhập tài khoản / mật khẩu để đăng nhập vào máy tính. Kết nối RDP đã thành công.
IV. Thiết lập bảo mật Zero Trust
Theo cách thiết lập ở bước trên, bất kỳ ai cũng có thể tạo kết nối RDP vào máy tính của mình ở nhà nếu biết được tên miền liên kết rdp.thuanbui.me
. Để ngăn chặn truy cập trái phép, mình sẽ thiết lập thêm tính năng xác thực bằng cách tạo thêm Applications cho kết nối RDP.
1. Tạo Application
Truy cập vào mục Applications ở phần menu bên trái, bấm vào nút Add an application để tạo ứng dụng mới.
Chọn Self-hosted
- Application name: nhập vào tên ứng dụng
- Subdomain và domain: nhập vào thông tin bạn đã dùng dể thiết lập Public Hostname ở trên
- Các mục còn lại có thể để nguyên mặc định
- Bấm Next để tiếp tục
- Policy name: đặt tên bất kỳ
- Configure rules -> Selector: mình chọn Emails và nhập vào email.
- Bấm Next để tiếp tục
Với thiết lập này, mỗi khi truy cập vào tên miền, ứng dụng sẽ gửi mã xác thực về email được khai báo.
Bấm Add application để hoàn thành việc tạo ứng dụng.
2. Xác thực kết nối RDP
Quay trở lại máy tính đang chạy RDP client để thử nghiệm lại kết nối.
Mở Terminal và thực hiện kết nối
cloudflared access rdp --hostname rdp.thuanbui.me --url rdp://localhost:3389
Code language: JavaScript (javascript)
Mở tiếp Remmina và truy cập vào địa chỉ locahost:3389
Trình duyệt sẽ tự động mở ra trang Cloudflare Access và yêu cầu nhập email xác thực.
Sau khi nhập vào mã xác nhận trong email, website sẽ hỏi có đồng ý kết nối không. Chọn Approve.
Sau khi xác thực thành công (1), bên Terminal sẽ hiện ra thông báo Waiting for login (2). Còn bên Remmina giờ đã hiện ra thông báo nhập tài khoản / mật khẩu để đăng nhập vào máy tính.
Kết nối RDP bảo mật thông qua Cloudflare Tunnel đã được thực hiện thành công.
Bài viết xin hết. Chúc bạn thực hiện trơn tru!
[convertkit form=7087807]
Anh hướng dẫn em cách cài Nextcloud trên Portainer đi.
Em dùng bản Nextcloud này nhé: https://hub.docker.com/r/linuxserver/nextcloud. Vô phần Stack của Portainer để tạo.
ad cho mình hỏi là mình có chạy docker của cloudflare trên router openwrt rồi, cũng đã kết nối thành công về router, mình có thêm kết nối RDP trên tunnel rồi nhưng ko kết nối qua hostname đc, vậy mình có cần chạy cloudflare service trên máy cần RDP ko? cám ơn.
Máy cần RDP không cần cài Cloudflare gì hết bạn nhé. Chỉ cần 1 Cloudflare service trong mạng LAN và Cloudflare trên máy client để kết nối vào RDP là đủ.
Mình chạy lệnh .\cloudflared.exe access rdp –hostname rdp.domain.com –url rdp://localhost:3389
thì bị lỗi này ạ
ERR Error on Websocket listener error=”failed to start forwarding server: listen tcp 127.0.0.1:3389: bind: An attempt was made to access a socket in a way forbidden by its access permissions.”
bạn đang chay 2 lệnh cmd cùng lúc .\cloudflared.exe access rdp –hostname rdp.domain.com –url rdp://localhost:3389 .tắt bớt 1 cái.
có cách nào kết nối trên ios thay vì dùng rdp client trên macos không anh?
Trên iOS thì bạn dùng app Remote Desktop Mobile để kết nối.
dùng app Remote Desktop Mobile thì bình thường rồi nè anh, mà nếu dùng tunnel cloudflare thì chưa biết làm sao để mở tunnel này trên ios á
mình cũng đang gặp vấn đề tương tự, RD Client trên iOS thông qua LAN thì bình thường, kết nối qua Hostname của Cloudflared thì không được, báo lỗi x39 internal error