在前後端聯調、移動端真機測試、或是調試 Webhook 回調時,我們總會遇到同一個難題:如何讓外網用户安全地訪問我本地的端口(如 localhost:3000)?
傳統做法要麼是部署到測試服務器(太慢),要麼是折騰路由器端口映射(不安全且受限於公網 IP)。雖然 ngrok 曾是這一領域的霸主,但隨着 Cloudflare Tunnel 的普及,開發者們有了一個更安全、完全免費且無限制的新選擇。
為什麼我們需要“隧道”?
在遠程辦公和 AI 驅動開發的 2025 年,本地服務的快速共享已成為剛需:
- 協作演示: 臨時寫個 Demo 或原型,想發給異地的同事預覽,而不是錄屏或發截圖。
- Webhook 調試: 開發支付接口(Stripe/微信支付)或 GitHub App 時,必須有一個公網 HTTPS URL 來接收回調。
- 移動端適配: 手機掃碼直接訪問電腦上的開發頁面,測試觸控體驗。
- 安全合規: 在零信任(Zero Trust)架構下,我們希望關閉所有入站端口,僅允許受控的出站連接。
主流方案對決:ngrok vs. Cloudflare Tunnel
雖然兩者都能實現內網穿透,但產品邏輯和成本結構截然不同:
| 維度 | ngrok (免費版) | Cloudflare Tunnel (Quick Share) |
|---|---|---|
| 易用性 | 極高,一鍵啓動 | 極高,單命令行工具 |
| 穩定性 | 2 小時會話限制,超時斷開 | 無時長限制 |
| 賬號需求 | 必須註冊並綁定 Token | 無需註冊(使用 quick tunnel 模式) |
| 域名固定 | 隨機生成的子域名 | 支持綁定自定義域名(需 CF 託管) |
| 網絡性能 | 一般,帶寬受限 | 極佳,基於 CF 全球 300+ 邊緣節點 |
| 安全性 | 基礎加密 | 強制 HTTPS,集成 Zero Trust 認證 |
結論: ngrok 適合一分鐘的臨時演示,而 Cloudflare Tunnel 則是長期開發和生產環境的首選方案。
技術原理:為什麼它不需要公網 IP?
Cloudflare Tunnel 的核心是 “出站僅連接”(Outbound-only Connection) 模型。
- 建立連接: 當你運行
cloudflared時,它會主動向 Cloudflare 邊緣節點發起四個持久化的出站連接(基於 QUIC 協議)。 - 無需打洞: 因為連接是“由內向外”發起的,你的防火牆會認為這是正常的流量,從而無需在路由器上開啓任何入站端口。
- 智能路由: 用户請求你的公網 URL 時,流量會通過 Cloudflare 的 Argo Smart Routing 找到最快的路徑,經由上述持久連接轉發到你的本地端口。
- 安全屏障: 你的真實 IP 被隱藏在 Cloudflare 網絡之後,同時自動享受了 DDoS 防護和 TLS 加密。
快速上手:三秒開啓公網訪問
如果你只是想快速分享一個本地端口(比如 3000),甚至不需要註冊 Cloudflare 賬號:
1. 安裝工具
Mac OS & Linux 系統
brew install cloudflared
Windows 系統
winget install Cloudflare.cloudflared
2. 啓動隧道
cloudflared tunnel --url http://localhost:3000
3. 獲取鏈接
終端會輸出一個類似 https://random-words-generated.trycloudflare.com 的地址,直接發給同事即可。
進階技巧與潛在“坑點”
1. 域名固定與權限控制
如果你有 Cloudflare 託管的域名,可以通過配置文件將隧道映射到子域名(如 dev.yourdomain.com),並結合 Cloudflare Access 增加一層 GitHub/Google 登錄驗證,防止 Demo 被無關人員掃描。
2. 關於 QUIC 協議被運營商攔截
Cloudflare Tunnel 默認優先使用 QUIC (UDP) 協議。在某些內網環境或特定運營商下,UDP 可能會被 QOS 限制導致連接極慢。
解決方法: 強制使用 TCP 模式啓動。
cloudflared tunnel --protocol http2 --url http://localhost:3000
3. 性能表現
雖然經過了中轉,但得益於 Cloudflare 龐大的邊緣網絡,延遲通常在可接受範圍內。但在國內部分地區,連接到 CF 海外節點的穩定性偶爾會有波動,這屬於“公網環境”的常規挑戰。
總結
Cloudflare Tunnel 徹底改變了本地開發服務的共享方式。它不僅解決了“能不能看”的問題,更通過“零信任”模型解決了“安不安全”的問題。
你在內網穿透過程中還遇到過哪些奇怪的坑?歡迎在評論區一起討論。