Giới thiệu
Như các bạn biết là muốn deploy một cái web application thì 90% đều cần có IP tĩnh. Tuy nhiên vụ này cũng đôi khi làm mình rắc rối vì khách hàng – người trả tiền cho chúng ta chưa đồng ý với cái UI hiện tại, họ muốn xem và feedback trước khi go live. Mà muốn làm thế thì cần tốn tiền thuê server, hoặc dịch vụ hosting nào đấy và mấy cái đó tốn tiền.
Có một cách khá nay do một anh đồng nghiệp giới thiệu đó chính là dùng Cloudflare tunnel để publish cái web app mình ra bên ngoài. Cơ chế làm việc của cái này được mô tả trong hình này.
Cloudflare Tunnel là gì?
Cloudflare Tunnel là một phần mềm tạo ra đường truyền mạng bảo mật, kết nối hệ thống máy chủ của Cloudflare với máy chủ trong mạng nội bộ. Mọi kết nối từ bên ngoài đều phải thông qua sự kiểm duyệt của Cloudflare trước khi được chuyển hướng đến mạng nội bộ. Nhờ vậy, bạn có thể ẩn địa chỉ IP của mạng nhà, ngăn chặn tấn công mạng từ bên ngoài.
Việc cần làm là chúng ta cần setup một cái service cloudflared trên con laptop của chúng ta và Cloudflare sẽ lo phần còn lại. Phần còn lại chính là Cloudflare sẽ tự tạo DNS record (tất nhiên, domain đó phải được quản lý bởi Cloudflare). Traffic khi đến network Cloudflare thì nó sẽ được forward tới cái tunnel được tạo ra bởi cái service mà chúng ta cài đặt và network của nó.
Ưu điểm:
- Không cần IP tĩnh mà vẫn publish được web app.
- Chặn truy cập trực tiếp vào mạng ở nhà, không sợ bị lộ địa chỉ IP.
- Tận dụng hệ thống Firewall và chống DDoS của Tunnel để bảo vệ hệ thống mạng nội bộ.
- Không cần mở port, không cần có IP tĩnh, cũng không cần phải thiết lập Dynamic DNS.
- Bảo mật, an toàn vì bạn không phải publish port nào ra ngoài cả.
- Kết hợp thêm tính năng Zero Trust của Cloudflare để xác thực tất cả truy cập vào mạng nội bộ, tối ưu bảo mật.
Nhược điểm:
- Phụ thuộc vào hệ thống của Cloudflare. Nếu Cloudflare gặp sự cố thì nhiều khả năng sẽ không thể truy cập vào mạng nội bộ.
- Sẽ tốn phí nếu muốn làm Load balancing.
- Phải tin tưởng Cloudflare vì mọi kết nối đều đi phải đi qua Cloudflare.
- Setup không dễ, phải setup kiểu service trên systemd hay window services
Hướng dẫn thiết lập Cloudflare Tunnel
Chuẩn bị
- 1 domain thuộc quản lý của bạn
- 1 server (máy tính cá nhân, VPS hoặc hosting có quyền sở hữu)
- 1 tài khoản cloudflare
Yêu cầu: Bạn cần phải chuyển tên miền về để Cloudflare quản lý thì mới sử dụng dịch vụ Cloudflare Tunnel.
1. Thiết lập Cloudflare Zero Trust
Tất cả các dịch vụ liên quan đến Cloudflare Tunnel được tập trung về 1 trang quản lý riêng gọi là Cloudflare Zero Trust. Ở lần đầu tiên truy cập, Cloudflare sẽ yêu cầu thiết lập các thông số cơ bản các bạn làm theo hướng dẫn.
Dịch vụ Zero Trust của Cloudflare có nhiều mức giá khác nhau. Với nhu cầu sử dụng cá nhân, gói Free miễn phí là đủ dùng. Trong Select Plan chọn mục Free ($0/user/month)
2. Tạo Tunnel
Sau khi thiết lập thành công, bạn truy cập vào Tunnels (nằm trong mục Networks) ở menu bên trái. Bấm vào Create a tunnel để tạo kết nối.
Đặt tên cho kết nối, và bấm Save Tunnel để tiếp tục.
2. Cài đặt cloudflared
Ở bước tiếp theo, bạn sẽ cần cài đặt công cụ cloudflared lên máy chủ nằm trong mạng nội bộ. Mình chọn cách cài đặt bằng Docker cho nhanh gọn.
Sau khi chạy trên máy chủ xong, quay lại trình duyệt, bạn sẽ thấy mục Connectors hiện ra thông báo đã kết nối thành công. Mục Origin IP sẽ hiện ra địa chỉ IP của mạng ở nhà. Bấm Next để tiếp tục.
4. Điều hướng dịch vụ mạng
Ở bước route tunnel, bạn sẽ thiết lập traffic để điều hướng.
- Subdomain: chọn tên miền phụ (cloudflare sẽ tự tạo bản ghi điều hướng)
- Domain: chọn tên miền.
- Path: không bắt buộc.
- Service: chọn loại kết nối (HTTP, HTTPS, RDP,…) và địa chỉ IP máy của bạn cùng port tương ứng của dịch vụ mạng cần điều hướng.
Ví dụ máy của bạn chạy Live Server của Visual Studio Code thì sẽ port 5500, Apache sẽ là 80 hoặc 8080, npm sẽ là 7200 hoặc 8000, tuỳ cấu hình.
Bấm Save hostname, mục Tunnels giờ đã hiện ra kết nối với trạng thái ACTIVE (đang hoạt động).
5. Truy cập vào dịch vụ mạng
Mở trình duyệt web truy cập vào địa chỉ http://remote.crfnetwork.com/
, mình sẽ được chuyển hướng về dịch vụ http://localhost:8080
đang được cài đặt ở máy mình.
Cloudflare Tunnel đã hoạt động ngon lành!
Nếu vẫn chưa được thì bạn đợi tầm 15-30p để Cloudflare định tuyến và vào lại. Lúc đầu mình cũng chưa được nhưng sau đó thì đã thành công.
Để có thể truy cập bằng https, các bạn vào phần SSL/TTS của trang quản lý tên miền, chọn Full (strict).