本文适合已经能够手动连接 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,而不是把两层规则混在一起排查。
- Home:先确认所选连接资料有效,手动连接后能完成正常访问。
- Config:确认当前使用的配置及规则顺序,避免修改了未选中的文件。
- Settings → On Demand:设置系统何时尝试连接,不在这里填写代理协议的认证资料。
本文以用户已有自己的服务商与订阅为前提。On Demand 不会修复过期的连接资料,也不会自动更新已失效的订阅地址。手动连接尚未成功时,应先处理基础连接,再启用自动化。
启用前:先建立手动连接与回退方法
首次配置时,先让自动化保持关闭。完成一次手动连接,确认系统 VPN 配置已被允许添加,再回到 Settings → On Demand。测试期间不要同时改动服务器、DNS、Global Routing 和按需条件,否则一个失败现象会对应多个变量。
- 在 Home 选中自己已有的有效连接资料,手动打开连接开关。
- 按测试目标选择 Global Routing。若要验证配置分流,使用 Config。
- 访问一个日常可用页面,记录当前网络类型以及连接是否正常。
- 进入 Settings → On Demand,先只加入一组网络条件,再启用按需连接。
- 切换一次 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 的普通分流规则中。
| 评估顺序 | 匹配条件 | 动作 | 预期结果 |
|---|---|---|---|
| 1 | WiFi,SSID 为 Home-WiFi | Disconnect | 家庭 Wi-Fi 命中例外,不保持该按需 VPN 连接 |
| 2 | WiFi,不限定 SSID | Connect | 其他 Wi-Fi 触发连接 |
| 3 | Cellular | Connect | 蜂窝网络触发连接 |
结论:先解决规则覆盖,再排查连接资料
家庭 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>
- EvaluateConnection:进入连接评估,而不是无条件执行 Connect。
- Domains:指定参与评估的域名范围,不填写完整 URL、路径或端口。
- ConnectIfNeeded:在满足系统评估条件时尝试连接,不保证每次访问都启动。
- NeverConnect:不因对应域名评估而启动连接,不表示断开已经建立的整个隧道。
例如,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-CIDR | Direct 分流不等于系统 VPN 已断开 |
| 未命中其他规则的请求 | Config 内的 FINAL | 应放在需要优先匹配的规则之后 |
排查顺序也应分层。先看系统有没有建立隧道,再看 Global Routing 是否使用 Config,最后检查命中的具体分流规则。若还没有连接,修改 FINAL 不能解决按需触发;若已经连接但目标走错策略,应检查配置,而不是不断改动 Wi-Fi 条件。
测试与排障:一次只改变一个条件
自动连接是否正常,应通过可复现的网络切换验证。以下为测试步骤和预期现象,不是对所有网络环境的连接时长承诺。切换后等待系统完成网络评估,再检查状态,不要在切换瞬间连续手动开关连接。
- 验证指定 Wi-Fi:接入 Home-WiFi,确认命中 Disconnect 例外。若仍连接,检查 SSID 和规则顺序。
- 验证其他 Wi-Fi:切换至另一个已知名称的 Wi-Fi,确认通用 Wi-Fi 的 Connect 能触发。
- 验证蜂窝网络:关闭 Wi-Fi,确认设备已有蜂窝数据连接,再观察 VPN 是否启动。
- 单独验证域名:暂时移除会提前命中的通用动作,断开已有隧道,再按域名评估条件测试。不要仅靠重复刷新缓存页面下结论。
- 验证回退:关闭 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 姿态和测试网络类型。不要在排障记录中公开订阅地址或认证资料。后续需要增加新条件时,先复测现有方案,再一次添加一条规则。