首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >完全免费不限设备!用 Docker 自建 Headscale 打造 100% 掌控的私有组网

完全免费不限设备!用 Docker 自建 Headscale 打造 100% 掌控的私有组网

作者头像
用户12547393
发布2026-06-24 20:57:01
发布2026-06-24 20:57:01
330
举报
Headscale 组网封面
Headscale 组网封面

[!NOTE] 很多玩虚拟组网的小伙伴都爱死 Tailscale 的易用性,但由于官方控制面板闭源,且对免费账户的连接设备数有严格限制,对于拥有多台服务器和设备的极客来说总觉得束手束脚。今天老周手把手教大家用 Docker-compose 自建 Headscale 开源控制端,搭配精美的 Web UI 网页管理面板和自动申请 HTTPS 证书的 Caddy 代理,打造一个 100% 由自己掌控的私有虚拟局域网!


亲爱的读者,欢迎回到 老周的AI进化实验室

在上一期中,我们体验了去中心化组网新星 EasyTier 的魅力。但很多小伙伴给老周留言:“老周,我已经在各种设备上配置好了 Tailscale,客户端体验极佳,实在不想折腾别的软件了。但是官方免费版限制设备数量,而且控制面板在人家服务器上,我总觉得隐私不够稳,这怎么破?”

答案很简单:自建 Headscale

Headscale 是 Tailscale 控制服务器的开源替代品。它完美兼容 Tailscale 官方的所有客户端,但把所有的节点注册、网络中转、DNS 解析、以及 ACL 访问控制的权限,全部收回到你自己的公网服务器上。

今天,老周就带大家通过 Docker-compose 一键部署一套完整的 Headscale + Caddy(自动 HTTPS)+ Headscale-Admin(精美 Web UI 后台) 私有组网矩阵!


⚖️ 为什么选择自建 Headscale?

自建 Headscale 几乎继承了 Tailscale 全部的优点,同时完美避坑:

  • 完全免费且无设备上限:再也不用看着官方的设备限制额度发愁,你想连 100 台还是 1000 台设备都没人管。
  • 100% 掌控隐私安全:所有的连接密钥、节点 IP 信息只保留在你自己的服务器上,彻底杜绝数据在第三方服务商处泄露的隐患。
  • 兼容官方客户端:你的手机、电脑、NAS 依然可以直接下载 Tailscale 官方客户端,不需要安装任何第三方改版软件。
  • 支持自建中继(DERP):由于控制权在手,整合国内低延迟中继服务器也更加得心应手。

🛠️ 第一步:前期准备工作

为了保证组网控制端能在公网正常工作,并顺利申请 SSL 证书,我们需要准备:

  1. 一台公网服务器 (VPS):系统推荐使用 Ubuntu 22.04 或 Debian 12,拥有公网 IP。
  2. 一个域名:将两个子域名(例如 headscale.yourdomain.comhs-admin.yourdomain.com)的 A 记录解析到你的 VPS 公网 IP 上。

📦 第二步:编写 Docker-compose 部署矩阵

我们采用 Docker-compose 容器化方式部署,整体架构极其清爽

  • headscale:核心控制端服务。
  • caddy:负责反向代理,并全自动向 Let's Encrypt 申请和续签域名 HTTPS 证书
  • headscale-admin:可视化网页后台,免去在黑窗口敲命令管理节点的痛苦。

1. 创建目录结构

在 VPS 上创建工作文件夹:

代码语言:javascript
复制
sudo mkdir -p /opt/headscale/config
cd /opt/headscale 
代码语言:javascript
复制

2. 创建并配置 config.yaml

/opt/headscale/config/ 下创建 Headscale 的主配置文件 config.yaml

代码语言:javascript
复制
sudo nano config/config.yaml 
代码语言:javascript
复制

填入以下基础配置,注意修改 server_url 为你自己的解析域名:

代码语言:javascript
复制
server_url: https://headscale.yourdomain.com:443
listen_addr: 0.0.0.0:8080
metrics_listen_addr: 127.0.0.1:9090
grpc_listen_addr: 0.0.0.0:50443
grpc_allow_without_tls: true

db_type: sqlite3
db_path: /var/lib/headscale/db.sqlite

# 基础网络配置
ip_prefixes:
  - 10.10.10.0/24
  - fd7a:115c:a1e0::/48

derp:
  server:
    enabled: false
  urls:
    - https://controlplane.tailscale.com/derpmap/default

# DNS 和 域名直连配置
dns:
  magic_dns: true
  base_domain: yourdomain.com
  nameservers:
    - 1.1.1.1
    - 8.8.8.8
代码语言:javascript
复制

3. 编写 docker-compose.yml

回到 /opt/headscale/ 目录,创建容器编排文件:

代码语言:javascript
复制
sudo nano docker-compose.yml 
代码语言:javascript
复制

写入以下内容,注意将 Caddy 中的域名及邮箱替换为您自己的实际信息:

代码语言:javascript
复制
version: '3.8'

