Ivon討論如何利用Tailscale將Linux伺服器的服務公開到外網,並加上HTTPS,供他人存取。
1. 二個方案#
根據官方文件,Tailscale要公開電腦上的服務,有兩種作法:
第一個是 Serve,監聽本機通訊埠,讓Tailscale網路的用戶都能存取你電腦上的服務。有點像是你公開一個網址,但只有連線到Tailscale VPN的人才能存取那個網址。Serve一次只能監聽一個服務的通訊埠。除監聽本機通訊埠之外,也能分享單一目錄,架設簡易檔案伺服器。
第二個是 Funnel,監聽本機通訊埠,且向公眾開放。這個功能很像Cloudflare Tunnel,將你的服務以隨機網址公開,別人不需要連線到Tailscale VPN也能存取。Funnel一次只能監聽一個服務的通訊埠。
看起來不錯?不是麼,但要注意幾點:Tailscale不允許使用自訂域名,只能用他們提供的域名連線,故你不應該用Tailscale架網站。還有這二個服務都不是單純的P2P,中間會經過Tailscale relay伺服器連線,延遲可能會很高,流量太大亦可能會受到限制。
目前Tailscale這二個服務的用途比較像是給Self-hosted的人士,或者小型組織內部測試程式使用的。那麼具體用在什麼地方呢?你可能會說,Tailscale的連線本身就有點對點加密,何需HTTPS?真的就有一些服務需要HTTPS呀!比如Ivon在架語言模型的 網頁聊天程式Open WebUI的時候,沒有HTTPS瀏覽器會顯示「不安全」,且若網頁程式要存取客戶端的相機、麥克風,那麼HTTPS是必不可少的。
SSL憑證安裝看似複雜,其實不然,只要裝好Tailscale的客戶端,再執行幾行指令,它就會自動註冊好。
2. 取得SSL憑證#
不論是Serve,還是Funnel,二種操作都需要先執行Tailscale的指令,安裝SSL憑證啟用HTTPS才可以使用。
Tailscale會自動幫我們跟Let’s Encrypt申請憑證,憑證相關檔案都是存放在本機,不是在Tailscale伺服器。
於Linux 安裝Tailscale
參考 Enabling HTTPS · Tailscale Docs,到Tailscale網頁後台設定,啟用「MagicDNS」和「HTTPS」
執行以下指令,取得SSL憑證
sudo tailscale cert
- 之後Linux電腦便會以畫面上顯示的網址公開,網址應為
taild.ts.net
結尾,子網域部份是MagicDNS賦予的裝置名稱,可以自訂。
Tailscale取得的SSL憑證並非全部裝置都能用,只對這台電腦有效。如果其他電腦需要憑證,那麼要再跑一次指令。每部裝置的SSL憑證90天後就會過期,需要手動更新。
Tailscale取得的憑證似乎沒辦法直接用在MagicDNS的樣子,比如輸入http://裝置名稱.taild.ts.net
能連線,但https://裝置名稱.taild..ts.net
無法正常連線,必須用下面談的Serve和Funnel明確指定要公開哪個服務才可以。
3. 使用Tailscale Serve#
只對Tailscale網路的用戶開放服務。
Ivon跑的服務Open WebUI預設使用通訊埠為3000,使用以下指令監聽3000通訊埠
sido tailscale serve 3000
之後,其他連上Tailscale VPN的裝置應該就能透過網址存取服務。
關閉Serve請按下CTRL+C。
4. 使用Tailscale Funnel#
對任意用戶開放服務。注意Tailscale不提供任何認證機制,暴露到公網的服務必須設定強力密碼防止被駭入。
我跑的服務Open WebUI預設使用通訊埠為3000,使用以下指令監聽3000通訊埠,依照畫面指示啟用Funnel:
sudo tailscale funnel 3000
嘗試用沒有Tailscale連線的裝置連線看看,輸入https://裝置名稱.taild.ts.net
網址應該能存取服務。
Funnel會跟著tailscaled
服務一直在背景執行,若要關閉,執行以下指令:
sudo tailscale funnel --https=443 off