Cloudflare Tunnel這款服務能將你的本機服務暴露到公開網路,讓你用自訂網域存取內網的服務。它除了轉發HTTP的流量之外也支援TCP協定。故,我們可以透過這個服務,建立網頁版的VNC連線畫面。
這樣客戶端連VPN都不需要,只需要一個瀏覽器,便能夠存取遠端Linux的桌面。
說到網頁版的VNC方案,我們有KasmVNC和noVNC這類方案,為何還要用Cloudflare Tunnel呢?
它的價值就在於把不支援瀏覽器的VNC轉換成網頁版本,例如TigerVNC或TightVNC,讓你能沿用現有的配置。並且Cloudflare Tunnel能結合Cloudflare Zero Trust,在登入VNC之前再加一層強力驗證,讓VNC密碼更難被暴力破解。
1. 設定VNC服務#
我以Ubuntu + XFCE桌面為例子
請先安裝TigerVNC,設定好Systemd系統服務。VNC通訊埠設定5901。
由於Cloudflare Tunnel的網頁界面無法調整VNC的連線品質,可能產生畫面撕裂。建議在伺服器端就先設定降低頻寬的措施,例如指定1280x720以下的低解析度,防止延遲過高。
此外,目前Cloudflare Tunnel不支援音訊串流。
2. 設定Cloudflare Tunnel#
安裝cloudflared服務,將其與個人網域連結。
修改cloudflared設定檔,設定監聽TCP 5901
tunnel: "填入Tunnel的UUID"
ingress:
- hostname: vnc.example.com # 連線到自訂網域的vnc子網域
service: tcp://localhost:5901 # 監聽VNC通訊埠
- service: http_status:404
- 啟動Cloudflared服務
sudo systemctl start cloudflared
在Cloudflare後台編輯網域的DNS紀錄,新增一筆CNAME紀錄,新增一個子網域vnc,後面填寫
<Cloudflare Tunnel的UUID>.cfargotunnel.com
。前往Cloudflare Zero Trust,點選Access → 新增應用程式 → Self-hosted,新增應用程式,指向vnc子網域,原則設定Email登入。
瀏覽器轉譯勾選VNC
前往
https://vnc.example.com
。這樣登入前要先輸入一次E-mail驗證碼,再輸入VNC密碼,才會看到遠端Linux的桌面。