services:
  headscale:
    image: headscale/headscale:latest
    container_name: headscale
    volumes:
      - ./config:/etc/headscale
      - ./data:/var/lib/headscale
    ports:
      - "8080:8080"
    command: headscale serve
    restart: always

  headscale-admin:
    image: registries.aperture.moe/headscale-admin:latest
    container_name: headscale-admin
    ports:
      - "9090:80"
    restart: always

  caddy:
    image: caddy:latest
    container_name: caddy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
      - caddy_config:/config
    restart: always

volumes:
  caddy_data:
  caddy_config:
代码语言:javascript
复制

4. 编写 Caddyfile 反向代理规则

/opt/headscale/ 目录下创建 Caddyfile

代码语言:javascript
复制
sudo nano Caddyfile 
代码语言:javascript
复制

配置反向代理和自动 SSL 证书申请:

代码语言:javascript
复制
headscale.yourdomain.com {
    reverse_proxy headscale:8080
}

hs-admin.yourdomain.com {
    reverse_proxy headscale-admin:80
}
代码语言:javascript
复制

5. 启动服务并初始化数据库

在当前目录下运行命令启动容器:

代码语言:javascript
复制
sudo docker compose up -d 
代码语言:javascript
复制

启动后,Caddy 会在后台自动为你的两个子域名申请 SSL 证书。


🎯 第三步:初始化用户并连接客户端

因为我们是私有自建,首先需要在 Headscale 中创建一个“命名空间”(User),用于区分和管理你的设备网络。

1. 在服务器端创建用户:

代码语言:javascript
复制
sudo docker compose exec headscale headscale users create laozhou 
代码语言:javascript
复制

2. 连接 Linux 客户端:

在客户端终端直接执行(指定自建控制端域名):

代码语言:javascript
复制
tailscale up --login-server https://headscale.yourdomain.com 
代码语言:javascript
复制

3. 连接 Windows / macOS 客户端:

  1. Windows 用户:在浏览器打开 https://headscale.yourdomain.com/windows,下载并运行官方提供的注册表导入脚本,修改 Tailscale 默认控制端为你的自建域名。
  2. Android / iOS 客户端:在官方 APP 登录页面连续点击右上角菜单按钮(或连击图标),在隐藏设置中将 Alternative Server 改为你的域名 https://headscale.yourdomain.com

4. 节点激活与注册

当你在客户端发起连接命令后,终端或 APP 会弹出一个网页链接:

https://headscale.yourdomain.com/register?key=xxxxxxxxxxxxxxxx

打开这个网页,你会获得一串用于在服务端注册节点的 命令行密钥 (Key)。回到你的公网 VPS,运行以下命令完成激活(替换为你的实际密钥和用户名):

代码语言:javascript
复制
sudo docker compose exec headscale headscale nodes register --user laozhou --key xxxxxxxxxxxxxxxx
代码语言:javascript
复制
 

回到客户端,你会发现 Tailscale 已经瞬间显示连接成功!


🖥️ 第四步:使用 Headscale-Admin 图形化面板

每次添加节点都要去服务器敲命令显然不够极客。现在,在浏览器中打开: https://hs-admin.yourdomain.com

获取 API Key

:回到 VPS 生成一个 API Key 用于网页管理: bash

代码语言:javascript
复制
sudo docker compose exec headscale headscale apikeys create

配置登录

:在网页后台输入你的控制端地址 https://headscale.yourdomain.com 以及刚才生成的 API Key。

大功告成

:在精美的网页面板中,你现在可以直观地查看在线设备、管理命名空间、一键删除或添加授权节点,省心省力!


💡 老周碎碎念

自建 Headscale 彻底打破了官方免费额度的桎梏,让我们可以随心所欲地扩展局域网设备。通过 Docker-compose 和 Caddy 的加持,整套部署的维护难度 and 证书申请成本被降到了最低。

在下一期文章中,老周将带大家解决国内用户最头疼的问题:“即便直连成功,Tailscale 速度为什么依然很慢?”。老周将手把手带大家开启并放行 IPv6,实现免 VPS、零成本的百分百 P2P 瞬间直连,速度直接跑满千兆带宽!


老周的AI进化实验室 持续分享最接地气的 AI 提效黑科技、私有网络基建与数字化进化指南。如果你觉得有收获,欢迎点赞、在看并分享给身边的朋友!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老周的AI进化实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ⚖️ 为什么选择自建 Headscale?
  • 🛠️ 第一步:前期准备工作
  • 📦 第二步:编写 Docker-compose 部署矩阵
    • 1. 创建目录结构
    • 2. 创建并配置 config.yaml
    • 3. 编写 docker-compose.yml
    • 4. 编写 Caddyfile 反向代理规则
    • 5. 启动服务并初始化数据库
  • 🎯 第三步:初始化用户并连接客户端
    • 1. 在服务器端创建用户:
    • 2. 连接 Linux 客户端:
    • 3. 连接 Windows / macOS 客户端:
    • 4. 节点激活与注册
  • 🖥️ 第四步:使用 Headscale-Admin 图形化面板
  • 💡 老周碎碎念
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档