香港服务器搭建Headscale:自托管Tailscale控制器实现企业Mesh VPN组网

香港服务器搭建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)的对比

维度HeadscaleNetbird
基础协议WireGuard + Tailscale 协议WireGuard
客户端Tailscale 官方客户端(生态完整)Netbird 专属客户端
NAT 穿透极好(Tailscale DERP 网络)良好
移动端支持✅ iOS/Android(原生)✅
Web 管理界面需要第三方内置完整 UI
ACL 精细控制有限完整
适合场景已有 Tailscale 设备的团队从零搭建内网的团队

九、总结

Headscale 让企业用最低成本(一台香港 VPS)享受 Tailscale 企业版的功能:无限设备、无限用户、Mesh 加密内网、NAT 自动穿透。特别适合员工分布在不同地点(办公室+居家+出差)且有多台服务器需要互通的团队。连接建立后数据在设备间直接 P2P 传输,Headscale 服务器不参与数据转发,香港 VPS 的带宽不会成为瓶颈。

Telegram