Cloudflare Tunnel trên QNAP: vào QTS từ xa, không mở port
Cloudflare Tunnel chạy bằng một chương trình nhỏ tên cloudflared, nằm trong container ngay trên NAS. Nó không ngồi mở cửa chờ khách. Nó chủ động gọi ra Cloudflare rồi giữ máy. Kết quả: ở đâu gõ nas.te
Xem video tóm tắt: Cloudflare Tunnel trên QNAP: vào QTS từ xa, không mở port
Cloudflare Tunnel là gì, và vì sao dân QNAP nên biết
Cloudflare Tunnel chạy bằng một chương trình nhỏ tên cloudflared, nằm trong container ngay trên NAS. Nó không ngồi mở cửa chờ khách. Nó chủ động gọi ra Cloudflare rồi giữ máy. Kết quả: ở đâu gõ nas.tenmien.com trên trình duyệt cũng vào được giao diện QTS, còn router nhà không mở một port nào.
Nó vẫn chạy khi nhà mạng đặt bạn sau CGNAT. CGNAT nôm na là cả trăm hộ dùng chung một địa chỉ IPv4 công khai. Lúc đó mở port trên router nhà giống dán số phòng lên cửa, trong khi bảo vệ dưới sảnh không cho ai bước vào tòa nhà. Biển thì đẹp, khách vẫn không lên tới.
Làm được gì
Không mở port, không lộ IP nhà. Bot quét Internet đi ngang qua mà không thấy NAS đâu. Với QNAP thì đây không phải lo xa: Qlocker (2021) và DeadBolt (2022) đều là ransomware nhắm thẳng vào NAS QNAP mở ra Internet.
Không cần IP công khai. Kết nối đi từ trong ra, nên CGNAT không cản được.
Chặn người lạ từ trước form đăng nhập. Cloudflare Access bắt nhập mã OTP gửi qua email rồi mới cho thấy trang đăng nhập QTS. Kẻ dò mật khẩu còn chẳng thấy ô mật khẩu ở đâu mà dò.
Máy khách chỉ cần trình duyệt. Máy công ty hay laptop mượn đều dùng được, không phải cài gì.
Giới hạn thì nói luôn cho sòng phẳng. Gói Free chặn mỗi request upload lớn hơn 100 MB. Điều khoản của Cloudflare không cho phát video qua Tunnel trên gói Free/Pro/Business. Tunnel sinh ra để quản trị và xem, không phải để chép file lớn hay chiếu phim.
Ai cần cái này
Nhà dùng mạng sau CGNAT, cần vào QTS từ công ty để xem dung lượng, đọc log, khởi động lại app đang treo. Mở trình duyệt, nhập email, nhận mã. Hết.
Văn phòng 3–5 người cần lấy tài liệu trên File Station. Access chỉ cho đúng danh sách email được vào. Có người mới thì thêm email, có người nghỉ thì xoá, không ai phải đụng vào router.
Người đã cài Jellyfin/Plex và nghĩ "có tunnel rồi thì xem phim luôn". Ý nghĩ rất tự nhiên, và cũng là đường tắt nhanh nhất để tài khoản Cloudflare bị giới hạn. Muốn xem phim từ xa thì dùng Tailscale, lý do có ở phần dưới.
So với lựa chọn quen thuộc: myQNAPcloud Link không cần tên miền nhưng đi qua relay của QNAP, nên chậm vào giờ cao điểm (chính QNAP ghi vậy). Tailscale nhanh, chạy mọi giao thức, nhưng máy nào muốn vào cũng phải cài app. Cloudflare Tunnel đứng giữa: máy khách chỉ cần trình duyệt, đổi lại chỉ hợp với dịch vụ web. Muốn xem toàn cảnh các cách vào NAS từ xa thì đọc bài tổng hợp truy cập NAS từ xa.
Vì sao chạy bằng token qua Container Station
Tunnel quản lý từ xa bằng token: không có config.yml, không có cert.pem. Toàn bộ route nằm trên dashboard Cloudflare, muốn sửa thì khỏi đụng vào NAS.
Applications thay vì Create Container: dán một đoạn YAML là xong, khỏi dò từng tab Advanced Settings. Cài lại thì dán lại đúng đoạn đó.
Trỏ vào IP LAN của NAS, không trỏ vào localhost: container để mạng mặc định vẫn tới được NAS, không phải bật chế độ mạng host.
Không cài QPKG bên thứ ba: App Center không có gói cloudflared chính thức. Image cloudflare/cloudflared do chính Cloudflare phát hành là nguồn sạch nhất.
Chuẩn bị
Tên miền dùng nameserver của Cloudflare. Gói Free bắt buộc chuyển toàn bộ nameserver sang Cloudflare. Chưa có tên miền thì một tên .com mua qua Cloudflare Registrar khoảng 10 USD/năm, gia hạn cùng giá — giá này nên kiểm lại lúc mua. Tunnel và Access ở gói Free thì không mất đồng nào.
QTS hoặc QuTS hero 5.1.0 trở lên, có Container Station 3. Bản ổn định mới nhất hiện là QTS 5.2.11.3661 build 20261023 và QuTS hero h6.0.2.3656 build 20261023. Nhánh h5.2 có bản h5.2.11.3661. QTS 6.1 mới ở Public Beta và QNAP xác nhận chưa có QTS 6 bản ổn định. Máy đang chứa dữ liệu thật thì cứ ở 5.2.11.
Cập nhật firmware trước. Bản vá tháng 10/2026 sửa lỗi PHP2Shell (CVE-2026-109618/109619). Sắp đưa NAS ra Internet thì vá lỗ trước đã.
IP LAN cố định cho NAS. Đặt IP tĩnh hoặc giữ chỗ DHCP trên router. Route trỏ thẳng vào IP này; IP mà đổi thì tunnel trỏ vào khoảng không.
Biết cổng web của NAS. Mặc định là 8080 cho HTTP và 443 cho HTTPS. Ai từng đổi thì xem lại ở Control Panel → System → General Settings → System Administration và dùng cổng của mình.
Chỉ muốn thử cho biết thì có quick tunnel (trycloudflare), không cần tên miền. Đổi lại, tên miền là ngẫu nhiên và đổi mỗi lần chạy. Nó chỉ chịu tối đa 200 request đồng thời (vượt là lỗi 429), không hỗ trợ SSE, không cam kết uptime. Vọc một buổi thì ổn. Giao việc thật cho nó thì quên đi.
Bước 1: Dựng Cloudflare Access trước
Nghe hơi ngược: chưa có tunnel đã lo lắp khoá. Nhưng tài liệu Cloudflare khuyên đúng thứ tự này. Publish route trước thì hostname mở toang cho cả Internet trong lúc bạn còn loay hoay cấu hình Access. Mà bot thì không ngủ.
Vào Zero Trust → Integrations → Identity providers → Add new identity provider → One-time PIN. Cloudflare không còn bật sẵn mục này, bạn phải tự thêm.
Vào Zero Trust → Access controls → Applications → Create new application → Self-hosted and private. Bấm Add public hostname, điền nas và tên miền của bạn.
Tạo policy Allow với quy tắc Emails, ghi đúng từng email được vào.
Đặt Session Duration, ví dụ 24 giờ, để khỏi nhập mã liên tục.
Mọi ứng dụng Access mặc định chặn tất cả, chỉ ai khớp policy Allow mới qua. Gói Zero Trust Free cho tối đa 50 người, thừa sức cho gia đình hay văn phòng nhỏ. Đừng dùng Bypass cho trang đăng nhập. Bypass là tháo khoá ra chứ không phải lắp khoá vào.
Bước 2: Tạo tunnel, lấy token
Vào Networking → Tunnels → Create a tunnel, đặt một cái tên dễ nhận như qnap-nha. Cloudflare sẽ hiện lệnh cài, trong đó có một chuỗi dài bắt đầu bằng eyJ…. Đó là token. Chép riêng nó ra.
Đa số hướng dẫn trên mạng còn ghi đường cũ "Zero Trust → Networks → Tunnels → Public Hostname". Tài liệu Cloudflare cập nhật 06/2026 đã đổi sang menu như trên. Cloudflare đổi giao diện khá thường, nên tên nút bạn thấy có thể lệch đôi chút.
Token là chìa khoá: ai cầm nó cũng chạy được connector thay bạn. Đừng đăng ảnh chụp màn hình có token lên group hỏi bài. Lỡ lộ rồi thì đổi token hoặc tạo tunnel mới.
Bước 3: Chạy cloudflared trong Container Station
Mở Container Station → Applications → Create. Tên ứng dụng dài 1–32 ký tự, chỉ gồm a–z, 0–9, - và _ — cứ đặt cloudflared cho lành. Dán đoạn YAML dưới đây rồi thay token của bạn vào:
Bấm Validate để Container Station kiểm cú pháp, rồi bấm Create.
restart: unless-stopped: NAS khởi động lại hay container lỡ chết thì nó tự chạy lại. Thiếu dòng này thì sau lần cập nhật firmware đầu tiên tunnel nằm im, còn bạn ngồi ở công ty đoán mò.
--no-autoupdate: tắt cơ chế tự cập nhật của cloudflared. Trong container, muốn lên bản mới thì kéo image mới.
TUNNEL_TOKEN: tham số chính thức của cloudflared, không phải mẹo riêng của ai.
Image lấy thẳng từ cloudflare/cloudflared. Có hướng dẫn QNAP trên mạng dùng registry mirror lạ kiểu docker.996.ninja/... — đừng theo. Container này giữ đường vào NAS của bạn.
Xong thì quay lại dashboard Cloudflare, đợi tunnel báo Healthy.
Bước 4: Trỏ hostname vào QTS
Trong tunnel vừa tạo, mở tab Routes → Add route → Published application:
Subdomain điền nas, Domain là tên miền của bạn. Hostname này phải khớp với hostname đã khai ở Access.
Service URL: https://192.168.x.x:443, thay bằng IP LAN thật của NAS.
Vào Additional application settings → TLS và tắt kiểm chứng chỉ TLS (noTLSVerify). Dashboard có mục này từ 18/08/2026.
Vì sao phải tắt kiểm chứng chỉ? QTS mặc định dùng chứng chỉ tự ký, cloudflared không tin loại này nên từ chối kết nối. Tắt kiểm chỉ ảnh hưởng chặng từ cloudflared tới NAS, mà chặng này nằm gọn trong chính con NAS nên chấp nhận được. Chặng từ trình duyệt tới Cloudflare vẫn là HTTPS đầy đủ.
Còn vì sao không dùng localhost? Container chạy mạng bridge, nên localhost bên trong nó là chính cái container chứ không phải NAS.
Kiểm tra
Tắt Wi-Fi trên điện thoại, dùng 4G cho chắc là mình đang ở ngoài mạng nhà. Rồi mở https://nas.tenmien.com:
Màn hình Cloudflare hỏi email. Nhập một email có trong policy.
Nhận mã và nhập trong vòng 10 phút. Quá 10 phút là mã hết hạn.
Form đăng nhập QTS hiện ra. Đăng nhập như bình thường.
Thử thêm một email không có trong danh sách. Không nhận được mã mới là đúng: Cloudflare im lặng, không gửi cho email không khớp policy. Nhìn thì giống lỗi, thực ra Access đang làm đúng việc của nó.
Thứ gì đi qua tunnel được, thứ gì không
Route kiểu Published application chỉ chuyển HTTP(S). Thứ gì không phải web sẽ kẹt. Thứ gì là web nhưng không qua được màn OTP cũng kẹt.
Dịch vụ QNAP
Cổng
Qua tunnel web?
Web QTS/QuTS hero
443, 8080
Được
File Station: duyệt, tải về
Như web QTS
Được
File Station: upload trên 100 MB
Như web QTS
Chưa chắc
QuMagie web: xem ảnh
Như web QTS
Nhiều khả năng được
App Qfile, QuMagie
—
Khó
Qsync Client
443
Chưa xác nhận
HBS 3 (RTRR, Rsync)
8899, 38898, 38899, 873
Dự kiến không
SMB
445, 139
Không
Plex, Jellyfin, camera
—
Rủi ro điều khoản
Upload qua File Station: gói Free chặn mỗi request trên 100 MB. API của File Station có upload chia nhỏ (chunked_upload), nhưng chưa có xác nhận là giao diện web có chia nhỏ khi upload hay không. Trước khi hứa với ai, thử upload một file 50 MB rồi một file 150 MB. Gặp lỗi 413 là có câu trả lời.
App trên điện thoại và Qsync: người dùng trên r/qnap báo Qfile chỉ cho chọn Local, myQNAPcloud, DDNS hoặc WAN, không nhận tên miền riêng. Mà kể cả app có nhận thì nó cũng không có trình duyệt để qua màn OTP. Qsync Client dùng cổng web nên về lý thuyết là HTTPS. Tuy vậy chưa có nguồn xác nhận nó chạy được qua tunnel, và nó vẫn vướng Access lẫn trần 100 MB mỗi file.
HBS 3, Rsync, SMB: đều không phải HTTP nên không đi qua hostname web được. Phần này để Tailscale hoặc WireGuard của QVPN lo.
Plex, Jellyfin, camera, kể cả bấm phát video trong QuMagie: điều khoản riêng theo dịch vụ của Cloudflare (cập nhật 28/09/2026) cho họ quyền "disable or limit your access to or use of the CDN if you use or are suspected of using the CDN without such Paid Services to serve video or a disproportionate percentage of pictures, audio files, or other large files". Trang "Delivering Videos with Cloudflare" nói thẳng về Tunnel: "On Free, Pro, and Business plans, this traffic is subject to the terms described on this page." Tức là phát video qua tunnel công khai có thể bị khoá hoặc giới hạn. Route mạng riêng thì không bị: "The restriction does not apply to private network routes."
Lỗi hay gặp
Tunnel báo Inactive hoặc Down
Hai nguyên nhân thường gặp. Một: token chép thiếu ký tự — chuỗi dài thế, bôi chuột hụt một chữ là chuyện thường. Hai: container đã dừng. Mở log của container trong Container Station là biết ngay, tiện thể kiểm tra YAML đã có dòng restart: unless-stopped chưa.
502 Bad Gateway
Lỗi này nghĩa là Cloudflare tới được cloudflared, nhưng cloudflared không tới được QTS. Ba khả năng:
Service URL ghi localhost trong khi container chạy mạng bridge. Lúc này cloudflared đang gõ cửa chính nó.
Sai cổng, hay gặp nhất là cổng 5001 chép từ hướng dẫn Synology. Trên QNAP, 5000/5001 là cổng WebDAV. Dùng 443.
Dùng https mà chưa tắt kiểm chứng chỉ. Khi đó log container báo lỗi x509.
Chép hướng dẫn Synology sang QNAP giống cầm chìa khoá nhà hàng xóm về mở cửa nhà mình. Cùng là chìa, khác ổ.
Too many redirects
Có thể gặp khi trỏ http://IP:8080 trong lúc QTS bật Force secure connection (HTTPS) only. QTS đẩy sang HTTPS, Cloudflare lại gọi HTTP, cứ thế quay vòng. Sửa bằng cách dùng https://IP:443 và tắt kiểm chứng chỉ như ở Bước 4.
413 Request Entity Too Large
Bạn đã đụng trần upload của Cloudflare. Trần mỗi request là 100 MB với gói Free và Pro, 200 MB với Business, tới 5 GB với Enterprise. Gói Free không có công tắc nào để nới. File lớn thì chép trong LAN hoặc qua Tailscale.
Không nhận được mã OTP
Chưa thêm One-time PIN ở mục Identity providers.
Email không khớp policy nên Cloudflare im lặng không gửi. Soát lại lỗi gõ trong danh sách email.
Mã đã quá 10 phút.
Bộ quét email của công ty đã "dùng hộ" mã trước bạn, nên Cloudflare báo mã đã được dùng. Đổi sang email khác hoặc nhờ IT cho qua.
Qfile, Qsync, QuMagie không đăng nhập được
Không phải lỗi cấu hình. Access chặn mọi client không có trình duyệt. Cho các app này đi qua myQNAPcloud Link hoặc Tailscale, còn tunnel để dành cho trình duyệt.
Có thể tự khoá chính mình
Phần này là suy luận, chưa có nguồn xác nhận, nên bạn tự kiểm trên máy mình. Qua tunnel, QTS thấy mọi lượt đăng nhập đều đến từ IP nội bộ của container. Nếu bật tính năng chặn IP sau nhiều lần đăng nhập sai, chỉ cần một người gõ sai vài lần là QTS có thể chặn luôn IP đó — tức là chặn cả tunnel. Lúc nào cũng nên giữ một đường vào dự phòng như LAN hoặc Tailscale.
Recreate application trong Container Station
Recreate xoá mọi dữ liệu không nằm trong volume. cloudflared không lưu gì quan trọng nên không sao, miễn là token đã được cất trong trình quản lý mật khẩu chứ không chỉ nằm mỗi trong Container Station.
Tùy chọn nâng cao
Ghim phiên bản: muốn tự quyết lúc nào lên bản thì thay :latest bằng cloudflare/cloudflared:2026.10.7 (phát hành 30/10/2026).
Đưa token ra khỏi biến môi trường: từ bản 2025.4.0, cloudflared có tham số --token-file để đọc token từ file.
Giữ kiểm chứng chỉ TLS: cài chứng chỉ Let's Encrypt trong QTS rồi khai Origin Server Name trên route, hoặc nạp CA Pool. Làm vậy thì không phải tắt kiểm chứng chỉ.
Cho script hoặc API vào: dùng policy loại Service Auth, script gửi kèm header CF-Access-Client-Id và CF-Access-Client-Secret. Qfile và Qsync không gửi được các header này, nên cách này không cứu được app.
SMB và giao thức không phải web: có thể dùng route mạng riêng (Tunnel CIDR) kèm Cloudflare One Client (tên mới của WARP) trên máy khách, hoặc dùng cloudflared access tcp. Làm được, nhưng chính Cloudflare ghi chú SMB rất nhạy với độ trễ.
Bảo mật và bảo trì
Tunnel không thay được vệ sinh cơ bản: vẫn bật xác minh 2 bước của QTS, tắt hoặc đổi tài khoản admin mặc định, cập nhật firmware đều đặn.
Đóng hết cửa cũ: nếu trước đây từng mở port, vào myQNAPcloud → Auto Router Configuration tắt UPnP Port Forwarding, rồi xoá các rule chuyển cổng cũ trên router. Lắp tunnel mà cửa chính vẫn mở thì rủi ro không giảm chút nào.
Policy chỉ Allow theo email cụ thể, và không dùng Bypass cho trang đăng nhập.
Cloudflare giải mã TLS ở biên, nên về kỹ thuật họ thấy được nội dung đi qua tunnel. Đó là cái giá của việc không phải mở port, không phải lo chứng chỉ. Không chấp nhận được điều này thì dùng VPN.
Tắt kiểm chứng chỉ chỉ ổn khi cloudflared chạy ngay trên NAS. cloudflared chạy ở một máy khác trong mạng thì giữ kiểm chứng chỉ.
Bị CGNAT thì chọn cách nào
myQNAPcloud Link hợp với người không rành, cần dùng ngay Qfile hay QuMagie trên điện thoại. Tailscale gánh phần nặng: chép file lớn, xem phim, Qsync, HBS 3, SMB. Tailscale có sẵn trong App Center (mục Communications), nhưng bản ở đó từng tụt rất xa bản mới. Muốn bản mới thì Tailscale khuyên cài tay QPKG từ pkgs.tailscale.com.
IPv6 là đường ít người để ý. CGNAT thường chỉ áp cho IPv4, nên nếu nhà mạng có cấp IPv6 thì NAS có địa chỉ công khai thật và chạy được QVPN WireGuard (UDP 51820) qua IPv6. Đổi lại, máy khách cũng phải có IPv6, và NAS lộ thẳng ra ngoài nên bạn phải tự khoá firewall cho kỹ.
Với đa số nhà, combo hợp lý là Cloudflare Tunnel cho trình duyệt và Tailscale cho phần còn lại. Router đóng kín. Bot cứ việc quét port, gõ cửa cả ngày cũng chẳng ai ra mở.
Tiêu chí
Cloudflare Tunnel
Tailscale
myQNAPcloud Link
Chạy sau CGNAT
✓
✓
✓
Chỉ cần trình duyệt
✓
✗
✓
Không cần tên miền
✗
✓
✓
Chặn trước đăng nhập
✓
✓
✗
Xem phim, file lớn
✗
✓
Chậm
Giao thức
Chỉ web
Mọi giao thức
Dịch vụ QNAP
Tốc độ
Đủ cho quản trị
Nhanh
Chậm giờ cao điểm
Bình luận
Chưa có bình luận nào. Có câu hỏi về bài này thì cứ hỏi, đội ngũ Nashub sẽ trả lời.