Shadowrocket .conf 配置文件结构详解:General、Rule、Host、URL Rewrite 各段写法

逐段拆解 Shadowrocket 配置文件:[General] 管全局参数,[Rule] 管分流,[Host] 管本地映射,[URL Rewrite] 管请求改写,附示例片段与常见写错的地方。

本文速览

Shadowrocket(小火箭)的 .conf 文件按段管理设置,而不是一份服务器清单。本文适合已经有自己的服务器或订阅、需要读懂现有配置的用户:先确认当前使用的配置与 Global Routing,再分别检查全局参数、规则顺序、本地映射和请求改写,最后用单项变更验证结果。

一、先确认 .conf 文件是否参与当前连接

结论是:编辑了文件,不等于当前连接已经按该文件分流。先在 Config 确认选中的配置,再回到 Home 检查 Global Routing。需要按 [Rule] 测试时,应选择 Config;Proxy 与 Direct 是整体路由姿态,不能用它们来判断某条分流规则是否正确。

Home 主要用于选择服务器和控制连接,Config 管理配置文件,Settings 管理应用设置。服务器订阅更新与 .conf 编辑是两件事:前者主要更新服务器条目,后者定义解析、分流等行为。已有订阅能正常导入,并不表示某份配置中的策略名称一定存在。

Global Routing 选项检查时的含义
Proxy以整体代理姿态测试当前服务器,不适合验证逐条分流。
Direct以整体直连姿态测试网络,不能据此认定 PROXY 规则失效。
Config按当前配置执行分流,是本文规则验证使用的选项。
Scene按场景设置决定路由行为,排错时先确认场景实际选择了什么。
  1. 在 Config 备份当前文件,再打开要修改的副本。
  2. 在 Home 选定一个已知可用的服务器,用 Connectivity Test 检查基本连通性。
  3. 将 Global Routing 设为 Config,保存修改并确认选中的仍是测试文件。
  4. 重新建立连接,用同一个目标地址比较修改前后的现象。

二、段标题与基本写法:先读结构,再改内容

段标题使用英文半角方括号,标题下面的各行属于该段,直到下一个段标题出现。[General] 常见形式是键值对,[Rule] 则使用逗号分隔的规则字段。不能把每一段都写成同一种格式,也不能用中文逗号替换英文逗号。

[General]
dns-server = system
ipv6 = false

[Rule]
DOMAIN-SUFFIX,example.com,DIRECT
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY

[Host]
lab.example.com = 192.0.2.10

[URL Rewrite]
^http://www\.example\.com/ https://www.example.com/ 302

这份片段用于解释语法,不是适合所有网络的推荐配置。example.com 是示例域名,192.0.2.0/24 是文档示例地址段,不能把它当成可连接的真实服务器。实际使用时,应依据自己控制的域名和网络修改;不需要的 Host 与 URL Rewrite 行直接删除。

备份文件 核对段名 修改单项 启用配置 验证命中

保存为纯文本 .conf 文件,避免富文本编辑器自动替换标点。注释放在独立行更便于检查;复制规则时不要把说明文字一起粘进字段。文件可被导入只说明基本格式被接受,还需要验证策略引用和运行效果。

三、[General]:全局参数不是分流规则

[General] 影响配置的整体行为。上例的 dns-server = system 表示使用系统 DNS;ipv6 = false 用于控制此配置的 IPv6 行为。不要把关闭 IPv6 当成通用修复,更不要同时更换 DNS、修改规则和切换服务器,否则无法判断是哪一项改变了结果。

General 检查项

段标题
[General]
DNS 示例
dns-server = system
IPv6 示例
ipv6 = false
字段格式
键 = 值

一次只改一个参数,记录原值后再测试。

连接行为检查项

连接入口
Home 顶部开关
按需连接
Settings → On Demand
规则测试
Home → Global Routing → Config
配置选择
Config 中确认当前文件

On Demand 管理按条件连接,不替代 Rule 分流。

DNS 查询成功、目标连接成功、最终使用正确策略是三个不同的检查点。出现域名打不开时,先确认解析是否返回预期地址,再检查连接记录。即使解析成功,服务器不可达、目标端口不通或策略选错,仍然会导致访问失败。

四、[Rule]:从上往下匹配,FINAL 放在末尾

[Rule] 决定连接走哪种策略。普通规则通常由规则类型、匹配内容、策略组成;FINAL 没有匹配内容字段。规则按顺序检查,前面已经匹配的连接,不会因为后面还有更具体的规则就重新选择。因此,应把具体例外放在宽泛条件之前。

[Rule]
DOMAIN,api.example.com,PROXY
DOMAIN-SUFFIX,example.com,DIRECT
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
关键字示例对应的含义
DOMAIN精确匹配 api.example.com,优先于下方的域名后缀规则。
DOMAIN-SUFFIX匹配 example.com 及其子域名,不是任意位置的文本包含。
IP-CIDR匹配指定 IPv4 地址段;no-resolve 避免为匹配此条主动触发域名解析。
GEOIP按 IP 地理数据库匹配 CN,结果取决于地址与数据库内容。
FINAL前面的规则均未匹配时使用 PROXY,应放在规则列表末尾。

