几乎每个月都有人问我该跑哪套 mesh VPN,而诚实的答案是:2026 年做一次 mesh VPN 对比, 重点已经不在于有多少功能,而在于一个问题——协调服务器归谁所有? Tailscale 与 ZeroTier 常被包装成一场赛马,但真正的分岔口在于:你接受厂商托管的控制面,还是坚持要一套 自托管 VPN。 再往下看,这些工具大多是一套 WireGuard overlay 配不同的成员模型——除了那些根本不基于 WireGuard 的,而那恰恰是最有意思的取舍所在。这篇文章就是我当年希望存在的对比:Tailscale、 ZeroTier、NetBird、Nebula 与 EasyTier,按架构排序,而不是按一张每个季度都在变的功能对照表。
先做个说明,因为这事很相关:这个博客本身就跑在一张 EasyTier 组网之上,我甚至把这个协议拆得 足够深,用 C 重新实现了一个节点。我会尽量不让这层关系影响结论。
mesh VPN 之间真正不同的维度
把营销页面扒掉,真正起区分作用的是七个属性:
- 控制面——是托管服务、可自托管的服务,还是根本没有控制器。
- 数据面——基于 WireGuard,还是自带加密的自研传输。
- overlay 层级——L3(IP 路由)还是 L2(一条跑在 UDP 上的以太网段)。
- NAT 穿透与中继——节点怎么发现彼此,打洞失败时又会怎样。
- 自托管的能力——你到底能掌控产品的多少部分。
- 客户端广度——哪些操作系统和设备是头等支持。
- 锁定成本——想退出要付出什么代价。
其余的一切——类 MagicDNS 的命名、ACL、SSO、审计日志——都真实存在,但它们是搭建在这些 之上的。而且这些也正好是厂商改动最快的地方,所以我刻意比较的是底层管道,而不是设置页面。
控制面:中心化、可自托管,还是压根不存在
任何 overlay 都需要协调:节点得互相认识、交换密钥或地址、发布策略。问题在于这个”大脑”住在 哪里。
托管控制面(Tailscale、ZeroTier Central)是省事的程度遥遥领先的方案。每个节点往厂商那边 “报到”、完成认证,然后拿到当前的 peer 列表。你不用跑任何东西,就能有 SSO、ACL 和一张看板。 代价也同样可预期:如果协调服务器不可达,你的网络就无法建立新的连接;你把可用性押在了别人 身上;你的拓扑元数据也寄存在别人那里。已有的直连会话通常能扛过短暂故障,但你没法在断联期间 把新节点上线。
可自托管的控制面是折中路线。NetBird 提供了可以自己跑的 management 与 signal 服务(同时也 提供托管版)。ZeroTier 的 controller 是开源的,能跑在你自己的机器上,尽管默认走的是它的云。 Tailscale 的客户端是开放的,但它的协调服务器不是——社区给出的答案是 Headscale,一份对该 协议的独立重实现。它很好用,但不是官方产品,也总是落后于托管版。
完全没有控制器是第三条路。Nebula 要求你自己跑若干 “lighthouse” 节点,并自建证书颁发机构。 EasyTier 则天生点对点:把节点指向一个或多个 peer 完成引导,之后网络自行收敛。这两者都没有账号 可以登录。这是你能买到的最彻底的独立,也意味着你签下了最多的运维活。
数据面:基于 WireGuard 还是自研
WireGuard overlay 类产品复用一个小巧、经过审计、广为人知的加密内核。Tailscale 的传输派生 自 WireGuard(在 Linux 之外大多跑在用户态);NetBird 则直接构建在 WireGuard 之上。你得到的是 一套被很多人盯过的加密栈,而且在 Linux 上往往还能留在内核的快路径里。
其余几家的数据面都是自己写的。ZeroTier 讲的是自研的 UDP 协议(自带传输与密钥交换)。Nebula
用的是自己的、基于 Noise 的加密传输。EasyTier 有自己的协议,可以跑在 UDP、TCP、WebSocket 或
QUIC 之上,而且有个讨巧的玩法——甚至能把流量包进 WireGuard 里传(wg://)。
这本身并不构成安全上的定论:它们全都加密,也都用了现代原语。真正的区别在于加密是谁写、谁审计 的,以及自研协议换来了什么。自研传输可以在多路复用上做得更好、能支持 L2、或者玩更聪明的 NAT 技巧;但它们也要求你去信任一个更小的审计面。对 homelab 而言两者都没问题。对合规场景而言,“底下 是 WireGuard”是更容易辩护的那句话。
L2 与 L3 overlay
大多数 mesh 是 L3 的:每个节点在一个扁平子网里拿到一个虚拟 IP,应用程序看到的只是一张可路由
的网络。这通常就是你要的——挂载 NFS、访问 API、curl 一个虚拟 IP。
ZeroTier 是显著的 L2 优先设计:它可以是一条跑在 UDP 上的以太网段,承载广播与多播,让 DHCP、mDNS 发现,甚至非 IP 协议都像大家在同一台交换机上一样工作。代价是额外的开销和更大的爆炸 半径——一个横跨公网的广播域,就是一个能在公网上出岔子的广播域。
只有当你确实需要广播语义、或者有一台死活不会路由的老设备时,才选 L2。其余情况下 L3 要操心的更 少。(包括那些 L3 工具在内,大多数仍提供 “subnet router” 或 “gateway”,用来把节点背后的真实 局域网暴露出来。)
NAT 穿透与中继
每个 overlay 是成是败,都在这一环。躲在 NAT 后面的两个节点没法直接互拨:它们需要类似 STUN 的 机制去发现自己的公网映射,再协同打洞,在两侧各开一条通路。当这套失败时——对称 NAT、激进的 CGNAT、封锁严格的防火墙——流量就回落到双方都能到达的中继上。
名字不同,形状一模一样:Tailscale 有 DERP,ZeroTier 有 roots 和 “moons”,NetBird 有 relay, Nebula 有 lighthouse,EasyTier 有中继。由此得出的工程事实在哪里都一样:
- 汇合节点位于建立连接的关键路径上。多跑几个,最好分布在不同厂商。
- 中继是失败路径,但对每一对打洞失败的节点来说,它就是数据路径,所以要按此规模来配。
- 不要设计一套依赖直连的拓扑。 打洞是尽力而为的。如果你的方案在两个节点走中继时就崩, 那这方案本身就是错的。
自托管的能力
这是大家真正在意的一个维度,所以我说具体些:
- Nebula 与 EasyTier 从构造上就是自托管的。没有需要你退出的云——CA、或者共享密钥, 都是你自己的。
- NetBird 把自托管当作头等选项,提供开源的 management server。
- ZeroTier 允许你跑自己的 controller,托管的 Central 只是默认值。
- Tailscale 是这里托管优先的产品;自托管路线是 Headscale,由社区维护。
值得说一句:“自托管”不一定等于”容器泛滥”。支撑我这张网的那台公网节点,就是一台普通的 VPS 上 跑着一个 systemd 服务,完全没有 Docker——跟我写在 不用 Docker 做自托管 里的做法一样。控制面也只是一个 守护进程,用 unit 文件来跑就很舒服。
客户端广度与锁定成本
客户端广度: Tailscale 与 ZeroTier 的覆盖面最广,包括移动端和 NAS 包。NetBird 的覆盖很宽 且在持续变好。Nebula 的覆盖面偏窄、也更手动——适合你自己掌控的固定机群,对手机这类就不太友好。 EasyTier 覆盖的平台也相当多,而且是往另一个方向上独树一帜:它小到能跑在嵌入式硬件上,这点我是 亲手验证过的。这里的规则很简单:自己去核对当前的平台列表,因为”我们支持 X”是个会移动的靶子。
锁定成本跟随控制面走。如果协调、身份和 ACL 都挂在厂商的云上,那即便数据面开源,这就是你的 退出成本。Nebula 与 EasyTier 的锁定最小:你的 CA 或密钥就是信任锚点,没有账号要迁移。NetBird 和自托管的 ZeroTier 居中。托管的 Tailscale 最省事,也最黏。无论哪种,迁移都意味着给节点重新编址、 重新配密钥——所以在规模上去之前权衡,而不是之后。
横向对比:那些不会变的架构属性
| 项目 | 控制面 | 数据面 | overlay 层级 | 可自托管控制面 | 成员模型 |
|---|---|---|---|---|---|
| Tailscale | 托管(闭源服务器) | 派生自 WireGuard | L3 | 经由 Headscale(社区) | 来自控制面的身份 + ACL |
| ZeroTier | 默认托管 | 自研 UDP | L2(以太网),也可 L3 | 可以(开源 controller) | 网络 ID + 授权成员 |
| NetBird | 开源、可自托管 | WireGuard | L3 | 可以(头等支持) | IdP / SSO + ACL |
| Nebula | 无(自己跑 lighthouse) | 自研(基于 Noise) | L3 | 唯一模式 | 来自自建 CA 的证书 |
| EasyTier | 去中心化(无控制器) | 自研,跑在 UDP/TCP/WS/QUIC/WG 上 | L3 | 唯一模式 | 网络名 + 共享密钥 |
刻意保持定性。这些属性是架构性的、稳定的;而免费额度、席位数、价格、以及哪个功能被锁在付费档 里,则不是——见文末的提示。
同样的活,五种 CLI 怎么做
上手方式很能说明模型。以下都是常见且稳定的调用形式;参数会漂移,所以把它们当路标,别当圣旨。
# Tailscale:向托管控制面完成认证
sudo tailscale up
# ZeroTier:用一个 16 位网络 ID 加入(然后在 Central 里授权)
sudo zerotier-cli join 8056c2e21c000001
# NetBird:向你的 management server / IdP 注册,然后连接
sudo netbird up
# Nebula:带着配置和由你自己 CA 签发的节点证书运行
sudo nebula -config /etc/nebula/config.yml
# EasyTier:没有控制器——只要网络名、密钥,以及一个用于会面的 peer
sudo easytier-core \
--network-name awin-mesh \
--network-secret "$(cat ~/.config/et/secret)" \
--dhcp --peers udp://anchor.example.com:11010
按顺序读下来,理念就漏出来了:Tailscale 给你做认证,ZeroTier 给你做授权,NetBird 给你做注册, Nebula 信任一张你签发的证书,EasyTier 只问你知不知道那个密钥。
EasyTier 在这个博客里的位置
我在这里跑的是 EasyTier,所以我把理由说白:去中心化意味着没有控制面依赖、也没有账号,网络
从一份 peer 列表收敛出来,而且它足够轻,能跑在一台我用两根手指就能捏住的机器上。整套流程——
安装、组网、用 easytier-cli peer 验证、暴露服务——都在
用 EasyTier 搭建私有 mesh 里。真正让我信服的是协议本身
而非营销的那一次,是
用 C 在一个 ESP32-C3 上跑起真实节点:如果一张网能在 400KB
内存里装下路由表并完成加密握手,那它就是一个真实的协议。
这是一种偏好,而不是说它在每个维度上都赢。它没有托管的 SSO,没有看板,共享密钥也是一道全有或 全无的边界。清楚自己在买什么就好。
怎么选
- 想要零运维、小团队、SSO/ACL,且不介意把”大脑”托管出去: Tailscale。
- 需要类局域网 L2、广播,或者有一台犟脾气的遗留设备: ZeroTier。
- 想要开源 + 可自托管控制面 + WireGuard + 由 IdP 驱动的 ACL: NetBird。
- 拥有一支你完全掌控的固定机群,想要自己的 CA、不要账号、甚至要离线隔离: Nebula。
- 想要去中心化、无控制器、对嵌入式友好、运行成本最低且完全归你所有: EasyTier。
- 已经深度绑定 Tailscale,但必须自托管控制面: 试试 Headscale——但要清楚它是社区维护的。
- 不管你选哪个: 在不同厂商各跑一个汇合节点,核实路径确实是直连的,并把密钥或 CA 私钥 当作边界来对待。
具体数字请以各家当前页面为准
我刻意没有在这篇文章里写免费额度的设备数、席位数、价格,也没有做逐项打勾的功能对照表:这些东西 一直在变,而博客是冻结它们的最糟场所。用这篇文章看架构和取舍——控制面、数据面、L2/L3、 NAT 穿透、自托管、锁定成本——然后在你决定之前,去核对每一家当前的定价与平台页面。架构明年仍然 成立;数字不会。