Cloudflare Tunnel:零成本給 localhost 一個公網身份

作者:阿皓AI
日期:2026年5月17日 下午12:17
來源:WeChat 原文

整理版優先睇

速讀 5 個重點 高亮

Cloudflare Tunnel 係零成本將 localhost 服務暴露到公網嘅最佳方案,免費、無需公網 IP、自帶 HTTPS,臨時演示同長期生產都適用。

整理版摘要

呢篇文章係教大家點樣用 Cloudflare Tunnel 嚟解決本地服務冇公網 IP 嘅問題。作者遇到要將本地開發嘅服務分享畀客戶或對接支付回調,發現 Cloudflare Tunnel 最慳事,完全唔使買 VPS 或申請公網 IP。整體結論係:先用 trycloudflare.com 快速試水,再用正式隧道方案長期綁定域名,成個過程免費且自動處理 HTTPS

臨時方案好簡單,一行命令就得到一個隨機域名,30秒搞掂,但係每次重啟會變,只適合短暫演示。正式方案就需要一個託管喺 Cloudflare 嘅域名,然後 login、create tunnel、route dns、寫 config.yml、啟動 tunnel,就可以將本地服務永久映射到自訂域名。

文章仲列出咗常見錯誤同解決方法,例如 Host 唔 allow、服務冇監聽 0.0.0.0、防火牆擋咗等,跟住做就得。成個方案唔使錢,適合開發者快速 expose 本地服務畀人試用或處理回調。

  • Cloudflare Tunnel 免費、無需公網 IP、自帶 HTTPS,係 expose 本地服務嘅首選方案。
  • 臨時用途只需一行命令 cloudflared tunnel --url http://localhost:3000,30秒獲得域名,但重啟會變。
  • 長期使用需先將域名託管喺 Cloudflare,然後 login、create tunnel、route dns、配置 config.yml 並啟動。
  • 常見踩坑包括 Host 阻擋、服務未監聽 0.0.0.0、防火牆未放開端口,各有簡單解法。
  • 成個流程唔使 VPS,適合開發調試、對接支付回調等需要固定公網域名嘅場景。
值得記低
工具 developers.cloudflare.com

cloudflared

Cloudflare Tunnel 官方客戶端,用嚟建立隧道暴露本地服務

流程

正式隧道設定步驟

1. cloudflared tunnel login 授權域名 2. cloudflared tunnel create <name> 創建隧道 3. cloudflared tunnel route dns <name> <domain> 綁定域名 4. 編輯 ~/.cloudflared/config.yml 設定 ingress 5. cloudflared tunnel run <name> 啟動

整理重點

點解要用 Cloudflare Tunnel?

如果你喺本地 run 咗個服務,需要分享畀客戶或者對接支付回調,Cloudflare Tunnel 係目前最慳事嘅方案。佢唔單止免費,仲唔需要公網 IP,自帶 HTTPS,完全唔使自己搞證書。

免費、不需要公網 IP、自帶 HTTPS

整理重點

臨時隧道:30秒快速試水

先安裝官方客戶端 cloudflared。唔同系統嘅安裝方法如下:

  • macOS:brew install cloudflared
  • Windows:去官方下載頁拎安裝檔
  • Linux:wget + dpkg 安裝 .deb

假設本地服務行緊喺 http://localhost:3000,一行命令就得:

程式內容 bash
cloudflared tunnel --url
http://localhost:3000

輸出會畀你一個臨時域名,例如 https://xxxxx.trycloudflare.com,打開就用到。成個過程 30 秒搞掂,不過缺點係域名每次重啟會變,只適合臨時演示同調試。

30秒

域名每次重啓會變

整理重點

正式玩法:長期穩定域名

前置條件係你要有一個域名,而且已經託管喺 Cloudflare(即 DNSCloudflare 解析)。

域名已經託管在 Cloudflare

  1. 1 登錄授權:cloudflared tunnel login,會自動開瀏覽器揀域名授權。
  2. 2 創建隧道:cloudflared tunnel create TimeSugar,會生成 Tunnel ID 同憑證文件。記住唔好泄露憑證。
  3. 3 綁定域名:cloudflared tunnel route dns TimeSugar al.timesugar.com,呢個命令會自動加 CNAME 記錄,唔使自己搞。
  4. 4 配置 YAML:編輯 ~/.cloudflared/config.yml,設定 ingress 規則,例如將 al.timesugar.com 指向本地嘅 localhost:3008,最後加一條兜底 404。
  5. 5 啟動隧道:cloudflared tunnel run TimeSugar,見到 Initial protocol quic 就代表連到 Cloudflare 邊緣節點,HTTPS 證書自動簽發,唔使管。

Tunnel ID

CNAME 記錄

兜底 404

