快轉到主要內容
  1. Note/

Cloudflare Tunnel

·2 分鐘· ·
Blog Zh-Tw
Liu Zhe You
作者
Liu Zhe You
涉略全端、DevOps,目前專注在 Backend
目錄

前言
#

目前擔任程式設計(一)助教
因為實習課教室電腦的 IP 都是內網 IP
然後系上 Online Judge 的 VM 只給學校 IP ( 140.116.xxx.xxx ) 進來
沒有開放內網 IP 進來

原本用 ngrok 來做 NAT
但是 ngrok 的免費版每個 tunnel 只給 40 人用
修課人數有 240 多個人
不太可能開 6 個 tunnel 再分配學生連線

這樣非常麻煩…
而且每次 ngrok 重啟都會換一個新的 domain
這樣學生要重新設定連線的 domain

ngrok 的替代方案
#

Cloudflare Tunnel

Cloudflare Tunnel Free Plan 的 :

  • dns setup
  • no connection limitation ( name server 要在 Cloudflare 上 )
  • 其他與 ngrok 一樣

cloudflare tunnel 文件
#

https://developers.cloudflare.com/pages/how-to/preview-with-cloudflare-tunnel/

Installtion
#

可以到 Cloudflare Tunnel Downloads找適合自己的 OS 的版本

Mac OS :

brew install cloudflare/cloudflare/cloudflared

Linux :

wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo apt install ./cloudflared-linux-amd64.deb

Normal Usage
#

如果是 ngrok :

ngrok http 8888

如果是 cloudflare tunnel :

cloudflared tunnel --url http://localhost:8888

start tunnel

就可以從隨機生成 URL 連線到 localhost:8888
但是如果要自己設定 domain 的話,就要額外設定 cloudflared 的 config file

Advanced Usage
#

在設定 domain 前,要確認 domain 的 Nameserver 是設定在 Cloudflare 上

設定完後:可以從自己的 DNS 連到 server 的 localhost:<port>

接著可以使用 command line 來設定 cloudflared 的 config file

  • Authentication
    cloudflared tunnel login
    
  • Create a Tunnel
    cloudflared create <tunnel_name>
    
    cloudflared tunnel route dns <tunnel_name> <domain_name>
    
    會在 ~/.cloudflared/ 產生一個 <tunnel_id>.json

可以在 cloudflare dashboard Accesstunnel 看到 <tunnel_id>

access tunnel

DNSrecords 看到加上的 <domain_name>
content 的部分是 <tunnel_id>.cfargotunnel.com

dns records

configuation
#

cloudflare tunnel : setup configuration file

接著在 ~/.cloudflared/ 中加上 config.yaml

tunnel: <tunnel-id>
credentials-file: /path/to/<tunnel-id>.json # 之前產生的 json file 在 ~/.cloudflared/ 中
ingress:
  - hostname: <domain-name>
    service: http://localhost:<port1>
  - service: http_status:404

在設定 config.yaml 的時候,可以設定多個 ingress
這樣就可以把不同的 port 對應到不同的 domain

例如 :

  • localhost:8888 對應到 service1.domain.com
  • localhost:9999 對應到 service2.domain.com

Start Tunnel
#

啟動 tunnel :

cloudflared tunnel run <tunnel_name>

可以透過 tmux 讓 tunnel 在背景執行
可以參考 tmux 常用指令 !

使用 tmux :

tmux new -s cloudflare-tunnel

然後在 tmux 中執行 cloudflared tunnel run <tunnel_name>
按下 ctrl + b 再按 d 就可以離開 tmux

如果要回到 tmux 中的話,可以用 tmux attach -t cloudflare-tunnel

Command list
#

  • cloudflared tunnel login
  • cloudflared create <tunnel_name>
  • cloudflared tunnel route dns <tunnel_name> <domain_name>

    會在 ~/.cloudflared/ 產生一個 <tunnel_id>.json 並在這邊加上 config.yaml
    cloudflare dashboard Accesstunnel 可以看到 <tunnel_id>

  • cloudflared tunnel run <tunnel_name>

Reference
#

相關文章

常用 tmux 指令
·2 分鐘
Blog Zh-Tw
常用 tmux 指令 Cheat Sheet
FastAPI: 使用 Moto 模擬 S3
·2 分鐘
Blog Zh-Tw AWS Backend Testing FastAPI
FastAPI 測試: 使用 Moto 模擬 AWS S3 Boto3
k8s: 將 ConfigMap 或 Secret 輸出至 .env 格式
·1 分鐘
Blog Zh-Tw Devops Kubernetes
Kubernetes Cheat Sheet: 將 ConfigMap 或 Secret 輸出至 .env 格式
成大資工大一上紀錄
·7 分鐘
Blog Zh-Tw
大一上到底做了什麼
Test Article
New-Article Backend Zh-Tw
其他測試文章"
New-Article Zh-Tw