Shadowrocket 配置文件结构详解:[General] [Rule] [Host] [URL Rewrite] 各段作用

逐段拆解 .conf 配置文件:General 里的 dns-server 与 bypass 项、Rule 段的匹配顺序、Host 段的域名映射、URL Rewrite 的改写语法,附可直接对照的示例片段。

本文速览

本文适合已经能在 Shadowrocket 中导入并选用 Config、但需要读懂或检查 .conf 文本的用户。重点是辨认四个段落的处理阶段、核对规则顺序、区分域名映射与 URL 改写,并用一份最小示例定位常见语法问题。

先理解 .conf 的分段与处理顺序

Shadowrocket(小火箭)的 .conf 文件不是一串从第一行执行到最后一行的脚本,而是由多个方括号段名划分的声明式配置。段名决定后续行交给哪个处理模块,例如 [General] 保存通用参数,[Rule] 保存分流规则。空行通常只用于阅读,行首注释用于说明,不参与匹配。

读取配置时,先确认段名拼写,再确认每一行使用的分隔符,最后检查同一段内部是否存在顺序依赖。段名缺少右方括号、逗号写成中文标点、策略名拼错,都可能使某一行失效。编辑后应回到 Config 重新选中配置,并通过实际域名请求验证,而不是只看文件能否被导入。

应用发起请求读取通用项解析域名规则匹配执行策略

四个核心段并非全部作用于同一阶段。[Host] 影响特定域名如何得到地址,[Rule] 决定请求采用哪种策略,[URL Rewrite] 针对可识别的 URL 做跳转或拒绝处理。把这些功能混写到一个段中,即使单行看起来正确,也不会产生预期效果。

4 段
本文核对 General、Rule、Host、URL Rewrite
3 字段
常规 Rule 由类型、值、策略构成
1 次
请求命中首条适用规则后停止向下匹配
2 类
示例改写结果为 302 跳转或 reject

结论:先按段检查,再按行检查

遇到“部分规则有效、部分规则无效”时,先确认问题行是否位于正确段落,再检查英文逗号、字段数量与排列顺序;直接反复切换连接开关通常不能修复配置结构错误。

[General]:DNS、bypass 与基础行为

[General] 是配置的通用参数区。这里的项目会影响 DNS 解析、系统绕过行为、局域网地址处理及其他基础选项。它不是分流规则清单,因此不能把 DOMAIN-SUFFIXFINAL 放在这里。不同来源的配置可能包含不同项目,核对时应以 Shadowrocket 当前界面能够导入和导出的字段为准。

dns-server 指定配置使用的 DNS 解析入口。写成 system 表示采用系统可用的解析设置;写入明确地址时,应先确认该地址在当前网络中可达。DNS 负责把域名转换为地址,但它本身不决定最终使用 PROXY 还是 DIRECT,策略仍由 Global Routing 与 [Rule] 共同决定。

[General]
bypass-system = true
dns-server = system
ipv6 = false
skip-proxy = 127.0.0.1, localhost, *.local, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16

bypass-system 用于控制是否采用系统相关的绕过处理;skip-proxy 则明确列出不应交给代理处理的主机或地址范围。上例包含回环地址、.local 名称与三个常见私有地址段,适合解释语法,不代表所有网络都应照抄。企业内网、家庭存储设备或打印设备可能使用不同网段,修改前应先查看设备当前获得的局域网地址。

ipv6 = false 是明确关闭该配置中的 IPv6 行为的写法示例,但不应把它当作通用修复项。如果当前接入网络、已有服务配置与目标站点均正常支持 IPv6,关闭后反而可能改变解析结果。排查时一次只调整一个项目,并记录调整前后的 DNS 结果和访问现象。

DNS 核对

字段
dns-server
系统值
system
常规端口
53
验证对象
域名能否得到地址

DNS 可解析不等于规则策略正确,还需继续检查 Rule。

bypass 核对

总开关
bypass-system
明确列表
skip-proxy
本机名称
localhost
局域网后缀
*.local

私有地址范围应结合当前局域网实际网段填写。

[Rule]:自上而下匹配与 FINAL 兜底

[Rule] 是最容易受顺序影响的段落。Shadowrocket 在 Global Routing 设为 Config 时,按照配置中的排列从上到下检查请求;命中第一条适用规则后,就采用该行末尾的策略,不再继续寻找“更具体”的后续规则。因此,具体域名通常放在宽泛后缀或地域规则之前。

