On Demand 决定系统何时建立或断开 VPN 隧道,Global Routing 与 Config 决定隧道建立后怎样处理请求。本文适合已经能手动连接、并且已有自己的服务信息与订阅的用户:先设置 Wi-Fi 与蜂窝网络条件,再核对域名评估的边界,最后按固定顺序验证,避免把自动连接、规则分流和服务可用性混为一谈。
一、先区分 On Demand 与规则分流
Shadowrocket(小火箭)的 On Demand 是交给 Apple 系统执行的按需连接机制,并不是对每个网页都重新选择一次连接开关。网络接口、Wi-Fi 的 SSID 等条件用于判断是否需要隧道;请求进入隧道之后,才由 Global Routing、当前 Config 和所选连接配置决定去向。自动连接成功,不等于所有请求都经过代理。
例如,On Demand 已让 VPN 保持连接,但 Global Routing 选为 Direct 时,请求仍按直连姿态处理。若需要使用自定义规则,应核对 Global Routing 是否为 Config。Proxy 是整体代理姿态,Scene 则涉及场景选择;它们都不能用来代替 Wi-Fi 或蜂窝网络触发条件。
结论:先完成一次手动连接,再添加自动条件
先在 Home 选用已有连接配置,手动连接并确认目标可访问;这一步未通过时,先检查服务参数、DNS 和 Config,不要用增加 On Demand 规则来掩盖连接故障。
二、Settings → On Demand:先保存基线,再启用条件
开始前记录当前 Home 选中的连接配置、Global Routing 姿态以及 Config。用户已有订阅时,应先确认导入和更新成功,连接配置未失效。On Demand 不负责更新订阅,也不会修正过期的认证信息;订阅更新导致配置名称或选择变化后,还要重新做一次连接验证。
- 在 Home 完成手动连接测试,首次使用时按系统提示允许添加 VPN 配置。
- 进入 Settings → On Demand,检查现有条件。先记录原顺序,不要直接叠加一组含义相反的规则。
- 先添加一个容易验证的网络条件,例如指定 Wi-Fi 的 SSID;仅修改这一项,保存后再启用 On Demand。
- 到 iPhone 或 iPad 的系统设置中搜索 VPN,进入 Shadowrocket 对应的配置详情,核对 Connect On Demand 状态。显示路径可能随系统界面变化,以设备实际页面为准。
- 切换网络后观察 VPN 状态,再发起一次新的访问。系统条件评估和隧道建立需要时间,不要连续快速切换开关。
以下配置卡是条件设计示例,不是界面截图,也不是可以直接导入的配置。Connect、Disconnect 表示连接动作;实际可编辑条件以 Settings → On Demand 中显示的项目为准。
三、按 SSID 区分 Wi-Fi,蜂窝网络单独设置
SSID 是 Wi-Fi 的网络名称,不是路由器管理地址,也不是设备在局域网中的 IP 地址。输入时按实际名称核对大小写、空格及符号。家中两个频段若分别命名为 HomeNet 与 HomeNet-5G,应分别纳入预期条件;不要把名称的一部分当作自动匹配全部网络的通配符。
指定 Wi-Fi 的断开例外
- 入口
- Settings → On Demand
- 接口条件
- Wi-Fi
- SSID 示例
- HomeNet
- 目标动作
- Disconnect
- 放置位置
- 一般 Wi-Fi 连接条件之前
仅在确实希望该网络不建立隧道时采用,SSID 名称本身不能证明网络可信。
蜂窝网络的连接条件
- 入口
- Settings → On Demand
- 接口条件
- Cellular
- SSID 限制
- 不设置
- 目标动作
- Connect
- 验证方式
- 关闭 Wi-Fi 后发起新请求
蜂窝网络没有 Wi-Fi SSID,不要把家庭网络名称附加到该条件上。
如果目标是“指定家庭 Wi-Fi 断开,其他 Wi-Fi 和蜂窝网络连接”,就需要区分特定 SSID 的例外与一般 Wi-Fi 条件。不要只写家庭例外而假定所有其他网络会自动获得相反动作;其他情况的行为仍取决于后续条件和原有配置。
- 同名网络:不同地点可能使用相同 SSID,名称匹配不能验证路由器身份。
- 双频合并:两个频段共用同一 SSID 时,名称条件通常不能用来区分它们。
- 认证网络:需要网页登录的 Wi-Fi,应先完成网络认证,再检查隧道连接和访问情况。
- 接口变化:Wi-Fi 信号不佳时可能发生接口变化,应核对设备实际正在使用的网络,而不是只看 Wi-Fi 是否已开启。
四、域名触发不是 DOMAIN-SUFFIX,也不是网页关闭后断开
域名相关的按需连接需要区分系统连接评估与应用内分流。Apple 的 On Demand 机制支持通过 EvaluateConnection 评估匹配域名,例如在相应条件下按需要建立连接。具体是否提供域名条件、可选动作和 DNS 判断项,要以当前 Shadowrocket 的 On Demand 编辑页为准;不能把系统支持的全部字段都当成应用中必然存在的输入框。
若页面提供域名评估条件,应填写域名而不是完整 URL。例如测试域名写作 example.com,不要填成 https://example.com/path。有些评估依赖解析失败或可达性判断,并非每次访问这个域名都立即连接;已有隧道、DNS 缓存和复用的连接也会影响观察结果。域名触发应单独测试,避免同时存在一条更早命中的“所有网络连接”条件。
| 设置对象 | 解决的问题 | 不应推导出的行为 |
|---|---|---|
| On Demand 域名评估 | 系统是否需要为匹配请求建立连接 | 关闭一个网页就立即断开整个 VPN |
DOMAIN-SUFFIX | Config 中按域名后缀选择请求策略 | 仅添加规则就能从未连接状态启动隧道 |
DIRECT | 让匹配请求直接连接目标 | 把正在工作的整个 VPN 隧道断开 |
FINAL | 承接前面未匹配的请求 | 成为 On Demand 网络条件的兜底动作 |
需要“特定域名代理,其余直连”时,应主要在 Config 内处理,而不是尝试让系统随着每个域名反复连接与断开。下面是规则片段示意,需要放进当前配置的规则部分;PROXY 应能对应到有效策略,示例域名不代表任何可用服务。
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
域名层面的不触发连接,也不等于强制断开已经存在的连接。一个隧道可能同时承载多个应用请求,不能用单个页面的打开或关闭来定义整个隧道的生命周期。
五、多条条件的顺序:具体例外在前,一般条件在后
系统按顺序检查 On Demand 规则,使用首先匹配的规则。单条规则里设置的接口、SSID 等限制需要共同满足;同一 SSID 列表则用于列出允许匹配的网络名称。排查时不要只检查“规则存在”,还要检查它是否被前面的宽泛条件遮住。
- 第一层:特定例外。例如接口为 Wi-Fi 且 SSID 为 HomeNet 时执行 Disconnect。
- 第二层:一般 Wi-Fi。对其余希望连接的 Wi-Fi 执行 Connect;若放在第一条,家庭例外可能没有执行机会。
- 第三层:蜂窝网络。为 Cellular 设置独立动作,不附加仅适用于 Wi-Fi 的 SSID 条件。
- 最后核对:剩余情况。检查现有通用条件,确认没有遗留的宽泛 Disconnect 或 Connect 与目标冲突。
这个顺序说明的是网络规则设计。若加入 EvaluateConnection,应再核对它前面是否已有匹配当前网络的规则。On Demand 中的“首先匹配”和 Config 规则的“首先匹配”发生在不同阶段:调整 FINAL 的位置不会修复 SSID 条件顺序,移动 SSID 条件也不会改变 DOMAIN-SUFFIX 的请求策略。
六、用四种状态复核,不凭一次图标变化判断
测试时保持已有服务、Global Routing 和 Config 不变,只切换网络条件。每次切换后等待状态稳定,再发起新的访问;既有网页可能继续显示缓存内容,既有长连接也不一定立即体现新的路径。下表是前述示例设计的预期,不是对任何网络的实测结果。
| 测试状态 | 示例预期 | 不符时先查 |
|---|---|---|
| 连接 HomeNet | 命中特定 SSID 的 Disconnect | SSID 拼写、例外顺序、配置是否保存 |
| 连接另一 Wi-Fi | 命中一般 Wi-Fi 的 Connect | 是否存在一般条件、网络是否完成认证 |
| 关闭 Wi-Fi,使用蜂窝网络 | 命中 Cellular 的 Connect | 实际接口、蜂窝访问权限、连接配置有效性 |
| 临时关闭 On Demand | 停止按这些条件自动触发 | 系统配置中的 Connect On Demand 状态 |
暂停自动连接时,先关闭 On Demand,必要时再手动断开现有隧道,并核对系统配置。仅在 Home 关闭连接,系统仍可能在下一次满足条件时重新建立隧道。长期不使用某组自动条件时,记录后禁用或删除对应规则,比反复手动断开更容易保持可预测的状态。
七、常见问题:自动重连、网页不通与域名不触发
已经手动断开,为什么过一会儿又连上了?
先进入 Settings → On Demand 检查当前网络是否仍命中 Connect 条件。若只是暂时停用,关闭 On Demand,再到系统 VPN 配置中确认 Connect On Demand 状态,最后断开现有连接;不要只重复点击 Home 的连接开关。
家庭 Wi-Fi 设了 Disconnect,为什么仍然自动连接?
在系统 Wi-Fi 页面核对实际 SSID,检查空格、大小写和另一频段的名称。再将特定 SSID 例外放到一般 Wi-Fi 条件之前。确认条件保存后重新连接该 Wi-Fi,避免把修改前留下的隧道状态当作新规则的结果。
VPN 显示已连接,网页却打不开,要继续改 On Demand 吗?
先暂停自动条件并手动连接,核对 Home 选中的已有服务是否有效,再检查 Global Routing 和当前 Config。延迟结果不等于 DNS 解析与网页请求成功;手动连接也无法访问时,应转向服务参数、DNS 和请求策略排查。
加了 DOMAIN-SUFFIX,为什么访问域名时没有自动连接?
DOMAIN-SUFFIX 是 Config 中的分流规则,不负责唤起未建立的隧道。先在 Settings → On Demand 核对是否提供并启用了相应连接评估条件,再检查先匹配规则是否覆盖它。若目标只是让该域名走 PROXY,可先保持隧道连接来验证分流。
完成配置后的判断标准应分成两项:网络变化时隧道是否按预期建立或断开,以及隧道建立后请求是否按预期分流。分别记录结果,才能确定下一步该改 On Demand,还是该改 Global Routing、Config 或已有服务参数。