为什么我们内置了 Tailscale
如果你跑任何自部署服务 —— 一个 homelab、几台后面挂着自家 Tailscale 网络的 VPS、一个小办公室 —— 你大概在 iOS 上踩过我们一样的坑:打开 Tailscale App 把隧道起来,切到 SSH App,希望隧道还没断、断了切回去重连。在手机上这个上下文切换比听上去重。iOS 后台积极挂起;Tailscale 必须保持活着 SSH 才能到达私有主机名。
所以我们直接嵌入了 Tailscale SDK。没有第二个 App。打开 TermAI,隧道是 App 生命周期的一部分。tailnet 设备出现在 SSH 列表里就像它们在公网上一样,WireGuard 加密路径在底下处理。
前置条件
- Tailscale 账号(100 台设备以内免费)
- tailnet 上至少有一台已经在跑
sshd的设备 —— Mac、Linux 服务器、Raspberry Pi 都行 - iOS 16+ 装好 TermAI
如果你还没 tailnet,先去 tailscale.com 注册,在一台 Mac 或 Linux 上装 Tailscale。5 分钟 —— 我们等你。
在 TermAI 里启用 Tailscale
- 打开 TermAI → 设置 → 网络
- 打开 Tailscale 开关
- 首次时 iOS 会请求添加 VPN 配置权限。这是 WireGuard 在 iOS 上的工作方式 —— 系统管隧道,TermAI 跟它通信。点 允许。
配置提示是一次性的。之后每次打开 TermAI 隧道自动起来。
用 OAuth 登录
开关打开后,TermAI 提示登录。点 用 Tailscale 登录。会跳到 Safari 走 Tailscale OAuth 流程(Google / GitHub / Microsoft / Okta,看你账号用的哪个),回到 TermAI。
我们用官方 Tailscale OAuth API。密码不会进 TermAI,我们不存你的 Tailscale 凭据。
登录是每设备一次。如果你在 iPhone 和 iPad 都登录,两台设备在你 Tailscale 管理控制台分别显示 —— 对于想给手机端不同访问权限的 ACL 来说很有用。
你的第一个 tailnet SSH
回到 SSH 列表,点 + 加新连接。不要输主机名,点表单顶部的 Tailnet 标签。你会看到当前在线的每台 tailnet 设备列表。
点一个 —— 比如名叫 nas 的 homelab 设备。TermAI 自动填:
- 主机:设备的 tailnet IP(100.x.y.z)
- 用户名:留空 —— 你填
- 端口:22(如果你
sshd跑在别处就覆盖)
加上用户名,从 TermAI 密钥管理器选私钥(或生成新的),保存。点连接。进去了。
用 MagicDNS 主机名
数字 tailnet IP 能用,但 MagicDNS 让生活更好。如果你在 tailnet 启用了 MagicDNS,可以用主机名连 —— ssh nas 而不是 ssh 100.96.4.21。
在 Tailscale 管理控制台 DNS 下启用 MagicDNS。TermAI 自动识别 —— 启用后把 Tailscale 开关重启一次刷新解析器。之后 SSH 表单的 主机 字段就直接接受 nas。
排错
Tailscale 设备不出现在 picker 里。确认隧道真起来了:设置 → 网络 → Tailscale → 状态。如果一直说"连接中",说明你 iOS 没接受 VPN 配置 —— 重开开关再接受 iOS 提示。
Wi-Fi 上能连,蜂窝不能。有些运营商屏蔽 Tailscale 偏好的 UDP;客户端自动回落到 DERP 中继但更慢。如果蜂窝一直慢,在高级设置里强制 DERP。
tailnet 连成功但报 "Permission denied (publickey)"。隧道起来了;SSH 认证失败。重查用户名,验证你的 TermAI 公钥在服务器的 ~/.ssh/authorized_keys 里。这时 tailnet 部分跟问题无关。
最后一件事:Tailscale 在中国大陆构建里按当地法规禁用。如果你出货那个区域,详见 /docs/china 的备用网络路径。
快速事实
- 内置 Tailscale:手机端无需另装 VPN App
- 配置:填入 Tailscale API Key 和 tailnet;首页即变成你的设备列表
- 一键连接:在线设备上有 SSH 和 SFTP 快捷按钮
- 无需端口转发:通过 tailnet 稳定的 100.x 地址从任何地方连私有服务器
- 两端一致:iOS 与 Android 内置 Tailscale 完全相同