适合已经能够手动连接、希望按网络环境自动建立或断开连接的用户。先区分 On Demand 与流量分流,再按“指定 Wi-Fi 例外、蜂窝网络连接、其他网络兜底”的顺序配置,最后验证域名条件与彻底关闭方法。操作以 iPhone / iPad 的系统 VPN 按需机制为主,不把这套菜单路径直接套用到其他平台。
一、先区分自动连接与规则分流
Shadowrocket(小火箭)的 On Demand 管理的是系统何时尝试建立 VPN 连接;连接建立之后,访问目标如何处理,还取决于 Global Routing 和当前配置。状态栏出现 VPN 标识,不代表所有请求都经过代理;某个网站命中 DIRECT,也不代表系统会断开 VPN。
获取方式分为两档:iPhone / iPad 在 App Store $2.99 一次性付费,开发者为 Shadow Launch Technology Limited,系统要求以 App Store 页面标注为准;Mac(Apple 芯片 / Intel)、Windows、安卓、Linux 版免费。设备入口统一见全平台下载页。本文以用户已有自己的服务商与订阅为前提,客户端不附带连接服务,本站不提供、不销售、不推荐节点或订阅。
需要按网站分流时,在 Home 检查 Global Routing,使用 Config 并确认 Config 中实际启用了预期配置。Proxy、Direct、Config、Scene 是不同的路由姿态,不是 On Demand 的连接动作。尤其不要把 Global Routing 下的 Direct,理解为系统按需规则中的 Disconnect:前者影响请求如何转发,后者影响隧道是否连接。
二、启用前先完成一次手动连接
自动化不会修复错误的连接参数。先在 Home 选择自己已有的连接配置,手动开启连接并访问一个已知可用的目标;如果此时失败,应先核对服务端地址、端口、认证信息和协议参数,再开启 On Demand。不要同时更换服务端、修改 DNS、调整分流规则,否则无法判断哪项变化导致结果不同。
- 在 Home 确认当前选中的连接项目。通过订阅导入的项目,应先完成一次正常更新,确认配置不是空列表。
- 检查协议与已有服务端一致。Shadowsocks、VMess、VLESS、Trojan、Hysteria2、WireGuard 的认证与传输参数不能互换。
- 手动开启连接,按系统提示允许添加 VPN 配置;在浏览器中验证实际访问,而不是只看连接开关。
- 进入 Settings → On Demand,记录当前规则及排列顺序,再开始增加网络条件。
- 每次只修改一个条件并保存。返回 Home 检查连接状态,再执行一次真实的网络切换。
三、指定 Wi-Fi:先写例外,再处理其余网络
以“家中 Wi-Fi 不建立隧道,其他 Wi-Fi 尝试连接”为例,先到系统 Settings → Wi-Fi 查看当前网络名称。SSID 是 Wi-Fi 名称,不是路由器品牌、网关地址或设备名称。示例名称 Home-WiFi 需要替换为设备实际显示的名称;空格、标点及名称中的字符都应逐一核对。
进入 Shadowrocket 的 Settings → On Demand,在可编辑的 Wi-Fi 条件中指定该 SSID,并将对应动作设为 Disconnect;再为其余 Wi-Fi 设置 Connect。不同系统与平台暴露的编辑项可能不同,下面的卡片是条件与动作的对应关系,不是可以粘贴导入的配置文件。如果当前界面没有提供某种条件,不要把它改写成 Config 中的域名规则来代替。
指定 Wi-Fi 例外
- 入口
- Settings → On Demand
- 网络类型
- Wi-Fi
- SSID 示例
- Home-WiFi
- 动作
- Disconnect
- 排列位置
- 其他 Wi-Fi 的通用条件之前
SSID 按实际名称填写;名称相同的网络可能命中同一条件。
其他 Wi-Fi
- 入口
- Settings → On Demand
- 网络类型
- Wi-Fi
- SSID 限制
- 不限定具体名称的通用条件
- 动作
- Connect
- 排列位置
- 指定 SSID 例外之后
通用条件不能排在例外之前,否则指定网络也可能先命中 Connect。
SSID 只能表达网络名称,不能证明网络可信。家庭路由器更名、双频网络分别命名、访客网络使用不同名称时,都要重新检查匹配范围。公共 Wi-Fi 若要求先打开认证网页,应先完成网络登录;底层网络尚未获得互联网访问权限时,Connect 动作也不能使服务端自动变得可达。
四、蜂窝网络:使用独立条件验证切换
希望离开 Wi-Fi 后自动连接,可以为蜂窝网络设置 Connect。这里匹配的是设备当前使用的网络接口,不是 SIM 卡显示名称,也不是某家运营商。iPad 只有具备并启用蜂窝网络能力时,才能直接测试这类条件;连接手机热点的设备通常仍处于 Wi-Fi 接口,应按它连接到的 SSID 判断。
- 在 Settings → On Demand 中检查蜂窝网络条件,把预期动作设为 Connect,并保存修改。
- 保留指定 Wi-Fi 的 Disconnect 例外,不要用一条无条件 Connect 覆盖全部情况。
- 在系统 Settings → Wi-Fi 关闭 Wi-Fi,确认设备实际使用蜂窝数据,而不是仅在控制中心暂时断开当前网络。
- 发起一次新的网页访问,观察 Home 的连接状态与访问结果。系统触发可能与网络可用性及新请求有关,不以切换瞬间的图标作为唯一依据。
- 重新连接指定的 Home-WiFi,再访问目标,验证连接状态是否符合 Disconnect 例外。
五、域名条件:不等于打开某个网页就全局开关
系统 VPN 按需机制可以通过 EvaluateConnection 一类动作,在域名解析与可达性条件下判断是否需要连接。它与直接按网络类型 Connect 不同,也不是读取浏览器地址栏。只有当前编辑界面确实提供了域名评估条件时,才能配置对应行为;不要假定每个平台都有相同的域名编辑能力。
填写域名时使用 example.com 这样的主机名,不填 https://example.com/path,也不填网页标题。域名评估的匹配范围由对应字段定义,不能直接照搬 DOMAIN-SUFFIX 的语义。若有“解析失败时连接”或“探测失败时连接”之类条件,应按实际提供的选项设置,并确认所用 DNS 或探测目标在预期网络中确实可用。
- 域名评估发生在系统处理相关请求的过程中,DNS 缓存或应用复用已有连接,可能使重复打开页面不能重现第一次触发。
- 网页会加载图片、脚本和其他域名。主页面的域名条件并不自动覆盖所有第三方请求。
- 关闭浏览器标签页不构成“断开隧道”的可靠信号,不能据此承诺访问结束后立即 Disconnect。
- 应用自己处理 DNS、使用加密解析或直接访问 IP 地址时,触发路径可能不同。测试时应单独记录系统解析与应用行为。
如果目标只是“指定网站走代理,其余直连”,通常应让连接保持可用,并在 Config 中做分流,而不是依赖域名条件频繁开关隧道。以下是分流语法示例,不是 On Demand 配置;PROXY 必须对应当前配置中实际可用的策略。
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
这两行表示 example.com 及其子域名命中 PROXY,其余请求落入 DIRECT。它们不会要求系统在离开该网站时关闭 VPN,也不会自动补齐网站依赖的其他域名。测试时在请求记录中核对实际目标与命中策略,再决定是否增加规则。
六、冲突顺序:分别检查按需条件与 Config
按需连接与请求分流是两套判断,必须分别检查。系统按需规则按顺序评估,先命中的适用条件决定动作;连接后的 Config 规则也强调顺序,但两者的“命中”不是同一件事。把 DOMAIN-SUFFIX 移到 Config 顶部,不能修复系统按需列表中错误的 Wi-Fi 例外顺序。
| 检查层 | 具体冲突 | 处理方法 |
|---|---|---|
| On Demand | 通用 Wi-Fi Connect 排在指定 SSID Disconnect 前面 | 把指定 SSID 的例外放到通用 Wi-Fi 条件之前,再重新切换网络。 |
| On Demand | 无条件 Connect 抢先匹配 | 先放具体网络与域名评估条件,把宽泛兜底放到后面。 |
| Global Routing | 停在 Direct,却期待 Config 的 PROXY 规则生效 | 回到 Home 检查姿态,选择 Config 后再检查实际启用的配置。 |
| Config | 宽泛规则排在具体域名规则之前 | 先检查 DOMAIN-SUFFIX 等具体匹配,再检查 GEOIP、IP-CIDR 等规则及末尾 FINAL。 |
不要把 FINAL 当成 On Demand 的兜底动作。FINAL 只处理前面分流规则未匹配的请求;它不能表达“其他 Wi-Fi 自动连接”。同样,GEOIP 与 IP-CIDR 用于请求地址相关的匹配,不用于识别设备当前处于家中 Wi-Fi 还是蜂窝网络。
七、按测试矩阵定位问题,再关闭自动连接
一次有效的验证应包含触发前网络、触发后网络、连接状态和访问结果。先固定同一个可访问目标,每次只变更一个网络条件;不要把切换网络时短暂的旧连接保留,直接判定为规则失效。连接状态与目标请求记录应结合查看。
| 测试场景 | 预期结果 | 不符时先查 |
|---|---|---|
| 其他网络切入 Home-WiFi | 按指定 SSID 的 Disconnect 处理 | 实际 SSID、规则顺序、修改是否保存 |
| Home-WiFi 切入其他 Wi-Fi | 按通用 Wi-Fi Connect 处理 | 通用条件是否存在、认证网页是否完成 |
| 关闭 Wi-Fi,改用蜂窝数据 | 按蜂窝 Connect 条件尝试连接 | 蜂窝数据权限、网络可达性、接口条件 |
| 连接后访问 example.com | 按当前 Config 的对应策略处理 | Global Routing、启用配置、实际请求域名 |
为什么手动关掉后又自动连上?
先进入 Settings → On Demand 停用按需连接并保存,再到 Home 断开。若系统仍会触发,在 iPhone / iPad 的系统 Settings → General → VPN & Device Management → VPN 中打开对应配置的信息页,检查 Connect On Demand 是否仍开启。系统语言不同会影响显示名称。
回到家中 Wi-Fi 后还是显示连接,怎么办?
先在系统 Wi-Fi 页面读取当前 SSID,再核对指定 SSID 的 Disconnect 是否排在通用 Connect 前面。保存后切换到另一网络,再重新接入该 Wi-Fi;同时确认查看的是 Shadowrocket 对应的 VPN 配置。
开着 On Demand,但网页仍然打不开?
暂时停用 On Demand,改用 Home 手动连接并访问相同目标。手动也失败时,先查底层网络、服务端参数和 DNS;手动正常而自动不触发时,再查网络条件、规则顺序及系统按需开关。
关闭网页后为什么没有自动断开?
网页关闭不是按需规则的通用 Disconnect 条件。需要明确停止时,先停用 On Demand,再手动断开;只想让其他站点直连时,保留隧道并使用 Config 的 DIRECT 分流,不要以浏览器标签页状态控制连接。
完成排查后,按“指定 Wi-Fi 例外、其他 Wi-Fi、蜂窝网络、剩余兜底”的实际需求逐项恢复。没有用到的域名评估条件不必保留。每增加一项就重跑对应测试,确认连接动作与请求策略分别符合预期,再结束配置。