厭倦防火牆開 Port 被掃?用 Portainer 輕鬆部署 Cloudflared 隧道,不需開放防火牆或任何 Port 或設定 NAT 祼奔,即可安全將內部服務對外公開,適合 NAS、Docker 與自架環境使用。
前言:為什麼要用 Portainer 建 Cloudflared?
想像一下,你在家裡的 NAS 或伺服器想遠端存取,但又怕被駭客盯上?Cloudflared 就是工程師的救贖(逃),它能建立安全的隧道,讓你免開端口還能上 Cloudflare 的保護網,如果你還在用命令列敲到頭痛,來試試搭配 Portainer 這個 GUI 介面的懶人最佳拍檔吧~
準備工作
在開始前,確認你的環境OK:
- Cloudflare 帳號:免費註冊一個帳號,記得驗證網址域名
- Portainer 伺服器:如果還沒裝,可參考這教學來安裝

在 Cloudflare 建立 Tunnel
在帳戶首頁左側選單,選 Zero Trust 會跳轉到另一個頁面。

在網路→連接器,切 Cloudflare Tunnels 標籤建立 Tunnel 通道。

類型選 Cloudflared 較簡單建立 Tunnels 出來;WARP Connector 有一定難度,所以不建議用於新手用。

幫 Tunnel 取個名字(例如:Portainer-Tunnels)

建立完成後,Cloudflare 會給你一段 Token 權杖,要保存好,請勿外流,等等 Portainer 會用到,先別關掉頁面。

用 Portainer 建立 Cloudflared Container
點 Containers > Add container,Name 隨意命名,或許可以用台灣風格可以叫「安全隧道哥」,Image 會自動直接拉取 Cloudflared 映像檔。
- Name:Cloudflared
- Image:cloudflare/cloudflared:latest

- Command:tunnel run –token YOUR_TOKEN
其中 YOUR_TOKEN 從 Cloudflare Zero Trust 取得 Token 權杖 - Entrypoint:cloudflared –no-autoupdate

因為沒有端口映射可做,所以為了簡化網路設定,直接設成 host 網路直連模式就可以。

確保容器內部應用程式能正確使用正確的時區,避免因為主機與容器時區不一致而造成日誌、排程任務、時間戳記等出現混亂,加入時區確保一致。
- name:TZ
- value:Asia/Taipei

設定永久自動重啟(Always),除非你手動停止它,例如容器當機、主機重啟…自動重啟的行為。
- Restart policy:Always

Container 列表內,可看到 Cloudflared 是 running 狀態,代表是成功一半了。

設定對外網域與內部服務
回到 Cloudflare Tunnel 設定頁,剛剛已建立好 Tunnel 地方,在下一步會看到填寫 Public Hostname 主機名稱。
- 子網域:portainer
- 網域:你的網域
- 類型:HTTPS
- URL:內部IP:Port(例如192.168.1.100:9443)

然後記得把無 TLS 驗證設開啟,避免因 HTTPS 無法進去。

完成後,打開瀏覽器輸入:https://你設好的子網域,就代表安全已經連到你 Portainer 了~

常見問題
結論
這次用 Portainer 建 Cloudflared 的過程,讓我覺得 Docker 世界原來這麼有趣,以前總是卡在命令列,現在 GUI 讓一切變輕鬆,如果常搞伺服器,多試多錯才熟練,別怕失敗,笑一笑就過去了!
For me, using Cloudflared with Portainer is a simple and reliable solution.
