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)。有意思的地方有三处:
- 跑在 HTTP 上。 大多数网络即便封了 UDP 和乱七八糟的 TCP,也还是会放行 HTTP。DERP 长得像普通 Web 流量,所以能过各种严苛防火墙。
- 按目的公钥中继。 DERP 不解密你的流量,只是按 WireGuard 的目的公钥把加密数据转给对的节点。
- 自动选最近的 DERP。 Tailscale 会挑地理上最近的那台 DERP 给你走。你在上海,流量就走香港或东京的 DERP,不会绕到弗吉尼亚。
巧妙的地方在”连接升级”。每个 Tailscale 连接一开始都是 DERP——瞬间建立,永远能通,但优先级低。然后并行去做另一件事:用 STUN、ICE 加各种 NAT 打洞的招数,找直连路径。几秒之后,找到的话,连接就静悄悄地升级到 P2P。
所以 DERP 不只是兜底,它是让整个魔法跑起来的 引导层。没有 DERP,你每次都得先等几秒等 NAT 穿透完才有流量。有了 DERP,流量先动起来,等更好的路出来,再加速。
Headscale:开源的控制服务器
Tailscale 本身有个坑:控制服务器——管 ACL、知道有哪些节点、签发 WireGuard 密钥、操作用户身份的这块——是闭源的。免费版 3 个用户、100 台设备。超了就付费。
Headscale(github.com/juanfont/headscale)就是控制服务器的开源重写。API 和官方 Tailscale 客户端兼容。你在自己 VPS 上跑一个,节点连上来时指向它而不是 controlplane.tailscale.com,整条栈就都是你的了。
部署基本就是一份 Docker Compose。你大致需要这些:
- PostgreSQL 当元数据存储(Headscale 在多节点场景下弃了 SQLite,改用 Postgres)。
- Headscale 容器要加
cap_add: NET_ADMIN和NET_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 就能把元数据攥自己手里,代价是多了一堆运维。
五分钟上手
想感受一下区别,可以这么搞:
# 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”——就试一下。五分钟真能搞定。
资源:
评论