Tailscale安全吗?信任模型与控制平面风险
Tailscale协调服务器不持有加密流量的私钥,但遭入侵后仍可能注册恶意节点、改变设备成员关系。了解端到端加密保护什么,以及账户被盗和控制平面失陷的实际影响。
Tailscale 安全吗?简短回答
Tailscale 安全吗?对于大多数人最担心的部分,答案是肯定的:运行 tailnet 的协调服务器不会持有用于加密流量的私钥,因此无法读取设备之间发送的内容。Tailscale 的安全页面明确写道:“私钥永远不会离开设备。所有流量始终进行端到端加密。”但真正有用的问题有所不同。即使协调服务器遭到入侵,或因法律命令被迫提供信息,它也不需要读取您的数据包。它负责决定您的设备信任哪些公钥,因此可能会将您从未批准的设备加入网络。
一句话概括这种信任模型:加密保护数据,控制平面决定成员资格。下面的每个部分都会说明您需要信任的一方、该方实际能够执行的操作,以及限制其权限的控制措施。如果您刚开始了解该产品,请先阅读Tailscale 是什么,以及其网状网络如何工作。
控制平面和数据平面是分离的
Tailscale 是基于 WireGuard 构建的网状 VPN(虚拟专用网络)。WireGuard 也是您在自托管 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 页面显示“需要审批”标记,直到有人处理。
启用此功能后,被盗账号的风险表现会发生变化。攻击者完成登录,设备完成注册,然后设备会停在那里,无法访问任何资源;与此同时,管理控制台中的标记会提示有一台无法识别的机器正在请求加入。自动化仍然可用,因为生成 auth key 时可以将其标记为预批准,并且也可以通过 API 批准设备。
Auth key 是另一种进入网络的方式,因此应将其视为凭据。Tailscale 文档明确警告了高风险类型:“对可重复使用的密钥务必非常谨慎!密钥一旦被盗,可能造成严重风险。最好将其存放在专门设计的密钥保管库产品中。”截至 August 2026,文档规定的密钥过期时间范围为 1 至 90 天;未指定过期时间时,默认使用最长的 90 天。优先使用一次性密钥;对于经常加入和离开的机器,将密钥标记为临时密钥;任何可重复使用的密钥都应 使用 Ansible Vault 加密,或存放在 secrets manager 中,而不是写入 shell 脚本。
密钥过期:限制其他所有错误的计时器
节点密钥会过期,因此被盗或遗忘的设备只会造成暂时性问题。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 个签名节点。此后,每台新设备都需要其中一个签名节点提供签名。这会带来实际的运维成本:添加一部手机意味着要在笔记本电脑上运行命令。
这些限制已有文档说明,而且比功能描述更重要:
- 如果丢失禁用密钥,便无法恢复。文档说明:“如果您丢失了禁用密钥,并且没有向 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(网络地址转换)之后。tailscale netcheck 会报告该设备是否能够使用 UDP、NAT 如何映射端口,以及到最近中继的延迟。根据这些信息,可以判断具体属于哪种原因。如果某个对等节点已经是直接连接,但吞吐量仍不理想,那么问题不在中继,路径 MTU 不匹配通常才是 WireGuard 速度较慢的原因。
出口节点会改变流量出口,但不会消除出口
出口节点会使用默认路由 0.0.0.0/0 和 ::/0,将设备的所有公网 Internet 流量通过 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 发布私有网络 的第一道门槛。
接下来是信任问题。流量从您的笔记本电脑到出口节点的过程中保持加密。流量随后以普通 Internet 流量的形式离开该计算机,并携带该计算机的 IP 地址。因此,出口节点的运营者可以看到您的目标地址,该计算机的托管服务商及其上游网络也可以看到。您只是移动了观测点,并没有消除它。如果您控制远端,这种取舍是合理的。这也是 在 VPS 上运行自己的出口节点 的理由;如果您不控制远端,这种取舍通常并不理想。
默认策略是扁平网络
新建的 tailnet 默认采用宽松策略。Tailscale 的访问控制文档指出,默认策略文件“允许 tailnet 中的所有设备相互通信”。每台设备都可以通过任意端口访问其他所有设备。这就是扁平网络。您只是将网络移入隧道中。这有助于防御外部攻击,但无法防止已感染的笔记本电脑攻击其他设备。
请在 tailnet 策略文件中收紧访问控制。该文件支持访问控制列表(ACL)或较新的 grants,二者都使用支持注释的 JSON 方言编写:
{
"acls": [
{"action": "accept", "src": ["group:eng"], "dst": ["tag:prod:22"]},
{"action": "accept", "src": ["autogroup:member"], "dst": ["autogroup:internet:*"]}
]
}该策略允许一个组访问生产服务器上的 SSH,允许成员使用 exit node,并通过省略其他规则来拒绝所有其他访问。Tailscale 列出了各个计划支持哪些规则目标,因此在围绕 tags 或 autogroups 设计策略前,请先确认相关限制,并查看免费计划实际包含的内容。对于完全不应接受任何入站连接的设备,例如个人手机,tailscale set --shields-up 会在客户端阻止这些连接。
使用 Headscale 自托管控制平面后有哪些变化
Headscale 是“一个开源、自托管的 Tailscale 控制服务器实现”。其 README 明确说明了适用范围:“它实现了有限的功能范围,仅支持一个 Tailscale 网络(tailnet),适合个人使用或小型开源组织。”其功能列表包括 ACL 和授权规则、子网路由器、出口节点、内置 DERP 服务器、Tailscale SSH 以及 Taildrop。如果这一有限范围是主要障碍,NetBird 是另一个提供可自托管控制平面的网状网络方案,而在您自己的 VPS 上运行 NetBird 服务器,可以将同样的设备注册决策转移到您拥有的硬件上。
发生变化的是有权注册恶意节点的一方。使用 Headscale 时,密钥目录和策略都位于您的服务器上。任何第三方都不会持有您设备公钥的列表,也无法被强制交出某个公钥或为其签名。
不变的是数据平面。它仍然使用相同的 WireGuard、相同的端到端加密,以及在无法建立直连路径时使用相同的中继回退机制。您还需要承担 Tailscale 原本负责的工作:可用性、补丁更新、备份,以及服务器物理安全。如果这台服务器是租用的 VPS,那么最后一项依赖的是他人的承诺,而不是您的控制,因为虚拟机监控程序可以读取客户机内存,进而读取密钥目录,除非硬件支持可验证的加密内存。Headscale 主机遭到入侵后,攻击者获得的权限与协调服务器遭到入侵时完全相同:可以注册节点并下发策略。Tailnet lock 不在 Headscale 的功能列表中,因此无法使用针对这一特定风险的补偿性控制措施。成本也会让部分 tailnet 采用相同的方案,因为Tailscale 按用户而非按设备计费;小团队一旦超出免费方案,这种计费方式的结果就会改变。如果所有权问题是决定因素,请参阅使用 Headscale 自托管控制平面,其中介绍了具体设置步骤。
Tailscale 可以防护什么
- 公网监听端口。 绑定到 tailnet 地址的服务无法从互联网访问,因此针对每台 VPS 的 22 端口进行扫描的扫描器不会发现它。例外情况需要由您主动启用,因为 Funnel 的用途就是将 tailnet 服务发布到开放互联网。因此,在运行任一命令前,您应先了解serve 和 funnel 的边界。仍应保留主机防火墙,因为已发布的 Docker 端口会写入自己的规则,并在公网接口上绕过 ufw。
- 针对暴露登录入口的密码猜测。 如果端口只在隧道内部响应,攻击者就没有可用于密码喷洒的入口。这比对开放端口进行速率限制更安全。不过,对于必须保持公网可访问的服务,仍建议在 Ubuntu 24.04 上运行fail2ban。
- 链路中的不可信网络。 您的机器之间的流量会通过咖啡馆网络或共享的服务商局域网进行端到端加密;即使通过中继转发,也仍保持加密状态。
- 手动管理密钥分发。 每次手动将对等节点添加到 WireGuard 配置时,都可能重复使用地址或粘贴错误的密钥。该网状网络会代您完成这些管理工作,这也是WireGuard 与 Tailscale 的区别中最实际的部分。
Tailscale 无法防护的情况
- 端点已遭入侵。 tailnet 信任设备。已获批准的笔记本电脑一旦感染恶意软件,恶意软件就能获得隧道、tailnet 地址,以及策略授予该用户的所有权限。这是最大的安全缺口,任何 VPN 都无法消除。
- 管理员恶意操作或疏忽。 任何能够编辑策略文件的人都可以授予自己对任意资源的访问权限;任何能够接管 Owner 身份账户的人也可以这样做。审核策略更改时,应采用与代码审核相同的方式。
- 流量分析。 您的 ISP(互联网服务提供商)可以看到发往某个端点的加密 UDP 流量,以及流量的时间和数量。Tailscale 的流日志可以显示哪些对等节点在何时通信。两者都无法看到内容,但连接这一事实并未隐藏。因此,在为此选择工具之前,请阅读 Tor 与 VPN 的区别。
- 设备已经丢失。 密钥过期只是缓慢生效的后备措施,默认期限为 180 day。在管理控制台中移除设备才是快速措施,因此请在需要之前确认该按钮的位置。
检查您自己的 tailnet
- 在设备上运行
tailscale status并查看对等节点列表。对于您无法识别的机器,正是设备审批机制需要防止的情况。 - 运行
tailscale lock status,确认 tailnet lock 是否已启用,然后决定为 tailnet 中每台新设备签名是否值得付出相应成本。 - 打开管理控制台,记录所有已禁用密钥过期的机器,以及所有仍然存在的可复用身份验证密钥。这两者都是没有过期时间的凭据。
- 阅读策略文件。如果仍使用默认配置,则每台设备都可以通过任意端口访问其他所有设备,一台受感染的笔记本电脑就能访问全部设备。
Tailscale 的声誉主要建立在数据平面上,其设计使运营人员无法读取您的网络流量。请按供应商文档所述理解这一点,然后审计由您负责的部分:身份账户、审批设置、过期列表和策略文件。Tailscale 的安全页面说明其已获得 SOC 2 Type II 认证,并持续与 Latacora 开展安全工作。这些信息证明的是其流程,而不是您的配置。
FAQ
Tailscale 能读取我的网络流量吗?
不能。流量使用在您的设备上生成的 WireGuard 密钥加密。Tailscale 的安全页面说明:“私钥永远不会离开设备。所有流量始终进行端到端加密。”这也适用于回退到 DERP 中继的连接,因为中继“只会盲目转发设备之间已经加密的流量”,并且不持有任何可用于解密的密钥。Tailscale 基础设施能够看到的是元数据:有哪些设备,以及哪些设备在何时相互建立了连接。
Tailscale 协调服务器遭到入侵后,实际能做什么?
它可以注册一个节点。Tailscale 关于 tailnet lock 的公告说明了秘密添加节点的风险:该节点可以“向现有节点发送或接收流量”,而加密无法解决这一问题,“因为对等端本身可能是恶意的”。遭到入侵的控制平面还可以分发策略,改变您的设备能够访问的资源。tailnet lock 白皮书还指出,如果控制平面不分发新节点密钥,就可能破坏连接。它无法解密现有设备之间的流量,因为它从未持有这些设备的私钥。
exit node 能对 ISP 隐藏我的浏览活动吗?
它会对您当前所在网络隐藏访问目标,包括家庭或咖啡馆的 ISP,因为所有流量都会以加密形式从您的设备发送到 exit node。但它不会让您匿名。exit node 能看到这些访问目标,其托管服务商和上游网络也能看到;您访问的网站则会看到 exit node 的 IP 地址。您只是换了一个观察者,因此应选择真正信任的观察者。
Headscale 比 Tailscale 的协调服务器更安全吗?
这属于不同的信任决策,不能简单认为更安全。使用 Headscale 时,您自己管理密钥目录和策略,因此外部机构无法被迫向您的 tailnet 注册设备。与此同时,您需要负责运行该服务器,包括修补、可用性、备份以及主机本身的安全。Headscale 主机遭到入侵后,攻击者拥有的设备注册权限与协调服务器遭到入侵时相同。Headscale 的功能列表中没有 tailnet lock,因此应采取相应措施保护该主机。
位于 tailnet 中的 VPS 仍需要防火墙吗?
需要。公共网络接口仍然存在,任何绑定到 0.0.0.0 的服务,无论 Tailscale 是否运行,都可以从互联网访问。将服务绑定到 tailnet 地址,在公共接口上保持默认拒绝策略,并检查已发布的容器端口,因为 Docker 会插入自己的规则,可能暴露您以为已经关闭的端口。