控制面、Web 界面、中继都折腾好了,最后一步是日常最常做的:用 Tailscale 客户端 tailscale up --login-server 登录自建 Headscale,再在 headscale-ui 里批准、查看、管理设备。文字配模拟截图走一遍。
系列:Tailscale 折腾 4 / 4
- 1 Tailscale 是什么:一篇看懂这套 P2P 内网穿透神器(折腾系列·序章)
- 2 给 Headscale 配个 Web 界面:headscale-ui 安装折腾记
- 3 自建 DERP 中继:让 Headscale 打洞失败也能稳连国内 20ms
- 4 把设备接进自建 Headscale:从 tailscale up 登录到 headscale-ui 管理 当前
折腾背景:序章讲了原理,headscale-ui 配好了管理界面,自建 DERP 也把中继搬到了国内。这是系列收尾——把最日常的一环讲清楚:一台新设备怎么用 Tailscale 客户端登录进自建 Headscale,并在 headscale-ui 里管理它。下面文字配模拟截图走一遍。
整体流程
接入一台设备就五步,控制面在 Headscale,登录指向它,设备入网后在 Web 界面里管:
flowchart TD
A["① 装 Tailscale 客户端"] --> B["② tailscale up
--login-server=自建地址"]
B --> C["③ 终端输出 register 链接
(含 nodekey)"]
C --> D["④ headscale-ui 批准设备
归到某个 user"]
D --> E["⑤ 设备上线
分到 100.64.x.x"]
E --> F["⑥ 日常管理
路由 / Tag / 过期 / 删除"]
style B fill:#ffe9d5,stroke:#b71d18
style D fill:#ffe9d5,stroke:#b71d18
关键就两处(标橙):登录时把
--login-server指向自己的 Headscale,以及入网要在 headscale-ui 里批准——官方 Tailscale 是自动的,自建则要这一步人工确认,这正是「自己掌控」的体现。
1. 装 Tailscale 客户端
各平台装官方客户端即可(控制面虽是自建 Headscale,客户端还是用官方 Tailscale):
# Linux
curl -fsSL https://tailscale.com/install.sh | sh
# macOS:App Store 装 Tailscale,或 brew install tailscale
# Windows:官网下载安装包2. 登录自建 Headscale(关键一步)
普通 Tailscale 是 tailscale up 直接登录官方。接自建 Headscale,要用 --login-server 把登录指到你自己的控制面地址:
tailscale up --login-server=https://vpn.e7coding.com
--login-server就是这整套自建方案的命门:它告诉客户端「别去找 Tailscale 官方,去找我这台 Headscale 认证」。地址要和你 Headscale 对外的server_url完全一致(协议 http/https、端口都要对得上)。
执行后,终端不会直接连上,而是吐出一个 register 链接(里面带着这台设备的 nodekey),等你去批准:
把这个链接里的 nodekey:... 记下来,下一步要用。
3. 在 headscale-ui 批准设备入网
有两种方式把这台设备批准进来。
方式一:命令行(在 Headscale 服务器上)
headscale nodes register --user joy --key nodekey:a1b2c3d4e5f6...方式二:headscale-ui(点鼠标,推荐)——进「注册新设备 / Register Machine」,把终端里的 nodekey 填进去,选好归属用户,点「注册并接入」:
小知识:Headscale 里设备必须归属某个 user。没有用户先建一个:
headscale users create joy,或在 headscale-ui 的 Users 页建。
4. 设备上线,看设备列表
批准完,终端那条 tailscale up 就会成功登录,设备拿到一个 100.64.x.x 的 Tailscale IP。回到 headscale-ui 的 Devices 页,就能看到它了:
列表每一列的含义:
- 名称:设备主机名(可改,见下一节)。带
DERP标记的就是 上一篇 那台中继节点。 - Tailscale IP:
100.64.0.0/10段里分配的虚拟 IP,全组网用它互访,不用管真实公网/内网 IP。 - 用户:设备归属的 user。
- 最后在线 / 状态:绿点在线、灰点离线。
5. 日常管理设备
点某台设备的「操作」,常用的管理动作都在这里:
挨个说一下:
- 重命名:改设备显示名,比
desktop-3f9a2这种随机名好认。 - 编辑子网路由(审批 Routes):设备用
tailscale up --advertise-routes=192.168.1.0/24把自己所在内网广播进来后,必须在这里批准才生效——这就是 Subnet Router,让你在外面能直接访问家里整个网段。 - 设为 Exit Node:把这台设备当全局出口,其它设备的全部流量从它出去(类似落地代理)。同样需要先
--advertise-exit-node再在此批准。 - 管理 Tags:给设备打
tag:nas之类的标签,配合 ACL 做访问控制(谁能访问谁)。 - 使密钥过期:强制这台设备重新认证(设备丢了、想踢下线时用)。
- 删除设备:彻底移出组网。
踩坑小结
--login-server地址必须严丝合缝:httpvshttps、带不带端口,要和 Headscale 的server_url完全一致,错一点就登录不上。- nodekey 有时效:终端吐出的 register 链接放太久会过期,过期就重跑一次
tailscale up拿新的。 - 设备会「无故掉线」?多半是 key 过期:Headscale 默认给节点的密钥有有效期(如 180 天),到期设备掉线,需要重新
tailscale up认证;不想老续,可在设备管理里关掉该设备的 key expiry,或调 Headscale 配置。 - 子网路由 / Exit Node 广播了不生效:客户端
--advertise-routes只是「申报」,一定要在 headscale-ui(或headscale nodes routes)里批准才会真正下发。 - 想用设备名互访:需要在 Headscale 配置里开启 MagicDNS,否则只能用
100.64.x.x这种 IP。
到这里,自建 Headscale + Web 界面 + 国内 DERP 中继 + 设备接入管理,一整套私有组网就彻底折腾齐活了。整个系列从 Tailscale 是什么 一路看下来,你也能拥有一张「走到哪都像在自家局域网」的网络。🎉