不想用 Tailscale 官方服务器?Docker 一行命令自建你的私有组网!

你有没有遇到过这种情况:家里 NAS、办公室电脑、出差用的笔记本,想随时连到一起传文件、远程桌面,但又不想把数据经过第三方的服务器?
以前你可能听说过 Tailscale——一个超方便的组网工具,几行命令就能把分散各地的设备组成虚拟局域网。但它有个小问题:所有流量都要经过 Tailscale 官方的中继服务器,虽然加密了,但总归不是完全自控。
今天推荐的这个工具,就是来解决这个问题的:Headscale。它完全兼容 Tailscale 客户端,但控制服务器跑在你自己的机器上,数据全程自控,免费开源,Docker 一行命令搞定。
什么是 Headscale?
Headscale 是一个开源的、自托管的 Tailscale 控制平面实现。简单来说,Tailscale 是客户端+服务端架构,Headscale 只实现服务端部分,然后你继续用 Tailscale 的客户端去连接它。
这意味着什么?意味着你可以享受 Tailscale 的零配置组网体验,但整个控制链完全掌握在自己手里。没有第三方,没有付费墙,没有数据出境。
项目地址:https://github.com/juanfont/headscale[1]
GitHub Star 数超过 15k,社区活跃,Docker 镜像维护良好。
为什么值得用?
先说几个核心痛点:
数据主权。 你的组网拓扑、设备信息、密钥管理,全部存在你自己的服务器上。对于有合规要求的企业、重视隐私的个人来说,这是刚需。
免费无限。 Tailscale 个人版虽然免费但有 200 人上限,企业版要付费。Headscale 完全免费,设备数量无限制,想加多少台就加多少台。
内网穿透利器。 配合 Tailscale 客户端的 DERP 中继,即使你的设备都在 NAT 后面,也能自动打洞建立直连。延迟低、速度取决于你的带宽。
兼容生态。 因为兼容 Tailscale 的注册协议,所有 Tailscale 客户端(Windows、macOS、Linux、iOS、Android)都能直接用,不需要额外适配。
再说说它能做什么:
-
🌐 跨地域组建虚拟局域网
-
🔗 设备间 SSH、文件传输、远程桌面
-
📦 配合 Docker 做服务发现
-
🛡️ 基于 ACL 的设备访问控制
-
📊 设备管理和状态监控
部署指南
准备工作很简单——一台能跑 Docker 的机器就行,VPS、NAS、树莓派都可以。
第一步:创建配置文件
server_url: http://localhost:8080
listen_addr: 0.0.0.0:8080
metrics_listen_addr: 0.0.0.0:9090
grpc_listen_addr: 0.0.0.0:50443
grpc_max_msg_size: 1048576
privacy_policy_url: ""
headscale_url: http://your-server-ip:8080
derp:
server:
enabled: true
region_id: 999
region_code: "custom"
region_name: "Custom DERP"
stun_listen_addr: "0.0.0.0:3478"
acme_urls: []
tls_letsencrypt_cache_dir: /var/lib/headscale/cache
tls_letsencrypt_challenge_type: ["HTTP-01"]
tls_cert_path: ""
tls_key_path: ""
log:
format: text
level: info
database:
type: sqlite
sqlite:
db_file: /var/lib/headscale/db.sqlite
postgres:
host: localhost
port: 5432
name: headscale
user: headscale
ssl: false
metrics_enabled: true
metrics_port: 9090
acl:
auto_create_rules: true
# 可选:OAuth 登录
oidc:
issuer: ""
client_id: ""
client_secret: ""
scope: ["openid", "profile", "email"]
allowed_domains: []
allowed_users: []
# 可选:TLS 证书
tls_letsencrypt_hostname: ""把上面的内容保存为 config.yaml,修改 headscale_url 为你实际的服务器地址和端口。
如果你只是想快速体验,SQLite 版本就够了,不需要额外数据库。
第二步:Docker Compose 一键启动
创建 docker-compose.yml:
version: '3'
services:
headscale:
image: headscale/headscale:latest
container_name: headscale
restart: unless-stopped
command: headscale serve
volumes:
- ./headscale/config:/etc/headscale
- ./headscale/data:/var/lib/headscale
ports:
- "8080:8080" # HTTP API
- "50443:50443" # gRPC (Tailscale 协议)
- "3478:3478" # STUN (DERP 中继)
headscale-ui:
image: ghcr.io/gurucomputing/headscale-ui:latest
container_name: headscale-ui
restart: unless-stopped
ports:
- "9090:8080"
depends_on:
- headscale启动:
docker compose up -d就这么简单。两个容器:一个是 headscale 服务端,一个是 Web 管理界面(可选)。
第三步:连接客户端
在任意设备上安装 Tailscale 客户端后,执行:
tailscale up --login-server=http://your-server-ip:8080首次运行会返回一个 URL,复制到浏览器打开,你会看到 headscale 的管理面板。管理员需要先在 headscale 上创建用户:
docker exec headscale headscale users create yourname然后用 headscale nodes list 查看已连接的设备。
第四步:验证连通性
连接两台设备后,直接 ping 对方的 Tailnet IP 即可测试:
ping 100.x.x.x跨地域、跨防火墙、无需端口转发——组网完成。
效果对比
Tailscale 官方 个人免费,企业付费 ❌ 第三方服务器 个人 200 人 极低
ZeroTier 免费 ❌ 第三方 免费 50 节点 低
Headscale 完全免费 ✅ 完全自控 无限制 低
对于个人用户和小型团队,Headscale 几乎是零成本的完美替代方案。
常见问题
Q: 需要公网 IP 吗? A: 不需要。headscale 的 gRPC 端口(50443)只需要能被客户端访问到即可。如果在内网,配合 cloudflared 或 frp 做反向代理就行。
Q: 性能怎么样? A: 官方 DERP 中继性能一般,建议自建 DERP 服务器。headscale 本身资源占用很低,单核 512MB 内存就能跑。
Q: 支持 IPv6 吗? A: 支持。Tailscale 原生支持 IPv6,headscale 作为控制平面自然继承了这个能力。
Q: 从 Tailscale 迁移过来麻烦吗? A: 不麻烦。在 headscale 上创建用户并生成新的 key,客户端重新 tailscale up --login-server=... 即可。旧设备下线就行。
Q: 生产环境用什么数据库? A: SQLite 适合个人和小团队。如果需要多实例部署,可以切换到 PostgreSQL,只需改 config.yaml 中的 database 配置。
总结
Headscale 最大的价值在于——把组网的控制权还给自己。
它不需要你懂复杂的网络知识,不需要买昂贵的 VPN 服务,也不需要忍受第三方平台的限制。Docker 一行命令部署,Tailscale 客户端连接,剩下的就是享受跨设备无缝互联的快感。
特别适合这些场景:
-
🏠 家庭实验室玩家,多台设备需要互通
-
💼 小团队远程办公,需要安全的内网访问
-
🌍 跨境业务,需要稳定可靠的组网方案
-
🔒 对数据隐私有严格要求的用户
行动建议: 如果你有 VPS 或者闲置的服务器,花 5 分钟部署一个 headscale,体验一下完全自控的组网感觉。哪怕只是用来临时传个文件,也比翻墙用第三方工具来得踏实。
👇 互动时间:你平时用什么方案做多设备互联?评论区聊聊你的组网故事~ 如果觉得有用,别忘了点赞收藏,下次搭建的时候直接照着来!
引用链接
[1]https://github.com/juanfont/headscale