Shadowrocket(小火箭)的 .conf 是配置文本,不是线路套餐。本文适合已有可用连接、准备阅读或修改配置的用户:先分清四个分段的职责,再在配置副本中逐项修改,最后用 Global Routing 的 Config 姿态核对规则。示例只展示语法,域名与地址使用文档示例值,不能当成可用服务。
1. 先读分段标题,再看每一行的格式
方括号表示一个分段的开始。[General] 下面的设置归 General 管,直到遇见下一个分段标题为止。空行用于阅读分隔,不能代替分段标题。编辑时应保留英文关键字、半角逗号、等号和方括号,避免输入法把标点替换成全角字符。
四段不是四种代理协议,也不是按文件顺序执行的四道网络关卡。General 提供全局参数,Rule 选择请求的处理策略,Host 提供指定的域名映射,URL Rewrite 按表达式处理符合条件的 URL。真正强调“从上到下”的是 Rule 内部的匹配顺序,不能把这个规则机械套用到整个文件。
[General]
dns-server = system
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
[Host]
test.example.com = 192.0.2.10
[URL Rewrite]
^http://example\.com/(.*)$ https://example.com/$1 302
2. General:全局参数不等于分流规则
General 常见写法是 参数名 = 参数值。例如 dns-server = system 表示使用系统 DNS。这个设置决定解析相关行为,不表示“所有请求都直连”,也不表示“所有请求都代理”。请求采用什么策略,还要看当前 Global Routing 姿态与适用规则。
[General]
dns-server = system
修改 DNS 之前,先确定问题发生在哪一步:是域名解析失败,还是已经获得目标地址但连接失败。不要同时修改 DNS、规则和远端连接参数,否则即使结果变化,也无法判断是哪一项起作用。已有配置可能包含其他 General 参数;本文的一行示例不能作为覆盖整段的依据。
- 保留配置原有的有效参数,只修改本次要核对的项目。
- 参数值使用半角字符;不要把中文说明直接接在值后面。
- 不要在 General 中放入
DOMAIN-SUFFIX或FINAL,它们属于 Rule。 - 若系统 DNS 与指定解析器的结果不同,先记录解析结果,再判断是否需要调整。
3. Rule:匹配范围、策略与顺序一起核对
Rule 的典型结构是 类型,匹配内容,策略。DOMAIN-SUFFIX,example.com,PROXY 匹配 example.com 以及它的子域名,然后采用 PROXY。这里的匹配内容不带 https://,不带路径,也不是完整 URL。只想匹配单个主机名时,使用 DOMAIN 更明确。
[Rule]
DOMAIN,api.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
这组示例中,api.example.com 先命中 DOMAIN,因此不会继续落入后面的 DOMAIN-SUFFIX。其余 example.com 子域名则可命中后缀规则。若把两行交换,较宽的后缀规则会先匹配,单域名例外就失去预期作用。FINAL 处理前面都未命中的请求,通常放在末尾。
按域名匹配
- DOMAIN
- 完整域名匹配,例如 api.example.com。
- DOMAIN-SUFFIX
- 匹配 example.com 及其子域名,不是任意字符串包含。
- DOMAIN-KEYWORD
- 按域名中的关键字匹配,范围可能比预期更宽。
具体例外放在宽泛匹配之前;域名规则不填写 URL 路径。
按地址与兜底匹配
- IP-CIDR
- 匹配地址网段;192.0.2.0/24 是本文的文档示例网段。
- GEOIP
- 按目标 IP 的地理归属数据库匹配,结果取决于数据库记录。
- FINAL
- 不填写匹配内容,直接写 FINAL,PROXY 等兜底策略。
no-resolve 用于避免为该 IP 规则额外触发域名解析,不代表关闭全部 DNS。
DIRECT 表示直连,PROXY 表示交给代理策略处理;策略名不是服务器地址。GEOIP 的结果依赖 IP 与数据库信息,不能保证某个中文网站必然命中 CN。若只是为一个已知域名设置例外,应优先考虑清晰的域名规则,而不是凭网页语言推断 GEOIP。
4. Host:固定解析地址,不负责选择策略
Host 用于建立指定域名到地址的映射,典型格式是 域名 = IP地址。它与 Rule 的“命中后用什么策略”是两件事。即使把一个域名映射到指定地址,也不意味着该请求自动采用 DIRECT;仍应结合当前路由姿态与规则检查处理结果。
[Host]
test.example.com = 192.0.2.10
这一行只描述 test.example.com 的映射,不会自动覆盖 example.com 的所有子域名。若某个站点依赖动态地址或分布式入口,固定地址可能在服务调整后失效,因此应记录添加原因,并准备移除映射后再核对一次。不要从旧配置中长期保留来历不明的 Host 条目。
区分 Host 与 Rule 的修改目标
需要指定解析地址
- 在 Host 中填写完整域名与确定的目标地址。
- 确认地址确实属于自己要访问的服务。
- 先删除本文文档示例地址,再进行真实访问。
需要改变处理策略
- 在 Rule 中添加 DOMAIN 或 DOMAIN-SUFFIX。
- 选择 DIRECT、PROXY 或已定义的有效策略。
- 把特定例外放在宽泛规则和 FINAL 前面。
解析目标与路由策略分别核对;不要用 Host 替代分流规则。
5. URL Rewrite:按 URL 匹配,不是按域名分流
URL Rewrite 使用表达式描述要匹配的地址,再指定替换结果或相应动作。下面展示一条 HTTP 到 HTTPS 的 302 重定向:正则表达式中的 \. 表示字面上的点,(.*) 捕获路径内容,替换地址中的 $1 引用第一个捕获组。
[URL Rewrite]
^http://example\.com/(.*)$ https://example.com/$1 302
- 输入示例:
http://example.com/help。 - 替换目标:
https://example.com/help。 ^与$限定匹配的开头和结尾,避免只匹配到地址中间的一段。302表示重定向响应状态,不是代理端口,也不是 Rule 的策略名。
这个示例匹配的是以 HTTP 开头的 URL,不应把它理解为可以直接读取所有 HTTPS 路径。HTTPS 的路径位于加密内容中,涉及路径的处理存在额外前提;仅添加 URL Rewrite 段不会自动满足这些前提。本文不需要改动证书相关设置,也不建议为验证这条 HTTP 示例扩展修改范围。
6. 保存后选择 Config,再验证单项修改
编辑文件与让文件生效是两个步骤。在 Config 中保存修改后,还要确认当前选中的是这份配置。验证 Rule 时,回到 Home → Global Routing 选择 Config;如果仍处于 Proxy 或 Direct,不能根据访问结果判断刚修改的分流规则是否正确。
-
保留原稿
在 Config 中找到当前使用的本地配置,先保留副本或备份原文。记录当前文件名,不直接覆盖唯一可用配置。
-
单项修改
打开目标配置的编辑入口,只调整一个分段中的一个目标项目。例如先添加
DOMAIN,api.example.com,DIRECT,不要同时修改 Host 和 DNS。 -
保存并选用
保存后返回 Config,确认目标配置处于选用状态。再进入 Home → Global Routing → Config,核对本次测试确实使用规则分流。
-
新建请求
重新发起目标请求,避免仅观察已经建立的长连接。记录请求域名、预期策略和实际结果;必要时重新连接后再测。
-
还原对照
移除刚添加的一行,再对相同目标进行一次核对。如果差异与预期不符,返回检查匹配顺序与当前配置,不继续叠加修改。
Config
推荐按所选配置中的规则处理请求。命中 DIRECT 还是 PROXY,取决于规则内容与顺序,并非固定“其余直连”。
适合:本文的 Rule 修改验证与日常规则分流。
Proxy
以代理姿态处理请求,不按 Rule 逐项选择分流策略。可作为排查代理连接是否可用的对照,但不用于证明规则命中。
适合:在已有服务前提下,将连接问题与规则问题分开检查。
Direct
以直连姿态处理请求,不能用这个姿态的结果判断 PROXY 规则是否正确。
适合:核对同一目标在直连条件下的表现。
Global Routing 中的 Scene 涉及场景设置,不应与 Config 的规则验证混在一起。Settings → On Demand 管理按需连接条件,也不是 Rule 编辑入口。若连接会随网络条件自动变化,测试前应先核对这些独立设置,避免把连接状态变化误判为 .conf 语法错误。
7. 配置未生效时,按现象缩小范围
“文件能保存”只能说明编辑操作完成,不能证明每一条规则都符合意图。检查时先确认文件和姿态,再核对目标、顺序与语法。下面的检查项不依赖更换服务,适合在现有可用连接下逐一执行。
| 现象 | 先检查什么 | 核对动作 |
|---|---|---|
| 添加 Rule 后没有变化 | 当前文件与 Global Routing | 确认 Config 选中文件,并在 Home → Global Routing 选择 Config。 |
| 特定域名例外不生效 | 规则先后顺序 | 把 DOMAIN 例外放在更宽的 DOMAIN-SUFFIX 前面,FINAL 保留在末尾。 |
| 只有一个域名无法访问 | Host 中的固定映射 | 移除该域名的旧映射后重测,不同时更换 DNS。 |
| URL Rewrite 没有变化 | 协议、主机名与表达式 | 检查请求是 HTTP 还是 HTTPS,以及点号转义和路径是否匹配。 |
| 文件保存后出现解析问题 | 分段标题与半角标点 | 检查方括号、逗号、等号,回退最近一次修改后重新打开配置。 |
用户已有的订阅通常用于维护连接信息,不能把“更新订阅”直接等同于“当前本地 .conf 已经更新”。若配置本身来自远程来源,还要区分远程原稿与本地副本;后续更新可能改变原有内容。保留本地修改记录,比反复导入同一份文件更容易追溯问题。