Bài toán rất thực tế: có máy nhưng không public được
Nhiều người có một chiếc PC cũ, mini PC hoặc laptop dư nằm ở nhà và muốn biến nó thành mini server để chạy:
- Dashboard cá nhân
- n8n, Gitea, Vaultwarden
- Web app tự viết
- Trang quản trị cho homelab
- Home Assistant hoặc tool nội bộ
Vấn đề là bạn có máy, có Docker, có app chạy ngon trong mạng LAN, nhưng lại không đưa nó ra Internet được vì:
- Nhà mạng chặn port inbound
- Bạn đang ở sau CGNAT
- Router của chung cư không cho port forwarding
- Bạn dùng mạng chung, không kiểm soát được NAT
Đây là lúc Cloudflare Tunnel trở nên rất đáng tiền, vì nó không cần mở port từ ngoài vào nhà bạn.
Cloudflare Tunnel giải quyết chuyện này như thế nào
Ý tưởng cốt lõi rất đơn giản:
- Bạn cài
cloudflaredtrên chiếc PC ở nhà cloudflaredchủ động tạo kết nối outbound tới Cloudflare- Cloudflare nhận request từ Internet
- Cloudflare chuyển request qua tunnel về app đang chạy trong máy của bạn
Khác biệt lớn nhất so với port forwarding là:
- Không cần mở port
80,443,8080trên router - Không cần IP public riêng
- Không phụ thuộc chuyện ISP có cho NAT inbound hay không
Nói ngắn gọn, thay vì Internet gõ cửa trực tiếp vào nhà bạn, máy ở nhà sẽ chủ động đi ra ngoài trước rồi giữ một đường hầm ổn định.
Vì sao nó hợp với PC cũ hoặc mini server tại nhà
Đây là case dùng cực hợp:
- Một máy Dell OptiPlex cũ cắm trong góc
- Một mini PC chạy Ubuntu
- Một máy Windows cũ vẫn còn ổn để chạy vài service
- Một laptop dư làm server tạm
Chỉ cần máy đó có Internet outbound là đủ. Dù router không mở port được, bạn vẫn public được web app ra domain riêng.
Đây là điểm rất mạnh nếu bạn ở:
- Chung cư dùng mạng nội bộ tập trung
- Ký túc xá hoặc văn phòng nhỏ
- Khu vực ISP chặn nhiều port
- Nhà có router do nhà mạng khoá config
Những gì Cloudflare Tunnel làm tốt nhất
Cloudflare Tunnel đặc biệt hợp với:
- HTTP/HTTPS app
- Dashboard nội bộ
- Reverse proxy cho nhiều service web
- Site hoặc panel quản trị nhỏ
Ví dụ:
n8n.example.com-> n8n chạy ởlocalhost:5678git.example.com-> Gitea ởlocalhost:3000home.example.com-> Home Assistant ởlocalhost:8123
Nếu bạn chỉ cần public web service thì Tunnel là một trong những cách gọn nhất hiện nay.
Lưu ý quan trọng: giới hạn upload của Cloudflare
Nếu app của bạn có upload file, hãy nhớ Cloudflare có giới hạn request body ở tầng edge. Theo tài liệu Cloudflare hiện tại:
- Free: tối đa
100 MB - Pro: tối đa
100 MB - Business: tối đa
200 MB - Enterprise:
500+ MB
Nếu bạn biến PC cũ thành mini server public để nhận file lớn, rất dễ gặp lỗi 413 Payload Too Large. Tunnel rất hợp cho dashboard, app web và upload nhỏ-vừa; còn video lớn hoặc file backup nhiều GB thì không phải use case đẹp nếu vẫn đi qua proxy Cloudflare mặc định.
Khi nào bài này hợp nhất
Cloudflare Tunnel hợp nhất khi bạn muốn public:
- dashboard hoặc web app
- panel quản trị nhỏ
- self-hosted service chạy ở
localhost:PORT
Nếu mục tiêu là expose nguyên file share SMB hoặc cả mạng LAN, đây không phải cách phù hợp nhất.
Cách cấu hình trên trang Cloudflare cho dễ làm theo
Nếu mới dùng lần đầu, cứ làm theo flow web của Cloudflare là dễ nhất:
- Vào
Cloudflare Dashboard -> Zero Trust -> Networks -> Tunnels - Chọn
Create a tunnel - Đặt tên, ví dụ
old-pc - Ở
Setup environment, nếu máy đang chạy Ubuntu hoặc Debian thì thường chọnDebian+64-bit - Copy lệnh Cloudflare đưa sẵn, rồi chạy trên PC cũ
Với Debian 64-bit, lệnh thường có dạng:
sudo mkdir -p --mode=0755 /usr/share/keyrings
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg \
| sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null
echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] \
https://pkg.cloudflare.com/cloudflared any main' \
| sudo tee /etc/apt/sources.list.d/cloudflared.list
sudo apt-get update && sudo apt-get install cloudflared
sudo cloudflared service install <TOKEN_DO_CLOUDFLARE_CAP_TREN_WEB>
Token này được Cloudflare cấp ngay trên web. Chạy xong, dashboard sẽ hiện Connected, lúc đó nhấn Continue.
Tiếp theo, vào phần Add a public hostname hoặc Add route -> Public application, rồi khai báo domain và port local cần forward:
Subdomain: lab
Domain: example.com
Type: HTTP
URL: localhost:3000
Cloudflare sẽ tự cấp SSL ở edge, nhưng record phải để Proxied. Nếu để DNS only thì flow tunnel web app sẽ không chạy như mong đợi.
Bạn chỉ cần nhớ công thức:
lab.example.com->localhost:3000panel.example.com->localhost:8080n8n.example.com->localhost:5678
Tóm tắt flow ngắn nhất
- Cho app chạy local trên PC cũ, ví dụ
localhost:8080 - Vào Cloudflare tạo tunnel
- Chọn
Debian+64-bit - Chạy lệnh
cloudflared service install <token> - Add route / Public application trỏ về đúng port local
- Đảm bảo hostname đang ở trạng thái
Proxied
Làm xong 6 bước này là bạn đã có thể biến PC cũ thành mini server public mà không cần port forwarding truyền thống.
Nếu chỉ muốn thử nhanh: Quick Tunnel
Có, nhưng chỉ nên xem như cách thử nhanh.
Cloudflare có Quick Tunnels để bạn public tạm một app mà không cần cấu hình đầy đủ trên dashboard. Tuy nhiên:
- URL thường là tạm thời
- Không phù hợp để dùng lâu dài
- Không phải cách tốt nhất cho mini server chạy ổn định
Với bài toán homelab hoặc public app trên PC cũ, nên dùng named tunnel với domain riêng ngay từ đầu.
Vì sao cách này đáng dùng
- Không phụ thuộc router hay port forwarding
- Tận dụng lại PC cũ rất hiệu quả
- Dễ ghép với Docker, Nginx hoặc app chạy local
- Có thể thêm Cloudflare Access nếu không muốn public hoàn toàn
Những chỗ dễ làm sai
1. Tưởng Tunnel thay thế luôn bảo mật ứng dụng
Tunnel giúp public app mà không cần mở port, nhưng nó không tự sửa lỗi auth yếu, admin/admin hoặc panel không có bảo vệ.
2. Quên mất giới hạn upload 100 MB của Cloudflare
Nhiều người public xong một app rồi mới phát hiện upload file lớn bị lỗi 413. Nếu use case của bạn là nhận file rất lớn, Tunnel không phải lúc nào cũng là đường đi phù hợp nhất.
3. Public thẳng quá nhiều service cùng lúc
Cái gì thực sự cần public thì mới public. Các admin panel nội bộ nên cân nhắc thêm Access hoặc ít nhất là auth mạnh.
4. Nhầm Tunnel với việc expose cả mạng nhà
Tunnel hợp để public app. Nếu bạn cần truy cập nguyên subnet nội bộ, đó là một bài toán khác.
5. Không để tunnel chạy như service
Nếu chỉ chạy bằng terminal rồi đóng cửa sổ, tunnel sẽ biến mất. Với máy server, nên chạy kiểu service để survive reboot.
Kết luận
Nếu bạn đang có một chiếc PC cũ ở nhà nhưng không thể public app vì router không mở được port, ISP chặn inbound, hoặc bạn đang ở mạng chung của chung cư, Cloudflare Tunnel là một giải pháp rất thực dụng.
Nó cho phép bạn biến những chiếc máy cũ thành mini server public mà không cần port forwarding truyền thống. Với các app web, dashboard và service nhỏ, đây là một trong những cách dễ nhất để đưa homelab ra Internet mà vẫn giữ cấu hình mạng ở nhà tương đối đơn giản.