Shadowrocket 配置文件 .conf 怎么读:[General]、[Rule]、[Host]、[URL Rewrite] 分段说明

按段拆解 Shadowrocket 配置文件:[General] 管全局行为,[Rule] 定分流顺序,[Host] 做本地映射,[URL Rewrite] 处理请求改写。附常用写法示例。

本文速览

本文适合已经在 Home 添加连接信息、准备在 Config 阅读或修改 .conf 文件的用户。先区分连接参数与配置规则,再逐段查看 DNS、匹配顺序、本地映射与请求改写,最后用单项修改和请求记录确认配置是否生效。所有域名与地址示例仅用于解释语法,不是可直接使用的服务配置。

一、.conf 文件与 Home 连接信息的区别

Shadowrocket(小火箭)的 .conf 文件是文本配置,使用方括号标记分段。一个分段从标题开始,到下一个分段标题之前结束。空行用于分隔阅读内容,不能代替分段标题;文件也不是 JSON,不需要给每行加双引号或在行尾添加逗号。

Home 中的服务器地址、端口、凭据及协议选项决定连接怎样建立;Config 中启用的配置决定请求如何处理。只有规则文件而没有可用连接参数,并不能建立代理连接。订阅从你的服务商处获取;连接订阅与远程 .conf 配置的用途不同,不能仅凭一个地址以 https 开头就判断它属于哪一种。

4 段
本文拆解 General、Rule、Host、URL Rewrite
4 类
规则示例包含 DOMAIN-SUFFIX、IP-CIDR、GEOIP、FINAL
1 项
每轮只修改一个设置,再复测同一请求

阅读时可以先定位所有分段标题,再检查每行属于哪种语法。[General] 和 [Host] 常见的是等号两侧的键值;[Rule] 常见的是英文逗号分隔的字段;[URL Rewrite] 则包含正则表达式、目标和动作。不要把不同分段的格式混写。

二、[General]:先读全局设置与 DNS

[General] 存放全局行为设置。排查“连接测试有响应,但域名打不开”时,应先查看这里的 DNS 设置,而不是立即更换全部规则。下面只展示一个设置项,用来说明键值语法,并非完整配置。

[General]
dns-server = system

dns-server 指定解析器来源,system 表示使用系统 DNS。它不是“所有 DNS 请求都会通过代理”的承诺,实际解析路径还与网络环境及其他 DNS 选项有关。将解析器改成某个公共地址,也不能单独证明域名解析一定可达。

全局设置阅读卡

所在分段
[General]
设置项
dns-server
示例值
system
语法
键 = 值

先确认当前值,再记录修改前后的解析现象。

规则测试前提卡

连接信息
在 Home 检查
配置文件
在 Config 确认已启用
路由姿态
Global Routing → Config
自动连接
Settings → On Demand

On Demand 管连接触发条件,不替代 [Rule] 的匹配规则。

修改前先保存原值。如果换用解析器后,所有域名同时出现解析错误,应先恢复该项并复测,避免同时改动出站策略、映射和改写。这样才能区分是解析器不可达,还是请求已经解析成功但后续连接失败。

三、[Rule]:按顺序理解匹配与策略

[Rule] 按从上到下的顺序匹配,命中后采用对应策略。具体域名规则通常放在较宽的 IP 或地理规则之前,FINAL 放在末尾处理剩余请求。下面的规则用于阅读结构;其中 PROXY 需要对应可用的代理出站。

[Rule]
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
关键字示例含义阅读重点
DOMAIN-SUFFIX匹配 example.com 及其子域名。不是任意字符串包含匹配。
IP-CIDR匹配 192.0.2.0/24 地址范围。no-resolve 表示不为匹配这一条规则而主动解析域名。
GEOIP按 IP 地理数据库匹配 CN。判断依据是 IP 数据,不是网站使用的语言。
FINAL将此前未匹配的请求交给 PROXY。没有域名字段,不应写成三字段形式。

DIRECT 表示直接连接,并不表示停止联网;PROXY 表示使用代理策略,也不表示自动生成连接参数。如果原文件使用自定义策略名称,需要确认对应策略确实存在,不要仅替换文字而忽略其定义。

判断:先确认姿态,再调整规则顺序

验证 [Rule] 时先把 Global Routing 设为 Config,再查看请求命中了哪条规则。若处于 Proxy 或 Direct,先切回 Config 复测,不能据此认定规则语法失效;Scene 也不等同于某条固定的 FINAL 规则。

上例中的 192.0.2.0/24 是文档示例地址段,不是供日常访问使用的目标。域名规则和 IP 规则解决的问题不同:前者看域名,后者看地址。尤其在使用 no-resolve 时,不应把“域名请求没有命中某条 IP 规则”直接当作解析故障。

四、[Host]:本地映射不等于分流规则

[Host] 用于配置本地名称映射。下面把一个示例域名指向文档地址,只用于展示格式;若直接使用该地址访问真实服务,预期不会得到有效的业务响应。

[Host]
demo.example.com = 192.0.2.10

这行配置回答的是“这个域名解析到哪个地址”,不是“这个请求走哪条连接”。映射之后采用什么策略,仍需结合路由模式和规则判断。它也不会修改浏览器地址栏中的域名,更不会自动改变 HTTPS 证书验证所使用的主机名。

五、[URL Rewrite]:区分地址映射与请求改写

[URL Rewrite] 针对可处理的请求 URL 执行匹配与改写,不是 DNS 配置,也不是域名分流规则。下面以 HTTP 地址跳转到 HTTPS 地址为例,演示“正则、目标、动作”的写法。

[URL Rewrite]
^http://example\.com/(.*)$ https://example.com/$1 302
  1. ^ 与 $ 限定匹配范围,避免只匹配 URL 中的一段内容。
  2. example\.com 中的反斜杠让点号表示字面上的点;未转义的点在正则中可匹配其他字符。
  3. (.*) 捕获斜杠之后的内容,目标中的 $1 引用第一组捕获结果。
  4. 302 表示临时重定向。改写后的请求仍需要能够解析域名并建立连接。

浏览器若通过 HSTS 或自身的 HTTPS 优先机制,在发出请求之前就升级了地址,上面的 HTTP 规则可能没有可匹配的请求。此时应检查实际发出的 URL,而不是仅根据地址栏最初输入的内容判断。

改写与映射需要分别验证:[Host] 影响名称到地址的结果,[URL Rewrite] 影响符合条件的请求 URL。两者同时修改会扩大排查范围,尤其当重定向后的主机名变化时,还要重新检查该主机名的解析与策略。

六、在 Config 中修改、启用与验证

阅读文件不等于文件已经生效。在 Config 中确认当前启用的配置,再编辑副本;不要仅凭文件名判断正在运行哪一份。远程配置更新还可能覆盖本地修改,需要把自行维护的内容与远程来源区分清楚。

保存副本单项修改启用配置复测请求核对记录
  1. 保存原始内容。记录当前配置名称、dns-server 值和 Global Routing 姿态,并保留修改前的副本。
  2. 选一个测试对象。使用自己有权访问且知道预期行为的域名。本文的 example.com 和文档 IP 只解释语法,不作为代理可用性测试目标。
  3. 只改一个位置。例如仅调整一条 DOMAIN-SUFFIX 的位置,暂不同时更换 DNS 或新增改写。
  4. 保存并确认启用。需要时重新建立连接,并发起新的请求,避免把已有连接或缓存结果误认为新规则结果。
  5. 核对请求记录。对照实际域名、命中规则、出站策略和错误类型。解析失败、连接超时、证书错误属于不同环节,应分别处理。

如果修改后出现异常,先恢复刚改的项目并重复同一测试。只有恢复操作能稳定改变结果,才有依据继续缩小范围。订阅更新成功只说明对应内容取得并被处理,不代表 Config 中的规则已改变;同样,远程配置更新成功也不代表 Home 的连接凭据已更新。

七、配置文件常见问题

改了 [Rule],为什么访问方向没变?

先在 Config 确认改动的是当前启用文件,再检查 Global Routing → Config。随后重新发起请求,核对是否先命中了上方更宽的规则;若是,将具体规则移到它前面后复测。

已经写了 PROXY,为什么还是连不上?

回到 Home 检查当前选择的连接是否有效,确认地址、端口和凭据与服务商提供的信息一致。PROXY 只指定处理策略,不能补齐 Shadowsocks、VMess、VLESS 或 Trojan 所需的连接参数。

更新订阅会不会把手写规则一起更新?

先区分更新的是连接订阅还是远程配置。连接订阅主要维护服务器条目;手写规则应在 Config 核对。对远程配置保留本地副本,并在更新后逐项比较自定义内容是否仍在。

可以把几份 .conf 直接首尾拼接吗?

不要直接拼接。先按分段整理内容,检查同名设置、重复映射、策略名称与规则顺序,并将 FINAL 留在规则末尾。合并后先用少量已知请求验证,再继续加入其他内容。

继续排查时,可查看问题诊断;需要核对设置与关键字含义,可查看功能与设置或术语表。阅读与测试都以自己的配置和请求记录为依据,不要把示例文件当作通用线路配置。

前往 App Store