Headscale 介绍与选型指南

Headscale v0.29.5(Tailscale 控制面开源自托管实现)的定位、三面架构、功能边界与注册机制,并横向对比 Tailscale SaaS、Netbird、WireGuard 裸配给出选型建议,官方来源溯源加本地实测交叉验证。

HeadscaleHeadscale2026/10/18

Headscale 介绍与选型指南

‍‍​​‌​> 目标:说清 Headscale v0.29.5(Tailscale 控制面的开源自托管实现)的定位、核心架构、功能边界,并与 Tailscale SaaS、Netbird、WireGuard 裸配做横向选型对比,帮助读者判断是否引入以及如何引入。本文为认知篇,版本、特性、社区数据均于 2026-10-18 从官方源实查溯源,未做本地安装实测(安装实测见《Ubuntu 22.04 安装 Headscale 指南》)。

一、环境信息

本章说明本文的信息基准:所有论断的查询日期、版本依据与官方来源清单,便于读者复核。

💡 说明:Headscale 发布节奏快、配置结构偶有大版本调整(如 0.23 起 DNS/策略段重构、0.26 起 CLI 子命令调整),阅读本文时请以「与本文相同 tag」的官方文档为准;项目 README 也明确提醒:查看文档时应选择与所用发布版本一致的 tag。

二、软件概述

Headscale 是一个用 Go 编写的开源、自托管 Tailscale 控制服务器(control server)实现,当前最新稳定版本为 v0.29.5,采用 BSD-3-Clause 许可证,由 Juan Font Alonso(juanfont)于 2020 年 6 月发起。

要理解 Headscale 的定位,先要理解 Tailscale 的三段式结构:

组成部分职责Tailscale SaaS 中的形态Headscale 中的形态
数据面(节点)节点间建立 WireGuard 隧道、加密收发流量官方客户端(各 OS)官方客户端(同一套,无需修改)
控制面(协调服务器)交换节点公钥、分配 tailnet IP、下发网络拓扑(netmap)、管理用户/策略/DNSTailscale 托管服务(闭源)Headscale(本文主角,开源可自托管)
中继面(DERP)打洞失败时的加密 TCP 中继Tailscale 全球 DERP 网络默认复用 Tailscale 公网 DERP,可启用内嵌 DERP

💡 技术拓展:Tailscale 的控制面与数据面是分离的。数据面(WireGuard 隧道本身)完全开源且永远点对点直连(或经 DERP 中继),控制面只负责"告诉节点们彼此的公钥和地址",不参与业务流量转发。因此自托管 Headscale 换掉的只是"谁给你发通信录",流量路径与加密强度不变;只有打洞失败走中继时,才会用到 DERP 面。这也是 Headscale 与传统 VPN 网关类方案的本质区别:控制面不在线不影响已建立的隧道,只影响新拓扑的同步。

关键论断溯源(查询日期 2026-10-18):

  • 「An open source, self-hosted implementation of the Tailscale control server」——项目仓库 README 首句。
  • 设计目标:「Headscale aims to implement a self-hosted, open source alternative to the Tailscale control server……It implements a narrow scope, a single Tailscale network (tailnet), suitable for a personal use, or a small open-source organisation.」——README "Design goal" 一节,即 Headscale 刻意只做单 tailnet,面向个人与小组织。
  • 与 Tailscale Inc. 的关系:「This project is not associated with Tailscale Inc.」,但项目一名活跃维护者受雇于 Tailscale 并可在工作时间贡献(README "Disclaimer" 一节)。
  • 社区规模(GitHub 仓库实查,查询日期 2026-10-18):stars 约 29.3k、forks 约 1.6k、未关闭 issue 约 109 个、主语言 Go、许可证 BSD-3-Clause、创建于 2020-06-21。
  • 版本节奏(Release 页与本地实测构建时间戳交叉核实,查询日期 2026-10-18):v0.29.4 构建于 2026-09-23、v0.29.5 构建于 2026-10-13,稳定版约 3~4 周一个补丁版本,且 0.29 系列内 0.29.0 至 0.29.5 连续 6 个稳定发布,社区活跃度高。

三、核心架构

