什么是 Headscale
Headscale 是 Tailscale 控制服务器的开源实现,您可以在自己的 VPS 上运行,而不是依赖 Tailscale Inc. 的 SaaS 平台。Tailscale 建立在 WireGuard 之上,这是一个安全且高性能的 VPN 协议,使用网格网络架构,允许设备彼此直接连接,而不是通过中央网关。但是,设备发现和协调通常依赖于 Tailscale 在云端的控制服务器。Headscale 允许您自己运行此控制服务器,提供显著好处:增强的隐私(您的数据保留在您的服务器上)、无限设备(没有 3 设备免费层限制)、完整的 ACL 控制,以及如果您的组织要求所有数据保留在本国内的合规性支持。
简而言之:Headscale 是一个开源 Tailscale 控制服务器,您在自己的 VPS 上部署。您仍然在所有设备上使用官方 Tailscale 客户端,但协调服务器完全由您控制——无设备限制、您的数据在您的数据中心、灵活的 ACL 规则。这是隐私优先的 Tailscale。
为什么使用 Headscale 而不是标准 Tailscale
几个原因驱动组织和隐私意识强的用户选择 Headscale。首先,Tailscale 免费版将您限制在 3 个设备;Headscale 没有这样的限制。其次,所有连接元数据和 IP 地址保留在您的服务器上——不会泄露给 Tailscale Inc.——对于隐私和 GDPR 等合规制度至关重要。第三,您获得对 ACL 策略的完全控制,可以完全按需配置 MagicDNS、服务器名称和行为。第四,如果您的组织要求所有数据保留在国内服务器上,Headscale 无需月度 SaaS 费用即可实现合规。第五,您可以审计源代码(Headscale 在 GitHub 上是开源的)并定制行为,远超 Tailscale 闭源控制服务器允许的范围。
Headscale 与 Tailscale 与纯 WireGuard 的对比
理解区别很重要。WireGuard 是一个低级 VPN 协议:快速、安全,但需要手动生成密钥、配置接口和管理路由。Tailscale 将 WireGuard 包装在便利的应用层,添加自动对等点发现、MagicDNS(通过主机名而非 IP 解析对等点)、智能 NAT 穿透和网页 UI——但控制服务器是闭源的,由 Tailscale Inc. 托管。Headscale 在您自己的基础设施上模拟 Tailscale 控制服务器,因此您获得所有 Tailscale 的便利(官方客户端应用、MagicDNS、网格路由),同时服务器完全由您控制。可以将其视为"Tailscale 的功能加上您自己的基础设施"。
注意:Headscale 和 Tailscale 并非 100% 可互换。例如,Headscale 不以相同方式支持 OIDC/SSO(如 Tailscale for Business),并且您必须配置自己的 HTTPS 证书和域——这与 Tailscale 的无摩擦注册不同。在承诺前评估两者。
前提条件和规划
在开始前,确保您具有:(1) 运行 Ubuntu 22.04 LTS(或类似基于 Debian 的发行版)的 VPS,具有 root 访问权限;(2) 公共 IP 地址(不在 CGNAT——运营商级 NAT 之后——因为 Headscale 需要稳定的公共 IP 用于对等点发现);(3) 指向您的 VPS IP 的 DNS 域名(例如 headscale.example.com),HTTPS 证书需要;(4) 安装了 Docker 和 Docker Compose,或能够本地安装 Headscale;(5) 对 Linux 命令、Nginx 配置和防火墙规则有基本了解。如果您还没有设置 DNS A 记录,现在配置它——在继续前将您的域指向您的 VPS 公共 IP。
安装 Headscale:Docker Compose(最简单)
Docker Compose 提供最快的设置。验证 Docker 已安装:
docker --version && docker-compose --version
为 Headscale 创建目录:
mkdir -p /opt/headscale/data /opt/headscale/config cd /opt/headscale
创建 docker-compose.yml:
version: '3.8'
services:
headscale:
image: headscale/headscale:latest
container_name: headscale
hostname: headscale
ports:
- "8080:8080"
- "51820:51820/udp"
volumes:
- ./data:/var/lib/headscale
- ./config.yaml:/etc/headscale/config.yaml
environment:
- TZ=Asia/Bangkok
restart: unless-stopped
networks:
- headscale
networks:
headscale:
driver: bridge
下载 Headscale 示例配置:
docker run --rm headscale/headscale:latest headscale generate config > /opt/headscale/config.yaml
启动容器:
cd /opt/headscale docker-compose up -d docker-compose logs -f
验证状态:
docker exec headscale headscale nodes list
小贴士:如果端口 8080 与另一个服务冲突,将 docker-compose.yml 中的端口更改为"8888:8080",并相应调整下面的 Nginx 上游。
安装 Headscale:本地二进制(高级)
为了获得更多控制或避免 Docker,直接安装 Headscale 二进制。下载最新发布版(在 GitHub 发布中检查版本):
cd /tmp
HEADSCALE_VERSION=0.22.0
wget https://github.com/juanfont/headscale/releases/download/v${HEADSCALE_VERSION}/headscale_${HEADSCALE_VERSION}_linux_amd64 -O headscale
chmod +x headscale
sudo mv headscale /usr/local/bin/
创建系统用户和目录:
sudo useradd -r -s /bin/false headscale sudo mkdir -p /etc/headscale /var/lib/headscale sudo chown -R headscale:headscale /var/lib/headscale /etc/headscale
创建 systemd 服务文件:
sudo tee /etc/systemd/system/headscale.service > /dev/null <<'EOF' [Unit] Description=Headscale VPN Control Server After=network.target Wants=network-online.target [Service] Type=simple User=headscale Group=headscale WorkingDirectory=/var/lib/headscale ExecStart=/usr/local/bin/headscale serve -config /etc/headscale/config.yaml Restart=on-failure RestartSec=5s StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target EOF sudo systemctl daemon-reload sudo systemctl enable headscale
配置 config.yaml
生成的 config.yaml 包含许多设置。这些是需要修改的关键配置。编辑文件:
server:
listen_addr: 0.0.0.0
listen_port: 8080
server_url: https://headscale.example.com
db:
type: sqlite3
sqlite3:
path: /var/lib/headscale/db.sqlite3
derp:
server:
enabled: true
region_id: 900
region_code: "headscale"
region_name: "Headscale DERP"
stun_listen_addr: "0.0.0.0:3478"
dns:
base_domain: example.com
magic_dns: true
domains:
- example.com
- headscale.example.com
policy:
mode: file
path: /etc/headscale/acl.yaml
log:
level: info
将 example.com 和 headscale.example.com 更改为您的实际域。server_url 至关重要——Tailscale 客户端使用这个来定位您的控制服务器。永远不要使用 HTTP;始终使用 HTTPS。SQLite 默认配置(对大多数部署足够)。DERP(绕路加密中继协议)在直接对等连接失败时提供中继服务器。MagicDNS 允许设备通过主机名而不是 IP 相互发现。
使用 Nginx 和 Let's Encrypt 设置 HTTPS
Tailscale 客户端在 server_url 上强制 HTTPS——拒绝未加密连接。在 Headscale 前面使用 Nginx 作为反向代理,并使用 Certbot 配置 Let's Encrypt 证书。安装 Nginx:
sudo apt update && sudo apt install -y nginx certbot python3-certbot-nginx curl
创建 Headscale 的 Nginx 配置:
sudo tee /etc/nginx/sites-available/headscale > /dev/null <<'EOF'
upstream headscale_backend {
server localhost:8080;
}
server {
listen 80;
listen [::]:80;
server_name headscale.example.com;
location / {
proxy_pass http://headscale_backend;
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;
proxy_buffering off;
proxy_request_buffering off;
}
}
EOF
启用站点:
sudo ln -s /etc/nginx/sites-available/headscale /etc/nginx/sites-enabled/ sudo rm /etc/nginx/sites-enabled/default sudo nginx -t sudo systemctl restart nginx
运行 Certbot 生成 HTTPS 证书:
sudo certbot --nginx -d headscale.example.com
Certbot 的交互式提示会询问是否将 HTTP 重定向到 HTTPS;选择"2"让 Certbot 处理所有事务。它将生成证书并自动更新您的 Nginx 配置。
注意:记住在 VPS 防火墙上开放端口 80(HTTP)和 443(HTTPS)用于 Let's Encrypt 续期和客户端连接。还要开放 UDP 端口 51820 用于 WireGuard 流量。防火墙规则因提供商而异(AWS 安全组、DigitalOcean 云防火墙等)——查看您的 VPS 控制面板。
设置命名空间、用户和预授权密钥
一旦 Headscale 运行,创建一个命名空间(可视为"工作区"或"团队")来组织设备。对于 Docker:
docker exec headscale headscale namespaces create mycompany docker exec headscale headscale users create admin
对于本地二进制:
sudo -u headscale /usr/local/bin/headscale namespaces create mycompany sudo -u headscale /usr/local/bin/headscale users create admin
创建预授权密钥允许设备加入:
docker exec headscale headscale preauthkeys create --namespace mycompany --reusable --expiration 24h
这会输出一个字符串——在客户端设备上使用时保存它。--reusable 标志允许密钥多次使用;--expiration 设置过期时间。
连接 Tailscale 客户端
在任何客户端设备(macOS、Linux、Windows、iOS、Android)上,从 tailscale.com 安装官方 Tailscale 客户端。然后,从终端或命令提示符运行:
tailscale up --login-server=https://headscale.example.com
--login-server 标志将客户端引导到您的 Headscale 服务器,而不是官方 Tailscale SaaS。客户端将显示一个 URL 并要求您粘贴预授权密钥。身份验证后,验证节点出现:
docker exec headscale headscale nodes list
您的设备现在应该以 Tailscale IP 出现(100.x.x.x 范围)。如果启用了 MagicDNS,它们可以通过名称或 IP 地址相互 ping 和 SSH。
管理 ACL(访问控制列表)
/etc/headscale/acl.yaml 中的 ACL 文件(或在 Docker 中挂载的)定义哪些设备可以与哪些通信。这是一个基本示例:
groups:
"group:admin":
- admin
"group:developers":
- dev1
- dev2
- dev3
acls:
- action: accept
src:
- group:admin
dst:
- "*:*"
- action: accept
src:
- group:developers
dst:
- "10.0.0.0/24:22"
- "10.0.1.0/24:443"
- action: deny
src:
- "*"
dst:
- "*:*"
这允许 admin 组访问所有设备上的所有端口;developers 只能 SSH(端口 22)到 10.0.0.0/24 并使用 HTTPS(端口 443)到 10.0.1.0/24;其他一切都被拒绝。编辑 ACL 文件后,重新加载 Headscale:
docker exec headscale headscale serve --config /etc/headscale/config.yaml
或对于本地二进制:
sudo systemctl restart headscale
安全性和维护
一旦 Headscale 运行,遵循这些安全实践。首先,防火墙您的 VPS 仅允许互联网上的端口 443(HTTPS)和 UDP 51820(WireGuard);将端口 8080(Headscale 内部)限制在 localhost。其次,如果您为集成生成 API 密钥,将它们存储在密钥管理器中,而不是脚本中。第三,定期更新 Headscale。对于 Docker:`docker pull headscale/headscale:latest && docker-compose up -d`。对于二进制,从 GitHub 下载最新发布版。第四,定期备份 SQLite 数据库(/var/lib/headscale/db.sqlite3)通过 cron 或您的 VPS 备份服务。第五,监视日志以查找异常:对于 Docker,`docker logs headscale`;对于二进制,`journalctl -u headscale -n 50`。第六,以过期日期存储预授权密钥以限制其有效期;定期轮换它们。
小贴士:在 AsiaGB 快速 SSD VPS 基础设施上,SQLite 数据库即使有数百个设备也会平稳运行。对于大型部署(数千台设备),稍后迁移到 PostgreSQL 或 MySQL——Headscale 通过配置文件支持两者而无需重新安装。
总结
您现在拥有一个完全运营的 Headscale VPN 服务器,默认隐私、无限设备和精细的 ACL 控制。通过使用 HTTPS、Nginx 反向代理和 Let's Encrypt 保护它,您的客户端安全连接。Headscale 在 WireGuard 的安全性和 Tailscale 的便利性之间取得了完美平衡。AsiaGB 的 VPS 基础设施——具有快速 CPU 和 SSD 存储——非常适合运行稳定、响应迅速的 Headscale 服务器。连接您的设备,根据您的安全政策配置 ACL,并享受一个私有、自管理的网格 VPN 网络。
>>>常见问题 (FAQ)
Headscale 是否需要 PostgreSQL 或 MySQL,还是 SQLite 足够?
对于小到中等部署(数百到数千台设备),SQLite 足够。Headscale 通过配置文件支持 SQLite、PostgreSQL 和 MySQL。对于非常大的部署,PostgreSQL 或 MySQL 可能提供更好的性能,但迁移很直接。
我丢失了预授权密钥。我可以创建一个新的吗?
是的。使用以下命令生成新的预授权密钥:`headscale preauthkeys create --namespace mycompany --reusable --expiration 24h`。在设备上使用这个新密钥代替。
Headscale 支持双因素认证(2FA)吗?
Headscale 比官方 Tailscale 更简单,不包括内置 2FA。但是,您可以通过设置过期日期来限制 API 密钥和预授权密钥。为了增强安全性,使用操作系统级或 VPS 防火墙规则来限制谁可以访问 Headscale 控制服务器端口。
如果我关闭我的 Headscale 控制服务器,客户端会停止工作吗?
Tailscale 设备将继续通过缓存的对等路由,因此现有连接保持功能。但是,它们无法发现新设备、接受新 ACL 更改或调整设置。控制服务器协调——它不中继流量——所以停机影响配置,而不是活动数据传输。
立即开始使用 AsiaGB VPS
AsiaGB VPS 全系列采用 SSD 存储,可选择泰国或新加坡数据中心,并提供完整的 Root 权限,Linux 系统每月低至 500 泰铢起,由泰语技术团队提供支持。
查看 VPS 套餐