引言
在上一篇《使用 Tailscale 輕鬆建立安全且私密的通道》中,我們介紹 Tailscale 背後的原理、如何安裝 Tailscale 以及兩台電腦之間的連線。隨著企業對內外網路整合與資源共享需求的日益增長,本篇文章將進一步探討 Tailscale 的進階應用,包括 Taildrop 檔案分享、出口節點(Exit Node)設定 以及 子網路路由(Subnet Routing)配置。藉由這些功能,可以更有效率地進行內網穿透與遠端存取,同時提升整體網路安全性與管理效能。
上述內容不僅適用於企業環境,個人使用者亦可藉由 Tailscale 將 NAS、影音串流等內網服務安全整合,實現高效且便捷的遠端存取與管理。
舉一些簡單的例子如:
- 如何將裝置 A 中的檔案或是照片,安全且高效地傳輸至裝置 B?
- 如何讓裝置 B 能夠藉由裝置 A 進行網際網路連線,以解決部分網頁無法存取的問題?
- 裝置 A 可連線至 NAS(IP 為 192.168.88.88),位於外網的裝置 B 如何能透過此 IP 連線到 NAS?
這些議題將在後續章節中進一步討論與說明。
連線裝置確認
我們先確保至少有兩台裝置已成功安裝 Tailscale。在 Windows 系統中,執行 命令提示字元(CMD)
並輸入以下指令:
|
|
回傳裝置結果如下:
|
|
或是也可以到 Tailscale Admin Console 查詢裝置狀態,可以看到目前已註冊多個裝置到 tailnet 中。
使用 Taildrop 傳遞檔案
可以透過 Taildrop 進行兩個裝置之間互相傳遞檔案或資料。Taildrop 的概念類似於 Apple 裝置上的 AirDrop,但與 AirDrop 主要依賴 Wi-Fi 或藍牙傳輸不同,Taildrop 是透過 Tailscale 的安全加密通道進行檔案傳輸,且不受裝置距離限制都能順利完成傳輸。
啟用 Taildrop
Taildrop 目前仍處於 Alpha 階段,需要手動啟用才能使用該功能:
- 登入 Tailscale Admin Console
- 進入 Settings > General
- 找到 Send Files(傳遞檔案) 選項,並開啟 Taildrop 功能。
傳遞檔案
將手機上的檔案傳送至其他裝置,我們可以先選取欲傳送的照片或檔案,點擊分享選單,並選擇 Tailscale。隨後,系統會顯示可傳遞的目標裝置,選擇目標裝置後,即可開始傳輸。檔案傳送完成後,將自動存放於 目標裝置的下載目錄 中。
從電腦傳檔案到 iPhone、Mac 或是 Android 裝置上也非常簡單,對檔案右鍵
→ Send with Tailscale...
,就可以輕鬆在其他裝置上取得檔案。
傳遞檔案到 NAS
Synology NAS 預設並無下載資料夾,因此需手動建立一個新的共用資料夾,並命名為 Taildrop
。接著,需為系統內的 tailscale
使用者賦予該資料夾的讀寫權限,完成設定後,即可透過 Taildrop 將檔案傳輸至 NAS。
- 建立共用資料夾
- 進入 Synology 控制台 > 共用資料夾 > 建立
- 設定資料夾名稱為
Taildrop
- 略過加密及進階設定
- 設定
tailscale
使用者權限- 於權限設定畫面中,顯示內部使用者帳號
- 找到
tailscale
使用者賦予完整存取權限
- 完成設定
- 確保
tailscale
具備讀寫權限後,即可透過 Taildrop 傳輸檔案至 NAS,傳輸後的檔案將儲存於 Taildrop 資料夾。
- 確保
Linux 傳遞檔案
在 Linux 進行檔案傳輸,我通常會使用 SCP + SSH
。然而,若伺服器未啟用 SSH,也可以考慮使用 Taildrop 作為替代方案。
在操作 Tailscale 指令,如果未設定 Tailscale 的 operator
,每次執行指令時都需要使用 sudo
提升至系統管理員權限。為了簡化操作,可以設定 operator
,讓當前使用者擁有 Tailscale 操作權限,避免頻繁使用 sudo
來執行 Tailscale 指令:
|
|
在 Linux 上,可以使用 tailscale file cp
指令來傳送檔案,格式為:
|
|
指令結尾的冒號 (:
) 是 Tailscale 規定的格式。例如,傳送 gen_cert.sh
檔案至 wells_home
裝置:
|
|
執行後的輸出結果如下:
|
|
若要接收檔案,可先在裝置 A 透過 Taildrop 在電腦上傳檔案至伺服器,然後在 Linux 上執行以下指令,將檔案存入當前目錄 (.
):
|
|
使用 Tailscale 設定出口節點來轉送流量實現翻牆
在某些情境下,我們希望將所有或部分網路流量透過特定裝置發送,例如:
- 出差到國外,無法正常連線至特定網站或服務(如 ChatGPT)。
- 某些網頁透過 IP 確認裝置是否為特定機構才能存取,但當前裝置不在內部網路。
- 想要加強隱私保護,透過可信任的裝置轉送流量,而非直接使用公共網路。
我先前出國買的部分 SIM 卡會漫遊到香港,香港目前會受到 ChatGPT 的限制而無法正常使用。此時透過出口節點,選擇在臺灣或是其他地區的伺服器,即可繞過限制。
設定出口節點
使用出口節點相當簡單,首先需將目標裝置設定為出口節點
。
在 Windows 和 macOS 上,可以右鍵點擊圖示,然後選擇 Exit nodes → Run exit node…。
在 Linux 上,則需先啟用 IPv4/IPv6 轉發,執行以下指令:
|
|
由於 Tailscale 已經啟動,我們只需附加 --advertise-exit-node
旗標,即可將裝置設定為出口節點:
|
|
在裝置端宣告為出口節點後。接著,進入 Tailscale Admin Console,在路由設定中啟用 Use as exit node
。
連線出口節點
設定完成後,其他裝置(例如手機)可以透過 Tailscale 連線,並選擇出口節點。選擇出口節點後,可以透過 Cloudflare Radar 檢查 IP 或是於終端機中輸入 curl checkip.amazonaws.com
取得 IP,確認是否已變更為出口節點裝置(server-1)的 IP。
Linux 系統可以透過以下指令進行連線出口節點:
|
|
之後,所有流量將透過所選的出口節點進行傳輸,可以在有網路封鎖的地區可以繞過限制。
使用 Tailscale 子網路路由
在企業或個人網路環境中,部分裝置(如 NAS、伺服器、印表機等)無法直接安裝 Tailscale,此時可透過 子網路路由(Subnet Routing) 存取這些內部裝置。Tailscale 允許特定裝置充當 閘道器(Gateway),讓其他裝置透過該閘道訪問整個內部子網路。
宣告子網路
假設裝置 A 與內部路由器(IP:192.168.100.1)可直接通訊,若希望裝置 B 也能透過 Tailscale 存取該網頁服務,則可在裝置 A 上宣告子網路。在系統中執行終端機,輸入以下指令:
|
|
以上範例中的 192.168.100.0/24
採用 CIDR 表示法,對應的 IP 範圍為 192.168.100.0 ~ 192.168.100.255
。
如果只需共享 192.168.1.1 ~ 192.168.1.10
,就必須在指令中以 CIDR 表示法分段指定:
|
|
可使用 CIDR 計算機 找出最佳化的 IP 區段設定。
在 Linux 系統上,需要另外啟用 IPv4/IPv6 轉發功能,執行以下指令:
|
|
完成子網路宣告後,進入 Tailscale Admin Console,在對應裝置的路由設定中啟用 宣告的子網路
:
設定完畢後,Tailnet 內的所有裝置即可存取 192.168.100.xxx
下的裝置。例如在 Windows 系統下進行 ping 測試:
|
|
使用系統通訊埠轉發
除了藉由 Tailscale 宣告子網路,也可以直接使用系統內建功能進行通訊埠轉發。例如在 Windows 中透過 netsh
、或在 Linux 中透過 iptables
將外部連接埠導向內部裝置。然而,若希望更有效率地管理存取權限,並且能為不同子網路的使用者提供彈性的控管,建議優先採用 Tailscale 子網路路由。Tailscale 本身的存取控制(access control lists,ACL)可更輕鬆指定哪些裝置能夠連線到目標子網路,避免繁雜的防火牆與轉發規則設定。
Windows 系統轉發
以 Windows 為例,在「系統管理員模式」下執行終端機後,可透過以下指令將外部 9999 連接埠轉發至 192.168.100.1
的 80 連接埠:
|
|
如果要刪除規則可透過以下指令:
|
|
新增路由後,使用者只需輸入 http://server-1:9999
,便可看到該 Web 服務。若要檢視所有路由規則,可執行以下指令:
|
|
範例輸出結果:
|
|
若電腦安裝了其他防火牆或防毒軟體(例如 Bitdefender),需在防火牆規則中允許通訊埠 9999 的入站或雙向連線:
Linux 轉發
在 Linux 系統中,也可利用 iptables
進行路由轉發。下列指令需在「系統管理員模式」下執行:
|
|
可透過以下指令確認規則是否生效:
|
|
成功後,應會看到類似下列輸出:
|
|
若系統啟用了防火牆(例如 ufw
),須確保已開啟 80 通訊埠號的入站流量:
|
|
如此一來,即可使用 Tailscale 裝置名稱 + 通訊埠號的方式進行存取特定的服務。
結論
本篇文章深入探討 Tailscale 的進階應用,包含 Taildrop 檔案分享、出口節點 及 子網路路由,以滿足企業與個人用戶的內網穿透、遠端存取與網路優化需求。
此外,文中還介紹了 通訊埠轉發 的操作,說明如何透過 Windows netsh
或 Linux iptables
進行通訊埠映射,建議優先使用 Tailscale 內建的子網路路由功能,可以透過 ACL 更快建立規定哪一些裝置可以進行存取,以確保更高的安全性。無需依賴繁瑣的防火牆設定。
如果有需要針對特定裝置才能存取子網路,可以參考 Manage permissions using ACLs,官方已經提供完整的說明與設定。
最後,多數工作用 Windows 筆電配備雙網卡(有線與無線網路)。可透過設定 fMinimizeConnections
為 0
,使電腦同時連接 Wi-Fi 和有線網路。接著,可使用 route
指令進行子網路分流,預設所有流量經由無線網路(外網),而針對 172.x.x.x 或 192.x.x.x 內部子網路,則導向有線網路。需要特別注意,透過此方式繞過內網限制可能帶來安全風險,務必謹慎評估是否有這些路由需求。