The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

使用 Cloudflare Tunnel 需要建立跨帳號通道時該如何正確設定

我今天被要求要設定一個臨時的網站讓客戶測試,但我的電腦已經設定好了一個通道,當時建立時是使用我在 Cloudflare 的 A 帳號,然而客戶想要連接的域名在我的另一個 Cloudflare 帳號下,設定的過程就卡關了,突然 cloudflared 變的沒有那麼方便。今天我就來記錄一下我如何解決這個問題。

representing a secure and complex connection setup between two different accounts in a cloud-based environment

前置條件

這邊我們假設你已經安裝好 cloudflared 命令列工具:

choco install cloudflared -y

並且假設你已經有一個 ~/.cloudflared 資料夾,這個資料夾是用來存放 cloudflared 的設定檔。

建立帳號憑證

首先我們要先建立一個帳號憑證,這個憑證是用來證明你有權限可以使用 Cloudflare Tunnel 服務的,這個憑證是跟你的帳號有關的,所以你必須要使用你的帳號登入,這邊我們使用 cloudflared tunnel login 來登入,保存兩個帳號憑證的方法如下:

  1. 首先,先登入第一個帳號

    cloudflared tunnel login
    

    執行完後會開啟一個網頁,請登入你的 Cloudflare 帳號,然後選一個要授權的域名。

    預設登入並授權成功後會在 ~/.cloudflared 資料夾下產生一個 cert.pem 檔案,這個檔案就是你的帳號憑證。

  2. 接著,將這個憑證檔案移到其他地方或變更檔名

    move ~/.cloudflared/cert.pem ~/.cloudflared/account1-angular.tw.pem
    
  3. 接著,再登入第二個帳號

    cloudflared tunnel login
    

    執行完後會開啟一個網頁,請登入你的 Cloudflare 帳號,然後選一個要授權的域名。

    預設登入並授權成功後會在 ~/.cloudflared 資料夾下產生一個 cert.pem 檔案,這個檔案就是你的帳號憑證。

  4. 接著,將這個憑證檔案移到其他地方或變更檔名

    move ~/.cloudflared/cert.pem ~/.cloudflared/account2-playwright.tw.pem
    
  5. 當有了兩個帳號的憑證檔,我們就可以順利連接兩個帳號的服務了。

    列出所有通道清單:

    cloudflared `
      --origincert "~/.cloudflared/account1-angular.tw.pem" `
      tunnel list
    
    cloudflared `
      --origincert "~/.cloudflared/account2-playwright.tw.pem" `
      tunnel list
    

等確定都可以連線後,我們就可以開始建立通道了。

建立通道

  1. 先準備一個 cloudflared 所需的設定檔,這個設定檔是用來告訴 cloudflared 要如何建立通道的

    假設檔名為 ~/.cloudflared/account1-angular.tw.yml,內容如下:

    tunnel: site1-tunnel
    
    ingress:
      - hostname: site1.angular.tw
        service: http://localhost:4200
      - service: http_status:404
    

    其中 http://localhost:4200 是你在本機要連接的服務,而 site1.angular.tw 是你要掛載到 Cloudflare Tunnel 讓用戶連接的域名。

  2. 接著就是直接建立通道

    cloudflared `
      --origincert "~/.cloudflared/account1-angular.tw.pem" `
      --config "~/.cloudflared/account1-angular.tw.yml" `
      tunnel create "site1-tunnel"
    

    建立好通道後,會在 ~/.cloudflared 資料夾下產生一個 [GUID].json 檔案,裡面包含帳號與通道的金鑰設定,應妥善保管。

  3. 啟動通道

    cloudflared `
      --origincert "~/.cloudflared/account1-angular.tw.pem" `
      --config "~/.cloudflared/account1-angular.tw.yml" `
      tunnel run "site1-tunnel"
    
  4. 建立 DNS 的 CNAME 記錄

    由於我的域名是由 Cloudflare 所管理的,所以我可以直接在 Cloudflare 的 DNS 設定中建立一個 CNAME 記錄,執行以下命令即可:

    cloudflared `
      --origincert "~/.cloudflared/account1-angular.tw.pem" `
      --config "~/.cloudflared/account1-angular.tw.yml" `
      tunnel route dns "site1-tunnel" "site1.angular.tw"
    

接著你可以用相同的用法,使用不同的憑證去建立另一個通道,這樣就可以在不同的帳號之間建立通道了。

相關連結

留言評論