SSD Nodes Learn Hosting plans →
指南 Matt Connor作者: Matt Connor · 更新于 2026-11-01

WireGuard、Tailscale 与 Headscale 怎么选

Tailscale 是加入控制平面的 WireGuard:了解 NAT 穿透、DERP 中继、180 天密钥过期的代价,并判断 VPS 应选 WireGuard、Tailscale 还是 Headscale。

WireGuard 与 Tailscale:简短结论

WireGuard 与 Tailscale 并不是两种协议之间的选择,因为 Tailscale 使用的就是 WireGuard。Tailscale 使用相同的加密机制和隧道,然后增加了一个控制平面:协调服务器负责交换公钥、分配地址、穿透 NAT(网络地址转换),并实施访问策略。您需要选择的是:希望自行运行多少协调功能。

有三种符合实际的选择。如果只有一台服务器和少量都连接到该服务器的客户端,请使用原生 WireGuard。如果希望所有机器都能互相访问,且无需维护配置文件,请使用 Tailscale。如果希望使用这种网状网络,但不希望由第三方保存节点列表,请使用 Headscale。

控制平面实际带来的价值

原生 WireGuard 不提供节点发现。每个对等端都是一段需要手动编写的文本:公钥、AllowedIPs 行,以及在该对等端可访问时使用的 Endpoint。将一台机器加入包含十台机器的网络,意味着要编辑十个配置文件,因为每一端都需要另一端的密钥。这就是几乎所有自托管 WireGuard 部署都采用中心辐射拓扑的原因:一台具有公网 IP 的服务器,以及只与该服务器通信的客户端。

控制平面无需手动编辑配置。每个节点只需注册一次,就会从 100.64.0.0/10 CGNAT(运营商级 NAT)地址范围获得一个地址,并获知允许与其通信的节点的公钥。隧道仍然是两个对等端之间的直接 WireGuard 连接,流量也不会经过协调服务器。服务器传递的是元数据:哪些节点存在、每个节点对应哪个密钥,以及哪些节点可以相互通信。

这会带来以下 3 项具体能力。

NAT 穿透。 两台笔记本分别位于两个家庭路由器后面,彼此之间没有公网 IP。Tailscale 使用 STUN(NAT 会话穿越工具)发现双方的外部地址和端口,然后双方同时发送数据包,使每个路由器先看到出站流,再接受返回流量。穿透失败时,流量会回退到 DERP 中继。DERP 是由 Tailscale 运行的加密中继。数据经过中继时仍保持端到端加密,因为中继不会持有密钥。运行 tailscale status 后,每个对等端行都会显示 direct 或 relay。运行 tailscale netcheck 可查看距离最近的中继,以及网络是否完全允许 UDP。

带过期时间的密钥轮换。 WireGuard 密钥不会过期。除非手动删除对等端配置块,否则三年前签发的密钥仍可永久使用。Tailscale 则会使节点密钥过期。截至 2026 年 10 月,新 tailnet 的默认过期时间为 180 天。未重新进行身份验证的机器将停止连接。对于服务器或子网路由器等不会有人登录的设备,可以单独关闭密钥过期。

使用策略而不是路由。 在原生 WireGuard 中,AllowedIPs 同时充当路由表和访问控制列表,因此“alice 可以访问数据库”必须表示为一个 IP 范围。Tailscale 使用独立的策略文件,规则可以直接指定用户、组和标签。规则可以规定 tag:laptop 只能通过端口 5432 访问 tag:db,不能访问其他内容;即使机器获得了新地址,该规则仍然有效。

控制平面会带来哪些成本

协调服务器了解您的网络。它保存每个节点的公钥、节点名称、分配的地址以及策略。使用托管 Tailscale 时,这些信息由您无法控制的公司持有。由于 WireGuard 私钥保留在您的设备上,对方无法读取您的数据包,但可以看到您的网络结构;而且您能否建立连接,取决于其服务是否正常运行以及您的账户是否处于正常状态。这些因素的重要程度,取决于遭到入侵的协调服务器或被盗的身份账户,究竟能利用所持有的信息做什么。完整阅读 Tailscale 的信任模型会很有帮助。

还有一项容易忽略的成本。Tailscale 是运行在每台设备上的 daemon,因此您必须为每台设备上的该软件及时安装补丁。Ubuntu 24.04 中的原生 WireGuard 是随发行版提供的内核模块,会随内核一同更新。

第三项成本是计费。截至 October 2026,Personal 计划免费,最多支持 6 个用户使用不限数量的用户设备;Standard 计划为每位用户每月 $8;Premium 计划为每位用户每月 $18。家庭用户可以一直免费使用。十人团队则不行。是否超过免费范围,主要取决于用户席位数量,而不是设备数量,但有一个例外:服务器和其他带标签的设备有单独的配额。每个计划都包含 50 个带标签资源;截至 October 2026,定价页面显示,超出部分按每个每月 $1 收费。在邀请第 7 个用户或为第 51 台服务器添加标签前,建议先阅读免费计划实际包含的内容。

