香港服务器搭建Headscale:自托管Tailscale控制器实现企业Mesh VPN组网
Tailscale 让多台设备组成加密内网变得极其简单——无需手动配置 WireGuard、无需在路由器上做端口映射、NAT 穿透自动完成。但 Tailscale 免费版限制 3 个用户,付费版 $18/用户/月对小团队成本较高。Headscale 是开源的 Tailscale 控制服务器,自托管在香港 VPS 后,Tailscale 客户端(Windows/macOS/iOS/Android/Linux)指向自己的控制服务器,享受 Tailscale 的所有便利而无用户数限制,完全免费。
一、Tailscale / Headscale 工作原理
<code">
Tailscale 协调网络:
控制服务器(Headscale,运行在香港 VPS)
│ 分发密钥、协调 P2P 连接
├──→ 办公室 PC(Tailscale 客户端)
├──→ 员工笔记本(Tailscale 客户端)
├──→ 香港服务器1(Tailscale 客户端)
└──→ 新加坡服务器(Tailscale 客户端)
连接建立后(P2P,控制服务器不参与数据传输):
办公室 PC ←──── WireGuard 加密隧道 ────→ 香港服务器1
(直连,不经过 Headscale,延迟极低)
二、安装 Headscale
<code"># 下载最新版 Headscale
HEADSCALE_VERSION="0.23.0"
wget "https://github.com/juanfont/headscale/releases/download/v${HEADSCALE_VERSION}/headscale_${HEADSCALE_VERSION}_linux_amd64.deb"
dpkg -i "headscale_${HEADSCALE_VERSION}_linux_amd64.deb"
# 验证安装
headscale version<code"># /etc/headscale/config.yaml
---
# 服务器地址(必须是公网可访问的 HTTPS 地址)
server_url: https://hs.yourdomain.com
# 监听地址
listen_addr: 127.0.0.1:8080 # 通过 Nginx 反代对外
# 日志
log:
level: info
# 数据库(使用 SQLite 即可,小团队足够)
database:
type: sqlite
sqlite:
path: /var/lib/headscale/db.sqlite
# DERP(中继服务器,P2P 失败时的备用中转)
# 使用 Tailscale 官方 DERP 节点
derp:
server:
enabled: false
urls:
- https://controlplane.tailscale.com/derpmap/default
# IP 地址段(分配给设备的内网 IP)
ip_prefixes:
- 100.64.0.0/10 # Tailscale 标准地址段
# DNS 配置(内网 DNS 解析)
dns_config:
override_local_dns: true
nameservers:
- 1.1.1.1
- 8.8.8.8
domains: []
magic_dns: true
base_domain: internal.yourdomain.com # 设备可以用 hostname.internal.yourdomain.com 访问
# OIDC 单点登录(可选)
# oidc:
# issuer: https://accounts.google.com
# client_id: xxx
# client_secret: xxx<code"># Nginx 反向代理配置
# /etc/nginx/sites-available/hs.yourdomain.com
server {
listen 443 ssl http2;
server_name hs.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/hs.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/hs.yourdomain.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
# 启动 Headscale
systemctl enable --now headscale
systemctl status headscale三、创建用户和注册设备
<code"># ── 在 Headscale 服务器上操作 ── # 创建用户(相当于 Tailscale 的 Namespace) headscale users create alice headscale users create bob headscale users list # 生成注册 Key(让设备加入网络用) headscale preauthkeys create --user alice --expiration 24h # 输出一个 Key,如:xxxxxxxxxxxxxxxxxxxxx # ── 在要加入的设备/服务器上操作 ── # 安装 Tailscale 客户端 curl -fsSL https://tailscale.com/install.sh | sh # 加入 Headscale 控制服务器(注意:指向自己的 Headscale,不是 Tailscale 官方) tailscale up \ --login-server https://hs.yourdomain.com \ --authkey xxxxxxxxxxxxxxxxxxxxx \ # 使用上面生成的 Key --accept-routes \ --accept-dns # 验证连接 tailscale status tailscale ping 100.64.0.1 # ping 另一台已连接的设备
四、服务器作为子网路由器(Subnet Router)
<code"># 场景:香港服务器1加入 Headscale,同时将其局域网(10.0.0.0/24) # 暴露给所有 Headscale 成员,实现访问服务器内网的其他机器 # 在香港服务器1上: tailscale up \ --login-server https://hs.yourdomain.com \ --authkey xxx \ --advertise-routes=10.0.0.0/24 \ # 宣告路由 --accept-dns # 在 Headscale 服务器上批准路由 headscale routes list headscale routes enable -r 路由ID # 其他设备连接后可以直接访问 10.0.0.x 的内网机器(即使它们没有安装 Tailscale)
五、Exit Node(全局流量出口)
<code"># 将香港服务器设置为 Exit Node(员工设备的流量全部通过香港服务器) # 适合:需要统一出口 IP、访问限制地区内容等场景 # 在香港服务器上: tailscale up \ --login-server https://hs.yourdomain.com \ --advertise-exit-node # 宣告为出口节点 # 启用 IP 转发 echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf echo 'net.ipv6.conf.all.forwarding = 1' >> /etc/sysctl.conf sysctl -p # 在 Headscale 服务器上批准 Exit Node headscale routes enable -r exit-node路由ID # 在员工设备上使用香港出口: tailscale up --exit-node=香港服务器的Tailscale_IP
六、Headscale Web UI(可选)
<code"># 安装 Headscale Admin UI(第三方 Web 界面)
docker run -d \
--name headscale-ui \
--restart unless-stopped \
-p 127.0.0.1:8888:80 \
-e PUBLIC_HEADSCALE_URL=https://hs.yourdomain.com \
goodieshq/headscale-admin:latest
# Nginx 代理
location /admin/ {
proxy_pass http://127.0.0.1:8888/;
auth_basic "Headscale Admin";
auth_basic_user_file /etc/nginx/.htpasswd;
}七、常用管理命令
<code"># 查看所有已注册节点 headscale nodes list # 查看节点路由 headscale routes list # 删除节点 headscale nodes delete -i 节点ID # 生成永久有效的 Pre-Auth Key headscale preauthkeys create --user alice --reusable --expiration 9999d # 查看各用户的节点 headscale nodes list --user alice # 标签管理(类似 Tailscale ACL Tags) headscale nodes tag -i 1 --tags tag:servers
八、与 Netbird(第五阶段文章5)的对比
| 维度 | Headscale | Netbird |
|---|---|---|
| 基础协议 | WireGuard + Tailscale 协议 | WireGuard |
| 客户端 | Tailscale 官方客户端(生态完整) | Netbird 专属客户端 |
| NAT 穿透 | 极好(Tailscale DERP 网络) | 良好 |
| 移动端支持 | ✅ iOS/Android(原生) | ✅ |
| Web 管理界面 | 需要第三方 | 内置完整 UI |
| ACL 精细控制 | 有限 | 完整 |
| 适合场景 | 已有 Tailscale 设备的团队 | 从零搭建内网的团队 |
九、总结
Headscale 让企业用最低成本(一台香港 VPS)享受 Tailscale 企业版的功能:无限设备、无限用户、Mesh 加密内网、NAT 自动穿透。特别适合员工分布在不同地点(办公室+居家+出差)且有多台服务器需要互通的团队。连接建立后数据在设备间直接 P2P 传输,Headscale 服务器不参与数据转发,香港 VPS 的带宽不会成为瓶颈。