在这个顺序下,api.example.com 先命中 DOMAIN,其他符合后缀条件的子域名则走 DIRECT。如果交换前两行,宽泛的后缀规则会先匹配,原来的精确例外就无法起作用。这里的 PROXY 是策略引用,不是协议名,也不是服务器地址。

结论:先修规则顺序,再增加例外

某个域名始终走错策略时,先检查它上方是否已有 DOMAIN-SUFFIX 或 FINAL 命中;把精确规则移到宽泛规则之前,再重新发起连接验证,不要重复添加相同规则。

若使用自定义策略组名称,必须确认当前配置确实定义了该名称。Shadowsocks、VMess、VLESS、Trojan、Hysteria2、WireGuard 属于服务器连接协议,不能仅把协议名填进规则末尾就获得对应出口。规则选策略,服务器条目负责协议参数,两者需要分开检查。

五、[Host]:本地映射不等于强制直连

[Host] 用于指定域名的本地映射,常用于受控环境中的固定地址测试。下例把 lab.example.com 映射到文档示例地址 192.0.2.10。它没有指定端口,也没有指定 DIRECT 或 PROXY;最终出站仍要结合路由姿态和规则判断。

[Host]
lab.example.com = 192.0.2.10

如果映射后访问超时,先确认目标 IP 是否真实可达,再检查访问端口及规则命中。不要因为看到 DNS 结果改变,就直接判断配置正确。测试结束应删除临时映射,避免真实服务器地址变更后,旧的固定映射继续覆盖正常解析。

六、[URL Rewrite]:匹配 URL,不是更改出口

[URL Rewrite] 使用正则表达式匹配请求 URL,再指定替换目标和动作。下面的例子将以 http://www.example.com/ 开头的请求,以 302 重定向到固定的 HTTPS 首页。302 是 HTTP 状态码,不是端口号;该写法也不会保留原路径和查询参数。

[URL Rewrite]
^http://www\.example\.com/ https://www.example.com/ 302
  1. ^ 约束匹配从 URL 开头开始,避免误匹配其他位置的相同文本。
  2. \. 表示域名中的字面量句点;未转义的 . 在正则表达式中表示任意字符。
  3. 第二个字段是固定目标地址,第三个字段 302 指定重定向动作。
  4. 用受控测试地址先验证单条规则,确认没有反复跳转后再保留。

改写规则不是代理策略,也不能修复服务器连接失败。示例选择 HTTP 请求作为匹配对象;不要据此假定所有 HTTPS 请求的完整路径都能直接读取和改写。涉及加密请求的可见性与证书处理是另一层配置,不应为了测试这条 HTTP 示例而额外改变证书设置。

如果需要保留路径,必须明确设计捕获组与替换引用,并分别测试首页、子路径和带查询参数的请求。不要把范围很宽的正则直接用于所有网站;登录、支付或带签名的 URL 对路径与参数变化敏感,错误替换可能导致请求校验失败。

七、保存后怎么验证:按现象定位,不整份替换

每次验证都保留同一个网络、服务器和测试目标,只改一处设置。先用 Connectivity Test 排除基本连通问题,再观察目标请求的连接记录和命中策略。延迟测试通过,不代表目标网站必定可访问;已有连接也可能继续复用旧状态,应关闭目标页面后重新发起请求。

文件保存了,为什么规则还是没生效?

先在 Config 确认当前选中的文件,再到 Home → Global Routing 选择 Config。重新建立连接后访问同一目标;如果仍走错策略,检查该条规则之前是否已有更宽泛的规则命中。

为什么加了 Host 以后 HTTPS 仍然报错?

核对映射 IP 上的服务是否接受原域名,并提供与原域名匹配的证书。Host 只改变地址映射,不改变证书身份。先撤回该映射对比结果,不要用关闭证书验证来掩盖配置错误。

订阅更新成功,为什么 PROXY 还是连接失败?

回到 Home 检查当前选中的服务器,执行 Connectivity Test。订阅更新成功只表示条目获取成功;服务器是否可达、认证参数是否正确、规则引用的策略是否存在,需要分别验证。

URL Rewrite 一加上就反复跳转,先删哪项?

先移除刚添加的那条改写,保留其他配置重新测试。随后检查替换目标是否仍匹配同一表达式,以及网站自身是否又跳回原地址;缩小匹配范围后,再单独启用该条规则。

最后区分两类更新:服务器订阅更新后,要检查当前选中的条目是否变化;远程配置更新后,要检查本地编辑是否被覆盖。需要长期保留的调整应存入单独的本地副本,并记录修改目的。回退时恢复上一份已验证配置,比继续叠加未经验证的参数更容易定位原因。

免费下载 Shadowrocket