本文速览

本文面向已经有自己的服务商与订阅、能够手动建立连接的用户。先区分 On Demand 与流量分流,再配置指定 Wi-Fi 和蜂窝网络的连接条件,最后核对域名触发的限制、规则顺序与自动重连原因。测试时一次只改变一个条件,以系统 VPN 状态和实际请求记录分别验证结果。

On Demand 控制连接,不替代 Global Routing

Shadowrocket(小火箭)的 On Demand 使用 Apple 系统的按需 VPN 机制,在网络条件符合规则时请求建立连接,或按规则断开连接。它处理的是“何时建立隧道”,不是“某个网站走哪条线路”。进入应用的 Settings → On Demand 配置条件后,还需要确认当前系统 VPN 配置允许按需连接。

Global Routing 处理连接建立后的流量走向。Proxy、Direct、Config、Scene 属于这一层的姿态;其中 Config 根据当前配置的规则分流,Scene 按所选场景设置工作。把 Global Routing 设为 Direct,不等于关闭系统 VPN,也不等于停用 On Demand。

网络条件变化 按需规则评估 系统建立隧道 流量规则匹配 执行出站策略

因此,“出现 VPN 状态,但请求走 Direct”不一定是故障。前者说明隧道状态,后者说明请求的出站策略。排查时应分别记录这两个结果,不能只根据状态栏图标推断流量全部通过代理。

2 层
连接触发与流量分流分别核对
2 类
本文分别测试 Wi-Fi 与蜂窝网络
4 项
Global Routing:Proxy / Direct / Config / Scene

启用前:先验证手动连接与系统授权

On Demand 不会修复无效的订阅、错误的连接参数或不可用的网络。先在 Home 选择已有的可用连接,手动打开连接开关,再访问一个平时可正常打开的页面。只有手动连接能够工作,自动触发的测试结果才有判断意义。

  1. 确认已有配置。在 Home 核对当前选择的连接;需要按规则分流时,再到 Config 确认选中了预期配置,避免测试中途切换配置。
  2. 完成系统授权。首次添加 VPN 配置时,按系统提示确认。拒绝授权或移除系统配置后,应用中的条件不会独立建立隧道。
  3. 进入按需设置。打开 Shadowrocket 的 Settings → On Demand,检查当前启用状态与已保存条件。具体字段及可选动作以当前界面为准。
  4. 核对系统配置。在 iPhone 或 iPad 的系统“设置”中,进入“通用”→“VPN 与设备管理”→“VPN”,打开对应配置的信息页,核对 Connect On Demand。系统语言不同,标签可能显示为“按需连接”。
  5. 保留基线。记录当前 Wi-Fi 名称、是否启用蜂窝数据、连接状态和 Global Routing 姿态。后续每次测试只变更一个项目。

指定 Wi-Fi:先写例外,再写通用条件

按指定 Wi-Fi 名称设置时,匹配对象是 SSID。SSID 与路由器背面的管理地址、设备备注名不是同一个字段。先在系统 Wi-Fi 页面查看当前接入的名称,再原样填写;注意空格、符号与大小写,不要自行假定系统会做模糊匹配。

例如,用户希望在自己确认可直接访问所需资源的家庭网络上断开隧道,在其他 Wi-Fi 上请求连接。这是一个“指定网络例外 + 通用网络条件”的方案,不是所有家庭网络都应断开。下列 SSID 是演示值,录入时应使用实际网络名称。

指定 Wi-Fi 例外

入口
Settings → On Demand
网络条件
Wi-Fi
SSID 示例
Home-WiFi-Example
动作目标
Disconnect
排列位置
通用 Wi-Fi 条件之前

仅在该网络确实不需要隧道时使用此例外;SSID 本身不能证明网络可信。

其他 Wi-Fi 条件

入口
Settings → On Demand
网络条件
Wi-Fi
匹配范围
未被前序例外处理的 Wi-Fi
动作目标
Connect
排列位置
指定 SSID 例外之后

界面若提供独立的例外列表,使用该列表表达范围;不要把未说明含义的空字段当作通配符。

系统按顺序评估按需规则,前面已命中的通用条件可能遮住后面的特定条件。若当前界面允许调整列表顺序,把窄范围例外放在宽范围条件之前;若界面以分类选项生成规则,则按其例外选项配置,不要把 Config 中的文本规则粘贴进来。

蜂窝网络:独立测试切换,不用关闭 Wi-Fi 代替全部验证

蜂窝条件针对实际使用的网络接口,不是“设备已插入 SIM 卡”。在支持蜂窝数据的 iPhone 或 iPad 上,先确认蜂窝数据可用,再设置该条件的 Connect 或 Disconnect 动作。仅支持 Wi-Fi 的 iPad 无法完成蜂窝路径测试。

  1. 先建立 Wi-Fi 基线。连接指定 Wi-Fi,等待网络稳定,确认例外条件下的预期 VPN 状态。
  2. 切换到蜂窝网络。在系统设置中关闭 Wi-Fi,确认设备通过蜂窝数据访问普通页面,而不是停留在无网络状态。
  3. 触发实际请求。打开一个页面或重新发起请求,观察 VPN 是否按蜂窝条件建立或断开。不要只等待状态栏图标变化。
  4. 切回原 Wi-Fi。重新连接同一 SSID,等待网络切换完成,再发起请求,核对是否返回例外条件对应的状态。
  5. 记录两层结果。分别写下 VPN 状态与页面访问结果。若隧道已建立但页面失败,应转向连接参数和分流规则,而不是继续修改网络触发条件。

