❤️ AZDIGI chính thức cập nhật hệ thống blog mới hoàn chỉnh. Tuy nhiên có thể một số bài viết bị sai lệch hình ảnh, hãy ấn nút Báo cáo bài viết ở cuối bài để AZDIGI cập nhật trong thời gian nhanh nhất. Chân thành cám ơn.

Bạn có máy tính ở nhà chạy Plex, Nextcloud, hay một con Raspberry Pi làm home server. Bạn muốn truy cập từ bên ngoài nhưng nhà mạng không cho mở port, modem nằm sau NAT, hoặc đơn giản là bạn không có IP tĩnh. Cloudflare Tunnel giải quyết đúng vấn đề này. Thay vì mở port cho bên ngoài kết nối vào, tunnel tạo một kết nối đi ra (outbound) từ máy bạn đến Cloudflare, rồi Cloudflare lo phần còn lại.

Cách này đặc biệt hữu ích cho máy cá nhân, homelab, NAS, máy ở công ty, hay bất kỳ thiết bị nào nằm sau NAT mà bạn không kiểm soát được router. VPS thì cũng dùng được, nhưng VPS vốn đã có IP public và mở port thoải mái rồi, nên tunnel ít cần thiết hơn.

Cloudflare Tunnel là gì?

Cloudflare Tunnel (tên cũ là Argo Tunnel) cho phép bạn kết nối máy tính với mạng lưới Cloudflare mà không cần mở port nào ra internet. Cách nó hoạt động:

  1. Bạn cài cloudflared trên máy.
  2. cloudflared tạo kết nối outbound (từ máy bạn ra ngoài) đến Cloudflare edge.
  3. Khi có request đến domain của bạn, Cloudflare chuyển traffic qua tunnel đó về máy bạn.
  4. Máy bạn xử lý request và trả response ngược lại qua tunnel.

Máy không cần lắng nghe trên port public nào cả. Toàn bộ kết nối đều là outbound, nên firewall có thể block hết inbound traffic mà mọi thứ vẫn chạy bình thường.

Tại sao nên dùng Cloudflare Tunnel?

Câu hỏi hay nhất là: “mở port rồi dùng Nginx reverse proxy cũng được mà, sao phải dùng tunnel?” Với VPS thì đúng, mở port không có gì khó. Nhưng với máy ở nhà hay homelab thì khác.

  • Nhà mạng chặn port hoặc NAT nhiều lớp. Đa số gói internet gia đình ở Việt Nam không cho bạn mở port 80/443. Có khi modem của nhà mạng nằm sau CGNAT, bạn không thể port forward dù muốn. Tunnel bỏ qua hết mấy rào cản này vì kết nối đi ra, không cần ai kết nối vào.
  • Không cần IP tĩnh, không cần public IP. Máy ở nhà chỉ cần có internet là đủ. Không cần xin IP tĩnh từ nhà mạng, không cần dùng DDNS.
  • Bảo mật hơn hẳn. Máy bạn không mở port nào ra internet. Không ai scan được, không ai brute force được. Máy như “tàng hình” trên internet.
  • SSL tự động. Cloudflare lo hết phần SSL certificate. Bạn không cần cài Let’s Encrypt hay renew cert thủ công.
  • Miễn phí. Cloudflare Tunnel hoàn toàn miễn phí, kể cả trên Free plan.

Dùng tunnel cho việc gì?

Mấy trường hợp phổ biến nhất:

  • Truy cập NAS ở nhà (Synology, QNAP) từ bên ngoài mà không cần QuickConnect hay mở port trên modem.
  • Chia sẻ app đang dev cho khách hàng hoặc team xem, thay vì deploy lên server chỉ để demo. Chạy localhost:3000 rồi tunnel ra là xong.
  • Homelab: expose Plex, Jellyfin, Home Assistant, Nextcloud, Grafana, hay bất kỳ service nào chạy trên máy ở nhà.
  • Máy ở công ty nằm sau firewall công ty mà bạn không kiểm soát được.
  • Raspberry Pi chạy web app, IoT dashboard, hay bất kỳ thứ gì có HTTP interface.

