Stash 订阅更新后规则不生效怎么办?
简答:先不要重复更新订阅:打开 Stash,确认刚更新的配置就是当前启用配置,再把模式切到 Rule,检查 Override 是否启用、规则顺序是否正确,最后用请求记录确认目标域名实际命中了哪条规则。若订阅本身更新失败,应先处理链接、网络或格式问题;若更新成功但分流错误,则重点检查规则命中和策略组。本文按7步完成定位。
定义:Stash 订阅更新后规则不生效,通常是当前配置、代理模式、Override、规则顺序、策略组或规则数据其中一层没有按预期生效,而不一定代表订阅链接失效。
先做这张速查表:你看到的现象对应哪一层
Stash 的配置文件、规则和订阅是不同层次。先根据现象分流,能避免把“订阅没更新”和“规则已经命中但策略组不对”混在一起。Stash 的配置文件使用 YAML,配置文件与 Override 分开管理,Override 对配置字段具有更高优先级。Stash 配置示例
| 现象 | 优先检查 | 下一步 |
|---|---|---|
| 更新时间没有变化,节点列表也没变化 | 订阅地址、网络连通性、更新结果 | 重新执行一次更新,查看是否有解析或下载错误 |
| 节点更新了,但自定义规则消失 | 是否直接改了订阅配置文件 | 把长期修改迁移到 Override,并确认 Override 已启用 |
| 规则看起来存在,但目标域名仍走错线路 | 代理模式、规则顺序、策略组名称 | 在请求记录或连接记录中确认实际命中结果 |
| 只有部分域名异常 | 规则类型、规则集、DNS 或 GEOIP 数据 | 用不同类型域名分别测试,不要只测一个站点 |
如果你只想先试一个动作:确认当前启用配置的名称和更新时间,再确认模式是 Rule。这两项不对,后面的规则检查都可能是在检查错误的配置。
7步排查 Stash 订阅更新后规则不生效
- 确认当前使用的是刚更新的配置。
在配置文件列表中核对当前选中的文件,不要只看某个远程配置的更新时间。Stash 的官方快速开始流程要求下载配置后选中要使用的配置,再回到主页启动。Stash Quick Start 如果你更新的是配置 A、实际启用的是配置 B,规则不会按 A 的变化执行。
- 手动更新一次,并记录结果。
执行一次订阅更新后,检查更新时间、节点列表和配置解析结果。若更新时间不变,优先检查订阅地址是否仍可访问,以及当前网络是否能打开该地址;若出现格式解析错误,不要继续修改规则,先处理配置文件本身。
- 确认运行模式是 Rule。
Stash 配置支持
rule、global和direct等模式。规则分流需要运行在 Rule 模式;Global 或 Direct 会改变规则的实际作用。配置示例中的模式说明 若界面名称与本文不同,以当前版本显示的功能名称为准。 - 检查 Override 是否启用。
如果你把自定义规则写进远程订阅生成的配置文件,下一次更新可能用新的远程内容替换它。长期自定义应放在 Override 中。官方说明显示,Override 可以修改托管或订阅配置,多个 Override 会按顺序叠加;数组默认插入到原数组前面,也可以用
#!append放到末尾。Stash Override 文档检查三点:Override 文件是否已安装、是否处于启用状态、修改后是否完成保存并应用。若 Override 未启用,即使文件内容正确,也不会影响当前配置。
- 检查规则顺序和目标策略组。
Stash 按规则从上到下匹配,先匹配到的规则会影响后续结果。Stash 规则类型说明 因此,过于宽泛的
DOMAIN-SUFFIX、GEOIP或MATCH规则可能先于你的自定义规则命中。同时核对规则最后写入的策略组名称是否真实存在。规则语法正确但策略组名称拼错,仍可能无法按预期分流。若想让自定义规则优先,通常应将其放在前面;如果只是兜底规则,再考虑使用
#!append。 - 用请求记录或连接记录确认“实际命中了什么”。
不要只根据网页能否打开判断规则是否生效。Stash 的 HTTP API 文档列出了连接记录、请求记录和当前生效规则等调试信息;支持这些页面的版本也可能在应用中以 Connections、HTTP Inspection 或相近名称显示。Stash HTTP API
测试一个目标域名后,记录四项:目标域名、命中的规则、使用的策略组或代理链、最终连接结果。如果命中的是旧规则,问题多半在规则顺序或当前配置;如果命中规则正确但连接失败,再转向节点、DNS、MTU 或网络排查。
- 重新加载配置并复测。
修改 Override、规则或策略组后,保存并应用配置;必要时停止并重新启动 Stash 的 VPN 连接,再测试至少三类目标:应走代理的域名、应直连的域名、使用不同规则类型的域名。只测试一个域名,无法判断是规则范围问题还是整体配置问题。
三类容易混淆的问题,处理方法不同
1. 订阅没有更新
表现是更新时间、节点或配置内容都没有变化。优先检查订阅地址是否可访问、当前网络是否能下载、服务端返回内容是否仍是有效的 Stash/Clash 格式。此时先不要排查规则顺序,因为新配置可能根本没有下载成功。
2. 订阅更新成功,但规则没有加载
表现是节点列表已变化,但新增规则或 Override 没有出现在当前生效配置中。重点检查是否启用了正确配置、Override 是否启用、YAML 缩进是否正确,以及配置是否在保存后重新应用。Stash 文档明确说明配置使用 YAML,缩进会影响整体结构。配置文件格式说明
3. 规则已加载,但命中结果不对
表现是请求记录显示规则存在,却走了错误的策略组或线路。重点检查规则从上到下的顺序、宽泛规则是否提前命中、策略组名称是否一致,以及当前是否处于 Rule 模式。规则集还可能有自己的远程数据更新状态;Stash 的 Rule Sets 文档说明,规则集需要在 rule-providers 中声明,再由 RULE-SET 引用。Stash Rule Sets 文档
自定义规则应该放在哪里?
如果配置来自远程订阅,直接修改订阅生成的主配置文件不适合作为长期方案,因为下一次远程更新可能重新生成或覆盖该文件。更稳妥的做法是使用 Override,将需要长期保留的规则、策略组或 DNS 修改独立保存。
- 需要优先匹配:Override 中的数组默认插入到原配置数组前面,适合需要先判断的规则。
- 需要作为兜底:使用文档支持的
#!append,让规则追加到原数组末尾;旧版本可能不识别该注释,因此要用实际版本复测。 - 修改整个数组:谨慎使用
#!replace,因为它会替换对应数组内容,可能意外移除原配置中的规则。 - 修改后无变化:确认 Override 已启用,并执行保存、应用或重新加载;不要只保存文件而不重新载入配置。
Override 的合并行为与 Stash 版本有关,本文不把不同版本的界面按钮名称当作完全一致;如果当前版本没有对应入口,应以应用内帮助或当前官方文档为准。
修复后的验收清单
- 当前选中的配置就是刚刚更新的配置。
- 订阅更新时间已经变化,节点或配置内容与预期一致。
- 运行模式为 Rule,而不是 Global 或 Direct。
- Override 已安装、已启用,并且修改已保存并应用。
- 自定义规则位于正确位置,没有被更宽泛的规则提前匹配。
- 规则引用的策略组名称与配置中的名称完全一致。
- 请求记录或连接记录显示了预期的规则和策略组。
- 代理、直连和不同规则类型的目标都完成了复测。
如果规则命中正确但仍然连接失败,说明问题可能已经离开规则层,应继续检查节点连接、DNS 解析、MTU、丢包或系统网络,而不是反复修改规则。
常见问题 FAQ
Stash 更新订阅后自定义规则为什么消失?
最常见原因是直接修改了订阅生成的配置文件,下一次更新后远程内容重新覆盖了修改。需要把长期自定义内容迁移到 Override,并确认 Override 已启用。
节点更新了,但规则还是按照旧配置走,怎么办?
先确认当前启用的配置是否就是刚更新的那份,再确认模式为 Rule,然后查看请求记录中的实际命中规则。更新了未启用的配置,不会改变当前分流结果。
Override 已启用,规则仍然不生效怎么办?
依次检查 YAML 缩进、Override 保存与应用状态、规则顺序、策略组名称和当前模式。若规则已经出现在生效配置中,再通过连接或请求记录判断是否被更早的规则命中。
规则写对了,为什么只有部分域名不生效?
可能是规则类型或匹配范围不同,例如域名规则、IP 规则和规则集的判断条件不同。分别测试多个域名,并记录每个目标实际命中的规则,不要只根据单个站点下结论。
更新订阅失败时,是否应该先改规则?
不建议。先确认订阅地址、网络连通性和返回格式;只有确认配置更新成功后,才适合继续排查 Override、规则顺序和策略组。
iOS 和 macOS 的 Stash 菜单名称不一致怎么办?
本文按配置、Override、模式、规则和请求记录等功能名称组织,不假设所有版本使用相同按钮名称。若入口不同,请以当前版本界面显示为准,避免把相近菜单当成同一功能。
参考资料
Stash Quick Start:配置导入、选择当前配置与启动流程。
Stash Override 文档:Override 的优先级、数组合并、#!append 与 #!replace。
Stash 规则类型说明:规则匹配顺序与常见规则类型。
Stash HTTP API:当前配置、连接、请求和生效规则的调试信息。
Stash Rule Sets 文档:规则集声明与引用方式。
常见问题
Stash 更新订阅后自定义规则为什么消失?
最常见原因是直接修改了订阅生成的配置文件,更新时远程内容重新覆盖了修改。长期自定义应迁移到 Override,并确认 Override 已启用。
节点更新了,但规则还是按照旧配置走,怎么办?
先确认当前启用的是刚更新的配置,再确认模式为 Rule,最后通过请求记录查看实际命中的规则。
Override 已启用,规则仍然不生效怎么办?
检查 YAML 缩进、保存与应用状态、规则顺序、策略组名称和当前模式;如果规则已加载,再看是否被更早规则优先命中。
规则写对了,为什么只有部分域名不生效?
分别检查规则类型、匹配范围、规则集和 DNS/GEOIP 数据,并测试多个不同类型的域名,避免只根据一个目标判断。
更新订阅失败时,是否应该先改规则?
不建议。先确认订阅地址、网络连通性和返回格式,确认配置更新成功后再排查 Override、规则顺序和策略组。