本章拆解 Headscale 的三个核心机制:节点注册流程、密钥体系、DERP 中继配置。这三点是理解后续安装(注册参数从哪来)与运维(数据备份什么、密钥丢了怎么办)的基础。

3.1 控制面工作原理与节点注册流程

Headscale 作为控制面,对外只暴露一个 HTTP(S) 服务(默认 8080 端口),所有 Tailscale 客户端通过 Tailscale 的 TS2021 协议(基于 Noise 加密)与它通信。一个节点接入的完整流程如下:

  1. 客户端在本机生成机器密钥(machine key)与节点密钥(node key),向控制面发起注册请求;
  2. 管理员在控制面侧完成批准(三条路径:浏览器 Web 认证、预授权密钥、OIDC 单点登录自动批准);
  3. 控制面为节点分配 tailnet 内 IP(IPv4 从 CGNAT 段 100.64.0.0/10 中取子集分配,IPv6 从 ULA 段 fd7a:115c:a1e0::/48 分配);
  4. 控制面把整个网络的拓扑(netmap:所有节点公钥、地址、DERP 列表、DNS 配置、ACL 生成的包过滤规则)下发给节点;
  5. 之后节点之间按 netmap 直接建立 WireGuard 隧道,控制面不再参与流量转发。

上述第 3 步的 IP 段与第 4 步的 netmap 均已在本文配套实测环境中验证:两台 Ubuntu 22.04 节点接入后分别获得 100.64.0.1 与 100.64.0.2,tailscale status 与节点间 ping 均正常,实测细节见《Ubuntu 22.04 安装 Headscale 指南》与《Headscale 运维手册》。

💡 技术拓展:节点注册的批准方式不止一种,常见三种对比——

批准方式原理适用场景
Web 认证节点先发起注册拿到一个 /register/ 开头的 URL,管理员在服务端用 CLI 批准该请求逐台手动接入,最直观
预授权密钥(preauthkey)控制面先生成一次性/可复用密钥,节点 --authkey 一条命令接入批量装机、自动化脚本
OIDC 单点登录对接身份提供商(如 Authentik、Keycloak),用户浏览器登录后自动注册有统一身份源的组织

本文配套的《Ubuntu 22.04 安装 Headscale 指南》对前两种均已实测打通;OIDC 方式需额外部署身份源,属于进阶场景。

3.2 密钥体系

Headscale 涉及的密钥较多,梳理如下(名称以官方配置与实测文件为准):

密钥存放位置作用丢失影响
Noise 私钥(noise_private.key)/var/lib/headscale/noise_private.keyTS2021 协议中控制面与客户端通信加密的身份基础所有节点需重新认证,等于全网重新注册
节点机器密钥(machine key)客户端本地(服务端库内保存公钥)节点向控制面证明"我是之前注册过的那台机器"客户端侧丢失即视为新节点重新注册
节点密钥(node key)客户端本地,可轮换WireGuard 隧道的数据面公钥轮换后控制面自动更新 netmap
预授权密钥(preauthkey,hskey-auth- 前缀)服务端签发,字符串形式免批准注册凭据,可设过期与可复用泄露需立即 expire 撤销
API Key服务端签发远程调用 gRPC 管理 API 的凭据泄露需立即撤销重建

其中 noise_private.key 是服务端唯一的身份根,备份时必须与 SQLite 数据库一起保留(《Headscale 运维手册》的备份章节有实测步骤)。

3.3 DERP 中继与网络可达性

