本文适合已经在 Home 添加连接信息、准备在 Config 阅读或修改 .conf 文件的用户。先区分连接参数与配置规则,再逐段查看 DNS、匹配顺序、本地映射与请求改写,最后用单项修改和请求记录确认配置是否生效。所有域名与地址示例仅用于解释语法,不是可直接使用的服务配置。
一、.conf 文件与 Home 连接信息的区别
Shadowrocket(小火箭)的 .conf 文件是文本配置,使用方括号标记分段。一个分段从标题开始,到下一个分段标题之前结束。空行用于分隔阅读内容,不能代替分段标题;文件也不是 JSON,不需要给每行加双引号或在行尾添加逗号。
Home 中的服务器地址、端口、凭据及协议选项决定连接怎样建立;Config 中启用的配置决定请求如何处理。只有规则文件而没有可用连接参数,并不能建立代理连接。订阅从你的服务商处获取;连接订阅与远程 .conf 配置的用途不同,不能仅凭一个地址以 https 开头就判断它属于哪一种。
阅读时可以先定位所有分段标题,再检查每行属于哪种语法。[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 证书验证所使用的主机名。
- 地址迁移测试:在已知目标服务器正确的前提下,可用明确的域名映射测试新地址;测试结束后删除临时项。
- 出现证书错误:确认目标服务器是否为原域名提供有效证书。不要把映射到任意地址当作解决证书问题的方法。
- 映射后仍走代理:检查
[Rule]的域名规则与最终策略,不能通过修改[Host]来替代策略设置。 - 只有一个域名异常:先检查是否留有旧映射,再排查公共 DNS,避免遗漏本地覆盖项。
五、[URL Rewrite]:区分地址映射与请求改写
[URL Rewrite] 针对可处理的请求 URL 执行匹配与改写,不是 DNS 配置,也不是域名分流规则。下面以 HTTP 地址跳转到 HTTPS 地址为例,演示“正则、目标、动作”的写法。
[URL Rewrite]
^http://example\.com/(.*)$ https://example.com/$1 302
^与$限定匹配范围,避免只匹配 URL 中的一段内容。example\.com中的反斜杠让点号表示字面上的点;未转义的点在正则中可匹配其他字符。(.*)捕获斜杠之后的内容,目标中的$1引用第一组捕获结果。302表示临时重定向。改写后的请求仍需要能够解析域名并建立连接。
浏览器若通过 HSTS 或自身的 HTTPS 优先机制,在发出请求之前就升级了地址,上面的 HTTP 规则可能没有可匹配的请求。此时应检查实际发出的 URL,而不是仅根据地址栏最初输入的内容判断。
改写与映射需要分别验证:[Host] 影响名称到地址的结果,[URL Rewrite] 影响符合条件的请求 URL。两者同时修改会扩大排查范围,尤其当重定向后的主机名变化时,还要重新检查该主机名的解析与策略。
六、在 Config 中修改、启用与验证
阅读文件不等于文件已经生效。在 Config 中确认当前启用的配置,再编辑副本;不要仅凭文件名判断正在运行哪一份。远程配置更新还可能覆盖本地修改,需要把自行维护的内容与远程来源区分清楚。
- 保存原始内容。记录当前配置名称、
dns-server值和 Global Routing 姿态,并保留修改前的副本。 - 选一个测试对象。使用自己有权访问且知道预期行为的域名。本文的 example.com 和文档 IP 只解释语法,不作为代理可用性测试目标。
- 只改一个位置。例如仅调整一条
DOMAIN-SUFFIX的位置,暂不同时更换 DNS 或新增改写。 - 保存并确认启用。需要时重新建立连接,并发起新的请求,避免把已有连接或缓存结果误认为新规则结果。
- 核对请求记录。对照实际域名、命中规则、出站策略和错误类型。解析失败、连接超时、证书错误属于不同环节,应分别处理。
如果修改后出现异常,先恢复刚改的项目并重复同一测试。只有恢复操作能稳定改变结果,才有依据继续缩小范围。订阅更新成功只说明对应内容取得并被处理,不代表 Config 中的规则已改变;同样,远程配置更新成功也不代表 Home 的连接凭据已更新。
七、配置文件常见问题
改了 [Rule],为什么访问方向没变?
先在 Config 确认改动的是当前启用文件,再检查 Global Routing → Config。随后重新发起请求,核对是否先命中了上方更宽的规则;若是,将具体规则移到它前面后复测。
已经写了 PROXY,为什么还是连不上?
回到 Home 检查当前选择的连接是否有效,确认地址、端口和凭据与服务商提供的信息一致。PROXY 只指定处理策略,不能补齐 Shadowsocks、VMess、VLESS 或 Trojan 所需的连接参数。
更新订阅会不会把手写规则一起更新?
先区分更新的是连接订阅还是远程配置。连接订阅主要维护服务器条目;手写规则应在 Config 核对。对远程配置保留本地副本,并在更新后逐项比较自定义内容是否仍在。
可以把几份 .conf 直接首尾拼接吗?
不要直接拼接。先按分段整理内容,检查同名设置、重复映射、策略名称与规则顺序,并将 FINAL 留在规则末尾。合并后先用少量已知请求验证,再继续加入其他内容。
继续排查时,可查看问题诊断;需要核对设置与关键字含义,可查看功能与设置或术语表。阅读与测试都以自己的配置和请求记录为依据,不要把示例文件当作通用线路配置。