config.yml 範例 yaml
tunnel: TimeSugar
credentials-file: /Users/wesley/.cloudflared/xxxxx.json
ingress:
 - hostname: al.timesugar.com
 service: http://localhost:3008
 - service: http_status:404

而家 https://al.timesugar.com 已經映射到本地 localhost:3008,HTTPSCloudflare 自動簽發,唔使自己搞證書。

自動簽發

整理重點

開機自動運行同常見踩坑

如果你想隧道開機自動行,macOS 可以用 brew services start cloudflared,Linux 就用 systemctl enable + start。

  • macOS:brew services start cloudflared
  • Linux:sudo systemctl enable cloudflared && sudo systemctl start cloudflared

以下係幾個常見問題同解決方法

  1. 1 Blocked request. This host is not allowed. → 本地服務(ViteNext.js)默認禁咗未知 Host,要喺 config 加返個 allowedHosts。
  2. 2 ERR_CONNECTION_REFUSED → 先確認 curl http://localhost:3008 通唔通,本地服務根本冇開。
  3. 3 localhost 得但公網打唔開 → 服務只監聽 127.0.0.1,要改監聽 0.0.0.0,例如 flask run --host 0.0.0.0。
  4. 4 Unable to reach the origin service / connection refused → 防火牆擋咗端口,macOS 檢查系統防火牆,Linux 用 ufw allow 放開。

監聽 0.0.0.0

防火牆擋咗端口

如果你喺本地運行咗一個服務,需要分享俾客戶或者其他人,又或者個項目需要對接支付回調,用 Cloudflare Tunnel 係目前最簡單嘅方案。免費、唔需要公網 IP、自帶 HTTPS。


1. 安裝 cloudflared

先裝官方客戶端:

macOS

brew install cloudflared

Windows

去官方下載頁:Cloudflare Tunnel Downloads

Linux

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

2. 臨時公網(先試水,最快上手)

假設本地服務行緊喺 http://localhost:3000,一條命令:

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

輸出會畀你一個臨時域名:

https://xxxxx.trycloudflare.com

打開就可以訪問,成個過程 30 秒。

缺點:域名每次重啟會變,只適合臨時演示同調試。要長期用,睇下一節。


3. 長期穩定域名(正式玩法)

前置條件:你有一個域名,同埋已經託管喺 Cloudflare(即 DNS 用 Cloudflare 解析)。

3.1 登入 Cloudflare

cloudflared tunnel login

會自動打開瀏覽器,畀你揀要授權嘅域名:

授權 Cloudflare Tunnel

揀好之後返去終端,會提示授權完成。

3.2 建立 Tunnel

俾隧道改個名(例如 TimeSugar):

cloudflared tunnel create TimeSugar

終端會輸出 Tunnel ID 同憑證檔案路徑:

創建 Tunnel

憑證檔案係咁樣:~/.cloudflared/{tunnel-id}.json別泄露,等同於隧道嘅鎖匙。

3.3 綁定域名

將呢個 Tunnel 關聯到你想要嘅域名:

cloudflared tunnel route dns TimeSugar al.timesugar.com

呢條命令會自動喺 Cloudflare 上面建立對應嘅 CNAME 記錄,唔使手動去後台點:

綁定域名

3.4 設定 YAML

建立設定檔:

touch ~/.cloudflared/config.yml

寫入內容(注意將 tunnelcredentials-filehostname 換成你自己嘅):

tunnel: TimeSugar
credentials-file: /Users/wesley/.cloudflared/xxxxx.json

ingress:
  - hostname: al.timesugar.com
    service: http://localhost:3008
  - service: http_status:404
config.yml 配置

service: http://localhost:3008 對應嘅係本地服務。
最後嗰條 http_status:404 係包底——任何冇匹配到嘅請求統一返回 404。

3.5 啟動

cloudflared tunnel run TimeSugar

終端會打出連接日誌,見到 Initial protocol quic 和幾條 INF 就表示已經連上 Cloudflare 邊緣節點:

啓動 Tunnel

現在 https://al.timesugar.com 已經映射到本地 localhost:3008。HTTPS 證書 Cloudflare 自動簽發,唔使理。


4. 開機自動啟動(可選)

macOS 執行:
bash brew services start cloudflared 
Linux 執行:
bash sudo systemctl enable cloudflared sudo systemctl start cloudflared 

5. 常見中伏位

Q1: 報錯 Blocked request. This host is not allowed.

本地服務(例如 Vite、Next.js dev server)預設禁止未知 Host。兩種解決方法:

  • Vite:vite.config.js 里加 server.allowedHosts: ['al.timesugar.com']
  • Next.js:用 next dev -H 0.0.0.0 或者改 next.config.js

Q2: 瀏覽器報 ERR_CONNECTION_REFUSED