适合使用原生 WireGuard 的场景

当网络拓扑确实是中心辐射结构时,选择原生 WireGuard。典型情况是:一台具有公网 IP 的 VPS,三四台连接到它的设备,并且这些设备无需相互访问。配置文件一屏即可显示完整,不需要更新守护进程,不存在账户丢失的问题,也没有任何外部服务介于您和服务器之间。

如果您希望了解其他方案所构建的基础层,原生 WireGuard 也很合适。在 VPS 上自行托管 WireGuard VPN将介绍密钥生成、wg0.conf、IP 转发、NAT 以及握手失败。每个 tailnet 底层仍在使用这些密钥和握手;当 tailnet 节点充当子网路由器或出口节点时,也会重新涉及 IP 转发。如果您仍在考虑较早的方案,WireGuard 与 OpenVPN 的比较介绍了 OpenVPN 仍具优势的 4 种情况。

安装过程很简短:

sudo apt update && sudo apt install -y wireguard
sudo modprobe wireguard && echo ok

当每台设备都必须访问其他所有设备时,原生 WireGuard 就不再便于维护。包含 N 个节点的全互联网络需要 N 乘以 N 减 1 个对等端配置块。以 6 台设备为例,需要手动维护 30 个配置块;如果重复了 AllowedIPs 条目,流量会被其先前对应的对等端无提示地接管,系统不会输出任何错误。

何时应选择 Tailscale

当设备经常变更网络时,应选择 Tailscale。例如,连接酒店网络的笔记本电脑、使用移动数据的手机,以及位于您无法控制的路由器后面的家庭服务器。这些场景正是普通 WireGuard 难以处理的情况,因为双方都没有稳定的公网端点可填入 Endpoint。

客户端可通过官方安装脚本使用一条命令安装:

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
tailscale status

tailscale up 会输出一个 URL。打开该 URL,登录后,设备就会加入网络。不需要复制密钥,也不需要开放入站端口,因为 daemon 会向协调服务器建立出站连接并保持连接。这也是 Tailscale 节点能够在您完全无法控制防火墙的网络上工作的原因。

之后,两个设置可以完成大部分实际工作。子网路由器会将整个 LAN 发布到网络中,因此无需在每台设备上安装客户端:

echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf
sudo tailscale set --advertise-routes=192.0.2.0/24

在管理控制台中批准该路由之前,路由会保持未启用状态。这是有意设计的:节点不能自行向您的网络注入路由。Linux 客户端还需要 sudo tailscale set --accept-routes,因为 Linux 默认不接受发布的路由。因此,即使服务器端显示已批准,Linux 笔记本电脑在设置该选项前仍不会使用该路由。如果这正是您需要的方式,在 VPS 上运行子网路由器会按正确顺序介绍批准步骤和转发设置,避免路由处于半可用状态。

出口节点会将客户端的普通互联网流量,也就是尚未前往其他 tailnet 设备或已批准子网路由的所有流量,经由一台设备发送。这就是人们通常所说的“VPN”全隧道行为。在发布出口节点之前,Linux 需要先设置上文所示的相同 IP 转发选项:

sudo tailscale set --advertise-exit-node

该标志是最简单的部分,将 VPS 转换为出口节点会介绍后续步骤:在管理控制台中批准路由,然后修复 DNS 和 IPv6 行为,否则流量可能会从错误的路径发出。如果您要访问的是一个 Web 服务,而不是整个网络,使用 serve 和 funnel可以将 HTTPS 放在单个本地端口前面,并限制为仅 tailnet 访问或开放到公网。

Headscale 适用的场景

Headscale 是协调服务器的开源实现,运行在您自己拥有的 VPS 上。官方 Tailscale 客户端会连接到它,而不是连接托管服务:

sudo tailscale up --login-server https://headscale.example.com

数据路径完全不变。它仍然使用 WireGuard;在网络条件允许时,节点之间仍会直接连接。变化在于,节点列表、密钥和策略都存储在您自己拥有的磁盘上的 SQLite 文件中。外部任何人都无法查看您网络的拓扑、禁用您的账户,也不会按用户向您收费。

代价是需要自行维护。现在,您需要运行一个公开的 HTTPS 服务,这意味着需要 DNS 名称、证书,以及能够正确转发 WebSocket 升级请求的反向代理。您需要负责服务的正常运行时间。协调服务器宕机会导致新节点无法注册,已有节点也无法获知变更。Headscale 目前仍低于 1.0 版本,其次要版本发布可能包含破坏性变更,因此每次升级前都应阅读变更日志。将 Headscale 作为您自己的 Tailscale 控制服务器运行介绍了安装过程、config.yaml、预授权密钥以及需要开放的端口。

