Headscale:自托管 Tailscale 控制服务器搭建指南
Headscale 是 Tailscale 控制面的开源自托管实现:WireGuard 加密组网 + 完全自主的协调服务器,设备管理、ACL 访问控制全在自己手里。本文从概念到部署与 ACL 配置全覆盖。
直接回答:Headscale 是 Tailscale 控制平面的开源自托管替代品——Tailscale 用 WireGuard 做零配置加密组网,但协调服务器由官方托管;Headscale 把这个控制面搬到自己的服务器上,自行承担控制面运行与身份策略管理。适合隐私合规严格的组织与重度自托管玩家。
核心概念:数据面与控制面
Tailscale 网络分两层:数据面是设备间 WireGuard 直连加密隧道(通常尝试点对点,无法直连时可经 DERP 中继;数据面仍端到端加密,中继可见连接元数据);控制面是协调服务器——协调节点公钥、地址与策略;设备私钥在客户端生成。Headscale 替换的就是控制面。
部署
# 单二进制 + 配置文件即可运行
# 按官方 Releases 为目标 OS/架构安装,并使用同一版本的示例配置
headscale serve
前置准备:一台有公网 IP 的服务器 + 域名 + 按官方要求配置的 TLS 入口(反代需核对兼容要求)。配置文件里设 server_url、监听地址与 SQLite 存储。
设备接入与管理
headscale users create team
headscale users list
# 用当前版本要求的用户 ID 创建短时、单次预授权密钥:
# headscale preauthkeys create --user <USER_ID>
# 设备端:
tailscale up --login-server https://headscale.example.com --authkey <key>
节点列表、路由通告、密钥轮换全走 headscale CLI。
ACL 访问控制
以下只是 ACL 片段,需另定义 group:ops 成员、tag:prod 的 tagOwners 和实际节点标签,完整策略经校验后加载:
{"acls": [{"action": "accept", "src": ["group:ops"], "dst": ["tag:prod:*"]}]}
按组、标签和端口限制访问。加载策略后,从允许的设备访问目标端口,再从不应获准的设备复测,确认放行与拒绝均符合预期。
常见问题(FAQ)
Q:Headscale 支持官方 Tailscale 客户端吗?
A:支持——按 Headscale 当前支持矩阵配置对应平台客户端,不保证所有版本和 Tailscale 功能等价,这是 Headscale 的设计前提。
Q:DERP 中继也要自建吗?
A:控制面自建后,NAT 打洞失败时的 DERP 中继默认仍可用官方节点;要完全自主可再自建 DERP。
Q:生产可用吗?
A:官方定位偏自托管与较小规模网络;升级需核对客户端兼容、数据库迁移与发布说明——升级前读 changelog,做好配置备份。
官方参考
本文依据官方文档整理,示例未在本文中进行运行验证。生产部署需按所用版本、权限和实际负载验证。