本文速览

本文适合已经能够手动连接 Shadowrocket 的 iPhone、iPad 用户。先区分 On Demand 与连接后的分流,再设置 Wi-Fi、蜂窝网络条件,最后核对域名条件与规则顺序。阅读后可以建立一套可回退的自动连接方案,并判断“没有自动连接”和“连接后走错策略”分别应查哪一层。

On Demand 管连接,Config 管连接后的分流

Shadowrocket(小火箭)的 On Demand 使用系统按需 VPN 机制,根据网络环境及连接评估条件决定是否启动连接。它不是后台定时点击连接开关,也不是给每个网站单独建立一个 VPN。入口为 Settings → On Demand;具体可编辑条件以当前应用界面为准。

网络条件变化 按需规则评估 系统建立隧道 连接规则分流 目标连接出站

On Demand 决定“是否建立隧道”,Global Routing 决定建立后怎样处理流量。选择 Proxy 是全局代理姿态,Direct 是全局直连姿态,Config 按当前配置匹配规则,Scene 按所选场景的设定处理。需要验证配置内的 DOMAIN-SUFFIX 等规则时,应先确认使用 Config,而不是把两层规则混在一起排查。

本文以用户已有自己的服务商与订阅为前提。On Demand 不会修复过期的连接资料,也不会自动更新已失效的订阅地址。手动连接尚未成功时,应先处理基础连接,再启用自动化。

启用前:先建立手动连接与回退方法

首次配置时,先让自动化保持关闭。完成一次手动连接,确认系统 VPN 配置已被允许添加,再回到 Settings → On Demand。测试期间不要同时改动服务器、DNS、Global Routing 和按需条件,否则一个失败现象会对应多个变量。

  1. 在 Home 选中自己已有的有效连接资料,手动打开连接开关。
  2. 按测试目标选择 Global Routing。若要验证配置分流,使用 Config。
  3. 访问一个日常可用页面,记录当前网络类型以及连接是否正常。
  4. 进入 Settings → On Demand,先只加入一组网络条件,再启用按需连接。
  5. 切换一次 Wi-Fi 与蜂窝网络,检查 Home 的连接状态及系统 VPN 状态。
先记住停止自动连接的方法

需要停用时,先关闭 Settings → On Demand 中的按需功能,再手动断开连接。只关闭 Home 的连接开关,后续网络变化仍可能使系统重新评估按需规则。系统设置中的 VPN 入口可搜索“VPN”查找;组织管理的设备还可能受到管理策略约束。

iPad 若没有蜂窝网络能力,只需验证 Wi-Fi 条件。系统要求以 App Store 页面标注为准。不要把没有出现蜂窝网络切换的设备,当作蜂窝条件失效的证据。

Wi-Fi 与蜂窝网络:具体条件在前,通用条件在后

网络条件的基本写法是“接口类型 + 可选的 Wi-Fi 名称 + 动作”。下面给出一套家庭 Wi-Fi 不自动建立隧道、其他 Wi-Fi 与蜂窝网络自动连接的方案。Home-WiFi 是说明用的 SSID,设置时应替换为设备实际连接的 Wi-Fi 名称,不是路由器后台地址。

家庭 Wi-Fi 例外

入口
Settings → On Demand
InterfaceTypeMatch
WiFi
SSIDMatch
Home-WiFi
Action
Disconnect

先放具体 SSID 条件,再放匹配所有 Wi-Fi 的条件。

蜂窝网络连接

入口
Settings → On Demand
InterfaceTypeMatch
Cellular
SSIDMatch
不设置
Action
Connect

蜂窝条件不使用 Wi-Fi 名称;需要设备具备可用的蜂窝连接。

上面的英文键用于说明系统按需条件,不表示应用一定逐字展示这些字段。应通过当前界面提供的 Wi-Fi、蜂窝网络与动作选项配置,不要把这些键粘贴到 Config 的普通分流规则中。

评估顺序匹配条件动作预期结果
1WiFi,SSID 为 Home-WiFiDisconnect家庭 Wi-Fi 命中例外,不保持该按需 VPN 连接
2WiFi,不限定 SSIDConnect其他 Wi-Fi 触发连接
3CellularConnect蜂窝网络触发连接

结论:先解决规则覆盖,再排查连接资料

家庭 Wi-Fi 仍自动连接时,先检查通用 Wi-Fi 的 Connect 是否排在指定 SSID 的 Disconnect 前面。让具体例外先被评估,再重新切换网络测试。

SSID 应核对大小写、空格及实际接入的名称。同一路由器的不同频段可能使用不同名称,访客网络也可能是另一项。按 SSID 匹配只识别名称,不验证网络可信程度,因此不能把命中家庭名称当作安全认证。

域名按需连接:不是 DOMAIN-SUFFIX 的另一种写法

域名按需连接属于系统的连接评估机制。系统层的 EvaluateConnection 可以配合域名条件与 ConnectIfNeeded 使用;它不等于“每次访问该域名都强制重连”。如果现有网络能够完成所需的解析与连接评估,系统可能不启动 VPN。缓存、既有连接和应用的解析方式也会影响观察结果。

