0%
Skip to main content
Quay lại Blog

Cloudflare Tunnel — Remote Desktop an toàn không cần mở port 3389

· One min read
Vu Nguyen
Java / Backend Engineer

Cần điều khiển PC Windows ở nhà từ xa mà không muốn expose RDP ra Internet? Cloudflare Tunnel + Access cho phép client chỉ cần trình duyệt và cloudflared — không bắt buộc VPN cài trên máy công ty.

Vì sao không mở port 3389?

Trước đây khi cần vào máy Windows ở nhà, tôi hay dùng WireGuard để vào LAN, rồi RDP qua IP nội bộ. Ưu điểm: không phải publish cổng 3389 ra Internet, ít bị quét brute-force. Nhược điểm: máy công ty thường không cho cài client VPN — gần như chặn hẳn cách làm này.

Cloudflare Tunnel (cloudflared chạy trong LAN) tạo kết nối outbound tới Cloudflare. Bạn gắn public hostname trỏ vào LAN_IP:3389 với loại RDP. Máy ở ngoài không “đụng” thẳng router nhà; Cloudflare đứng giữa, và bạn có thể thêm Cloudflare Access (Zero Trust) để chỉ email được phép mới mở được tunnel.


Yêu cầu chuẩn bị

  • PC Windows trong LAN: bật Remote Desktop, user có quyền đăng nhập từ xa (hoặc nhóm Remote Desktop Users).
  • Tài khoản Cloudflare với domain đã add vào zone.
  • Tunnel đã tạo và cloudflared đang chạy trên một host trong LAN (máy Windows, Linux, hoặc container). Nếu chưa có tunnel, làm theo Create a tunnel (dashboard) hoặc Install cloudflared.

Bước 1 — Public hostname kiểu RDP

  1. Vào Zero TrustNetworksTunnels → chọn tunnel đang dùng.
  2. Tab Public HostnameAdd a public hostname.
  3. Điền:
    • Subdomain + Domain (ví dụ rdp + example.comrdp.example.com).
    • Service type: RDP (dashboard map đúng giao thức cho client cloudflared access rdp).
    • URL: IP LAN của PC cần remote và port — thường 192.168.x.x:3389.
  4. Save hostname.

Ghi lại hostname đầy đủ; client sẽ dùng nó với lệnh cloudflared access rdp --hostname ....


Bước 2 — Kết nối từ máy bên ngoài LAN

Ý tưởng: cloudflared trên máy client xác thực qua Cloudflare, mở proxy local; RDP client kết nối vào localhost thay vì IP nhà.

Cài cloudflared trên máy client

  • macOS / Windows / Linux: Install cloudflared.
  • Arch / EndeavourOS (ví dụ): yay -S cloudflared hoặc package tương đương distro của bạn.

RDP client

  • Windows: Remote Desktop Connection (có sẵn).
  • Linux: Remmina, FreeRDP (freerdp), v.v.

Thiết lập proxy RDP

Trên máy client, chạy (giữ terminal mở):

cloudflared-access-rdp.sh
cloudflared access rdp --hostname rdp.example.com --url rdp://localhost:3389

Thay rdp.example.com bằng hostname bạn đã tạo.

Mở RDP client, kết nối tới localhost:3389 (không dùng IP LAN hay hostname public trực tiếp trong Remmina/mstsc). Nếu tunnel và service đúng, bạn sẽ thấy màn hình đăng nhập Windows.

tip

Lệnh trên tạo local listener. Mỗi phiên remote cần terminal chạy cloudflared access rdp (hoặc script/service riêng nếu bạn tự đóng gói).


Bước 3 — Zero Trust: không để “ai biết URL cũng vào”

Chỉ public hostname chưa đủ: người lạ có thể thử kết nối nếu đoán được subdomain. Thêm Application trong Access:

  1. Zero TrustAccessApplicationsAdd an application.
  2. Chọn Self-hosted.
  3. Application name: tên gợi nhớ (ví dụ Home RDP).
  4. Subdomain + Domain: cùng hostname đã gắn tunnel (ví dụ rdp.example.com).
  5. Next → tạo Policy:
    • Policy name: tùy chọn.
    • Action: Allow.
    • Include: ví dụ Emails → danh sách email được phép.
  6. Hoàn tất Add application.

Access có thể dùng one-time PIN qua email (hoặc IdP khác nếu bạn cấu hình). Ai không pass policy sẽ không mở được bước proxy cloudflared.

Thử lại sau khi bật Access

  1. Chạy lại:
cloudflared-access-rdp-with-access.sh
cloudflared access rdp --hostname rdp.example.com --url rdp://localhost:3389
  1. Trình duyệt mở trang Cloudflare Access → nhập email → xác nhận OTP → Approve nếu được hỏi.
  2. Terminal có thể hiện trạng thái chờ đăng nhập; RDP client tới localhost:3389 hiện prompt user/password Windows.

Đó là luồng tôi dùng: Access (ai được vào) + RDP credentials (ai được vào session Windows).


So sánh nhanh với VPN LAN

WireGuard vào LANCloudflare Tunnel + Access
Cài phần mềm trên máy công tyThường bị chặnChỉ cần cloudflared + RDP (đôi khi dễ hơn VPN)
Mở port trên routerKhông (nếu chỉ outbound VPN)Không — tunnel outbound
Phụ thuộc CloudflareKhôngCó — cần hiểu trust model
Brute-force 3389 trên IP công cộngKhông nếu không NAT portKhông expose 3389

Lưu ý bảo mật và vận hành

  • MFA Windows và password mạnh vẫn bắt buộc; Access không thay thế OS login.
  • Giới hạn policy Access (email, group, country…) thay vì “Allow everyone”.
  • Cập nhật cloudflared trên host tunnel và máy client theo release notes.
  • Nếu PC đổi IP LAN, sửa URL trong public hostname cho khớp DHCP/reservation.

Kết

Cloudflare Tunnel cho RDP giúp tôi remote Windows ở nhà mà không phải forward 3389 ra Internet, và thêm Access để hostname không trở thành “cửa hở”. Workflow thực tế: tunnel + hostname RDP trên LAN → cloudflared access rdp trên client → RDP vào localhost:3389.

Đọc thêm: Cloudflare Tunnel · Access applications · RDP with cloudflared