常见规则由英文逗号分隔。DOMAIN 匹配完整域名,DOMAIN-SUFFIX 匹配域名后缀,IP-CIDR 匹配地址范围,GEOIP 按地址所属地域匹配,FINAL 处理此前均未命中的请求。策略通常写为 PROXYDIRECTREJECT

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

上例第一行优先让 api.example.com 使用 DIRECT。如果把第二行放到第一行之前,完整域名会先被 DOMAIN-SUFFIX,example.com 命中,后面的例外规则没有机会执行。no-resolve 用于避免该条 IP 规则为了匹配而额外触发域名解析,适合本身只需要检查目标地址的规则。

规则关键字 检查对象 示例 排序重点
DOMAIN 完整域名 api.example.com 通常放在同后缀规则之前
DOMAIN-SUFFIX 域名及其子域名 example.com 范围较宽,注意覆盖具体例外
IP-CIDR IPv4 地址范围 192.168.0.0/16 局域网范围一般靠前处理
GEOIP 解析后的地址地域 CN 通常位于具体域名与地址规则之后
FINAL 所有未命中请求 FINAL,PROXY 应置于末尾作为兜底

Global Routing 会改变规则是否参与决策。Config 使用当前配置的规则;Proxy 强制采用代理策略;Direct 直接连接;Scene 按已设置的场景条件决定姿态。测试单条规则时,应先确认没有停留在 ProxyDirect,否则修改 [Rule] 后看不到预期差异。

  1. 在 Home 确认已经选中需要测试的服务器配置。
  2. 将 Global Routing 切换到 Config
  3. 在 Config 确认目标 .conf 处于选中状态。
  4. 把待验证的具体规则放到宽泛规则之前。
  5. 重新发起请求,检查命中的策略是否符合预期。
  6. 最后确认 FINAL 位于规则段末尾。

[Host]:固定域名映射,不等同于分流规则

[Host] 用于把指定域名映射到明确地址,可以理解为配置内部的域名解析覆盖。它解决“这个域名应得到哪个地址”的问题,不负责决定请求走 PROXYDIRECT 还是 REJECT。最终策略仍需要由 [Rule] 处理。

下面使用文档保留地址演示格式。192.0.2.0/242001:db8::/32 专门用于文档示例,不应当被当作真实业务地址。实际配置应填写用户自己管理或确认可用的目标地址。

[Host]
example.com = 192.0.2.10
api.example.com = 192.0.2.20
ipv6.example.com = 2001:db8::10

Host 映射最常见的检查错误是域名层级不一致。例如只写 example.com,不应默认认为 api.example.com 一定获得相同映射。需要覆盖子域名时,应逐项确认当前配置支持的匹配写法,并通过实际解析结果验证,不要依靠视觉上相似的域名推断。

现象 优先检查 原因判断
域名得到的地址不符合预期 [Host] 是否存在同名映射 固定映射可能覆盖常规 DNS 结果
主域名有效,子域名无变化 是否为子域名单独写映射 主域名与子域名是不同名称
地址正确但策略错误 [Rule] 顺序与 Global Routing Host 不负责选择出站策略
局域网名称无法访问 skip-proxy 与当前网段 问题可能位于 General 而非 Host

Host 的职责

输入
完整域名
输出
IPv4 或 IPv6 地址
影响
解析结果
不决定
PROXY / DIRECT

地址映射完成后,请求仍需进入 Rule 判断策略。

Rule 的职责

输入
域名或目标地址
检查
自上而下
输出
策略
兜底
FINAL

不要用 Host 映射代替分流,也不要用 Rule 代替地址映射。

[URL Rewrite]:跳转、拒绝与 HTTPS 可见性

[URL Rewrite] 根据 URL 匹配表达式改变请求结果。常见用途包括返回 302 跳转,或使用 reject 阻止符合条件的请求。它处理的是 URL,而 [Rule] 主要根据域名、地址或地域选择策略,两者不能互相替代。

表达式中的点号需要转义,路径边界也应尽量写清楚。过于宽泛的表达式可能同时命中页面、接口与静态资源,表现为网页结构缺失或应用请求失败。开始编写时应先限定到一个测试域名和一条路径,确认结果后再扩大范围。

[URL Rewrite]
^http://example\.com/old$ http://example.com/new 302
^http://api\.example\.com/private - reject

第一行把精确的旧地址跳转到新地址,末尾的 302 是临时跳转状态。第二行使用连字符占据替换目标的位置,并以 reject 作为处理动作。字段之间使用空格,正则内部不应加入中文标点。

