Cloudflare 真的是佛心公司,提供免費的 DNS、DDoS 防護,還可以拿來託管靜態網頁,而今天是介紹他們公司的 Tunnel,這個服務可以將本地電腦的特定 port 開放到網路上,而且完全免費,在台灣的速度也不慢,真的很佛,幾乎等於拿到免費的 IPv4。
我覺得目前的缺點就是網路上相關的資料比較少,遇到問題很難找到資料參考,因為他其實主要是 Cloudflare 的一項零信任服務,目標客群都是一些厲害的網管,所以官方寫的文件也都很深奧,如果是新手可能會頭昏眼花。
這一項服務可以先不用帳號就能試用,不過就不能自訂 Domain,我會先介紹免登入的,再介紹要登入的。第一步還是要在本地先安裝環境。
安裝 cloudflared
全系統適用
注意 Cloudflare 後面多了一個 d
,這是他連上 Tunnel 的必要程式,是用 Go 編寫,安裝方式就是到官方 Github下載符合自己環境的執行檔。
macOS
mac 可以用 Homebrew 安裝:
brew install cloudflare/cloudflare/cloudflared
Windows
Windows 永遠是最麻煩的,下載完執行檔後,隨便丟到一個資料夾,然後加到 PATH 裡。
Update
要更新這個執行檔,只要 Run 下面的指令,另外,Windows 不支援自動更新,要更新就只能手動下載覆蓋:
cloudflared update
免登入測試 Tunnel
cloudflared tunnel --url http://localhost:8080
執行上面的指令,就可以將本地電腦的 8080 port 用 http 公開到網路上,應該會看到輸出中會給一串個 *-*-*.trycloudflare.com
的網址,現在只要訪問那個網址,就可以發現本地的網頁已經可以從全網連到,不需註冊,也不用設定複雜的 Domain,還不限流量。
登入 Cloudflare
第一步就是先登入 Cloudflare 的帳號,也要有一個已經託管給 Cloudflare 的 Domain:
cloudflared tunnel login
執行這個命令後,應該會跳出瀏覽器授權,如果沒有跳出,就手動複製提供的授權網址登入 Cloudflare 帳號。
創建並使用 Tunnel
登入完成後就可以開始創建通道,創建只會在本地產生一些文件,並不會有任何連線的動作,可以放心執行:
cloudflared tunnel create <Name>
創建完成後,Cloudflare 會給一組 UUID,可以看一下有沒有創建成功:
cloudflared tunnel list
如果要刪除就是 Delete:
cloudflared tunnel delete <Name or UUID>
DNS 設定
在創建 Tunnel 後,Cloudflare 會將剛剛創建隧道時產生的 UUID 綁定到 <UUID>.cfargotunnel.com
這個 Domain,不過 Cloudflare 會擋掉用這個 Domain 直接連線的流量,所以我們要把我們的 Domain 新增一個 CNAME 紀錄,把流量往這邊導。
有兩個方法可以設定 CNAME,一個是自己去 Cloudflare 的官網設定:
另一個是直接用指令設定,快又方便,把後面的 domain 改成自己想要綁定的:
cloudflared tunnel route dns <Name or UUID> test.example.com
打完後如果不放心,還是可以自己到 Cloudflare 的 Dns 設定看一下有沒有設定完成,應該會看到跟上圖一樣產生一個 CNAME Record。
Tunnel Config
下面是最簡單的 Config 範例,這是一個 yml
檔案:
tunnel: <Name>
ingress:
- hostname: test.example.com
service: http://localhost:8080
- service: http_status:404
上面會把 8080 的 HTTP 流量導到 domain.example.com
,使用剛剛創建的 Tunnel。
最後一行一定要有一個可以接受所有流量的 Service,不然服務會不能啟動,這裡全部往 404 導。
Run Tunnel
最後一步,加上 config 的參數,把剛剛的 yml 檔喂給 Cloudflare,就可以啟動通道了:
cloudflared tunnel --config test.yml run
後記
這篇只介紹了如何創建一個 Http 的 Tunnel,如果要開其他的 TCP Port,還需要其他的設定,而且在 Client 端也會需要安裝 Cloudflared,所以我留到下一篇在介紹。