把设备接进自建 Headscale:从 tailscale up 登录到 headscale-ui 管理

J
Joy
2026年06月16日 · 2 分钟阅读

控制面、Web 界面、中继都折腾好了,最后一步是日常最常做的:用 Tailscale 客户端 tailscale up --login-server 登录自建 Headscale,再在 headscale-ui 里批准、查看、管理设备。文字配模拟截图走一遍。

系列:Tailscale 折腾 4 / 4
  1. 1 Tailscale 是什么:一篇看懂这套 P2P 内网穿透神器(折腾系列·序章)
  2. 2 给 Headscale 配个 Web 界面:headscale-ui 安装折腾记
  3. 3 自建 DERP 中继:让 Headscale 打洞失败也能稳连国内 20ms
  4. 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),等你去批准:

终端:tailscale up 登录自建 Headscale,输出 register 链接

把这个链接里的 nodekey:... 记下来,下一步要用。

3. 在 headscale-ui 批准设备入网

有两种方式把这台设备批准进来。

方式一:命令行(在 Headscale 服务器上)

headscale nodes register --user joy --key nodekey:a1b2c3d4e5f6...

方式二:headscale-ui(点鼠标,推荐)——进「注册新设备 / Register Machine」,把终端里的 nodekey 填进去,选好归属用户,点「注册并接入」:

headscale-ui:注册新设备,填 nodekey + 选用户

小知识:Headscale 里设备必须归属某个 user。没有用户先建一个:headscale users create joy,或在 headscale-ui 的 Users 页建。

4. 设备上线,看设备列表

批准完,终端那条 tailscale up 就会成功登录,设备拿到一个 100.64.x.x 的 Tailscale IP。回到 headscale-ui 的 Devices 页,就能看到它了:

headscale-ui:设备列表,显示名称/IP/用户/在线状态

列表每一列的含义:

  • 名称:设备主机名(可改,见下一节)。带 DERP 标记的就是 上一篇 那台中继节点。
  • Tailscale IP100.64.0.0/10 段里分配的虚拟 IP,全组网用它互访,不用管真实公网/内网 IP。
  • 用户:设备归属的 user。
  • 最后在线 / 状态:绿点在线、灰点离线。

5. 日常管理设备

点某台设备的「操作」,常用的管理动作都在这里:

headscale-ui:单设备管理操作菜单(重命名/路由/Exit Node/Tag/过期/删除)

挨个说一下:

  • 重命名:改设备显示名,比 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 地址必须严丝合缝http vs https、带不带端口,要和 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 是什么 一路看下来,你也能拥有一张「走到哪都像在自家局域网」的网络。🎉

分享

评论

相关文章

3 分钟阅读
自建 DERP 中继:让 Headscale 打洞失败也能稳连国内 20ms

Tailscale/Headscale 靠 WireGuard P2P 直连,但很多 NAT 环境打洞会失败、流量被迫走官方境外 DERP,延迟动辄 100ms+。这篇记录我在自建 Headscale 上加一台国内自建 DERP 的全过程,含改源码、自签证书、防白嫖三处踩坑。

文章 折腾
2 分钟阅读
给 Headscale 配个 Web 界面:headscale-ui 安装折腾记

Headscale 原生只有 CLI,每次加节点、批用户、看路由都得 SSH 敲命令。headscale-ui 是个纯静态 Web 前端,调 Headscale API 把这些操作搬到浏览器里。这篇记录它的安装、反代配置和登录踩坑。

文章 折腾