Shadowrocket(小火箭)的 .conf 是按段组织的文本配置,不是服务器订阅。阅读时先辨认方括号段名,再看参数、匹配条件与策略;应用时还要确认 Home → Global Routing 使用 Config。本文适合已经有自己的连接资料、准备检查或修改配置的用户,说明四个常见段落的边界、可读示例与单项验证方法。
1. 先辨认段名:.conf 不是一张服务器清单
配置文件以 [General]、[Rule] 等段名划分内容。一个段名之后的条目归属于该段,直到出现下一个段名。段名中的方括号、键名中的连字符、规则里的英文逗号都有语法意义,不能换成中文标点。[URL Rewrite] 中间的空格也应保留。
服务器资料回答“连接到哪里、采用什么协议和认证参数”;配置文件主要回答“如何解析、如何分流、是否改写请求”。即使文件中出现 PROXY,也不等于其中已经包含可用服务器。下文以用户已有自己的服务商与订阅、已在 Home 选定服务器为前提。
| 段名 | 处理对象 | 不能替代的内容 |
|---|---|---|
[General] | DNS、IPv6 等全局参数 | 具体域名的分流规则 |
[Rule] | 域名、目标 IP 等匹配条件与策略 | 服务器地址与认证资料 |
[Host] | 指定域名的本地解析映射 | HTTP 重定向或连接策略 |
[URL Rewrite] | 可被处理的 URL 与改写动作 | 所有加密流量的自动解密 |
本文片段用于阅读语法,不是可以直接覆盖现有文件的完整方案。example.com 为示例域名,192.0.2.10 属于文档示例地址范围,不应拿它测试真实服务。编辑前保留原文件,并避免把含有私人地址、认证信息或订阅凭据的完整配置公开分享。
2. General:先确认全局参数,再改分流规则
[General] 采用“键名 = 值”的写法。下面只展示三个常见参数的阅读方式;它们不是适用于所有网络的推荐组合。尤其是 DNS 与 IPv6,改变后可能影响解析结果或地址选择,不能把“暂时能访问”直接解释成设置普遍正确。
[General]
dns-server = system
ipv6 = false
bypass-system = true
General 参数
- dns-server
system表示使用系统 DNS。- ipv6
false表示在此配置中关闭 IPv6 支持。- bypass-system
true表示绕过部分系统流量。
这些参数影响全局行为,不是按域名逐条匹配的规则。
Rule 策略
- PROXY
- 交由代理策略处理,仍需已有可用服务器。
- DIRECT
- 采用直连策略,不经代理服务器转发。
- REJECT
- 拒绝匹配到的请求。
全局参数与规则策略分工不同,排查时一次只改其中一项。
例如,只有某个域名走错路径时,应先检查 [Rule],而不是直接更换 DNS。多个域名同时解析失败时,才有必要核对 dns-server 及当前网络。ipv6 = false 也不会替设备其他网络设置作统一修改,不能据此断言设备上的所有应用都不再使用 IPv6。
3. Rule:自上而下匹配,FINAL 放在末尾
[Rule] 的常见结构是“规则类型,匹配内容,策略”。FINAL 不需要匹配内容,直接接策略。通常按从上到下的顺序采用首条匹配规则,因此越具体的例外越应靠前,兜底规则放在最后。
[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
DOMAIN,api.example.com,DIRECT:仅匹配这个完整域名,作为下一条后缀规则的例外。DOMAIN-SUFFIX,example.com,PROXY:匹配example.com及其子域名;后缀有域名边界,不是任意字符串包含。IP-CIDR,192.0.2.0/24,DIRECT,no-resolve:匹配指定 IPv4 网段;no-resolve避免仅为检查该条规则而主动解析域名。GEOIP,CN,DIRECT:根据目标 IP 的地理归属数据判断,不是按网页语言或域名后缀判断。FINAL,PROXY:前面的规则均未匹配时使用代理策略,并不表示请求必然成功。
按这组顺序,api.example.com 会先命中完整域名规则;www.example.com 则会命中后缀规则。如果交换前两条,完整域名的例外会被上方更宽泛的后缀规则遮住。这也是“规则已经写了,却看起来没生效”的常见原因。
4. Host:改变解析结果,不改变 URL
[Host] 可以把指定域名映射到指定地址。下面这一行表达的是“将这个域名解析为这个地址”,并不是让浏览器跳转到 IP 地址,也不是直接指定 DIRECT 或 PROXY。
[Host]
lab.example.com = 192.0.2.10
解析地址改变后,浏览器地址栏仍可以保持 lab.example.com;对于 HTTPS,请求使用的域名与服务端证书仍需正确对应。把域名映射到一个仅能响应其他站点的地址,可能得到证书错误、错误站点或连接失败,而不是自动获得目标内容。
区分“连到哪个地址”与“采用哪条路径”
Host 解析映射
- 核对完整域名是否写对。
- 核对映射 IP 是否仍提供对应服务。
- HTTPS 仍需满足域名与证书要求。
Rule 分流策略
- 核对域名规则及其排列位置。
- 核对 IP 规则与解析后的地址。
- 用 DIRECT 或 PROXY 表达连接策略。
Host 与 Rule 可以同时存在,但映射地址不能代替策略,策略也不能修复错误的映射地址。
本地映射属于明确的覆盖行为,服务地址变化后需要重新核对。若只在添加 Host 后出现问题,先移除该条映射、保存并重新建立连接,再对同一个域名复测;不要同时修改 DNS、规则顺序和服务器,否则无法判断恢复来自哪项操作。
5. URL Rewrite:匹配表达式、目标与动作要一起读
[URL Rewrite] 用于声明 URL 改写规则。下面示例把特定 HTTP 域名的根路径重定向到 HTTPS,末尾 302 表示临时重定向。它只用于说明语法与匹配范围,不是要求对所有网站强制应用同一条规则。
[URL Rewrite]
^http://example\.com/$ https://example.com/ 302
- 匹配表达式:
^限定开头,$限定结尾;\.表示字面上的点,避免把域名中的点当成正则通配符。 - 目标地址:
https://example.com/是重定向位置。该示例使用固定目标,不保留其他路径或查询参数。 - 动作:
302是重定向状态码,不是服务器端口,也不是代理协议。
因为表达式包含结尾限定,这条规则不会匹配 http://example.com/docs 或附带查询字符串的地址。修改匹配范围之前,应先明确是否要保留路径与参数;把所有请求都送往同一个根路径,可能破坏登录回调、搜索结果或接口调用。
6. 启用与验证:先确认 Config 姿态,再做单项测试
文件已保存、文件已选用、规则正在参与分流,是三个不同状态。编辑完成后,应在 Config 核对当前选用的文件,并回到 Home 检查 Global Routing。下面比较的是 Shadowrocket 自身的姿态,适用范围是进入其处理范围的连接,不是设备上所有网络活动的绝对保证。
Config
推荐按当前配置中的规则选择策略。FINAL 的内容决定未匹配请求的去向,不存在统一的“其余必然直连”。
适合:验证本文 Rule 片段,以及日常按规则分流。
Proxy
以代理作为全局路由姿态,不按 Config 的逐条分流结果选择路径。切换后可以辅助判断问题是否与规则选择有关。
适合:临时对照代理路径,不适合验证 DOMAIN-SUFFIX 的命中顺序。
Direct
以直连作为全局路由姿态。此时网站可访问,不能证明配置中的 PROXY 规则已经生效。
适合:对照当前网络的直连表现,区分代理路径与目标服务问题。
Global Routing 中的 Scene 用于按场景配置路由行为,不能简单等同于 Config。第一次阅读配置时,先明确选择 Config;如果还启用了 Settings → On Demand,应留意自动连接条件,避免把自动重连误判为刚才修改文件产生的效果。
-
保留原件
进入 Config,保留当前可用配置的副本,再编辑待测试文件。不要用示例片段直接覆盖全部内容。
-
选用文件
在 Config 保存修改,并核对当前选用标记对应的文件名;远程文件还应留意后续更新是否覆盖本地改动。
-
确认姿态
进入 Home → Global Routing,选择 Config,再核对 Home 中选定的服务器是否为用户已有的可用服务器。
-
重建连接
需要排除旧连接影响时,在 Home 关闭再打开连接开关,随后重新发起目标请求,不只刷新一个仍复用连接的页面。
-
单项复测
先用 Home → Connectivity Test 检查连接基础状态,再测试具体域名;每次只改变一条规则或一个参数,并记录结果。
Connectivity Test 的结果不能替代完整的应用层验证:测试成功不证明某条 URL Rewrite 已执行,也不证明特定网站的所有资源都采用同一策略。站点往往会请求多个域名,主页面正常而图片失败时,应分别检查相关域名,而不是仅增加一条宽泛规则。
7. 常见问题:文件正确,但行为不符合预期
我写了 DIRECT,为什么还是走代理?
先检查 Home → Global Routing 是否为 Config,再检查当前选用的配置文件。随后查看该规则上方是否已有更宽泛的 DOMAIN-SUFFIX 或其他匹配项。将具体例外放在宽泛规则之前,保存并重新发起连接后复测。
导入订阅后,Rule 会自动换成新规则吗?
服务器订阅更新与配置文件更新是两件事。Home 中服务器列表变化,不等于 Config 中的规则文件已经更新。分别核对服务器列表与当前配置;如果配置来自远程地址,更新前先保存本地修改,避免后续内容覆盖。
Host 已经写了 IP,为什么 HTTPS 报错?
先核对该 IP 是否提供对应域名的服务,以及服务端证书是否覆盖该域名。将 Host 条目暂时移除,重建连接并再次访问同一地址进行对照。不要把关闭证书验证当成修复域名映射的方法。
只添加 FINAL,PROXY 就能连接吗?
不能。FINAL 只指定兜底策略,不提供服务器地址、端口或认证资料。先确认 Home 中已有自己的服务器并已选中,再运行 Connectivity Test。连接本身失败时,继续增加域名规则通常不能解决问题。
最终核对顺序是:当前文件、Global Routing 姿态、规则顺序、DNS 与 Host、具体请求的表现。更多关键字写法可查阅规则参考,姿态选择可查阅代理模式说明。保留每次变更前后的文件,比同时替换多组参数更便于回退和定位。