本文适用于已经在 Shadowrocket(小火箭)中配置连接、需要调整分流行为的用户。先确认 Global Routing 使用 Config,再理解规则首次命中即采用对应策略的顺序关系;随后用具体域名例外、IP 网段和 FINAL 组合出可检查的规则列表。本文只使用说明性地址,不提供连接服务;订阅链接请从你的服务商处获取。
1. 自定义规则优先级:先匹配到的规则生效
在按配置分流时,[Rule] 中的规则从上到下检查。某条规则满足条件后,请求采用该条规则指定的策略,不会继续向下寻找“更精确”或“更靠后”的规则。因此,规则优先级主要由位置决定,而不是由域名长短或规则类型自动排序。
例如,DOMAIN-SUFFIX,example.com,PROXY 可以匹配 example.com 及其子域名。如果希望其中的 files.example.com 例外直连,就应把 DOMAIN,files.example.com,DIRECT 放在这条后缀规则之前。反过来放时,后缀规则已经覆盖这个子域名,下面的例外就没有机会参与该请求的决策。
- 范围小的例外在前:单个域名、特定目标 IP 或明确需要拦截的目标,放在会覆盖它们的大范围规则之前。
- 范围大的分类在后:域名后缀、IP 网段、地区归类等用于处理剩余请求,但它们之间仍按实际位置决定先后。
- FINAL 放在末尾:它接住没有被前序规则命中的请求,后面不应再排列期望生效的普通规则。
2. Global Routing 与 PROXY、DIRECT、REJECT 的区别
先在 Home → Global Routing 核对当前姿态。Config 才是本篇验证当前配置规则的基准;Proxy 与 Direct 是全局路由选择,不能用来证明某条自定义规则是否命中。若使用 Scene,还需要核对场景实际采用的设置,不能仅凭配置编辑器里的规则推断当前结果。
| 规则策略 | 匹配后的处理 | 检查重点 |
|---|---|---|
PROXY | 通过代理出站处理该请求。 | 核对当前代理选择;若配置使用策略组,则继续检查组内实际选中的出站。 |
DIRECT | 通过当前网络直接连接目标。 | 直连仍依赖本地网络、目标可达性及 DNS 结果,不等于保证连接成功。 |
REJECT | 拒绝匹配到的请求。 | 目标相关功能可能无法加载,先确定匹配范围再扩大拦截。 |
判断顺序:先核对姿态,再检查规则
规则改动后没有效果时,先回到 Home 确认 Global Routing 为 Config,再到 Config 确认选中的文件就是刚编辑的文件;不要先通过反复更换代理来判断规则顺序。
PROXY 是规则里的策略标识,Proxy 是 Global Routing 中的界面选项,两者处于不同层级。规则决定哪些请求应使用某个出站,Shadowsocks、VMess、VLESS、Trojan、Hysteria2、WireGuard 等协议则决定对应连接如何建立;调整规则顺序并不会修正协议参数中的端口、密钥或认证错误。
3. DOMAIN-SUFFIX、GEOIP、IP-CIDR 与 FINAL 的写法
常见规则写成“规则类型、匹配内容、策略”。FINAL 不需要匹配内容,因此只有规则关键字和策略两部分。下面的表格用于理解语法;其中 example.com 和 192.0.2.0/24 均为文档示例,不应当作实际服务地址。
| 规则示例 | 匹配含义 | 顺序注意点 |
|---|---|---|
DOMAIN,files.example.com,DIRECT | 匹配这个完整域名。 | 放在会覆盖它的 DOMAIN-SUFFIX 前面。 |
DOMAIN-SUFFIX,example.com,PROXY | 匹配该域名及其子域名,不是任意字符串包含匹配。 | 可以承接前面单域名例外之后的其余子域名。 |
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve | 匹配示例 IPv4 网段;no-resolve 避免为了这一条 IP 规则主动进行域名解析。 | 它不是关闭整个配置的 DNS,也不改变此前已知目标 IP 的匹配条件。 |
GEOIP,CN,DIRECT | 按目标 IP 的地区数据库归类进行匹配。 | 不按域名后缀判断;结果取决于目标 IP 和数据库。 |
FINAL,PROXY | 把前面未匹配的请求交给 PROXY。 | 放在规则列表末尾。 |
域名规则能否参与匹配,也与该连接是否具有可用的目标域名信息有关。直接请求 IP 地址时,不应期待它自动命中某条 DOMAIN-SUFFIX。同样,一个网页可能同时请求主站、图片、认证接口和内容分发域名;主站命中直连,不代表页面里的每个连接都会采用相同策略。
4. 规则顺序调整示例:子域名例外与 FINAL 兜底
假设需求是:files.example.com 直连,ads.example.com 拒绝,其余 example.com 域名走代理。下面两张配置卡使用相同规则内容,只改变位置。它们说明为什么“例外已经写了”并不等于“例外一定会生效”。
调整前:大范围规则在前
- 第 1 条
DOMAIN-SUFFIX,example.com,PROXY- 第 2 条
DOMAIN,files.example.com,DIRECT- 第 3 条
DOMAIN,ads.example.com,REJECT- 第 4 条
FINAL,PROXY
两个特定子域名都会先命中第 1 条,后面的例外无法达到预期。
调整后:明确例外在前
- 第 1 条
DOMAIN,files.example.com,DIRECT- 第 2 条
DOMAIN,ads.example.com,REJECT- 第 3 条
DOMAIN-SUFFIX,example.com,PROXY- 第 4 条
FINAL,PROXY
先处理单域名例外,再处理整个域名范围,最后处理剩余请求。
若还需要按网段和地区分流,可将规则组织成下面的结构。这里的 GEOIP,CN,DIRECT 只是说明地区规则如何放置,并不意味着所有用户都应使用这个选择。实际策略应与当前网络和访问需求一致。
[Rule]
DOMAIN,files.example.com,DIRECT
DOMAIN,ads.example.com,REJECT
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
该示例中,example.com 范围内的域名先由域名规则处理,不会因为其解析地址被 GEOIP 归入 CN 就改走 DIRECT。对于没有命中上述域名规则的其他请求,后面的 IP 规则才有机会参与决策。这正是规则列表位置比“规则看起来更具体”更重要的原因。
调整原则:先写业务例外,再写分类规则
把必须直连或必须拒绝的具体目标移到会覆盖它们的规则之前,每次只移动一组相关规则,并保留末尾的 FINAL;这样更容易解释每一次行为变化。
5. 从 Config 编辑到新连接验证的操作顺序
验证规则要区分“编辑完成”“当前配置已选中”和“新请求已采用新设置”这三个环节。浏览器或应用可能复用已有连接,单纯刷新页面不一定产生新的出站连接。测试时还要区分规则决策正确但连接失败,与请求根本没有命中目标规则这两种情况。
- 保留原配置。在 Config 中编辑前保存一份可恢复的副本,记录当前选中的文件。不要直接用整段示例替换已有配置的其他部分。
- 检查 [Rule]。找到需要调整的规则,检查是否存在更靠前的相同域名、上级后缀、网段规则或提前出现的 FINAL。只保留一个明确的末尾兜底。
- 保存并选择文件。完成编辑后确认保存,再在 Config 中确认实际选中的是这份配置,而不是名称相近的另一个文件。
- 核对路由姿态。回到
Home → Global Routing → Config。测试期间保持当前代理选择不变,避免同时改变出站与规则造成混淆。 - 重新建立连接。在不会中断重要任务的情况下,断开后重新开启连接,并重新发起目标请求。必要时关闭目标应用后再打开,减少旧连接复用的影响。
- 查看新请求记录。在连接记录或日志中核对目标域名、目标 IP 和采用的策略;若记录提供命中规则信息,一并检查。不要仅凭网页是否打开判断规则成功与否。
文中的示例域名没有提供实际的测试服务。进行验证时,应换成自己有权访问且能确认请求目标的地址,并记录测试条件。例如,出现“页面文字能显示、图片一直加载”的现象时,应检查图片实际请求的域名,而不是立即把整个主站改成另一种策略。
6. FINAL 与自定义规则常见问题
FINAL 写在第一行,下面的规则为什么没有效果?
FINAL 会接住所有到达它的未匹配请求。先把它移到 [Rule] 末尾,再检查前面的具体规则。不要在 FINAL 后面继续添加期望生效的域名例外;也不要用第二条 FINAL 试图覆盖第一条。
已经写了 DIRECT,为什么网站还是打不开?
先核对新请求记录是否实际采用 DIRECT;若是,则规则已经完成直连决策,接着检查当前网络能否访问目标、DNS 是否返回合理地址以及目标服务是否响应。DIRECT 只指定路径,不修复网络或服务端故障。
改成 FINAL,DIRECT,会不会影响所有已有规则?
不会改变此前已经命中的规则,但会改变所有剩余请求的默认出站。修改前先确认哪些请求依赖当前兜底。如果只是想让一个域名直连,应新增靠前的 DOMAIN 或 DOMAIN-SUFFIX 例外,而不是扩大整个兜底的影响范围。
订阅更新后,自定义规则会被覆盖吗?
先区分 Home 中更新的连接订阅,与 Config 中更新的远程配置。两者不是同一个对象;远程配置更新可能替换对应配置内容。更新前保留副本,更新后核对当前选中文件及 [Rule],不要把本地修改一定会保留当作前提。订阅链接请从你的服务商处获取。
REJECT 后页面有些按钮不能用,应该怎么查?
先查看点击按钮时新增的请求,确认是否有认证、接口或资源域名被拒绝。临时停用那条可疑规则后重新测试;确认依赖关系后,缩小 REJECT 范围或在其前面添加明确例外,避免直接放行所有请求。