Cài đặt cloudflared

Bạn cần cài cloudflared lên máy muốn expose. Đây là daemon duy trì kết nối tunnel với Cloudflare. Tuỳ hệ điều hành, chọn cách cài phù hợp bên dưới.

Windows

Cách nhanh nhất là dùng winget (có sẵn trên Windows 10/11):

winget install --id Cloudflare.cloudflared

Hoặc tải trực tiếp file .exe:

Sau khi tải, bạn có thể chạy trực tiếp từ thư mục download hoặc thêm vào PATH để gọi được ở mọi nơi. Để cài như Windows service:

cloudflared.exe service install eyJhIjoixxxxxxxxx...

⚠️ cloudflared trên Windows không tự cập nhật. Bạn cần tải lại bản mới thủ công khi có phiên bản mới.

macOS

Dùng Homebrew:

brew install cloudflared

Hoặc tải file nén:

Linux

Ubuntu/Debian:

curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared.deb

RHEL/Rocky/AlmaLinux/CentOS:

sudo rpm -i https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-x86_64.rpm

Máy chạy ARM64 (Raspberry Pi, Oracle Cloud Free Tier) thì dùng bản cloudflared-linux-arm64.deb hoặc cloudflared-linux-aarch64.rpm tương ứng.

Docker

Nếu máy đã có Docker, bạn không cần cài gì thêm — chạy tunnel bằng container:

docker run cloudflare/cloudflared:latest tunnel --no-autoupdate run --token eyJhIjoixxxxxxxxx...

Cách này tiện cho NAS (Synology, QNAP) hoặc máy bạn không muốn cài thêm package.

Kiểm tra cài đặt

Sau khi cài xong, kiểm tra bằng:

cloudflared --version

Xem danh sách đầy đủ các bản tải tại trang downloads chính thức của Cloudflare.

Tạo Tunnel qua Dashboard

Có hai cách tạo tunnel: qua CLI (locally-managed) và qua Dashboard (remotely-managed). Mình khuyên dùng Dashboard vì dễ quản lý hơn, mọi cấu hình lưu trên Cloudflare, và bạn không cần giữ file config trên máy.

Bước 1: Đăng nhập vào Cloudflare Zero Trust Dashboard.

Bước 2: Vào Networks → Tunnels → Create a tunnel.

Danh sách Cloudflare Tunnels trên dashboard
Giao diện quản lý Tunnels trên Cloudflare Zero Trust Dashboard.

Bước 3: Chọn Cloudflared làm connector type, đặt tên cho tunnel (ví dụ: home-tunnel), rồi nhấn Save tunnel.

Tạo tunnel mới trên Cloudflare
Đặt tên và tạo tunnel mới.

Bước 4: Cloudflare sẽ hiển thị một install command. Copy lệnh này và chạy trên máy. Lệnh sẽ có dạng:

sudo cloudflared service install eyJhIjoixxxxxxxxxxxxxxxxx...

Lệnh này tự cài cloudflared như một systemd service và kết nối tunnel về Cloudflare. Chạy xong, bạn sẽ thấy trạng thái tunnel chuyển sang Connected trên Dashboard.

⚠️ Token trong install command chứa thông tin xác thực tunnel. Không chia sẻ token này với ai.

Thêm Public Hostname

Tunnel đã connected, giờ bạn cần thêm public hostname để route traffic từ domain/subdomain về service trên máy.

Trong phần cấu hình tunnel, chọn tab Public Hostname → Add a public hostname.

Cấu hình Public Hostname cho tunnel
Cấu hình Public Hostname để route traffic về service trên máy.