有一个注意事项很容易在后期才被发现。Headscale 不附带 Tailscale 的全球中继网络。当两个对等节点无法直接连接时,您需要在自己的服务器上启用内置中继,或将配置指向其他中继;该中继只是单个区域中的一台服务器,而不是覆盖全球的服务器集群。位于地球另一端的对等节点会明显感受到这一差异。如果您不想自行搭建这一部分,自行托管 NetBird 是将控制平面保留在自有基础设施中的另一种方案,因为其快速入门流程会在一台 VPS 上同时启动管理、信令和中继服务。不过,NetBird 并不像 Headscale 那样是可直接替代 Tailscale 的服务器:它使用自己的客户端和策略模型,因此在选择 NetBird 而不是 Headscale 之前,请先阅读NetBird 与 Tailscale 在访问规则和中继方面的差异。

如何一次判断

先确认需要彼此通信的机器数量。如果它们都只需与服务器通信,使用原生 WireGuard 即可达到相同效果,软件更少。

再确认这些机器是否拥有稳定的公网地址。如果大多数机器位于您无法控制的 NAT 后面,就需要控制平面,因为打洞是最困难的部分,不值得自行重新实现。

然后确认谁可以了解您网络的拓扑。如果答案是不允许外部公司了解,或者用户数量使按席位计费难以承受,可以运行 Headscale,但需要自行运维控制服务器。如果促使您迁移的主要原因是计费,请在决定迁移前先完成成本核算,因为团队实际需要支付的费用主要取决于拥有账号的人数,而不是运行的机器数量;只有在已标记的服务器超过每个套餐包含的 50 台后,机器数量才会影响费用,而这两个数字通常相差很大。

您可以低成本改变选择。三种方案的数据平面使用相同协议,因此从原生 WireGuard 迁移到协调式网状网络,只需安装客户端,无需重新设计;从 Tailscale 迁移到 Headscale,则只需让每个节点重新向另一台登录服务器注册。

三者都无法提供的功能

三者都不是防火墙。隧道决定传输哪些数据包,而不决定哪些服务监听端口。通过隧道可访问的服务器,只要有端口保持开放,互联网仍可直接访问这些端口。因此,请继续让 VPS 上的 UFW 防火墙规则发挥作用。Tailscale 的策略文件可以限制其他节点能够访问的内容,但不会影响公网接口。

三者都不提供按服务进行的身份验证,也都不会记录用户连接后执行的操作。请将三者都视为传输层,并在应用中执行登录验证。

FAQ

Tailscale 只是增加了额外步骤的 WireGuard 吗?

Tailscale 的数据路径使用 WireGuard 协议,因此加密方式和隧道本身相同。它增加的是协调功能:密钥交换、地址分配、使用 STUN 和 DERP 中继进行 NAT 穿透、密钥过期,以及使用用户而不是 IP 地址范围的策略文件。原生 WireGuard 将这些工作留给您;当设备在不同网络之间移动时,这些工作会变得复杂。

我的流量会经过 Tailscale 的服务器吗?

通常不会。协调服务器介绍对等端后,对等端通常会直接连接,tailscale status 会在这些对等端行中显示 direct。如果无法建立直接路径,流量会回退到 DERP 中继,此时该行会显示 relay。即使如此,中继传输的仍是加密数据包,也不会持有您的 WireGuard 私钥,因此无法读取数据内容。运行 tailscale netcheck,查看您的网络是否阻止了直接连接所需的 UDP 流量。

我可以将 Headscale 与官方 Tailscale 应用结合使用吗?

可以。Headscale 使用相同的控制协议,因此官方客户端可以通过 sudo tailscale up --login-server https://headscale.example.com 加入。桌面和移动应用也可以指向自定义登录服务器,但每个平台的设置位置不同;移动应用尤其可能要求特定版本。在迁移整个网络前,先测试一部手机。

使用 Tailscale 或 Headscale 时仍需要开放端口吗?

Tailscale 客户端不需要入站端口,因为它会主动连接协调服务器并保持该连接。自行托管的 Headscale 服务器需要入站端口:控制协议使用 443;使用 HTTP-01 证书质询时使用 80;仅在启用内置中继时使用 3478/udp。原生 WireGuard 需要在服务器上开放其 UDP 监听端口,通常为 51820;如果服务商还提供独立的网络防火墙,也需要在那里开放该端口。

三者中哪个速度最快?

吞吐量相同,因为三者都使用 WireGuard 传输数据包。差异体现在连接建立过程和路径质量上。配置正确的 Endpoint 原生 WireGuard 每次都会直接连接。Tailscale 和 Headscale 大多数情况下会直接连接;当网络阻止打洞时,它们会回退到中继,而中继路径会增加延迟。使用 tailscale ping <node> 测量您自己的路径,该命令会报告路径是直接连接还是经过中继;也可以使用 iperf3 测量隧道上的吞吐量。如果直接路径下该数值远低于线路速率,那么问题不在于三者之间的选择;通常原因是路径 MTU 不匹配,无论是否使用控制平面,都会产生相同影响。

这篇文章对您有帮助吗?