Tailscale 安全嗎?信任模型與風險
Tailscale 不持有加密流量的 private key,但遭入侵的 coordination server 仍可能註冊未核准裝置。了解控制平面、資料平面與 tailnet lock 的實際防護範圍。
Tailscale 是否安全?簡短回答
Tailscale 是否安全?就大多數人最在意的部分而言,是安全的:執行 tailnet 的 coordination server 不會持有用來加密網路流量的 private key,因此無法讀取裝置彼此傳送的內容。Tailscale 的 security page 直接說明:「Private key 永遠不會離開裝置。所有網路流量一律採用端對端加密。」但真正值得關注的是另一個問題。遭到入侵或收到法律命令的 coordination server,不需要讀取你的封包。它會決定裝置信任哪些 public key,因此可能註冊你從未核准的裝置。
一句話說明這個信任模型:加密保護資料,control plane 決定成員資格。以下各節分別說明你必須信任的對象、該對象實際能執行的操作,以及限制其權限的控制措施。如果你還不熟悉這項產品,請先閱讀 Tailscale 是什麼,以及其 mesh 如何運作。
控制平面與資料平面分離
Tailscale 是建構於 WireGuard 之上的 mesh VPN(虛擬私人網路),使用的協定與您手動設定 自架 WireGuard VPS 時相同。每部裝置都會在本機產生自己的 WireGuard 金鑰組。Tailscale 的 運作方式 文章將協調伺服器稱為「共用的公開金鑰投遞箱」,並表示「私密金鑰永遠不會離開其節點。」
資料平面是裝置之間的加密網路流量。只要網路條件允許,流量就會直接在裝置之間傳輸。控制平面則負責其他所有事項:哪些裝置屬於 tailnet、哪個公開金鑰對應哪部裝置、存取政策、DNS 設定,以及中繼伺服器清單。Tailscale 以託管服務的形式運作控制平面。資料平面則由您在自己的機器上執行。
將這兩者分開,這裡的每個安全性問題都能獲得明確答案。加密是資料平面的特性。成員資格由控制平面決定。無論加密程度多高,都無法告訴您哪些對等端獲准加入。
遭到入侵的協調伺服器可能做什麼?
它無法解密您的網路流量。 執行加密的金鑰是在您的裝置上產生,從未上傳,因此沒有任何金鑰可供竊取或外洩來開啟通道。這也適用於轉送的流量,後文會進一步說明。
它可能註冊節點。 Tailscale 宣布 tailnet lock 時,該公司以自己的說法描述了這項風險:惡意伺服器可能「使用秘密加入的節點,向您現有的節點傳送或接收流量」;此時,「即使流量已加密也無關緊要,因為對等端本身可能是惡意的」。您的裝置之所以信任某個對等端,是因為控制平面告訴它該金鑰屬於此 tailnet。
它可能變更您的裝置可連線的目標。 存取原則位於控制平面,並分發至各節點。Tailscale 的 tailnet lock 白皮書指出,tailnet lock「無法防止遭入侵的控制平面破壞網路中的連線能力,例如不分發新節點的金鑰,或分發拒絕所有節點存取的存取控制原則」。
無論如何,它都能看到連線中繼資料。 Tailscale 的網路流量日誌會記錄每次機器對機器連線的建立與關閉事件。文件指出,這些日誌「嚴格來說不包含任何用戶端作業或網路流量內容的資訊」。因此,控制平面可以知道您的哪些裝置曾彼此通訊,以及通訊時間,但不知道它們傳送了什麼內容。
上述清單中只有一項與加密有關。其餘項目涉及哪些裝置屬於網路,以及原則允許哪些行為。因此,值得您注意的控制項,是管理節點註冊的控制項。
您的身分識別提供者是 tailnet 的信任根
Tailscale 不會自行維護密碼資料庫。其文件明確說明,Tailscale 沒有密碼,登入作業會委派給身分識別提供者(IdP),例如 Apple、Google、GitHub、Microsoft、Okta、OneLogin 或自訂 OpenID Connect 提供者。
請將這項資訊視為安全性聲明,因為它確實如此。任何能登入您的 Google 或 Microsoft 帳戶的人,也能登入您的 tailnet。多因素驗證(MFA)取決於 IdP 所強制套用的設定。人員離職後的停用流程,也取決於 IdP 的處理方式。遭網路釣魚攻擊的 IdP 帳戶,就等同於遭入侵的 tailnet 帳戶。攻擊者不必攻擊 WireGuard,只要新增裝置,就能取得該使用者原有政策所授予的權限。
遭竊的身分帳戶與 tailnet 內可運作的裝置之間,有兩項控制措施:裝置核准與金鑰到期。Tailnet lock 是第三項控制措施,目標是控制平面,而不是帳戶。
裝置核准:未經人員同意,任何裝置都無法加入
Tailscale 的文件將裝置核准描述為一項功能,可讓 Tailscale 網路管理員在新裝置加入 Tailscale 網路前先檢閱並核准。Owner、Admin 或 IT admin 都可以核准。新裝置會在 Machines 頁面顯示「Needs approval」標籤,直到有人處理。
啟用這項功能後,遭竊帳戶的情境會有所不同。攻擊者登入後,裝置會完成註冊,但接著會因無法存取任何資源而停滯;管理主控台則會顯示標籤,提醒你有一台不認識的機器要求加入。自動化仍可正常運作,因為產生 auth key 時可以將其標記為預先核准,裝置也可以透過 API 核准。
Auth key 是另一種進入方式,因此應將其視為憑證。Tailscale 的文件明確警告高風險的類型:「請非常小心地使用可重複使用的金鑰!如果遭竊,可能造成非常嚴重的風險。這類金鑰最好存放在專為此用途設計的金鑰保存庫產品中。」截至 August 2026,文件記載的金鑰有效期限範圍為 1 到 90 days;未指定期限時,預設為最長的 90 days。優先使用一次性金鑰;對於會反覆加入與離開的機器,將金鑰標記為 ephemeral;任何可重複使用的金鑰,都應 使用 Ansible Vault 加密,或存放在 secrets manager 中,而不要放在 shell script 內。
金鑰到期:限制其他錯誤影響的計時器
節點金鑰會到期,因此遭竊或遺忘的裝置只會造成暫時性問題。Tailscale 文件指出:「根據預設,新網域的到期期間為 180 天」,並表示:「如果未重新驗證,金鑰就會到期,與指定端點之間的連線將停止運作。」您可以自行重新驗證裝置:
tailscale up --force-reauth文件警告,這項操作「可能會中斷 tailnet 連線,因此如果沒有其他登入方式,在連線中斷時不應透過 SSH 或 RDP 從遠端執行」。請在已開啟主控台存取的情況下執行,或從進入該機器的第二條路徑執行,因為您即將中斷目前使用的網路。
伺服器最容易繞過這項控制。每 180 天必須重新驗證的機器,可能在凌晨 3 點、無人監看時離開 tailnet,因此管理員會停用該機器的金鑰到期功能。這會移除原本能在一段時間後撤銷遭竊金鑰的計時器。對伺服器而言,使用標記裝置是更好的做法,因為標記代表機器而不是個人,因此即使該人員離開公司,機器仍能繼續運作。無論採用哪種設定,都應記錄哪些機器已停用到期功能:這些金鑰會持續有效,直到您刪除裝置為止。
Tailnet lock:將協調伺服器排除在信任鏈之外
Tailnet lock 直接處理節點註冊問題。Tailscale 的 tailnet lock 文件說明了其機制:「新節點加入 tailnet 時,其公開節點金鑰必須取得 Tailnet Lock 金鑰的簽章。協調伺服器會將已簽章的公開節點金鑰分發給對等節點。」現有裝置會在接受對等節點前驗證該簽章,因此會拒絕由控制平面自行建立的節點金鑰。
tailscale lock status
tailscale lock sign nodekey:1abddef1 tlpub:abcdef12tailscale lock init會啟用此功能,並在啟用時指定簽署節點。Tailscale 要求初始化時至少有 2 個簽署節點,且一個 tailnet 最多可有 20 個簽署節點。此後,每台新裝置都需要其中一個簽署節點的簽章。這會增加實際的操作成本:新增手機時,必須在筆記型電腦上執行指令。
文件已記載這些限制,而且它們比功能說明更重要:
- 遺失停用 secret 後便無法復原。文件指出:「如果遺失停用 secret,且未將其中一個提供給 Tailscale 支援人員,該 tailnet 將無法復原。」
- 簽署金鑰位於你擁有的裝置上,因此會繼承該裝置的安全性。如果裝置遭到入侵,金鑰可能會被取得。文件對此有明確說明:「如果裝置遭到入侵,金鑰可能會被取得。」
- 兩種控制機制無法同時使用。Tailscale 表示,tailnet lock 與裝置核准互斥,因此啟用其中一項就必須放棄另一項。
- 這是首次使用時信任(TOFU)模型。初始設定仍會經過控制平面,只有完成第一個步驟後,信任根才會移至你自己的網路。
Tailnet lock 可保護成員資格,但無法保護可用性,白皮書也明確指出這一點。
轉送連線會暴露我的網路流量嗎?
不會。當兩台裝置無法直接連線時,流量會改經 DERP 伺服器(Designated Encrypted Relay for Packets)。Tailscale 文件明確說明:「由於 Tailscale 私密金鑰不會離開產生該金鑰的本機裝置,因此 DERP 伺服器不可能解密您的流量。DERP 伺服器只會盲目轉送兩台裝置之間已加密的流量。」
轉送仍會降低速度,也會讓轉送伺服器看到中繼資料:兩個已加密的端點,以及兩者之間傳輸內容的時間與資料量。請確認您實際使用的是哪一種連線:
tailscale status
tailscale netchecktailscale status 會將每個對等端標示為直接連線,顯示為 direct 203.0.113.10:41641;或轉送連線,顯示為 relay,後面接著轉送伺服器名稱與位元組計數器。若對等端持續使用轉送,表示兩端無法建立直接路徑。通常是因為某處封鎖 UDP,或兩端都位於嚴格的 NAT(network address translation)後方。tailscale netcheck 會回報該機器是否能使用 UDP、NAT 如何對應連接埠,以及到最近轉送伺服器的延遲。透過這些資訊,可以判斷實際原因屬於上述哪一種。
出口節點會轉移對外流量,不會讓對外流量消失
出口節點會使用預設路由 0.0.0.0/0 和 ::/0,將裝置所有對外網際網路流量,經由 tailnet 上的另一台裝置轉送。在 Linux 上,提供這項服務的機器會發布出口節點,而每個用戶端都必須選擇啟用:
sudo tailscale set --advertise-exit-node
sudo tailscale set --exit-node=100.101.102.103
sudo tailscale set --exit-node=100.101.102.103 --exit-node-allow-lan-access=true
sudo tailscale set --exit-node=出口節點必須由管理主控台中的 Owner、Admin 或 Network admin 核准,且政策必須授予 autogroup:internet,用戶端才能使用。這兩個步驟都是刻意設計的:未經核准的機器無法悄悄成為整個 tailnet 的對外出口。同一個核准機制也適用於子網路路由,因此發布私有範圍的機器,在管理員接受前都不會生效。這也是 從 VPS 將私有網路發布至 tailnet 的第一道門檻。
接著是信任問題。流量從筆記型電腦傳送至出口節點時會經過加密。離開該機器後,流量會以一般網際網路流量的形式傳送,並使用該機器的 IP 位址。因此,出口節點的操作者能看到你的目的地,該機器的代管商及其上游網路也能看到。你只是轉移了觀測位置,並未將其移除。當你能控制遠端端點時,這是合理的取捨,也是 在 VPS 上執行自己的出口節點 的理由;當你無法控制遠端端點時,則是不利的取捨。
預設政策是扁平網路
新的 tailnet 預設採用寬鬆設定。Tailscale 的存取控制文件指出,預設政策檔案「允許 tailnet 內的所有裝置彼此通訊」。每台裝置都能透過所有連接埠連線到其他裝置。這就是扁平網路。將網路放入 tunnel 可防範外部來源,但無法防止已遭感染的筆記型電腦。
請在 tailnet 政策檔案中收緊設定。該檔案接受存取控制清單(ACL)或較新的 grants,兩者都使用允許註解的 JSON 方言:
{
"acls": [
{"action": "accept", "src": ["group:eng"], "dst": ["tag:prod:22"]},
{"action": "accept", "src": ["autogroup:member"], "dst": ["autogroup:internet:*"]}
]
}此政策允許一個群組連線至 production 伺服器上的 SSH,允許成員使用 exit node,並透過省略其他規則來拒絕所有其他流量。Tailscale 會列出各方案可用的規則目標,因此在依賴 tags 或 autogroups 設計政策前,請先確認方案限制,並參閱免費方案實際包含的功能。對於完全不應接受任何傳入連線的裝置,例如個人手機,tailscale set --shields-up可在用戶端封鎖這些連線。
使用 Headscale 自行託管控制平面後的變化
Headscale 是「Tailscale 控制伺服器的開放原始碼、自行託管實作」。其 README 誠實說明了適用範圍:「它實作的範圍有限,支援單一 Tailscale network(tailnet),適合個人使用或小型開放原始碼組織。」功能清單包括 ACL 與 grants、subnet routers、exit nodes、內嵌 DERP server、Tailscale SSH 及 Taildrop。如果這個範圍限制是主要問題,NetBird 是另一個提供可自行託管控制平面的 mesh;在自己的 VPS 上執行 NetBird server,也能將相同的註冊決策移到由你擁有的硬體上。
改變的是有權註冊惡意節點的一方。使用 Headscale 時,金鑰目錄與政策都位於你的伺服器上。任何第三方都不會持有你所有裝置的公開金鑰清單,也無法被迫交出某把金鑰或代為簽署金鑰。
不變的是資料平面。它仍是相同的 WireGuard,具備相同的端對端加密;當無法建立直接路徑時,也仍會使用相同的中繼備援。您也必須承接 Tailscale 原本負責的工作,包括 uptime、修補、備份,以及主機實體安全。遭入侵的 Headscale 主機,會讓攻擊者取得與入侵協調伺服器相同的能力,也就是註冊節點並下發政策。Tailnet lock 不在 Headscale 的功能清單中,因此無法在 Headscale 上提供針對該特定風險的補償性控制措施。成本也會讓部分 tailnet 做出相同選擇,因為 Tailscale 是按使用者而非按裝置計費;小型團隊一旦超出免費方案,計費方式就會改變。如果決定因素是所有權問題,使用 Headscale 自行代管控制平面會逐步說明設定方式。
Tailscale 能防範的問題
- 公開監聽連接埠。 綁定 tailnet 位址的服務無法從網際網路連入,因此掃描每台 VPS 的 port 22 的工具不會發現它。例外情況是由你自行啟用的功能,因為 Funnel 會刻意將 tailnet 服務公開到開放網際網路。因此,在執行任一命令前,值得先了解 serve 的作用範圍與 funnel 的差異。仍應保留主機防火牆,因為已公開的 Docker port 會自行寫入規則,並在公開介面上 繞過 ufw。
- 針對公開登入服務的密碼猜測。 如果該 port 只在 tunnel 內回應,就沒有可供大量嘗試的入口。這比對公開 port 套用速率限制更安全;不過,對於必須保持公開的服務,仍值得在 Ubuntu 24.04 上執行 fail2ban。
- 路徑中的不受信任網路。 你的機器之間的流量會透過咖啡店網路或共用的供應商 LAN 進行端對端加密,即使經由中繼轉送,仍會維持加密狀態。
- 手動管理金鑰分發。 每個手動加入 WireGuard 設定的對等端,都可能造成位址重複使用或貼上錯誤金鑰。這個 mesh 會替你處理相關管理工作,這也是 WireGuard 與 Tailscale 的實務差異中最重要的部分。
Tailscale 無法防護的事項
- 已遭入侵的端點。 tailnet 信任裝置。已核准的筆記型電腦若受到惡意軟體感染,該惡意軟體便能取得 tunnel、tailnet 位址,以及政策授予該使用者的所有權限。這是最大的缺口,沒有任何 VPN 能消除這個問題。
- 惡意或疏忽的管理員。 任何能編輯 policy file 的人,都能授予自己對任何資源的存取權。任何能接管 Owner 的 identity account 的人,也能做相同的事。請以檢視程式碼的方式檢視 policy 變更。
- 流量分析。 您的 ISP (internet service provider) 會看到流向端點的加密 UDP,以及連線時間與流量大小。Tailscale 的 flow logs 會記錄哪些 peer 彼此通訊,以及通訊時間。兩者都看不到內容,但連線這個事實並未隱藏。因此,在為此用途選擇工具前,請先閱讀 Tor 與 VPN 的差異。
- 已遺失的裝置。 key expiry 是緩慢的最後防線,預設為 180 day。從管理主控台移除裝置才是快速措施,因此請在需要前先確認該按鈕的位置。
檢查自己的 tailnet
- 在裝置上執行
tailscale status,並查看對等裝置清單。對無法辨識的機器,正是裝置核准機制要防止的情況。 - 執行
tailscale lock status,確認是否已啟用 tailnet lock,然後判斷為 tailnet 中每部新裝置簽署金鑰是否值得付出這項成本。 - 開啟管理主控台,記下每部停用金鑰到期的機器,以及仍然存在的每個可重複使用驗證金鑰。這兩者都是沒有期限的憑證。
- 讀取政策檔案。如果仍使用預設設定,每部裝置都能透過所有連接埠連線到其他每部裝置,而一台遭感染的筆記型電腦就能連到全部裝置。
Tailscale 在資料平面方面建立了良好聲譽,因為其設計讓營運人員無法讀取你的網路流量。請依照廠商文件所述理解這項主張,然後稽核屬於你的部分:身分帳戶、核准設定、到期清單及政策檔案。Tailscale 的安全性頁面指出其已取得 SOC 2 Type II 認證,並持續與 Latacora 進行安全性工作;這些資訊證明的是其作業流程,而不是你的設定。
FAQ
Tailscale 能讀取我的網路流量嗎?
不能。網路流量使用裝置上產生的 WireGuard 金鑰加密。Tailscale 的安全性頁面也指出:「私密金鑰永遠不會離開裝置。所有流量一律採用端對端加密。」即使連線改由 DERP relay 中繼,情況仍然相同,因為 relay「只會盲目轉送裝置之間已加密的流量」,且不持有可用來解密的金鑰。Tailscale 的基礎架構能看到的是中繼資料:有哪些裝置,以及哪些裝置曾在何時彼此連線。
Tailscale coordination server 遭入侵後,實際上能做什麼?
它可以註冊節點。Tailscale 自己的 tailnet lock 公告說明,風險包括秘密加入的節點可能「向現有節點傳送或接收流量」。在這種情況下,加密無法提供保護,「因為對等端本身可能是惡意的」。遭入侵的 control plane 也可以發布政策,修改裝置可連線的對象。tailnet lock 白皮書另指出,control plane 若不發布新節點金鑰,可能造成連線中斷。但它無法解密現有裝置之間的流量,因為它從未持有這些裝置的私密金鑰。
exit node 能對我的 ISP 隱藏瀏覽活動嗎?
它能對你目前使用的網路隱藏目的地,包括住家或咖啡廳的 ISP,因為所有流量離開裝置時,都是發往 exit node 的加密流量。但它不會讓你匿名。exit node 會看到這些目的地,其託管服務商與上游網路也能看到,而你造訪的網站會看到 exit node 的 IP 位址。你只是改用另一個觀察者,因此應選擇真正信任的對象。
Headscale 比 Tailscale 的 coordination server 更安全嗎?
這是不同的信任決策,不能直接說比較安全。使用 Headscale 時,你自行持有金鑰目錄與政策,因此外部第三方無法被迫在你的 tailnet 中註冊裝置。但你也必須負責執行該伺服器,包括修補程式、可用性、備份,以及主機本身的安全性。遭入侵的 Headscale 主機,能讓攻擊者取得與遭入侵的 coordination server 相同的裝置註冊權限。Headscale 的功能清單也不包含 tailnet lock,因此應依此保護該主機。
位於 tailnet 中的 VPS 仍需要防火牆嗎?
需要。公開網路介面仍然存在,而任何繫結至 0.0.0.0 的服務,無論 Tailscale 是否執行,仍可從網際網路連線。請將服務繫結至 tailnet 位址,在公開介面上維持預設拒絕政策,並檢查已發布的容器連接埠。Docker 會自行加入規則,可能暴露你以為已關閉的連接埠。