Điền các thông tin:

  • Subdomain: Phần subdomain bạn muốn dùng (ví dụ: nas, plex, hoặc để trống nếu dùng root domain).
  • Domain: Chọn domain đã thêm vào Cloudflare.
  • Type: Chọn HTTP hoặc HTTPS tùy service.
  • URL: Địa chỉ service trên máy, ví dụ localhost:3000 hoặc localhost:8080.
Thêm hostname cho tunnel
Điền thông tin hostname và service URL.

Nhấn Save hostname. Cloudflare sẽ tự tạo DNS record (CNAME) trỏ về tunnel. Sau vài giây, bạn có thể truy cập service qua domain đã cấu hình.

Ví dụ thực tế

Truy cập NAS Synology từ bên ngoài

Synology DSM mặc định chạy trên port 5000 (HTTP) hoặc 5001 (HTTPS). Cài cloudflared trên NAS (Synology hỗ trợ Docker, dùng container cloudflare/cloudflared), rồi trỏ hostname nas.example.comhttp://localhost:5000. Xong, truy cập từ bất kỳ đâu mà không cần QuickConnect.

Chia sẻ app đang dev cho khách xem

Đang code một app React chạy trên localhost:3000? Thay vì deploy lên Vercel chỉ để demo, bạn tạo tunnel trỏ demo.example.comhttp://localhost:3000. Khách nhấn link là xem được luôn, còn bạn vẫn code trên máy bình thường.

Home Assistant / Plex / Jellyfin

Mấy service homelab này thường chạy trên Raspberry Pi hoặc mini PC ở nhà. Tunnel cho phép bạn truy cập Home Assistant (localhost:8123), Plex (localhost:32400), hay Jellyfin (localhost:8096) từ bên ngoài mà modem nhà mạng không cần đụng gì.

Chạy cloudflared như systemd service

Nếu bạn tạo tunnel qua Dashboard và chạy install command ở trên, cloudflared đã tự được cài như systemd service. Kiểm tra trạng thái:

sudo systemctl status cloudflared

Service sẽ tự start khi máy khởi động lại. Một số lệnh quản lý:

# Restart service
sudo systemctl restart cloudflared

# Xem logs sudo journalctl -u cloudflared -f

# Dừng service sudo systemctl stop cloudflared

Nếu bạn tạo tunnel bằng CLI (locally-managed), bạn cần chạy cloudflared service install thủ công để đăng ký systemd service.

Nhiều hostname trên 1 tunnel

Một tunnel phục vụ được nhiều hostname cùng lúc. Không cần tạo tunnel riêng cho mỗi service. Ví dụ, trên cùng một máy bạn có thể cấu hình:

  • nas.example.comhttp://localhost:5000 (Synology DSM)
  • plex.example.comhttp://localhost:32400 (Plex)
  • ha.example.comhttp://localhost:8123 (Home Assistant)
  • cloud.example.comhttp://localhost:8080 (Nextcloud)

Tất cả đi qua cùng một tunnel, cùng một kết nối cloudflared. Thêm hostname mới thì vào Dashboard → chọn tunnel → Add a public hostname.

Access control với Zero Trust policies

Mặc định, ai có link cũng truy cập được service qua tunnel. Nếu bạn muốn giới hạn ai được vào, kết hợp thêm Cloudflare Access.

Ví dụ, bạn muốn chỉ mình bạn (hoặc vài người trong gia đình) truy cập được NAS:

  1. Vào Zero Trust Dashboard → Access → Applications → Add an application.
  2. Chọn Self-hosted, nhập domain (ví dụ: nas.example.com).
  3. Tạo policy: cho phép email cụ thể, ví dụ ten.ban@gmail.com.
  4. Khi truy cập nas.example.com, Cloudflare sẽ yêu cầu xác thực qua email OTP hoặc Google/GitHub trước khi cho vào.

Rất hữu ích cho mấy thứ không nên public: admin panel, monitoring dashboard, database GUI, hay NAS cá nhân.

So sánh: Tunnel vs mở port truyền thống

