前言
新版 Shadowrocket 已加入 Tailscale 全局隧道模块。现在可以在 iPhone、iPad 和 Mac mini 上都安装 Shadowrocket,并让三台设备加入同一个 tailnet(Tailscale 私有网络)。这样在外出时,iPhone 或 iPad 就能通过 Tailscale 地址访问家里的 Mac mini,不需要给 SSH 或远程管理服务开放公网端口。
本文的目标不是把家庭网络暴露到互联网,而是建立一张只允许自己设备访问的加密网络,主要用于:
- 在外面通过 Termius 使用 SSH 登录 Mac mini。
- 登录后运行 Mac mini 上的 Codex CLI 或其他命令行工具。
- 访问 Mac mini 上的文件、开发服务和局域网资源。
- 了解 Tailscale 与 Apple“随航”的关系,避免把两者的能力混为一谈。
一、需要准备什么
准备三台设备:
| 设备 | 用途 |
|---|---|
| Mac mini | 家中常开设备,运行 SSH 服务和 Codex CLI |
| iPhone | 外出时使用 Termius 或 Shadowrocket |
| iPad | 外出时作为主要操作屏幕或 SSH 客户端 |
三台设备都需要安装支持 Tailscale 模块的新版 Shadowrocket,并加入同一个 Tailscale 账号。Shadowrocket 是网络工具,不提供 Tailscale 账号、代理节点或远程服务;这些资源需要自行准备。
二、在三台设备上配置 Shadowrocket
在每台设备上分别操作:
- 从 App Store 安装或更新 Shadowrocket。
- 打开 Shadowrocket,进入“设置”或“全局设置”,找到 Tailscale。
- 打开“启用”或“全局 Tailscale 隧道”。
- 在“认证密钥”中填入 Tailscale 管理控制台生成的 auth key。
- “控制服务器 URL”保持默认的
https://controlplane.tailscale.com。 - 保存设置,等待网络同步,在 Tailscale 设备列表中确认三台设备均已上线。
认证密钥可以让设备无需单独登录就加入 tailnet,但它等同于设备入网凭据,不能写进公开文章、配置仓库或截图。建议使用有过期时间、限制标签和权限范围的临时密钥;使用可复用密钥时,应在设备加入后及时轮换或撤销。
如果 Shadowrocket 的 Tailscale 设置提供设备名称、低电量模式、出口节点等选项,可以按需配置。三台设备只需要互相访问时,不必启用 exit node;exit node 的作用是把全部互联网流量经另一台设备转发,并不是普通的内网互联。
三、确认 Tailscale 地址和网络状态
在 Shadowrocket 的 Tailscale 设备页面查看 Mac mini 的 Tailscale IPv4 地址。它通常位于 100.64.0.0/10 网段,例如:
1 | Mac mini: 100.90.10.20 |
示例地址仅用于说明,实际地址以设备页面显示的内容为准。启用 MagicDNS 后,也可以使用设备名称或 *.ts.net 域名访问。Tailscale 会优先尝试设备之间的点对点连接,网络条件不允许时则使用 DERP 中继;中继不会降低加密级别,但延迟可能更高。
四、给 Shadowrocket 添加 Tailscale 规则
如果当前配置使用规则模式,可以在 [Rule] 中加入:
1 | [Rule] |
TAILSCALE 是新版 Shadowrocket 的 Tailscale 策略名称。规则从上到下匹配,应放在 FINAL 或其他兜底规则之前。只访问 Tailscale 设备时,100.64.0.0/10 这一条通常已经足够;如果使用 MagicDNS,再保留 ts.net 规则。
注意:不要把 100.64.0.0/10 加入 tun-excluded-routes,否则可能绕过 Shadowrocket 的 Tailscale 模块。配置改变后,可关闭再开启一次隧道,使数据包 tunnel 重新加载设置。
五、在 Mac mini 上开启 SSH
打开 Mac mini 的“系统设置 → 通用 → 共享”,启用“远程登录”,并将允许登录的用户限制为自己的 macOS 账户。也可以在终端确认 SSH 服务是否监听:
1 | sudo systemsetup -getremotelogin |
首次连接时,建议先在 Mac mini 本机确认用户名:
1 | whoami |
然后在 iPhone 或 iPad 上使用 Mac mini 的 Tailscale IP 连接:
1 | ssh mac用户名@100.90.10.20 |
不要把示例中的用户名和 IP 原样复制。Mac mini 必须保持开机并连接网络;如果设备睡眠后无法唤醒,可在“系统设置 → 节能”中按需要启用网络唤醒或调整睡眠策略。
六、使用 Termius 远程运行 Codex CLI
在 iPhone 或 iPad 上安装 Termius,新建一个 Host:
- Address:Mac mini 的 Tailscale IP 或 MagicDNS 名称
- Port:
22 - Username:Mac mini 的 macOS 用户名
- Authentication:优先使用 SSH Key,不建议长期使用密码
连接成功后,可以先检查终端环境:
1 | uname -a |
如果 Codex CLI 已安装,直接运行:
1 | codex |
建议使用 tmux 或 screen 保持长时间任务:
1 | tmux new -s codex |
网络中断后重新 SSH 登录,再执行 tmux attach -t codex 即可恢复终端会话。Codex CLI 运行在 Mac mini 上,Termius 只是提供远程终端;API 密钥、代码仓库和命令执行权限仍由 Mac mini 的本地环境决定。不要在聊天记录或截图中泄露 API 密钥、SSH 私钥和仓库凭据。
七、通过 Tailscale 远程使用随航
在满足 Apple 账户、系统版本和设备兼容性等前提下,Tailscale 可以把 iPad 与 Mac mini 的网络打通,使 iPad 通过随航连接为 Mac mini 的第二块显示屏。实际使用时,iPad 需要先通过 Shadowrocket 加入 tailnet,Mac mini 也要保持 Shadowrocket 的 Tailscale 隧道在线,然后再尝试在 Mac mini 的显示器设置中连接 iPad。
需要注意一个限制:随航建立后,iPad 的触控板、鼠标和键盘输入不一定会被转发到 Mac mini。在这种情况下,iPad 只能作为 Mac mini 的第二显示屏使用,Mac mini 的操作仍需要本机连接的鼠标和键盘,或通过其他远程控制方式完成。
因此可以将这套方案理解为:
- Tailscale + Shadowrocket 负责打通 iPad 与 Mac mini 的网络。
- 随航负责把 iPad 当作 Mac mini 的扩展显示器。
- 输入设备是否能跨连接使用,取决于随航和当前系统的实际支持情况,不能默认认为 iPad 的鼠标和键盘会映射到 Mac mini。
如果需要完整远程操作 Mac mini,建议同时准备屏幕共享、Jump Desktop 等远程桌面方案;如果主要是写代码、执行命令和管理服务,Termius + SSH 通常更稳定。
八、排查连接问题
1. 设备不在线
检查三台设备是否都已完成认证、Shadowrocket 的 Tailscale 隧道是否开启,以及系统 VPN 权限是否已授予。修改 Tailscale 设置后,关闭再开启一次 Shadowrocket 隧道。
2. 能看到设备但 SSH 连接失败
确认 Mac mini 已开启“远程登录”,用户在允许列表中,且本机防火墙没有拦截 TCP 22 端口。先在 Mac mini 上执行 ssh localhost,再从 iPhone 或 iPad 连接 Tailscale 地址。
3. 连接很慢
两端可能无法建立点对点连接而使用了 DERP 中继。检查网络是否限制 UDP,并确认 Mac mini 没有频繁睡眠。中继连接仍然是加密的,只是延迟和吞吐量可能不如直连。
4. Shadowrocket 开启后普通网络异常
检查规则顺序和 tun-excluded-routes,尤其确认没有错误排除 100.64.0.0/10。如果只希望 Tailscale 访问 Mac mini,使用 TAILSCALE 规则即可,不要不必要地启用 exit node。
5. 设备都在线,但 Mac mini 无法 ping 通 iPhone 或 iPad
如果 Shadowrocket 中显示三台设备都在线,但 Mac mini 仍然无法 ping 通 iPhone 或 iPad,优先检查 Shadowrocket 的策略配置。设备在线只代表 Tailscale 已完成组网,并不代表当前代理规则已经把目标流量交给 Tailscale。
一个通用的解决办法是:将 Shadowrocket 的使用模式从“配置”切换为“代理”,再重新启用 Tailscale 隧道。切换后再次测试 Mac mini 到 iPhone、iPad 的连通性。如果恢复正常,基本可以判断原来的配置模式没有正确匹配 TAILSCALE 策略;之后再回头检查规则顺序、100.64.0.0/10 网段和 ts.net 域名规则。
另外,iPhone 和 iPad 可能不会对 ICMP ping 回复,因此 ping 失败不能单独证明 Tailscale 不通。可以同时测试 Tailscale 管理页面中的连接状态,或从设备访问实际服务来确认;但如果多个 Tailscale 服务都异常,仍应优先排查 Shadowrocket 的使用模式和策略。
总结
在 iPhone、iPad 和 Mac mini 上使用 Shadowrocket 的 Tailscale 模块,可以建立一张不依赖公网端口的私有网络。通过随航,iPad 可以作为 Mac mini 的远程第二显示屏,但其鼠标和键盘不一定能用于操作 Mac mini;通过 Termius + SSH 则可以稳定连接 Mac mini 并运行 Codex CLI。需要完整桌面控制时,应另行配置远程桌面工具。
参考资料: