0

Expose Localhost Ra Internet: Tại Sao Quick Tunnel Của Cloudflare Là "Chân Lý" Cho Developer

Chắc hẳn trong đời làm dev, ai trong chúng ta cũng từng trải qua cảm giác này ít nhất một lần:

Bạn vừa dựng xong một con Webhook handler để nhận sự kiện từ Stripe hay GitHub. Hoặc đơn giản là bạn viết xong một tính năng trên localhost:3000 và muốn share ngay cho ông designer/PM xem thử trên điện thoại của họ.

Vấn đề là: localhost thì nằm chễm chệ trong máy bạn, còn thế giới bên ngoài thì chịu chết không sờ vào được.

Thế là bạn bắt đầu "cuộc phiêu lưu" truyền thống: mò vào trang quản trị Modem Wi-Fi của công ty/nhà, lọ mọ config NAT Port Forwarding, rồi cầu nguyện mạng không đổi IP WAN. Nếu xui xẻo dính phải CGNAT (mạng NAT nhiều lớp của nhà mạng), coi như bế tắc hoàn toàn.

Đó là lý do các công cụ như Ngrok hay Cloudflare Tunnel ra đời. Nhưng nếu Ngrok dần siết chặt các tính năng miễn phí (bắt tạo account, giới hạn domain, giới hạn session), thì Cloudflare tung ra một "vũ khí bí mật" cực kỳ đắc lực cho dev: Quick Tunnels via try.cloudflare.com.


Central Model: Bản chất của câu chuyện "Expose Localhost"

Để hiểu tại sao giải pháp này xịn, ta phải gọi đúng tên cái đau đớn của cách làm truyền thống.

Cách cũ (Inbound / Port Forwarding):
[Internet] ---> (Mở cổng 80/443) ---> [Router/Firewall] ---> [Máy Local của bạn]
⚠️ Rủi ro: Phải mở cổng Inbound, lộ Public IP, dính tấn công DDoS thẳng vào router nhà.

