本文速览

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

按这组顺序,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
  1. 匹配表达式:^ 限定开头,$ 限定结尾;\. 表示字面上的点,避免把域名中的点当成正则通配符。
  2. 目标地址:https://example.com/ 是重定向位置。该示例使用固定目标,不保留其他路径或查询参数。
  3. 动作: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,应留意自动连接条件,避免把自动重连误判为刚才修改文件产生的效果。

  1. 保留原件

    进入 Config,保留当前可用配置的副本,再编辑待测试文件。不要用示例片段直接覆盖全部内容。

  2. 选用文件

    在 Config 保存修改,并核对当前选用标记对应的文件名;远程文件还应留意后续更新是否覆盖本地改动。

  3. 确认姿态

    进入 Home → Global Routing,选择 Config,再核对 Home 中选定的服务器是否为用户已有的可用服务器。

  4. 重建连接

    需要排除旧连接影响时,在 Home 关闭再打开连接开关,随后重新发起目标请求,不只刷新一个仍复用连接的页面。

  5. 单项复测

    先用 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、具体请求的表现。更多关键字写法可查阅规则参考,姿态选择可查阅代理模式说明。保留每次变更前后的文件,比同时替换多组参数更便于回退和定位。