本文适合已经在 Shadowrocket(小火箭)中导入服务商订阅、需要理解和修改本地配置的用户。先区分连接参数与分流配置,再用最小 .conf 示例识别四个配置段,最后按“备份、编辑、选用、测试”的顺序验证修改,避免把 DNS、规则和请求改写的问题混在一起。
一、先区分 .conf、订阅与当前连接
.conf 是文本配置文件,方括号中的名称表示配置段。每个配置段有自己的语法:[General] 常用键值对,[Rule] 使用逗号分隔的规则,[Host] 保存名称映射,[URL Rewrite] 使用匹配表达式、目标地址和动作。不能把某段的写法直接复制到另一段。
在 Home 中导入订阅,主要是取得可用的连接条目;在 Config 中选用配置,则是决定流量如何处理。两者有关联,但不是同一个操作。用户已有自己的服务商与订阅时,应从你的服务商处获取订阅链接,并确认该链接提供的是连接信息还是完整配置。不要仅凭链接后缀判断内容。
要检验 [Rule] 的分流行为,应在 Home → Global Routing 选择 Config。Proxy 与 Direct 不是验证该段规则的等价环境;Scene 则还要检查当前场景采用的设置。只保存文件而不核对当前姿态,常会产生“修改规则完全没有变化”的错觉。
二、General:先读全局参数,再判断 DNS
[General] 管理全局行为,包括 DNS 等设置。阅读这一段时,先识别等号左侧的键,再看右侧的取值。字段名、英文标点和布尔值都应保持原样;不要把中文解释写到取值里,也不要用全角逗号替换半角逗号。
[General]
dns-server = system
这里的 dns-server = system 表示使用系统 DNS。它不意味着每条连接都直接出站,也不等于给所有请求指定代理。DNS 解决“名称怎样解析”的问题,Rule 解决“连接采用哪种策略”的问题;实际解析位置还可能受到规则选项、代理协议和其他 DNS 设置影响。
General 阅读要点
- 段名
- [General]
- 示例键
- dns-server
- 示例值
- system
- 写法
- 键 = 值
先保留可工作的 DNS 设置,再一次修改一个字段。
Rule 阅读要点
- 段名
- [Rule]
- 匹配项
- DOMAIN-SUFFIX / IP-CIDR / GEOIP
- 策略
- DIRECT / PROXY / REJECT
- 兜底
- FINAL,PROXY
DNS 设置不能代替策略,分流顺序应在 Rule 中检查。
遇到“连接条目可用,但域名打不开”时,先查看日志中是解析失败,还是已经获得 IP 后连接失败。前者才优先检查 DNS;后者还要检查命中的策略、目标端口及服务端状态。HTTPS 常用端口为 443,但服务商连接端口不一定也是 443,两者不能混为一谈。
三、Rule:逐条匹配,FINAL 放在末尾
[Rule] 中的规则按从上到下的顺序匹配,命中后使用对应策略,不会为了寻找“更具体”的条件继续往下比较。因而例外项应放在宽泛规则之前,FINAL 负责其余流量,应位于最后。
[Rule]
DOMAIN,blocked.example.com,REJECT
DOMAIN-SUFFIX,example.com,DIRECT
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
此处域名和 192.0.2.0/24 都是说明用的示例,不代表线路资源。第一条拒绝指定主机;第二条让 example.com 及其子域名直接连接。由于精确拒绝规则在前,访问 blocked.example.com 不会被后面的后缀规则放行。
| 关键字或策略 | 作用 | 检查点 |
|---|---|---|
DOMAIN-SUFFIX | 匹配域名后缀及其子域名 | 参数不带协议头、端口或路径 |
IP-CIDR | 匹配 IPv4 地址段 | no-resolve 避免为该条匹配主动解析域名 |
GEOIP | 根据 IP 地理数据库匹配 | 不是根据网页语言或域名后缀判断 |
DIRECT | 直接连接目标 | 仍受本地网络与目标可达性影响 |
PROXY | 使用代理策略出站 | 确认已有可用的连接条目 |
REJECT | 拒绝匹配的连接 | 检查是否误拦正常业务域名 |
FINAL | 接住未命中前面规则的流量 | 不填写域名参数,放在最后 |
结论:先找第一条命中项,再改规则
发生误分流时,先用连接记录确认实际主机名和命中策略,再把必要的精确规则放到宽泛规则之前;不要只在 FINAL 后追加规则。
四、Host:改变名称解析,不改变 URL
[Host] 用于本地名称映射。下面的例子把 lab.example.com 映射到文档专用地址 192.0.2.10。该地址不是可访问的测试服务,使用时应替换为自己有权管理、且确实可达的目标地址。
[Host]
lab.example.com = 192.0.2.10
- 不写协议与路径:左侧是主机名,不是
https://lab.example.com/path。 - 不把端口当作 IP:右侧的 IP 映射不负责将目标端口改成其他端口。
- 不代替 Rule:映射后的连接仍须遵循当前的路由与策略处理。
- 不消除证书检查:HTTPS 访问仍会核对原请求主机名对应的证书。
如果把域名指向某台服务器后出现证书错误,不能仅因 IP 可达就认定 Host 配置正确。该服务器还必须正确处理原主机名及 TLS。应用自行解析名称或使用特定连接方式时,也不能假设所有请求都会受到同样的本地映射影响,应以实际连接记录为准。
五、URL Rewrite:匹配请求地址,执行指定动作
[URL Rewrite] 处理的是 URL 匹配与改写,不是“把域名交给哪个连接”的分流表。下面用一个 HTTP 到 HTTPS 的重定向演示三部分结构:正则表达式、目标地址、动作码。
[URL Rewrite]
^http://example\.com/(.*)$ https://example.com/$1 302
^ 和 $ 分别限制匹配的起点与终点,\. 表示字面意义的点,(.*) 捕获后续内容,目标中的 $1 引用第一组捕获结果。302 表示重定向动作;不要把此处的动作码误写成 Rule 的 PROXY。
上述例子匹配的是 HTTP 请求。对已经加密的 HTTPS 流量,仅凭普通代理转发无法读取完整路径;涉及 HTTPS 请求内容的改写还依赖适用的 MITM 条件、目标范围和证书信任。不要为了测试一条规则而扩大到所有域名,也不要导入来源不明的证书。
排查时先确认请求原本就是 HTTP,再检查是否有旧的重定向缓存。若浏览器因 HSTS 直接使用 HTTPS,HTTP 规则可能根本没有匹配机会。修改 Rule 的顺序不能解决这种现象,因为两段处理的对象不同。对无法确认行为的改写,应先停用该条并恢复原始访问路径。
六、编辑后怎样生效:保存、选用与重建连接
配置文件存在于 Config 列表中,不代表它已经被选用;文本保存成功,也不代表原有长连接会重新建立。建议先复制当前可工作的配置作为本地备份,再执行下面的单变量验证。不同平台菜单呈现可能不同,以下按 Home、Config、Settings 的页面职责说明。
- 确认对象:在 Config 中找到当前选用的文件,记录名称,再打开其编辑入口。不要误改另一个尚未选用的文件。
- 一次修改一处:先改一条规则或一个键值,保留原段名和英文标点。检查是否存在重复的 FINAL,或将规则写到了错误段落。
- 保存并选用:保存编辑内容,回到 Config 确认该文件仍为当前配置。若出现语法提示,先修正,不能继续把它当作有效配置测试。
- 核对姿态:回到 Home → Global Routing,选择 Config,并检查当前连接条目可用。
- 建立新连接:在允许短暂断网的情况下重新连接,再让测试应用重新发起请求。必要时关闭旧页面或重启测试应用,排除连接复用。
- 核对结果:用同一目标重复请求,查看命中的规则、策略及错误类型。不能只用“网页好像快了”判断配置生效。
远程配置与本地编辑要分开管理。重新下载远程文件可能覆盖本地改动,而更新 Home 中的连接订阅也不等于更新 Config 中的规则。长期维护自定义规则时,应保存独立副本,并记录每次修改的字段和预期结果。订阅更新后,还要确认配置引用的策略名称仍然存在。
Settings → On Demand 管理按条件连接的行为,不是让 .conf 生效的开关。排障时若发现手动断开后又自动连接,应检查 On Demand 条件;若连接保持正常但分流不符,则返回 Global Routing 与 Config 检查。
七、常见问题:按现象定位配置段
文件保存了,为什么新增规则还是不生效?
依次核对 Config 当前选用文件、Home → Global Routing 是否为 Config,以及新规则是否排在 FINAL 之前。然后让测试应用重新建立连接,并查看实际命中的规则。不要用修改前已经建立的下载连接验证新规则。
改了 Host,为什么 HTTPS 仍报错?
检查映射 IP 是否提供原域名的服务,以及证书是否覆盖原域名。Host 只改变名称映射,不会改掉请求中的主机身份。先恢复原映射进行对照,再决定是否继续使用该目标地址。
订阅更新后,自定义配置需要再导入一次吗?
先判断更新的是 Home 中的连接列表还是 Config 中的远程文件。前者不要求机械地重新导入本地配置,但要检查被删除或改名的策略引用;后者可能覆盖本地修改,应与备份比较后再选用。
URL Rewrite 没有效果,应该修改 DNS 吗?
先检查原请求的协议、完整匹配条件、捕获组和动作码,再排除重定向缓存与 HSTS。只有记录显示解析失败时才优先处理 DNS;不要用更换 DNS 掩盖正则表达式没有匹配的问题。
维护 .conf 的关键是分清职责:General 决定全局参数,Rule 决定策略,Host 提供名称映射,URL Rewrite 处理符合条件的请求地址。每次只修改一个环节,并保留能恢复的副本,才能把配置变化与连接结果对应起来。
Shadowrocket 全平台下载与配置教程
iPhone / iPad 版在 App Store $2.99 一次性买断,系统要求以 App Store 页面标注为准;Mac(Apple 芯片 / Intel)、Windows、安卓、Linux 版免费。客户端下载与线路套餐是两回事,客户端买断 ≠ 线路套餐;订阅从你的服务商处获取。