切换过程中,已有长连接可能断开后重试,DNS 缓存也可能保留。单次短暂失败不足以证明规则冲突。应在网络稳定后发起新请求,再重复同一测试。On Demand 也不代表所有应用都持续产生网络活动,空闲时不应以固定秒数承诺必然出现连接。

域名触发:区分按需评估与 DOMAIN-SUFFIX

“访问某个域名自动连接”与“某个域名走 Proxy”是两个不同需求。后者可由 Config 中的 DOMAIN-SUFFIX 等规则处理,但前提是相关请求已经进入隧道。仅在 [Rule] 中增加域名规则,不会自动创建系统的域名按需触发条件。

Apple 的按需机制中,域名相关行为可涉及 EvaluateConnection 与 ConnectIfNeeded:系统在符合条件的域名解析或连接评估中判断是否需要 VPN,而不是监视浏览器地址栏后对每一次访问无条件连接。具体是否可配置、如何填写,取决于 Shadowrocket 当前提供的选项,不能把系统支持的所有字段都当成应用内必有开关。

设置位置或机制解决的问题不能据此推断的结果
Settings → On Demand定义系统何时请求建立或断开隧道不能据此认定域名一定使用 Proxy
EvaluateConnection / ConnectIfNeeded按域名与连接评估条件判断是否需要连接不是每次打开相同域名都必然重新建连
DOMAIN-SUFFIX,example.com,PROXY在 Config 分流中把匹配域名交给对应策略不能单独唤起尚未建立的隧道

域名测试尤其容易受到缓存干扰。已有 DNS 结果、应用自带的加密 DNS、直接访问 IP 地址,都可能让测试不再经过预期的系统域名解析路径。域名能够在当前网络正常解析时,也未必满足“需要连接”的评估条件,因此“能打开网页但未自动连接”并不直接证明配置失效。

规则冲突:先检查触发顺序,再检查分流顺序

两层规则各自有顺序,不能混在一起比较。On Demand 先决定连接动作;连接建立后,Global Routing 再决定是否使用 Config 的规则。若当前停在 Proxy 或 Direct,修改 [Rule] 通常不是验证该姿态下行为的正确方法。

下面是流量分流的语法示例,不是 On Demand 配置,也不包含可连接的服务。PROXY 需要在当前配置中对应可用策略。将规则用于实际配置前,应先备份原配置并确认策略名称。

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

实际排查顺序是:确认当前网络条件,确认按需规则命中范围,查看系统 VPN 是否建立,再检查 Global Routing 与请求命中的规则。只有最后一步异常时,才调整分流规则的位置。订阅更新改变了可用连接时,也应先重新验证手动连接,不要同时改动 On Demand 与配置文件。

常见现象:自动重连、例外失效与停止测试

刚在 Home 关掉连接,为什么又连上了?

先到 Settings → On Demand 停用按需触发,再核对系统 VPN 信息页的 Connect On Demand 状态。条件仍有效时,新的网络请求可能再次触发连接;只关闭 Home 开关不等于移除按需条件。

家里 Wi-Fi 已设 Disconnect,为什么还是连接?

先核对实际 SSID 是否完全一致,再检查通用 Wi-Fi 的 Connect 条件是否排在例外之前。确认连接的是预期网络后,断开并重新接入该网络,发起新请求,再检查对应系统 VPN 配置的状态。

蜂窝网络下出现 VPN 状态,但页面打不开怎么办?

先停用 On Demand,用同一蜂窝网络手动连接测试。若仍失败,检查 Home 当前选择、已有连接的有效性与 Global Routing;若手动正常,再恢复蜂窝条件,单独验证触发过程。

加了域名规则,为什么访问它没有自动连接?

检查修改位置。如果只改了 Config 的 DOMAIN-SUFFIX,那是分流规则。回到 Settings → On Demand 核对是否有域名触发选项;没有对应选项时,不要继续用分流语法尝试代替系统触发条件。

怎样恢复到完全手动连接?

先停用应用内 On Demand,再核对对应系统配置的 Connect On Demand 已关闭,随后在 Home 断开连接。重新接入 Wi-Fi 并发起请求,确认不会因原有条件再次连接;以后需要时再手动打开。

完成测试后,只保留能够说明用途的条件。指定 SSID 例外、其他 Wi-Fi、蜂窝网络应分别验证;域名相关条件若无法稳定复现预期行为,应先停用该项,保留已经验证的网络条件。这样可以把“是否触发”与“连接后是否可用”分开定位。