本文面向已经有自己的服务商与订阅、能够手动建立连接的用户。先区分 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”不一定是故障。前者说明隧道状态,后者说明请求的出站策略。排查时应分别记录这两个结果,不能只根据状态栏图标推断流量全部通过代理。
启用前:先验证手动连接与系统授权
On Demand 不会修复无效的订阅、错误的连接参数或不可用的网络。先在 Home 选择已有的可用连接,手动打开连接开关,再访问一个平时可正常打开的页面。只有手动连接能够工作,自动触发的测试结果才有判断意义。
- 确认已有配置。在 Home 核对当前选择的连接;需要按规则分流时,再到 Config 确认选中了预期配置,避免测试中途切换配置。
- 完成系统授权。首次添加 VPN 配置时,按系统提示确认。拒绝授权或移除系统配置后,应用中的条件不会独立建立隧道。
- 进入按需设置。打开 Shadowrocket 的 Settings → On Demand,检查当前启用状态与已保存条件。具体字段及可选动作以当前界面为准。
- 核对系统配置。在 iPhone 或 iPad 的系统“设置”中,进入“通用”→“VPN 与设备管理”→“VPN”,打开对应配置的信息页,核对 Connect On Demand。系统语言不同,标签可能显示为“按需连接”。
- 保留基线。记录当前 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 中的文本规则粘贴进来。
- 同名 SSID:不同地点可能使用同一名称,按名称匹配无法确认是同一台路由器。
- 双频网络:名称相同的两个频段通常无法只靠 SSID 区分;名称不同则应分别核对。
- 认证网络:需要网页认证的 Wi-Fi 应先完成认证,再测试连接,避免把尚未联网误判为条件未生效。
- 名称读取:若应用无法识别当前 SSID,按系统提示检查相关权限与限制,不要直接扩大自动连接范围来掩盖问题。
蜂窝网络:独立测试切换,不用关闭 Wi-Fi 代替全部验证
蜂窝条件针对实际使用的网络接口,不是“设备已插入 SIM 卡”。在支持蜂窝数据的 iPhone 或 iPad 上,先确认蜂窝数据可用,再设置该条件的 Connect 或 Disconnect 动作。仅支持 Wi-Fi 的 iPad 无法完成蜂窝路径测试。
- 先建立 Wi-Fi 基线。连接指定 Wi-Fi,等待网络稳定,确认例外条件下的预期 VPN 状态。
- 切换到蜂窝网络。在系统设置中关闭 Wi-Fi,确认设备通过蜂窝数据访问普通页面,而不是停留在无网络状态。
- 触发实际请求。打开一个页面或重新发起请求,观察 VPN 是否按蜂窝条件建立或断开。不要只等待状态栏图标变化。
- 切回原 Wi-Fi。重新连接同一 SSID,等待网络切换完成,再发起请求,核对是否返回例外条件对应的状态。
- 记录两层结果。分别写下 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 界面确实提供域名相关条件,再依据字段说明填写,避免把完整 URL 当成域名。
- 域名字段通常不填写
https://、页面路径或:443;后缀匹配范围应按该字段说明核对,不自行猜测通配语法。 - 如果目标是稳定地按网络自动建立隧道,再按网站分流,可使用 Wi-Fi/蜂窝条件配合 Config;不要依赖未经验证的域名触发行为。
规则冲突:先检查触发顺序,再检查分流顺序
两层规则各自有顺序,不能混在一起比较。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
- 第一行:
DOMAIN-SUFFIX匹配示例域名后缀,匹配后采用该行策略,不继续寻找后面更符合偏好的规则。 - 第二行:
IP-CIDR匹配示例私有地址段;no-resolve表示不为这条 IP 规则额外发起域名解析,不代表所有 DNS 行为都被关闭。 - 第三行:
GEOIP按 IP 地理数据库结果匹配,不是按网页语言或域名文字判断地区。 - 最后一行:
FINAL处理此前未匹配的流量,应作为兜底放在规则末尾;它不能承担系统按需连接动作。
实际排查顺序是:确认当前网络条件,确认按需规则命中范围,查看系统 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、蜂窝网络应分别验证;域名相关条件若无法稳定复现预期行为,应先停用该项,保留已经验证的网络条件。这样可以把“是否触发”与“连接后是否可用”分开定位。