本地服務根本冇啟動。先確認 curl http://localhost:3008 通咗先再跑 tunnel。

Q3: localhost 可以訪問,公網打唔開

服務只係監聽咗 127.0.0.1,冇監聽 0.0.0.0。常見於 Python 嘅 flask run 預設只綁回環——加 --host 0.0.0.0 即可。

Q4: Unable to reach the origin service / connection refused

本機防火牆冇放開端口。macOS 檢查「系統設定 → 網絡 → 防火牆」;Linux 用 ufw allow 3008 或者檢查 iptables。


一句講曬

trycloudflare.com 臨時域名適合調試,tunnel create + config.yml + tunnel run 三件套適合長期。成個過程唔使買 VPS、唔使公網 IP,免費用到尾。


如果你在本地跑了一個服務,需要分享給客戶或者其他人,亦或是項目需要對接支付回調,用 Cloudflare Tunnel 是目前最省事的方案。免費、不需要公網 IP、自帶 HTTPS。


1. 安裝 cloudflared

先裝官方客戶端:

macOS

brew install cloudflared

Windows

去官方下載頁:Cloudflare Tunnel Downloads

Linux

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

2. 臨時公網(先試水,最快上手)

假設本地服務跑在 http://localhost:3000,一行命令:

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

輸出會給你一個臨時域名:

https://xxxxx.trycloudflare.com

打開就能訪問,整個過程 30 秒。

缺點:域名每次重啓會變,只適合臨時演示和調試。要長期用,看下一節。


3. 長期穩定域名(正式玩法)

前置條件:你有一個域名,並已經託管在 Cloudflare(即 DNS 用 Cloudflare 解析)。

3.1 登錄 Cloudflare

cloudflared tunnel login

會自動打開瀏覽器,讓你選擇要授權的域名:

授權 Cloudflare Tunnel

選好之後回到終端,會提示授權完成。

3.2 創建 Tunnel

給隧道起個名字(比如 TimeSugar):

cloudflared tunnel create TimeSugar

終端會輸出 Tunnel ID 和憑證文件路徑:

創建 Tunnel

憑證文件長這樣:~/.cloudflared/{tunnel-id}.json別泄露,等同於隧道的鑰匙。

3.3 綁定域名

把這個 Tunnel 關聯到你想用的域名:

cloudflared tunnel route dns TimeSugar al.timesugar.com

這條命令會自動在 Cloudflare 上創建對應的 CNAME 記錄,不用手動去後台點:

綁定域名

3.4 配置 YAML

創建配置文件:

touch ~/.cloudflared/config.yml

寫入內容(注意把 tunnelcredentials-filehostname 換成自己的):

tunnel: TimeSugar
credentials-file: /Users/wesley/.cloudflared/xxxxx.json

ingress:
  - hostname: al.timesugar.com
    service: http://localhost:3008
  - service: http_status:404
config.yml 配置

service: http://localhost:3008 對應的是本地服務。
最後那條 http_status:404 是兜底——任何沒匹配上的請求統一返回 404。

3.5 啓動

cloudflared tunnel run TimeSugar

終端會打出連接日誌,看到 Initial protocol quic 和幾條 INF 就說明已經連上 Cloudflare 邊緣節點:

啓動 Tunnel

現在 https://al.timesugar.com 已經映射到本地 localhost:3008。HTTPS 證書 Cloudflare 自動簽發,不用管。


4. 開機自動運行(可選)

macOS 運行:
bash brew services start cloudflared 
Linux 運行:
bash sudo systemctl enable cloudflared sudo systemctl start cloudflared 

5. 常見踩坑

Q1: 報錯 Blocked request. This host is not allowed.

本地服務(比如 Vite、Next.js dev server)默認禁止未知 Host。兩種解法:

  • Vite:vite.config.js 里加 server.allowedHosts: ['al.timesugar.com']
  • Next.js:用 next dev -H 0.0.0.0 或者改 next.config.js

Q2: 瀏覽器報 ERR_CONNECTION_REFUSED

本地服務根本沒啓動。先確認 curl http://localhost:3008 能通再來跑 tunnel。

Q3: localhost 能訪問,公網打不開

服務只監聽了 127.0.0.1,沒監聽 0.0.0.0。常見於 Python 的 flask run 默認只綁回環——加 --host 0.0.0.0 即可。

Q4: Unable to reach the origin service / connection refused

本機防火牆沒放開端口。macOS 檢查"系統設置 → 網絡 → 防火牆";Linux 用 ufw allow 3008 或檢查 iptables。


一句話總結

trycloudflare.com 臨時域名適合調試,tunnel create + config.yml + tunnel run 三件套適合長期。整個過程不用買 VPS、不用公網 IP,免費用到底。