异地连家里的 NAS、回公司内网、给设备搭私有组网——Tailscale 把这些事做到了「登录即组网、自动打洞、像在同一局域网」。这篇是折腾系列的序章,先把 Tailscale 的原理、它和自建版 Headscale 的关系讲清楚,后面几篇再动手折腾。
系列:Tailscale 折腾 1 / 4
- 1 Tailscale 是什么:一篇看懂这套 P2P 内网穿透神器(折腾系列·序章) 当前
- 2 给 Headscale 配个 Web 界面:headscale-ui 安装折腾记
- 3 自建 DERP 中继:让 Headscale 打洞失败也能稳连国内 20ms
- 4 把设备接进自建 Headscale:从 tailscale up 登录到 headscale-ui 管理
这是我「Tailscale 折腾系列」的第一篇。后面会一篇篇动手搭自建控制面、配 Web 界面、自建国内中继——但在敲命令之前,先用一篇把原理讲透。搞懂它怎么工作,后面折腾时遇到问题才知道是哪一环出了岔子,而不是照着命令瞎抄。
先说痛点:我们到底想解决什么
场景很常见:人在外面,想连家里的 NAS、回公司内网、用一台云服务器中转流量。传统方案各有各的难受:
- 端口转发 / DDNS:要有公网 IP,还把服务直接暴露在公网上,不安全。
- frp / 反向代理:能穿透,但每加一个服务就要配一条规则,运维琐碎。
- 传统 VPN(OpenVPN/IPsec):中心化网关,配置重,所有流量绕一圈,慢。
它们的共同问题是:要么依赖公网 IP,要么流量被迫绕中心节点,要么配置繁琐。
Tailscale 的思路完全不同:让你所有设备登录同一个账号就自动组成一张虚拟局域网,设备之间点对点直连,像插在同一台交换机上一样——不需要公网 IP,不用挨个配端口。
核心原理:控制面与数据面分离
Tailscale 基于 WireGuard(现代、快、内核级的 VPN 协议)。它真正聪明的地方,是把网络拆成了两个面:
- 控制面(Control Plane):协调中心。负责设备认证、分发各设备的公钥、下发访问策略(ACL)。它只协调、不碰你的数据。
- 数据面(Data Plane):设备之间用 WireGuard 直接点对点加密通信,数据不经过任何中心服务器。
flowchart TD
C["控制面 / Control Plane
认证 · 分发公钥 · 下发 ACL"]
A["设备 A
手机"]
B["设备 B
家里 NAS"]
D["设备 C
公司电脑"]
C -. "只协调,不碰数据" .-> A
C -. "只协调,不碰数据" .-> B
C -. "只协调,不碰数据" .-> D
A == "WireGuard P2P 直连" === B
A == "WireGuard P2P 直连" === D
B == "WireGuard P2P 直连" === D
style C fill:#dbe9ff,stroke:#2563eb,stroke-width:2px
控制面帮设备们「互相认识」,之后它们就甩开控制面自己直连了。这也是为什么 Tailscale 又快又安全——流量从不经过中间服务器。
那打洞失败怎么办?DERP 兜底
P2P 直连需要 NAT 穿透(打洞),但有些网络环境(对称型 NAT、运营商大内网)打不通。这时流量会退而走 DERP 中继——一个公网上的加密转发节点。
关键:DERP 只在直连失败时兜底,直连成功它就不参与。官方 DERP 节点遍布全球,但对国内用户来说延迟偏高,这也是后面我会自建一台国内 DERP 的原因。
Tailscale 官方 vs 自建 Headscale
用 Tailscale,那个「控制面」默认是 Tailscale 公司托管的。对很多人够用,但有几个理由让我想自己掌控:
| Tailscale 官方 | 自建 Headscale | |
|---|---|---|
| 控制面 | Tailscale 公司托管 | 自己服务器上跑 |
| 数据隐私 | 协调元数据在对方手里 | 全在自己手里 |
| 设备数 | 免费版有上限 | 自己说了算 |
| 折腾乐趣 | 开箱即用 | 拉满 😎 |
Headscale 就是 Tailscale 控制面的开源自建实现。客户端还是用官方的 Tailscale App,只是把「登录服务器」指向你自己的 Headscale。本系列后面全部基于 自建 Headscale 展开。
几个会反复出现的概念
后面几篇会频繁用到这些词,先混个脸熟:
- Tailnet:你的整张虚拟局域网。
- 控制面 / 数据面:协调 vs 实际通信,见上。
- WireGuard:底层加密隧道协议,P2P 直连靠它。
- DERP:直连失败时的加密中继兜底。
- MagicDNS:给每台设备自动分配好记的域名,不用背 IP。
- ACL:访问控制策略,谁能访问谁。
- Subnet Router:让某台设备把它所在的整个内网桥接进 Tailnet。
- Exit Node:把某台设备当出口,所有流量从它出去(类似全局代理)。
这个系列接下来折腾啥
序章到此,原理铺垫完了。接下来是动手环节,建议按顺序读:
下一篇 →《给 Headscale 配个 Web 界面:headscale-ui 安装折腾记》 Headscale 原生只有命令行,先给它配个 Web 界面,后面加节点、批设备、配路由都能点鼠标,省得一直 SSH。
再下一篇 →《自建 DERP 中继:让 Headscale 打洞失败也能稳连国内 20ms》 把兜底中继也搬到国内,延迟从境外的 100ms+ 压到 20ms 级,含改源码、自签证书、防白嫖三处踩坑。
收尾 →《把设备接进自建 Headscale:从 tailscale up 登录到 headscale-ui 管理》 日常最常做的一环:客户端
tailscale up --login-server登录、批准入网、在 Web 界面里管设备,配模拟截图走一遍。
整个系列的目标:一套完全自己掌控、国内体验拉满的私有组网。跟着折腾完,你也能拥有一张「走到哪都像在自家局域网」的网络。下一篇见 👇