前言

新版 Shadowrocket 已加入 Tailscale 全局隧道模块。现在可以在 iPhone、iPad 和 Mac mini 上都安装 Shadowrocket,并让三台设备加入同一个 tailnet(Tailscale 私有网络)。这样在外出时,iPhone 或 iPad 就能通过 Tailscale 地址访问家里的 Mac mini,不需要给 SSH 或远程管理服务开放公网端口。

本文的目标不是把家庭网络暴露到互联网,而是建立一张只允许自己设备访问的加密网络,主要用于:

  1. 在外面通过 Termius 使用 SSH 登录 Mac mini。
  2. 登录后运行 Mac mini 上的 Codex CLI 或其他命令行工具。
  3. 访问 Mac mini 上的文件、开发服务和局域网资源。
  4. 了解 Tailscale 与 Apple“随航”的关系,避免把两者的能力混为一谈。

一、需要准备什么

准备三台设备:

设备 用途
Mac mini 家中常开设备,运行 SSH 服务和 Codex CLI
iPhone 外出时使用 Termius 或 Shadowrocket
iPad 外出时作为主要操作屏幕或 SSH 客户端

三台设备都需要安装支持 Tailscale 模块的新版 Shadowrocket,并加入同一个 Tailscale 账号。Shadowrocket 是网络工具,不提供 Tailscale 账号、代理节点或远程服务;这些资源需要自行准备。

二、在三台设备上配置 Shadowrocket

在每台设备上分别操作:

  1. 从 App Store 安装或更新 Shadowrocket。
  2. 打开 Shadowrocket,进入“设置”或“全局设置”,找到 Tailscale
  3. 打开“启用”或“全局 Tailscale 隧道”。
  4. 在“认证密钥”中填入 Tailscale 管理控制台生成的 auth key。
  5. “控制服务器 URL”保持默认的 https://controlplane.tailscale.com
  6. 保存设置,等待网络同步,在 Tailscale 设备列表中确认三台设备均已上线。

认证密钥可以让设备无需单独登录就加入 tailnet,但它等同于设备入网凭据,不能写进公开文章、配置仓库或截图。建议使用有过期时间、限制标签和权限范围的临时密钥;使用可复用密钥时,应在设备加入后及时轮换或撤销。

如果 Shadowrocket 的 Tailscale 设置提供设备名称、低电量模式、出口节点等选项,可以按需配置。三台设备只需要互相访问时,不必启用 exit node;exit node 的作用是把全部互联网流量经另一台设备转发,并不是普通的内网互联。

三、确认 Tailscale 地址和网络状态

在 Shadowrocket 的 Tailscale 设备页面查看 Mac mini 的 Tailscale IPv4 地址。它通常位于 100.64.0.0/10 网段,例如:

1
2
3
Mac mini: 100.90.10.20
iPhone: 100.90.10.21
iPad: 100.90.10.22

示例地址仅用于说明,实际地址以设备页面显示的内容为准。启用 MagicDNS 后,也可以使用设备名称或 *.ts.net 域名访问。Tailscale 会优先尝试设备之间的点对点连接,网络条件不允许时则使用 DERP 中继;中继不会降低加密级别,但延迟可能更高。

四、给 Shadowrocket 添加 Tailscale 规则

如果当前配置使用规则模式,可以在 [Rule] 中加入:

1
2
3
4
[Rule]
DOMAIN-SUFFIX,ts.net,TAILSCALE
IP-CIDR,100.64.0.0/10,TAILSCALE
FINAL,PROXY

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
2
sudo systemsetup -getremotelogin
ssh localhost

首次连接时,建议先在 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
2
uname -a
pwd

如果 Codex CLI 已安装,直接运行:

1
codex

建议使用 tmuxscreen 保持长时间任务:

1
2
tmux new -s codex
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。需要完整桌面控制时,应另行配置远程桌面工具。

参考资料:

评论