Tiêu chíMở port + Reverse ProxyCloudflare Tunnel
Port mở ra internet80, 443 (tối thiểu)Không cần mở port nào
Public IPBắt buộcKhông cần
SSL certificateTự cài (Let’s Encrypt)Cloudflare lo
Firewall configPhải allow inboundChỉ cần outbound
DDoS protectionTự lo hoặc thêm CDNCó sẵn qua Cloudflare
Access controlTự implementZero Trust policies
Setup phức tạpTrung bìnhĐơn giản
NAT/Firewall bypassKhông
Phụ thuộc bên thứ 3KhôngCó (Cloudflare)

Tunnel phù hợp nhất khi: máy ở nhà không có public IP, nằm sau NAT, nhà mạng chặn port, hoặc bạn muốn expose service mà không đụng đến modem/router.

Mở port vẫn hợp lý khi: bạn cần full control, không muốn phụ thuộc Cloudflare, hoặc chạy protocol mà tunnel không hỗ trợ tốt (game server UDP, SSH trực tiếp).

Troubleshooting

Một số lỗi hay gặp:

Tunnel không kết nối (status: Inactive)

Kiểm tra service đang chạy chưa:

sudo systemctl status cloudflared

Nếu service lỗi, xem log chi tiết:

sudo journalctl -u cloudflared --no-pager -n 50

Nguyên nhân phổ biến:

  • Token sai hoặc hết hạn: Xóa tunnel cũ, tạo mới, chạy lại install command.
  • Firewall block outbound: cloudflared cần kết nối đến port 7844 (QUIC) hoặc 443 (HTTP/2) của Cloudflare. Đảm bảo outbound traffic không bị chặn.
  • DNS resolve lỗi: Kiểm tra máy có resolve được DNS không bằng nslookup cloudflare.com.

Hostname không truy cập được (502/504 error)

Tunnel connected nhưng truy cập domain báo lỗi 502 hoặc 504? Vấn đề thường nằm ở phía service trên máy:

  • Service chưa chạy: Kiểm tra service có đang listen trên port đã cấu hình không. Ví dụ: curl http://localhost:3000 trên máy.
  • Sai port hoặc protocol: Nếu service dùng HTTPS nội bộ, bạn cần chọn Type là HTTPS trong hostname config, và có thể cần bật No TLS Verify nếu dùng self-signed cert.
  • Service chỉ bind 127.0.0.1: Đây không phải vấn đề vì cloudflared chạy trên cùng máy. Nhưng nếu service bind trên IP khác, hãy điều chỉnh URL cho đúng.

DNS record conflict

Nếu subdomain đã có DNS record (A hoặc CNAME) trước khi bạn thêm hostname vào tunnel, có thể bị conflict. Vào Cloudflare DNS dashboard, xóa record cũ, rồi thêm lại hostname trong tunnel config. Cloudflare sẽ tự tạo CNAME record mới trỏ về tunnel.

Tổng kết

Cloudflare Tunnel miễn phí và setup nhanh. Chỗ nó tỏa sáng nhất là máy cá nhân, homelab, NAS, Raspberry Pi, hay bất kỳ máy nào nằm sau NAT mà bạn muốn truy cập từ bên ngoài. VPS thì dùng cũng được, nhưng VPS vốn đã có IP public rồi nên lợi ích ít hơn.

Nếu bạn đang chạy homelab hay có máy ở nhà muốn truy cập từ xa, tunnel là cách đơn giản nhất mà mình biết. Cài cloudflared, tạo tunnel trên Dashboard, thêm hostname, xong.

Chia sẻ:
Bài viết đã được kiểm duyệt bởi AZDIGI Team

Về tác giả

Trần Thắng

Trần Thắng

Chuyên gia tại AZDIGI với nhiều năm kinh nghiệm trong lĩnh vực web hosting và quản trị hệ thống.

Hơn 10 năm phục vụ 80.000+ khách hàng

Bắt đầu dự án web của bạn với AZDIGI