Skip to content

如何使用cloudflare-tunnel將內網服務暴露到公網

Published: at 下午11:52

事前準備

  1. 需要擁有一個 doamin
  2. 需要將 domain 的domain server 託管至 floudflare

需要安裝 cloudflare-cli

sudo apt install curl lsb-release

curl -L https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-archive-keyring.gpg >/dev/null

echo "deb [signed-by=/usr/share/keyrings/cloudflare-archive-keyring.gpg] https://pkg.cloudflare.com/cloudflared $(lsb_release -cs) main" | sudo tee  /etc/apt/sources.list.d/cloudflared.list

sudo apt update

sudo apt install cloudflared

使用

  1. 做登入
cloudflared tunnel login
  1. 新增一個 tunnel xxxxx(自行定義)
cloudflared tunnel create xxxxx
  1. 編輯一個 config.yml
cd /home/{{youruser}}/.cloudflared

# 建立一個 config,yml

vi config.yml

需要記得您 tunnel token 可以看看 .cloudflared 資料夾下的資料

會有一個 XXXX.json XXXX 就是您的 tunnel token

然後要將 json 路徑也寫到 config.yml 檔案內

假設 我的domain 為 ggg.com

我得服務 A 在我機器的 port 7001 我期望他在我子網域 a.ggg.com 出現

我得服務 B 在我機器的 port 7002 我期望他在我子網域 b.ggg.com 出現

檔案內容就會如下

tunnel: XXXX
credentials-file: /home/{{youruser}}/.cloudflared/XXXX.json

ingress:
  - hostname: a.ggg.com
    service: http://127.0.0.1:7001
  - hostname: b.ggg.com
    service: http://127.0.0.1:7002
  - service: http_status:404 
  1. 將設定好的dns 註冊至 cloudflared 會使用到第二步創立的 tunnel name
cloudflared tunnel route dns {{your_tunnel_name}} a.ggg.com


cloudflared tunnel route dns {{your_tunnel_name}} b.ggg.com
  1. 啟動服務
 cloudflared tunnel run {{your_tunnel_name}}

便可透過

a.ggg.com 及 b.ggg.com 訪問

ref

https://www.youtube.com/watch?v=7MDIfHR3GGs