用途
该技能面向 Tailscale 客户端侧,帮助在连接自托管 Headscale 控制服务器时完成安装、认证、诊断与故障排查。Tailscale 是基于 WireGuard 的网状 VPN,可将设备连接成安全的 tailnet。当与 Headscale(自托管开源控制服务器)配合使用时,官方 Tailscale 客户端通过 --login-server 标志连接,而不是使用 Tailscale 的 SaaS 控制平面。
架构
客户端(tailscaled 守护进程)向 Headscale 控制服务器注册,交换 WireGuard 密钥,并建立直接的端到端加密连接。当直接 NAT 穿透失败时,流量会回退经过 DERP(Detour Encrypted Relay Protocol)中继。
安装
在目标设备上安装官方 Tailscale 客户端,资料中给出的平台命令包括:
- Debian/Ubuntu:
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/jammy.noarmor.gpg - macOS:
brew install tailscale - Windows:
choco install tailscale - Fedora/RHEL:
sudo dnf install dnf-plugins-core && sudo dnf config-manager --add-repo https://pkgs.tailscale.com/stable/fedora/tailscale.repo && sudo dnf install tailscale - Alpine:
apk add tailscale
资料提到可参考 ts-install.sh 进行自动检测与安装。
连接
安装后,使用 Headscale 服务器进行认证:
sudo tailscale up --login-server=https://headscale.example.com
这会打开浏览器进行网页认证,或在终端打印认证 URL。对于非交互(脚本化)场景,可使用预认证密钥:
sudo tailscale up --login-server=https://headscale.example.com --authkey=tskey-auth-xxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
资料提到可参考 ts-up.sh 作为带环境变量默认值的封装。
认证
网页认证:默认的 tailscale up 流程会打印一个 URL(例如 https://headscale.example.com/register/nodekey:xxxxx)。在浏览器中访问该 URL,或将其交给 Headscale 管理员批准。
预认证密钥:在 Headscale 服务器上生成:
headscale preauthkeys create --user myuser
将密钥与 --authkey 一起使用。密钥可打标签,用于不属于特定用户的服务/认证节点:
headscale preauthkeys create --user myuser --tags tag:ci-runner,tag:monitoring
然后在客户端:
sudo tailscale up --login-server=https://headscale.example.com --authkey=tskey-auth-xxxxx --advertise-tags=tag:ci-runner
诊断
资料列出的诊断命令及用途:
tailscale status --json:列出所有对等节点及其连接状态tailscale ping --verbose -c 3 <peer>:测试到对等节点的直连与中继路径tailscale netcheck:检查 NAT 类型与 DERP 中继连通性tailscale version:客户端与守护进程版本信息tailscale debug:底层调试(derp-map、metrics、goroutines)
资料提到可运行 ts-diagnostics.sh 收集上述所有内容为结构化 JSON 输出,并使用 ts-connectivity-report.py 解读诊断结果,生成人类可读或结构化报告。
功能与 Headscale 支持情况
- MagicDNS:支持,需在 tailscale up 时传入 --accept-dns
- Taildrop / Taildrive:支持,用于对等节点间文件共享
- Tailscale SSH:支持,需在 tailscale up 时使用 --ssh 标志
- Serve:支持,可通过 tailnet 暴露本地服务
- Funnel:不支持,Funnel 需要 Tailscale 的 SaaS 控制平面
- Exit Nodes:支持,使用 --advertise-exit-node 通告,使用 --exit-node 使用
环境变量
- HEADSCALE_URL:ts-up.sh 的默认 --login-server URL
- TAILSCALE_AUTHKEY:ts-up.sh 的默认 --authkey
注意事项
- 端口冲突(8080、8443):Tailscale Serve 常使用 8080 或 8443,可用
lsof -i :8080检查冲突。 - 子网重叠:如果 tailnet 子网与本地网络重叠,路由可能无法工作,需仔细检查通告的路由。
- 仅 DERP 回退:当 NAT 穿透失败时,对等节点仅通过 DERP 中继连接,延迟显著增加。可用 ts-diagnostics.sh 或 tailscale status --json 检查,查看直连路径上是否出现 "relay":"..." 而非 "txBytes"/"rxBytes"。
- tailscaled 未运行:必须先启动守护进程,tailscale CLI 命令才能工作。systemd 系统上:
sudo systemctl start tailscaled;macOS 上:打开 Tailscale GUI 应用或运行sudo tailscaled。 - DNS 解析:MagicDNS 需要在 tailscale up 时使用 --accept-dns,否则节点只能通过其 Tailscale IP(100.x.x.x)访问。
- 密钥过期:节点密钥默认会过期。可使用 --force-reauth 或重新运行 tailscale up 重新认证。预认证密钥可用 --expiry=false 创建,用于不过期(长期)节点。
触发条件
当用户提及以下内容时,应加载该技能:
- 在任何平台上安装或设置 Tailscale 客户端
- 将设备连接到 Headscale 服务器
- Tailscale 认证问题(认证密钥、网页认证、节点批准)
- 检查 tailscale status、ping 或连通性
- DERP 中继问题或 NAT 穿透失败
- Tailscale SSH、Serve、MagicDNS 或 Taildrop 配置
- 排查 "tailscaled not running" 或 "no connection"
- 解读 tailscale status、tailscale ping 或 tailscale netcheck 输出
不适用场景
不要将该技能用于服务端 Headscale 部署(应加载 headscale-deploy),也不要用于 ACL/策略编写(应加载 tailnet-policy)。该技能仅覆盖客户端安装、认证与诊断。