Windows 版 Tailscale 預設跑在「使用者工作階段」裡:登出的那一刻,這台裝置就從 tailnet 消失,直到有人再次登入。這對偶爾手動連線的筆電沒什麼影響,但要把 Windows 當成常開的遠端桌面主機、檔案伺服器或 Exit Node,斷線就是大問題。
本文說明怎麼讓 Windows 在無人登入時也保持連線(無人值守模式),Windows 與其他平台不同的路由預設值,以及怎麼把 Windows 設成 exit node。
本文依 2026 年 10 月的 Tailscale 官方文件整理,以 Tailscale v1.104 為準,未實際驗證。其中 CLI 旗標與平台預設值另以 Tailscale v1.104.1 原始碼核對。
預設行為:登出就斷線
不同平台的 Tailscale 用戶端「沒人登入時還要不要跑」的預設值不同(出自官方無人值守模式文件):
- Linux:
tailscaled本來就是 system daemon,從開機起就在背景跑,與有沒有使用者登入無關。 - macOS:跑在使用者登入工作階段裡,目前不支援改成獨立的 system daemon(官方在 GitHub issue #987 追蹤中)。
- Windows:預設跑在使用者登入工作階段。使用者登出或重開機後,Tailscale 會斷線,直到有使用者再次登入。
所以 Windows 上「斷電重開後人不在、卻要連得回這台機器」的情境,一定要另外開啟無人值守模式。
無人值守模式(Unattended mode,又稱 Server mode)
開啟後,Tailscale 會在沒有使用者登入的狀態下繼續執行,登出或重開機都不斷線。官方文件特別註明:無人值守模式只有 Windows 有。
啟用之後,啟用它的那個 Windows 帳號擁有這台裝置上的 Tailscale 設定。其他登入這台機器的使用者,在無人值守模式關閉前,無法切換 profile 或更動設定。
用圖形介面啟用
- 在 Windows 系統匣對 Tailscale 圖示按右鍵。
- 移到 Preferences。
- 選 Run unattended,看到確認視窗時選 Yes。
啟用後,Preferences 選單裡的 Run unattended 會出現勾選記號。
用 CLI 啟用
在 PowerShell 或命令提示字元執行:
tailscale set --unattended=true如果是首次設定、想用 auth key 一次到位(例如部署 VM):
tailscale up --unattended=true --authkey=tskey-auth-xxxxx停用一樣用 CLI:
tailscale set --unattended=false--unattended 對應原始碼的 ForceDaemon
--unattended 只是一個 Windows 專屬的旗標,它背後對應的是偏好設定裡的 ForceDaemon。以 v1.104.1 原始碼核對:
cmd/tailscale/cli/up.go把--unattended宣告為 Windows-only,說明是「run in Unattended Mode where Tailscale keeps running even after the current GUI user logs out」;set指令也有同樣的旗標。旗標適用平台判斷(flagAppliesToOS)對unattended直接回傳「只有 Windows」。ipn/prefs.go對ForceDaemon的定義:讓原本以 client mode 執行(需要登入使用者+GUI 執行中)的平台,在 GUI 結束或使用者登出後仍繼續執行。目前只有 Windows 適用,效果等同讓 Tailscale 進入 server mode;Linux 本來就是 daemon,這個設定沒有作用。
用系統原則集中管理
企業或 MDM 部署可以透過系統原則鎖定這個選項,登錄值在 HKLM\Software\Policies\Tailscale:
| 值名稱 | 型別 | 可能的值 |
|---|---|---|
UnattendedMode |
REG_SZ |
always、never、user-decides |
always 強制開啟、never 強制關閉、user-decides 交還給使用者自己決定。更多系統原則見官方文件。
登出、切換使用者與重開機
幾種「離開這台機器」的方式對 Tailscale 的影響不同:
- 登出(Sign out):結束該使用者的工作階段,Tailscale 預設跟著斷線。開無人值守模式後,登出仍保持連線。
- 切換使用者(Switch user / fast user switching):不會登出原本的使用者,只是把該工作階段切到背景(等同鎖定),工作階段仍存活,所以原本使用者的 Tailscale 會繼續在背景執行、裝置維持連線。不過新登入的使用者是獨立的工作階段,預設看不到也不能接管原本使用者的 Tailscale 設定。
- 重開機:等同所有使用者登出,預設斷線;開無人值守模式後,開機完成(還沒人登入)就會恢復連線。
「切換使用者」這點官方文件沒有逐字說明,這裡是依 v1.104.1 原始碼 ipn/desktop/sessions_windows.go 對工作階段事件的處理(鎖定 → 標為背景工作階段、登出 → 刪除工作階段)與 Windows 本身的行為整理。
驗證
-
登出 Windows,或重開機後停在登入畫面。
-
從 tailnet 裡另一台裝置 ping 這台的 Tailscale IP 或 MagicDNS 名稱:
tailscale ping <hostname-or-ip>
不通的話,到這台的 服務(services.msc)確認 Tailscale 服務設為 Automatic 且正在 Running。
Windows 預設接受 subnet routes
Tailscale 用戶端「是否接受其他節點廣告的網段路由」有一個平台各自的預設值。以 v1.104.1 原始碼的 ipn/prefs.go(DefaultRouteAll)核對:
| 平台 | 預設接受網段路由(RouteAll) |
|---|---|
| Windows | 是 |
| Android、iOS | 是 |
| macOS | 僅 App Store/macsys 版為是 |
| Linux 等其餘平台 | 否 |
影響是:Windows 用戶端預設就會接受其他節點(例如 Subnet Router)廣告的網段路由,不用像 Linux 那樣先跑 tailscale set --accept-routes。本站在 Subnet Router 一文的「用戶端接受路由」一節也有提到。
兩個提醒:
- 這裡的
RouteAll只管網段路由,不含預設路由(0.0.0.0/0、::/0)——那是 Exit Node 的範疇,原始碼註解也明確分開。 - 想強制 Windows 不接受網段路由(例如給訪客用的公用機),可以用系統原則或 MSI 參數
TS_ENABLESUBNETS鎖成never(見下文)。
當 Windows 設成 exit node
Windows 可以當 exit node,設定方式與 Linux 不同——不用手動開 IP forwarding,全部在圖形介面完成(出自官方 exit nodes 文件):
- 開啟 Windows 上的 Tailscale 用戶端,選 Exit node → Run exit node。
- 到 admin console 的 Machines 頁面,找到這台裝置(會出現 Exit Node 徽章)。
- 選 Edit route settings,勾選 Use as exit node,儲存。
之後其他裝置就能在系統匣的 Use exit node 選單裡選這台 Windows 當出口。exit node 的完整概念、核准流程與各平台用法見 Exit Node。
限制與注意事項
- 記得開無人值守模式:Windows 當 exit node 是為了遠端連線,但預設登出就斷線。不開無人值守模式的話,重開機後這台 exit node 會整個消失,其他裝置也走不了。本站在 Exit Node 一文的常見問題裡也提醒過這點。
- 速度與穩定度不如 Linux:Windows 的 exit node 目前以 userspace 路由實作,仍在最佳化中;相關的已知問題見本站 Exit Node 的常見問題一節。要長期穩定當出口,Linux 仍是最成熟的選擇。
- 金鑰到期:裝置金鑰預設 180 天到期、需要互動重新認證。當 exit node 或無人值守主機這類要一直線上的裝置,建議在 admin console 關掉金鑰到期(Disable key expiry),否則到期時正在用它的裝置會整個斷網。
最小權限的 grants 範例
tailnet 只要改過存取規則,就得明確放行「經由 exit node 上網」。目的地不是寫那台 Windows 裝置,而是寫 autogroup:internet:
{
"grants": [
{
"src": ["group:dev"],
"dst": ["autogroup:internet"],
"ip": ["*"]
}
]
}寫成那台裝置的 IP 或名稱,只會允許連到它(例如 SSH),不能經由它上網。想限定只能走特定幾台出口,再加 via 欄位指定路由裝置的 tag。細節與完整語法見 Exit Node 的「自訂 ACL 時要注意」。
Windows 服務與 MSI 部署參數
Tailscale 在 Windows 上安裝時會註冊成一個名為 Tailscale 的 Windows 服務,正常應設為 Automatic(開機自動啟動)。無人值守模式負責的是「登出後用哪個 profile、要不要繼續跑」,與服務本身是否開機啟動是兩回事——驗證時兩者都要確認。
用 .msi 做自動化部署時,可以用 msiexec 的屬性預先設定相關選項(出自官方 Windows MSI 文件):
msiexec TS_UNATTENDEDMODE="always" TS_ENABLESUBNETS="always" /i tailscale-setup-amd64.msi| MSI 屬性 | 登錄值名稱 | 可能的值 | 作用 |
|---|---|---|---|
TS_UNATTENDEDMODE |
UnattendedMode |
always、never、user-decides |
控制 Run Unattended 選單項目 |
TS_ENABLESUBNETS |
UseTailscaleSubnets |
always、never、user-decides |
控制是否接受網段路由 |
TS_ADVERTISEEXITNODE |
AdvertiseExitNode |
always、never、user-decides |
控制 Run As Exit Node 選單項目 |
MSI 屬性寫入 HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Tailscale,型別都是 REG_SZ。完整的屬性清單見官方 MSI 文件。