Tailscale:为普通人打造的 WireGuard 全互联网络

你坐在咖啡馆里,要 SSH 进家里的服务器,同时室友的打印机还得连上你 NAS。两个隔了几公里的公寓,三套不同的网络,三层不一样的 NAT。

传统 VPN 怎么搞?全都路由到一台中心服务器。文件一多、流量一大,这台机器就当场卡脖子——不管是带宽还是延迟。

Tailscale 想解决的就是这个:节点之间能不能直接说话,非迫不得已再用中继

这就是它的卖点。真实现起来,是一坨紧凑的组合拳:WireGuard、用户态网络协议栈、STUN/TURN 风格的 NAT 穿透,外加一套自家研发的中继协议 DERP。一旦看清各部分是怎么咬合的,魔法也就不是魔法了。

Tailscale 到底是干嘛的

Tailscale 是一个架设在 WireGuard 之上的 mesh VPN。装个客户端,登个号,那台设备就会出现在你所有设备列表里,分到一个 100.x.x.x 网段的稳定 IP。

开箱即用的能力:

  • 不用配防火墙。 客户端自动穿透 NAT。
  • 正常流量不走中心节点。 设备之间能直连就走直连。
  • 密钥自动轮换。 WireGuard 的密钥在后台悄悄换。
  • SSO 登录。 用 Google、GitHub 或者任何 OIDC 身份源登一下,工作身份直接变成网络身份。
  • 端到端加密。 DERP 中继只看到加密流量,根本读不懂。

真正有意思的部分,是直连到底怎么打通——这就要靠 NAT 穿透了。

WireGuard 这一层底座

WireGuard 负责加密。每个 Tailscale 节点都跑一套 用户态 的 WireGuard,不是内核态。

为啥选用户态?内核态更快,但要 root 权限、还要匹配内核头文件。用户态 WireGuard 是用一点点吞吐换来了”无需管理员权限”——企业锁定的笔记本、IoT 小盒子全都能装。

加密该有的都有:Curve25519 做密钥交换,ChaCha20 做对称加密,Poly1305 做 MAC。线上的包就是合法的 WireGuard 包。Tailscale 只多干了一件事:让包穿过 NAT 找到对端。

如果只要加密、不需要玩花的 NAT,单纯的 WireGuard 站点到站点还是够用。Tailscale 是叠在它上面,不是替换它。

NAT:为什么直连这么难

家里路由器有 NAT。咖啡馆有另一套。手机运营商又是一套。每套对入站包的开放程度都不一样。

NAT 穿透里最关键的分界:

Easy NAT(终点无关映射,EIM)。 一旦笔记本给某服务器发了个包,路由器就开一个映射,任何源的入站包都能过。家用路由器大多这样。穿透主要就是拿到公网 IP 和端口。

Hard NAT(终点相关映射,EDM)。 路由器的映射是和目的地绑死的。别的目的地来的入站包全丢。企业防火墙和”运营商级”NAT 通常走这种。戳这种 NAT 的洞,难得多。

STUN 解决的是 Easy NAT 这一档。笔记本问 STUN 服务器:”你看到我的公网 IP:端口是啥?”STUN 就告诉你。再把这个地址告诉对端。如果两边都是 Easy NAT,就能直连。

STUN 失败的情况——任一边是 Hard NAT——Tailscale 就退回中继。

DERP:那个其实很聪明的中继

老派的中继协议叫 TURN:客户端去公共 TURN 服务器认证一下,拿到一个分配的 IP:端口,把这个地址交给对端。简单的客户端-服务器模型。能用,但不太好用。

Tailscale 用的是 DERP(Detoured Encrypted Routing Protocol)。有意思的地方有三处:

  1. 跑在 HTTP 上。 大多数网络即便封了 UDP 和乱七八糟的 TCP,也还是会放行 HTTP。DERP 长得像普通 Web 流量,所以能过各种严苛防火墙。
  2. 按目的公钥中继。 DERP 不解密你的流量,只是按 WireGuard 的目的公钥把加密数据转给对的节点。
  3. 自动选最近的 DERP。 Tailscale 会挑地理上最近的那台 DERP 给你走。你在上海,流量就走香港或东京的 DERP,不会绕到弗吉尼亚。

