搜尋此網誌

2026年9月12日 星期六

cloudflare tunnel 初試

緣起:


    前陣子很想弄看看自己的網路服務,一開始是用 ngrok,不過它有流量限制,發現 cloudflare 沒有流量限制後,我就開始研究 cloudflare,看著這篇文章跟著操作。


買 Domain:


    先到 cloudflare 網站,創一個帳號,我是用我 google 帳號來登入 (有 google 就用 google 己經是習慣了)。登入後再去 Domain 那邊,沒自己的 Domain 的話可以直接買


    我買了 birdshiu.com,一年只要 10 美元,哇,超便宜的啦 ~~


Cloudflare Tunnel:


    我想給我的 Raspberry Pi 跑,所以採用 debian 的安裝方式

sudo mkdir -p --mode=0755 /usr/share/keyrings
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null
echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared any main' | sudo tee /etc/apt/sources.list.d/cloudflared.list
sudo apt update && sudo apt install cloudflared -y

    我在看著文章操作時,在啟動 tunnel 時碰上問題,一直說我設定檔有問題,我不確定是哪個環節出了問題,所以最後是請教 claude,請它幫我列完整步驟,我再跟著操作。

    我用 sudo su 切成 root 後再做以下的操作。

    首先登入

cloudflared tunnel login

    它會開你電腦的預設瀏覽器讓你登入,登入完後憑證放 root/.cloudflared/sert.pem

    然後建立 tunnel

cloudflared tunnel create default

    執行完後它會給你一個 UUID 跟憑證檔,在 /root/.cloudflared/<UUID>.json,也可以在 cloudflare 網頁的 Tunnel 面板上看到新建立的 tunnel,或是下指令 cloudflared tunnel list 來確認


    寫設定檔 /root/.cloudflared/config.yml

tunnel: <UUID>
credentials-file: /root/.cloudflared/<UUID>.json

ingress:
  - hostname: comfyui.birdshiu.com
    service: http://192.168.3.3:8188
    
  - service: http_status:404

    ingress 會從頭比對,最後的 http_status:404 那行一定要加,不然啟動會報錯。一般情況下,service 通常都會填 localhost,但我想要開放的服務是區網內的跑 comfyui 的桌電,只要你的 pi 能透過區網訪問到其它電腦的服務,service 那邊是可以直接填那個電腦的 ip。

    然後指到 DNS,它會建立一個指向 <UUID>.birdshiu.com 的 CNAME

cloudflared tunnel route dns default comfyui.birdshiu.com

    去 cloudflare 網頁的 DNS 面板可以看到


    再來測試

cloudflared tunnel run my-tunnel

    跑起來後,開網頁輸入網址測試,確認OK!然後按 control + c 結束,接著要把它註冊成 systemctl 的服務。

cloudflared --config /root/.cloudflared/config.yml service install
systemctl enable --now cloudflared

    它那個 service install 會把設定跟憑證複製到 /etc/cloudflared,之後要更改的話就改 /etc/cloudflared/config.yml。然後切回一般使用者,查看一下 cloudflare 運行的情況,沒報錯的話,你的網站就正式上線了 ~~


Zero Trust:


    我的 comfyui 沒有任何登入驗證,進入頁面後就能直接使用,這可不行,我只想讓我那位韓國朋友存取而已,所以一定要做防護。Cloudflare 有 Cloudflare Access,啟用後會先檔在網站前面。

    我想要設定成只有特定的 email 能存取我的網站,使用者進入我的網站前需要輸入 email,如果是在白名單內的 email,系統就會送 PIN 碼,使用者在頁面輸入 PIN 碼就能通行。

    去 Cloud One 頁面,Intergrations -> Identity providers,這裡可以管理身份識別提供,預設只有 Cloudflare,我們要新增 One-time PIN


    到 Zero Trust -> Access controls -> Applications,Create new application


    我新增一個叫 "comfyui" 的 Application,設定 Destinations 的 Subdomain 跟 Domain


    在 Access policies 那裡 Create new policy,下拉選單選 "Email",然後把我朋友跟我的 Email 填入,最後 Save


    離開 Policy 頁面後,接著設定 Authentication,Chooese available identity providers for this application,我把 cloudflare 拿掉,放 onetimepin


    最後 Save,這樣就完成了。它應該是即時生效的啦(?),我那時搞蠻久的,一直改設定,然後請那位韓國朋友幫我測試,反反覆覆幾次後,大概記得自己的整個作業流程是這樣。



沒有留言:

張貼留言