SuperAPI AI 工具集

tailscale-client

部署与运维

查看项目

更新于 10-16 09:25

技能介绍

用途

该技能面向 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)。该技能仅覆盖客户端安装、认证与诊断。