巧妙的地方在”连接升级”。每个 Tailscale 连接一开始都是 DERP——瞬间建立,永远能通,但优先级低。然后并行去做另一件事:用 STUN、ICE 加各种 NAT 打洞的招数,找直连路径。几秒之后,找到的话,连接就静悄悄地升级到 P2P。

所以 DERP 不只是兜底,它是让整个魔法跑起来的 引导层。没有 DERP,你每次都得先等几秒等 NAT 穿透完才有流量。有了 DERP,流量先动起来,等更好的路出来,再加速。

Headscale:开源的控制服务器

Tailscale 本身有个坑:控制服务器——管 ACL、知道有哪些节点、签发 WireGuard 密钥、操作用户身份的这块——是闭源的。免费版 3 个用户、100 台设备。超了就付费。

Headscalegithub.com/juanfont/headscale)就是控制服务器的开源重写。API 和官方 Tailscale 客户端兼容。你在自己 VPS 上跑一个,节点连上来时指向它而不是 controlplane.tailscale.com,整条栈就都是你的了。

部署基本就是一份 Docker Compose。你大致需要这些:

  • PostgreSQL 当元数据存储(Headscale 在多节点场景下弃了 SQLite,改用 Postgres)。
  • Headscale 容器要加 cap_add: NET_ADMINNET_RAW,好让容器里能转 IP。
  • Headplane(可选但建议装)——一个 Web UI,管用户、节点、ACL 不用碰命令行。

完整的 docker-compose.yml 在 Headscale 仓库里有。我自己跑过的版本是 Headscale 0.23+、Postgres 16、Headplane 0.4+。资源占用很温和,$5 的小 VPS 都能跑。

全互联比星型强在哪

传统 VPN 给每个远程节点一条路:全走中心服务器。所有用户共享带宽。延迟被光速打到中心再回来卡死。

全互联给每对节点一条直连路径。带宽被这一对里最慢的上传决定——一般就是家里上传慢的那一方。延迟就是两端之间的实际往返,没别的。

实际上,下面这些场景收益最明显:

  • 多个远程站点要互联(家里、父母家、朋友家、公司笔记本)。
  • 对等型工作负载——A 是 B 的重度客户端(文件同步、备份、屏幕共享)。
  • 节点不算多,O(n²) 的连接数还能扛住(Tailscale 单网络撑到 100 出头很舒服,再往上密钥分发就开始吵)。

非对称的工作负载——反正大多走同一台机——省下来的就少。比星型拓扑好一点,但只是进步一点点。

你要付出的代价

全互联不是白嫖的。每个节点都得存所有其他节点的密钥,还要为每个节点维护一个会话。10 个节点就是 45 个会话。100 个节点就是 4950 个。Tailscale 撑到几百台还算稳,再往上得考虑分层架构了。

中继兜底也有代价。如果全互联网络里 80% 的对都打不通直连,那虽然名义上有 mesh,实际上还是在付 DERP 带宽的钱。家用网络大多 Easy NAT,问题不大;企业防火墙就经常逼你走中继。

信任模型也得选一下。官方 Tailscale 的控制服务器看得见你的节点 IP、用户身份、ACL 策略。这些元数据都放在 Tailscale Inc. 的基础设施上。用 Headscale 就能把元数据攥自己手里,代价是多了一堆运维。

五分钟上手

想感受一下区别,可以这么搞:

Bash
# Install on Linux
curl -fsSL https://tailscale.com/install.sh | sh

# Authenticate (opens browser)
sudo tailscale up

# Check status
tailscale status

这样就进了官方 Tailscale 网络。Headscale 一样的流程,只是客户端指向自己控制服务器,再加个 --login-server=https://headscale.yourdomain.com

对大多数开发者来说,Tailscale 免费版够用了。家里搞 homelab、或者自托管一票服务的朋友,Headscale 是真值得在 SaaS 不够用之前先看一眼的方案。

结语

Tailscale 不是魔法。它就是 WireGuard 加一套非常能打的 NAT 穿透,外加一个知道什么时候该让开的中继协议。控制服务器那块是闭源,但 Headscale 留了自托管的门。

如果你还在用 SSH 隧道、端口转发,或者经常纠结”NAS 现在挂没挂 VPN”——就试一下。五分钟真能搞定。


资源:

来源:参考 https://blog.liaosirui.com/…/Tailscale.html

最后修改: 2026年7月11日

作者

评论

发表评论

您的邮箱地址不会被公开。