前言
想在家中架設服務器進行測試或省錢?無論原因如何,當我們嘗試讓本地裝置提供外部訪問時,經常會遇到難題:如何讓外網準確地找到你內網中真正提供服務的裝置和端口?Cloudflare Tunnel 提供了一個簡單的解決方案,幫助你打破這層障礙。
什麼是 Cloudflare Tunnel
Cloudflare Tunnel 是一項由 Cloudflare 提供的服務,它可以安全地將你的內部資源連接到 Cloudflare 的全球網路,而無需公開你的路由 IP 位址。透過在本地部署輕量級守護程式 cloudflared,它會建立與 Cloudflare 的加密出站連線,將流量安全地傳輸至 Cloudflare 的資料中心。這使你的伺服器 IP 位址得以隱藏,防止直接攻擊,並確保資料傳輸的安全性。
Cloudflare Tunnel 的優勢:
- 簡易部署: 透過命令列工具即可快速設定,無需複雜的配置。
- 內建 DDoS 保護: 自動防禦分散式阻斷服務攻擊,確保服務穩定性。
- 整合 Zero Trust 安全模型: 與 Cloudflare Access 結合,提供零信任的存取控制,提升安全性。
- 支援多種協定: 除了 HTTP/S,亦支援 SSH、RDP 等協定的安全連線,滿足多種需求。
Cloudflare Tunnel 特別適合需要保護內部應用程式,並希望避免公開暴露伺服器 IP 位址的使用者。
不過我們只是利用 cloudflared daemon 與 Cloudflare 的加密出站連線達成內網穿透的目的。
實作
接下來本章將帶領你一步步完成 Cloudflare Tunnel 的設置,並將本地 Nginx 服務器暴露到公網。
1. 快速部署本地 Nginx 服務器
要開始測試,首先我們需要一個本地服務器。通過以下步驟來迅速部署:
打開終端機,輸入 Docker 指令啟動 Nginx:
1docker run -d -p 8080:80 --name my-nginx nginx
在瀏覽器中訪問 localhost:8080
,你應該會看到 Nginx 的歡迎頁面,這意味著服務器已經成功運行。
這步僅是準備工作,現在就可以進行下一步配置來打開對外的通道了!
2. 配置 Cloudflare Zero Trust 進行安全的內網穿透
Cloudflare 提供的 tunnel 功能屬於其 Zero Trust 安全方案,是實現安全對外訪問的核心。若你是第一次使用 Cloudflare Zero Trust,需要先進行基本設置:
登入 Cloudflare,選擇已設置的域名。
點擊 go to
按鈕,進入 Zero Trust 頁面。
創建一個 Zero Trust 帳戶,隨意輸入一個域名作為名稱(後續可更改)。
選擇 免費方案,有興趣的人可以看一下,免費方案有什麼內容。接著我們點擊 繼續付款
。
然後,你會發現需要添加付款方式才能繼續下一步。
不過別擔心,請直接回到 Cloudflare 首頁並重新進入 Zero Trust。此時你已能使用 Zero Trust 的功能了。
3. 建立 Tunnel 連接並安裝 Cloudflare Connector(cloudflared)
進入 Zero Trust 設置頁面後,我們開始搭建通道:
點擊 Networks > Tunnels,選擇 Add a tunnel。
指定 tunnel 類型為 Cloudflare,並為其命名(如 local_nginx
)。
儲存後,進入設置引導頁。
接著需要在本地安裝 cloudflared 程式。我的電腦是 windows 64-bit
,所以接下來會用此環境繼續操作:
根據作業系統版本下載並安裝 cloudflared。
安裝完成後,複製設置頁的指令,並以系統管理員身份開啟終端機,執行指令進行配置。
結果類似如下就是安裝成功了:
注意: 若出現權限錯誤,請確認以系統管理員身份開啟終端機。
4. 設定路由並驗證內網穿透成功
一旦連接成功,我們最後只需完成路由設置並驗證服務器是否可訪問:
回到 Cloudflare 配置頁,檢查 Connectors 面板的連接狀態,然後點擊下一步。
根據以下圖片的說明,設置 Route,然後儲存。
進入 DNS Records 頁面,確認剛剛的設定已留下紀錄。
這時可以在瀏覽器中訪問mynginx.vinny987.xyz
,檢查是否能夠成功訪問本地的 Nginx。
5. 清理
最後,如果不使用 Cloudflare tunnel,記得要移除第三步安裝的 cloudflared service 和 tunnel:
DNS Record 也需要手動移除(移除 tunnel 並不會順道幫我們移除它):