HTTPS 请求的路径位于加密内容中,仅凭域名连接不一定能检查完整 URL。需要查看或改写 HTTPS 路径时,必须在 Shadowrocket 中完成用户明确授权的证书与解密范围设置,并只对自己确认的测试域名启用。未配置相应范围时,HTTP 示例有效而 HTTPS 示例无效,属于加密可见性差异,不一定是正则写错。

最小完整配置与导入后的核对步骤

把四段组合起来时,建议先建立一份只包含少量测试行的最小配置。最小配置的价值不是覆盖全部需求,而是让每个现象都能对应到一行:DNS 由 General 控制,地址覆盖由 Host 控制,分流由 Rule 控制,URL 动作由 URL Rewrite 控制。

[General]
bypass-system = true
dns-server = system
skip-proxy = 127.0.0.1, localhost, *.local, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16

[Host]
test.example.com = 192.0.2.10

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

[URL Rewrite]
^http://example\.com/old$ http://example.com/new 302

导入后进入 Config,确认该配置处于选中状态,再回到 Home 将 Global Routing 设为 Config。如果用户使用自己已有服务商提供的配置订阅,更新后应重新检查本地修改是否仍然存在;远端更新可能以新内容替换旧内容。需要测试 URL 形式时,可使用明显的示例地址 https://example.com/sub?token=xxxx 理解字段位置,不应把示例值当成可用服务。

  1. 保留原始 .conf 副本,并给测试文件使用容易辨认的名称。
  2. 检查所有段名是否使用英文方括号,段名后不要附加多余字符。
  3. 检查 Rule 行是否使用英文逗号,策略是否位于行末。
  4. 确认具体规则在宽泛规则之前,FINAL 位于最后。
  5. 确认 Host 中的地址格式正确,域名没有协议前缀和路径。
  6. 确认 URL Rewrite 中的正则、替换目标与动作字段数量完整。
  7. 进入 Home 检查 Global Routing,随后分别测试解析、分流和改写。

如果配置无法正常工作,不要同时改动多个段。先暂时保留 [General] 与一条 FINAL,确认基础连接;随后加入一条 DOMAIN 测试规则,再加入 Host 映射,最后测试 URL Rewrite。分阶段恢复可以快速确定错误属于解析、匹配还是改写。

配置能导入,但自定义 Rule 没反应?

先在 Home 检查 Global Routing 是否为 Config,再确认 Config 中选中的确是刚编辑的文件。随后把目标 DOMAIN 规则移到同域名的 DOMAIN-SUFFIXFINAL 之前。

加入 Host 后,域名还是使用原来的地址?

核对请求使用的是否为完全相同的域名,主域名与子域名应分别检查。然后重新选中配置并发起新请求,避免用旧连接的结果判断新映射。

HTTP 改写有效,HTTPS 改写无效?

先确认正则本身能匹配目标 URL。若路径位于 HTTPS 加密内容中,还需检查是否已对该测试域名完成用户授权的证书与解密范围设置。

访问局域网设备时一直失败?

查看设备地址是否属于当前 Wi-Fi 的私有网段,再核对 skip-proxyIP-CIDR 是否包含该范围,并确认更具体的前置规则没有先命中其他策略。

更新已有配置后,本地修改不见了?

远端配置更新可能替换当前内容。修改前保留独立副本,更新后比较 General、Rule、Host 与 URL Rewrite 四段,再把仍需使用的本地规则按正确顺序合并。

配置检查的最终判断标准

配置正确不能只用“连接开关已打开”判断。完整验证至少包含四项:域名是否得到预期地址、Global Routing 是否处于预期姿态、请求是否命中正确策略、URL Rewrite 是否只影响目标路径。每一项都应能对应到明确段落和具体配置行。

Shadowrocket 是 Apple 平台的闭源商业应用,以 iPhone 与 iPad 使用为主,Mac、Apple TV 与 Apple Vision 的兼容性及系统要求以 App Store 页面标注为准。正版获取入口为 App Store,开发者名称为 Shadow Launch Technology Limited,应用 ID 为 932747118,采用一次性买断。客户端购买与用户已有的服务配置属于不同事项。

结论:用可复现的单变量测试验收配置

每次只改一行,并记录测试域名、当前 Global Routing、预期策略与实际现象。能够稳定复现“哪一行改变了哪个结果”,才说明配置结构已经被正确理解。

核对正版入口 查看 App Store 获取说明