Cách mới ([Cloudflare Quick Tunnel](https://www.cloudflare.com/)):
[Máy Local của bạn] ---(Tự chủ động gọi RA)---> [Cloudflare Edge] <--- [Internet]
✅ An toàn: Cửa nhà đậy kín (No Inbound Ports), không cần Public IP, đi qua khiên chắn DDoS của Cloudflare.

Bản chất của Cloudflare Tunnel là cơ chế Outbound-only connection.

Máy của bạn sẽ cài một phần mềm cực nhẹ tên là cloudflared. Khi bạn chạy command, cloudflared sẽ đứng ra chủ động kết nối đi ra (Outbound) tới Server gần nhất của Cloudflare qua cổng 7844 (sử dụng QUIC/gRPC). Một khi đường ống bí mật (Tunnel) được thiết lập thành công từ bên trong máy bạn đi ra ngoài, mọi truy cập từ Internet gõ vào URL do Cloudflare cấp sẽ được hứng bởi Cloudflare Edge, rồi đi qua đường ống này chui tợn vào localhost của bạn.

Không mở cổng. Không lộ IP nhà. Không cần tài khoản.


Setup "Mì Ăn Liền" Trong 30 Giây

Điều vi diệu nhất của Quick Tunnels (try.cloudflare.com) là bạn không cần tạo tài khoản Cloudflare, không cần có Domain riêng, không cần config file phức tạp.

Bước 1: Cài đặt cloudflared

Tùy vào OS bạn đang dùng, mở Terminal lên và gõ:

  • macOS: brew install cloudflared
  • Windows (Scoop/Winget): winget install Cloudflare.cloudflared
  • Linux (Debian/Ubuntu):
curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared.deb

Bước 2: Bật Tunnel

Giả sử app của bạn đang chạy ở local tại địa chỉ http://localhost:3000 (hoặc 8000, 8080 tùy bạn):

cloudflared tunnel --url http://localhost:3000

Ngay lập tức, Terminal sẽ trả về một đường link dạng: 👉 [https://random-words-1234.trycloudflare.com](https://random-words-1234.trycloudflare.com)

Copy đường link đó gửi cho đồng nghiệp, hoặc dán vào ô Webhook URL trên Stripe/GitHub. Xong! Bạn đã public thành công app local của mình ra toàn thế giới với chứng chỉ HTTPS hợp lệ.


🌟 Bonus Insight: Dùng cho AI Agents / Scripts (Điều mà Doc ít nhấn mạnh)

Nếu bạn đang làm việc với các framework AI Agent, LLM Coding Tools, hay các đoạn script tự động hóa cần tự dựng tunnel và đọc endpoint để test, việc copy-paste link từ terminal một cách thủ công rất mất thời gian.

Cloudflare cung cấp sẵn flag --output json cực kỳ "ăn tiền":

cloudflared tunnel --url http://localhost:8000 --output json

Output trả về sẽ là JSON chuẩn. Script hoặc AI Agent của bạn chỉ cần parse kết quả này là có thể lấy ngay Public URL để tiếp tục chạy pipeline mà không cần đến sự can thiệp của con người.


Khi nào NÊN và KHÔNG NÊN dùng Quick Tunnel?

Dù tiện lợi đến đâu, công cụ nào cũng có giới hạn của nó. Đừng nhầm lẫn giữa Quick Tunnel (dùng thử/dev) và Named Tunnel (dùng cho production).

✅ NÊN dùng Quick Tunnels (try.cloudflare.com) khi:

  1. Local Development & Debugging: Cần test Webhook (Stripe, ZaloPay, Telegram Bot...).
  2. Showcase nhanh: Cần share giao diện/tính năng cho PM/Client xem ngay trong buổi họp.
  3. Cross-device Testing: Test trang web trên điện thoại thật/máy tablet mà không muốn config IP mạng nội bộ phức tạp.
  4. Viết Script/Agent ngẫu nhiên: Cần một URL public tạm thời để test.

❌ KHÔNG NÊN dùng Quick Tunnels khi:

  1. Dùng cho môi trường Production / Staging cố định: Domain trycloudflare.com là ngẫu nhiên. Mỗi lần bạn ngắt terminal và bật lại, nó sẽ ra một URL hoàn toàn mới.
  2. Tải nặng / Traffic lớn: Quick Tunnel bị giới hạn mức 200 concurrent requests.
  3. Cần Server-Sent Events (SSE) hoặc Streaming lâu dài: Quick Tunnel không hỗ trợ tốt cho các kết nối duy trì quá lâu hoặc tính năng SSE.
  4. Cần tính năng bảo mật nâng cao: Vì nó công khai hoàn toàn (ai có link cũng vào được), bạn không thể gán các chính sách Zero Trust/Access Control (như bắt đăng nhập Google Mail trước khi vào xem) nếu không cài đặt Named Tunnel có Auth.

Gợi ý từ kinh nghiệm thực tế: Nếu bạn muốn dùng cố định lâu dài cho con server ở nhà (HomeLab), hãy đăng ký một account Cloudflare miễn phí, mua một domain tầm $1/năm và setup Named Tunnel (Local-managed hoặc Dashboard-managed). Lúc đó bạn sẽ có domain đẹp dạng api.yourname.com trỏ về nhà vĩnh viễn mà vẫn hoàn toàn miễn phí.


Cân nhắc Trade-off & Lời khuyên cuối

Nhiều bạn dev hay ngại dùng các dịch vụ tunnel vì sợ Latency (độ trễ). Đúng là khi traffic đi qua Cloudflare Edge rồi mới vòng về máy bạn, độ trễ sẽ tăng lên vài chục millisecond. Tuy nhiên, đổi lại bạn có được HTTPS miễn phí, Sự an toàn tuyệt đối cho mạng nội bộ và Sự tiện lợi vô giá trong quá trình làm việc.

Đừng tốn thời gian ngồi loay hoay chỉnh config router hay trả tiền cho các dịch vụ tunneling đắt đỏ nữa. Lần tới khi cần test webhook hay demo app, hãy gõ cloudflared tunnel --url http://localhost:YOUR_PORT, bạn sẽ thấy cuộc sống làm dev dễ thở hơn rất nhiều!


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí