SSD Nodes Learn 8GB 内存 — 每年 $66
指南 Matt Connor作者: Matt Connor · 更新于 2026-08-01

WireGuard、Tailscale 和 Headscale 怎么选?

Tailscale 本质是 WireGuard 加控制平面:了解 NAT 穿透、密钥过期和访问策略的实际收益与成本,判断 VPS 应选原生 WireGuard、Tailscale 还是 Headscale。

WireGuard 与 Tailscale:简短结论

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

有三种直接的答案。只有一台服务器和少量客户端,且所有客户端都连接到该服务器时,使用原生 WireGuard。希望每台机器都能访问其他机器,且不想维护配置文件时,使用 Tailscale。希望使用这种网状网络,但不想让第三方保存节点列表时,使用 Headscale。

控制平面实际带来的功能

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

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

它具体带来以下 3 项功能。

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

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

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

控制平面带来的成本

协调服务器了解您的网络。它保存每个节点的公钥、每个节点的名称、分配的地址以及策略。使用托管 Tailscale 时,这些信息由您无法控制的外部公司持有。它们无法读取您的数据包,因为 WireGuard 私钥保留在您的设备上。但它们可以查看网络的结构,而您能否建立连接,则取决于其服务是否正常运行以及您的账户状态是否良好。

还有第二项容易忽略的成本。Tailscale 是每台设备上的守护进程,因此您必须在每台设备上持续安装补丁。Ubuntu 24.04 上的原生 WireGuard 是随发行版提供的内核模块,并随内核一起更新。

第三项成本是计费。截至 2026 年 7 月,Personal 计划免费,最多支持 6 个用户使用不限数量的设备;Standard 计划为每位用户每月 $8;Premium 计划为每位用户每月 $18。家庭用户可以免费使用。10 人团队则不能。

适合使用纯 WireGuard 的场景

当网络拓扑确实是中心辐射型时,选择纯 WireGuard。使用 1 台具有公网 IP 的 VPS,连接到它的设备为 3 或 4 台,并且不要求这些设备彼此访问。配置文件只有一屏内容。不需要更新守护进程,不存在账号丢失的问题,也没有外部服务介于您和服务器之间。

当您想了解其他方案所构建的基础层时,纯 WireGuard 也很合适。在 VPS 上自行托管 WireGuard VPN介绍密钥生成、wg0.conf、IP 转发、NAT 和握手失败。这些机制在 tailnet 下仍然运行。如果您仍在考虑较早的方案,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,登录,设备就会加入网络。无需复制密钥,也无需开放入站端口,因为守护进程会向协调服务器发起出站连接并保持连接。这也是 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 笔记本电脑上设置该项之前,路由仍不会生效。

出口节点会将客户端的所有流量通过一台设备传输,这就是人们通常所说的“VPN”全隧道行为:

sudo tailscale set --advertise-exit-node

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 的全球中继网络。如果两个节点无法直接连接,您需要在自己的服务器上启用内置中继,或将配置指向其他中继服务器。该中继服务器位于单个区域中的单台服务器上,而不是遍布全球的服务器集群。位于地球另一端的节点会明显感受到这一差异。

一次确定方案

询问有多少台机器需要彼此通信。如果答案是它们都只需要与服务器通信,那么使用原生 WireGuard 即可实现相同结果,软件更少。

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

询问哪些人可以了解您网络的拓扑。如果不允许外部公司了解,或者用户数量导致按席位计费成本过高,请运行 Headscale。但这样您需要自行运营控制服务器。

您可以低成本地改变方案。三种方案的数据平面使用相同协议,因此从原生 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 传输数据包。差异体现在连接建立速度和路径质量上。配置正确的普通 WireGuard 使用 Endpoint 时,每次都会直接连接。Tailscale 和 Headscale 大多数时候会直接连接;当网络阻止打洞时,会回退到中继,而中继路径会增加延迟。您可以使用 tailscale ping <node> 测量自己的路径,该命令会报告路径是直接连接还是经过中继;也可以使用 iperf3 测量隧道上的性能。