下面展示系统按需规则的结构,便于识别 Action、Domains 和 DomainAction 的关系。它是说明用的属性列表片段,不是 Shadowrocket Config 文件,也不是让用户直接导入的配置。仅在当前 On Demand 界面提供相应域名评估选项时,通过界面设置。

<dict>
  <key>Action</key>
  <string>EvaluateConnection</string>
  <key>ActionParameters</key>
  <array>
    <dict>
      <key>Domains</key>
      <array>
        <string>example.com</string>
      </array>
      <key>DomainAction</key>
      <string>ConnectIfNeeded</string>
    </dict>
  </array>
</dict>

例如,example.com 是域名,example.com:443 带有端口,不应当作同一个域名条件填写。HTTPS 常用端口 443,但 On Demand 域名匹配不是按这个端口开关连接。直接访问 IP 地址,也不能用于验证域名条件是否命中。

网络方案与域名方案先分开测试

如果前面的规则已对所有 Wi-Fi 执行 Connect,后面的域名评估通常没有决定是否启动的机会。反过来,前面的 Disconnect 也可能截住域名评估。先只验证域名评估,再添加网络限制;不要期待系统把多条互斥动作自动合并。

隧道建立后:再用 Config 决定目标流量的去向

如果需求是“保持连接,但只有指定域名走代理”,通常应使用 Config 分流,而不是反复启动和断开整个隧道。On Demand 可以负责蜂窝网络自动连接,Config 再负责按域名、IP 或地区选择策略。这两种机制可以配合,但不能互相替代。

[Rule]
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT
GEOIP,CN,DIRECT
FINAL,PROXY

这段内容只演示规则语法,不是完整可用的连接配置。DOMAIN-SUFFIX 匹配域名后缀;IP-CIDR 匹配指定地址网段;GEOIP 根据地址归属数据库匹配;FINAL 处理前面没有命中的请求。应结合自己现有配置理解策略,不要直接覆盖整个 Config。

需要解决的问题应调整的位置不要混淆的事项
切到蜂窝网络时自动连接Settings → On Demand不是增加一条 GEOIP 规则
连接后 example.com 使用代理Config 内的 DOMAIN-SUFFIX不是启动隧道的触发条件
局域网地址保持直连Config 内的 IP-CIDRDirect 分流不等于系统 VPN 已断开
未命中其他规则的请求Config 内的 FINAL应放在需要优先匹配的规则之后

排查顺序也应分层。先看系统有没有建立隧道,再看 Global Routing 是否使用 Config,最后检查命中的具体分流规则。若还没有连接,修改 FINAL 不能解决按需触发;若已经连接但目标走错策略,应检查配置,而不是不断改动 Wi-Fi 条件。

测试与排障:一次只改变一个条件

自动连接是否正常,应通过可复现的网络切换验证。以下为测试步骤和预期现象,不是对所有网络环境的连接时长承诺。切换后等待系统完成网络评估,再检查状态,不要在切换瞬间连续手动开关连接。

  1. 验证指定 Wi-Fi:接入 Home-WiFi,确认命中 Disconnect 例外。若仍连接,检查 SSID 和规则顺序。
  2. 验证其他 Wi-Fi:切换至另一个已知名称的 Wi-Fi,确认通用 Wi-Fi 的 Connect 能触发。
  3. 验证蜂窝网络:关闭 Wi-Fi,确认设备已有蜂窝数据连接,再观察 VPN 是否启动。
  4. 单独验证域名:暂时移除会提前命中的通用动作,断开已有隧道,再按域名评估条件测试。不要仅靠重复刷新缓存页面下结论。
  5. 验证回退:关闭 On Demand 后手动断开,再切换网络,确认没有其他自动化或管理策略重新发起连接。

为什么刚关闭连接,过一会儿又连上了?

先进入 Settings → On Demand 关闭按需功能,再到 Home 断开。若仍恢复连接,检查系统 VPN 设置是否还有其他有效的按需配置,以及设备是否受组织管理。

为什么家里 Wi-Fi 的 Disconnect 没有生效?

先在系统 Wi-Fi 设置核对当前 SSID,再把指定 SSID 的条件放到通用 Wi-Fi 条件之前。若同一路由器提供两个不同名称,应分别纳入需要匹配的范围。

访问指定域名,为什么没有立即连接?

先确认使用的是域名评估,而不是 Config 中的 DOMAIN-SUFFIX。再检查是否已有前置 Connect 或 Disconnect 命中。ConnectIfNeeded 取决于系统评估,普通网络可直接解析访问时,不启动也可能符合其含义。

VPN 已经连接,为什么目标请求还是直连?

在 Home 检查 Global Routing。使用 Config 时,检查当前配置中更靠前的规则以及最终命中的策略。系统显示 VPN 已连接,只说明隧道存在,不代表每个请求都使用 PROXY。

保留最终有效方案时,记录实际 SSID、规则先后顺序、Global Routing 姿态和测试网络类型。不要在排障记录中公开订阅地址或认证资料。后续需要增加新条件时,先复测现有方案,再一次添加一条规则。