沒有公網 IP,又想在公網訪問家裡的伺服器,以前只有兩個選擇:要麼買 VPS 備案,要麼用 FRP、Ngrok 之類的穿透工具。前者要花錢還得備案,後者要麼收費要麼不穩定。
最近發現 Cloudflare 官方有個大善人功能——Cloudflare Tunnel,免費、自帶 HTTPS、不用備案,直接把內網服務穿透到公網。親測可用,速度居然還行。
為什麼公網 IP 這麼難搞
先說背景。
國內的家庭寬頻,IPv4 公網 IP 早就成了稀缺資源。運營商基本默認分配大內網地址,想申請公網 IP?有的地區直接說沒有,有的需要打客服磨嘴皮子,還有可能過一段時間被收回。
IPv6 倒是普及了,地址多到用不完。但問題是——很多網路環境對 IPv6 的支援並不完整,訪問端如果沒有 IPv6,照樣連不上。
所以如果想搭建一個公網可訪問的服務,傳統路子就兩條:
- 買 VPS:阿里雲、騰訊雲、華為雲……便宜的一年幾十塊到幾百塊不等。但國內伺服器必須備案,雖然流程不複雜,但確實繁瑣,要等個幾天到一兩週。
- 用穿透工具:FRP 自建服務端、Ngrok、花生殼……要麼需要自己有一台有公網 IP 的伺服器做中轉,要麼用第三方收費服務,免費版限制多。
Cloudflare Tunnel 的出現,直接把這條路子給免費了。
Cloudflare Tunnel 是什麼
簡單說,Cloudflare Tunnel 是 Cloudflare 官方推出的一款反向隧道工具。它會在你的內網伺服器上運行一個輕量級客戶端(叫 cloudflared),這個客戶端主動向外連接到 Cloudflare 的邊緣網路,建立一個加密隧道。
外面用戶訪問時,請求先走到 Cloudflare 的邊緣節點,再通過這條隧道轉發到你的內網伺服器。你的伺服器不需要公網 IP,不需要開放火牆埠,甚至連路由器都不用配置。
更妙的是,Cloudflare 會自動給你分配一個二級域名(比如你綁定的域名下的子域名),並且自帶 HTTPS 憑證。也就是說,你只需要在 Cloudflare 上有一個域名(哪怕是在 Cloudflare 上免費註冊的 .workers.dev 或者用你自己的域名),配置好 Tunnel,外界就能通過 https://xxx.yourdomain.com 訪問到你內網的 HTTP 服務。
實操步驟
以下是我實際操作的流程,跟著做就行。
前置條件
- 一個 Cloudflare 帳號
- 一個託管在 Cloudflare 上的域名(沒有的可以註冊一個便宜的,或者把現有域名的 NS 改到 Cloudflare)
- 一台內網伺服器(我這裡就是前面搭 Hugo 部落格的那台 Ubuntu 22.04)
第一步:建立 Tunnel
登入 Cloudflare 控制面板 → 左側選單找到**「Zero Trust」(以前叫 Teams)→ 進入後點擊「網路」→「連接器(Tunnels)」→ 點擊「建立隧道」**。
選擇 Cloudflared 類型,給隧道起個名字,比如 home-server。
第二步:安裝 cloudflared
建立完成後,頁面會提示你在伺服器上安裝 cloudflared 並執行一條命令。系統會根據你的環境自動推薦安裝方式,Ubuntu/Debian 一般是:
| |
執行後,cloudflared 會作為系統服務在背景執行,自動連接 Cloudflare。
回到控制面板,你會看到隧道狀態變成**「已連接(Healthy)」**,還有線上時間顯示。
第三步:配置路由
隧道通了,但還需要告訴 Cloudflare:把哪個域名指向哪個內網服務。
在隧道詳情頁,點擊**「已發布程式路由(Public Hostname)」→「新增路由」**:
- 子域名:比如
blog(最終訪問地址就是blog.yourdomain.com) - 域名:選擇你在 Cloudflare 上的域名
- 類型:HTTP
- URL:
http://localhost:80(指向本機的 Nginx,也就是我們的 Hugo 部落格)
儲存。等幾秒鐘,開啟 https://blog.yourdomain.com,應該就能看到你的內網部落格了。
親測體驗
我用家裡的寬頻(電信 300M,無公網 IPv4)測試了幾天,體驗如下:
| 項目 | 體驗 |
|---|---|
| 訪問速度 | 首屏 2-4 秒,靜態資源載入正常,能流暢開啟 |
| 穩定性 | 連續執行 48 小時未掉線,cloudflared 服務自動保活 |
| HTTPS | 自動憑證,無需手動配置,滿分 |
| 延遲 | 取決於 Cloudflare 邊緣節點,國內一般走香港或新加坡節點,150-300ms |
| 頻寬 | Cloudflare 免費版不限流量(公平使用政策),個人部落格完全夠用 |
總結:對於個人部落格、小型服務展示、遠端除錯這類場景,完全夠用。 如果是高併發或視訊流,免費版可能扛不住,但那是另一個話題了。
一些侷限和注意事項
- 域名必須在 Cloudflare:要麼在 Cloudflare 註冊,要麼把 DNS 託管到 Cloudflare。這是硬性要求。
- 免費版功能有限:例如自訂埠、更精細的訪問控制需要升級到付費版。
- 速度不如直連:畢竟走了 Cloudflare 中轉,比直接訪問公網 IP 要慢一些,但勝在免費和穩定。
- HTTP 轉發限制:目標 URL 如果是
localhost,那 cloudflared 必須執行在同一台機器上。如果是區域網其他裝置,寫內網 IP 即可,比如http://192.168.1.100:80。
總結
Cloudflare Tunnel 是一個非常實用的免費內網穿透方案,特別適合:
- 沒有公網 IP 的家庭寬頻使用者
- 不想備案、不想買 VPS 的輕量需求
- 想快速把內網服務暴露到公網做測試或展示
配置簡單,自帶 HTTPS,不限流量,還不要錢。Cloudflare 真是大善人,哈哈哈。
如果你也有內網服務想掛到公網,不妨試試。有問題歡迎交流。