DERP(Designated Encrypted Relay for Packets)是 Tailscale 的中继体系:当两节点 NAT 打洞失败时,流量经 DERP 服务器加密转发。Headscale 对 DERP 的处理方式(对应配置文件 derp 段,实测于 v0.29.5):

  • derp.urls:默认引用 Tailscale 官方 DERP 列表(https://controlplane.tailscale.com/derpmap/default),即节点默认可直接使用全球公网 DERP,无需自建;
  • derp.server.enabled:可启用内嵌 DERP(监听 STUN 的 UDP 3478 与 HTTPS 复用端口),把中继收拢到自己的网络内;官方文档注明 DERP 需要 TLS 才能工作,因此启用内嵌 DERP 时 server_url 应为 https;
  • derp.paths 与 derp.auto_update_enabled/update_frequency:支持本地 DERP 映射文件与定时自动更新。

中继仅在打洞失败时兜底使用:同内网或可直连的节点间流量走点对点隧道。实测环境中两节点同网段互通,节点间 ping 直达(0% packet loss,实测记录见《Ubuntu 22.04 安装 Headscale 指南》7.5 节)。

四、功能特性

以下清单取自官方 Features 页(https://headscale.net/stable/about/features/,查询日期 2026-10-18),并结合 v0.29.5 本地实测逐项确认了核心项:

已支持(官方 "Full base support")

功能域具体能力
节点注册Web 认证、预授权密钥、OIDC 单点登录(用户资料同步自身份源)
DNSMagicDNS、全局与 Split DNS(受限域名分流)、搜索域、Headscale 特有的 extra DNS records
文件共享Taildrop(节点间传文件)、Taildrive
标签与路由Tags、Subnet router(子网路由)、Exit node(出口节点)、Via 路由过滤
双栈IPv4(CGNAT 段子集)与 IPv6(ULA 段)同时分配
临时节点Ephemeral nodes(断开即清理,适配短生命周期工作负载与临时环境)
内嵌 DERP可选自建中继,支持 verify_clients 限制非本网节点
Peer relays节点间中继(0.29 系列)
访问策略ACLs、Grants、部分 Autogroups、Auto approvers(子网路由/出口节点自动批准)、Tailscale SSH、Node attributes、策略 tests/sshTests

部分支持或注意点(官方同页标注)

  • Funnel、Serve、网络流日志(Network flow logs)仍在推进中(官方页分别标注 issue #1040、#1921、#1687);
  • OIDC 登录可同步用户组,但 OIDC groups 目前不能直接用于 ACL 规则;
  • Headscale 只实现单个 tailnet,无多网络隔离能力;
  • 项目 README 明确「不支持也不鼓励使用反向代理与容器方式运行 Headscale」,官方推荐形态是二进制 + systemd 直接运行(这直接影响选型与部署规划,本专栏安装篇亦按此形态编写)。

实测验证过的关键行为(v0.29.5)

五、快速上手

官方文档的最小上手路径是:服务器安装 headscale 并以 systemd 运行,创建用户,然后客户端用 Tailscale 客户端指向该控制面注册。官方安装文档地址为 https://headscale.net/stable/setup/official/ ,其命令骨架如下(与官方文档一致的形态;本专栏已在 Ubuntu 22.04.5 上逐条实测并修正细节,完整可复制的全过程见《Ubuntu 22.04 安装 Headscale 指南》):

# 1. 服务端:下载官方二进制并放置到 PATH(版本以 Release 页最新为准)
curl -fsSL -O https://github.com/juanfont/headscale/releases/download/v0.29.5/headscale_0.29.5_linux_amd64
install -m 0755 headscale_0.29.5_linux_amd64 /usr/local/bin/headscale

# 2. 创建系统用户与目录,下载官方示例配置
useradd --system --home-dir /var/lib/headscale --shell /usr/sbin/nologin headscale
mkdir -p /etc/headscale /var/lib/headscale /var/run/headscale
curl -fsSL https://github.com/juanfont/headscale/raw/v0.29.5/config-example.yaml -o /etc/headscale/config.yaml

# 3. 编辑配置中的 server_url 与监听地址后,编写 systemd 服务并启动
#    (服务文件与逐项配置说明见《Ubuntu 22.04 安装 Headscale 指南》)

# 4. 服务端创建用户,客户端指向控制面注册
headscale users create demo
tailscale up --login-server http://192.168.32.2:8080

💡 说明:第 3 步与第 4 步的完整实测命令与回显(包括 systemd 服务文件全文、两条注册路径、验证输出)全部沉淀在《Ubuntu 22.04 安装 Headscale 指南》,此处不重复展开。官方客户端支持矩阵见 https://headscale.net/stable/about/clients/ ,Linux/Windows/macOS/Android/iOS 客户端均可通过 --login-server 指向自建控制面。

六、适用场景与限制

适合引入 Headscale 的场景

  • 家庭实验室 / 自建集群组网:几台到几十台分散的主机(VPS、NAS、笔记本)需要打通内网,不想在每台机器上配置 WireGuard;
  • 对数据主权有要求:不希望节点清单、设备元数据落在第三方云端;
  • 小型开源组织 / 初创团队:需要零成本获得与 Tailscale 一致的客户端体验(客户端完全复用官方);
  • 已有自托管生态:配合自建的身份源(OIDC)实现统一登录与准入。

明确的限制(选型前必须接受)

  • 单 tailnet:一个 Headscale 实例只管理一张虚拟网,无法在实例内划分多个隔离的 tailnet;
  • 无官方高可用方案:控制面是单点,宕机期间新节点无法注册、拓扑变更无法下发(已建立的隧道不受影响);
  • 部分 Tailscale 云端特性缺失或滞后:Funnel/Serve/流日志未完整支持,审计类能力弱于 SaaS;
  • 官方不支持反向代理与容器形态:对外发布需要直接暴露 8080(可自配 TLS)或使用 https 监听;
  • 客户端版本有下限:v0.29.5 要求 Tailscale 客户端 ≥ 1.80,升级服务端时要同步规划客户端。

七、同类选型对比

自组网(控制面自托管或简化组网)常见四条路线,横向对比如下(信息查询日期 2026-10-18,来源为各项目官网/仓库):

维度HeadscaleTailscale SaaSNetbirdWireGuard 裸配
控制面托管自托管,开源(BSD-3-Clause)官方托管,闭源控制面自托管或云托管,开源(AGPL-3.0)无控制面
客户端直接复用 Tailscale 官方客户端官方客户端自有客户端(基于 WireGuard)原生 wireguard-tools
网络模型单 tailnet,Mesh 全互联多 tailnet,Mesh 全互联Mesh 全互联 + 网络分段(Groups)手写逐对隧道的星型/点对点拓扑
打洞与中继复用 Tailscale 公网 DERP / 自建内嵌 DERP全球 DERP 网络内置自托管中继 + STUN/TURN无(需自行解决 NAT 场景)
DNS/MagicDNS支持(含 Split DNS)支持支持(管理台配置)无
访问控制ACL/Grants 策略文件ACL 管理台 + 策略文件管理台可视化 ACL无(靠 iptables 手工控制)
SSO/OIDC支持支持(含 SaaS 用户体系)支持无
运维成本低(单进程 + SQLite)极低(零部署)中(需部署管理面 + 数据库)高(每对节点手工维护密钥与路由)
数据主权完全自持元数据在 Tailscale 云端自托管时完全自持完全自持
适用规模个人/小团队(官方定位 self-hosters 与小组织)个人到大型企业中小团队,需要可视化管控节点少且拓扑稳定的极简场景

关键差异与选型建议:

  • 想要「Tailscale 的体验、自己的地盘」:选 Headscale。客户端零改动,控制面数据自持,代价是接受单 tailnet 与无 HA;
  • 团队需要多网络隔离、可视化管控台或商业支持:选 Tailscale SaaS 或 Netbird。Netbird 的差异化在于自托管时也提供 Web 管理台与更细的分组策略,但组件更多(管理面 + 数据库 + 信号/中继服务);
  • 只有 2~5 台固定节点、拓扑基本不变:WireGuard 裸配最轻(内核态性能最好),但每新增一台节点都要改全网配置,且 NAT 穿透、DNS、ACL 全部自理;
  • 本文推荐:除非有明确的可视化管控或多 tailnet 需求,个人与小型自托管场景首选 Headscale——它是「功能接近 SaaS、成本接近裸配」的平衡点。若后续需要把 Headscale 的服务端日常操作(巡检、节点管理、备份、升级)落地,可直接参考《Headscale 运维手册》。

💡 技术拓展:Mesh 组网与星型集线(hub-and-spoke)是自组网两大拓扑。Tailscale/Headscale/Netbird 属于前者:控制面只发拓扑,节点两两直连,延迟低但节点间路由全靠端侧;传统 VPN(OpenVPN、IPsec 网关)多为后者:流量集中过网关,便于统一审计但带宽受网关限制。WireGuard 裸配两种都可搭,典型做法是「一台公网服务器做 hub 转发全部流量」。本文讨论的 Headscale 实际采用的是 Mesh 拓扑 + DERP 兜底中继。

八、参考链接