本文适合已经在 iPhone/iPad 的 Shadowrocket 中导入自己已有服务器、希望只代理少数网站的用户。先确认 Global Routing(全局路由)使用 Config(配置),再向当前配置加入域名规则,并把 FINAL,DIRECT 放在规则末尾。下文给出可合并的规则片段、保存与验证步骤,以及规则未命中、资源加载不全时的检查方法;示例域名仅作教学文本。
先确认 Config 与默认服务器
Shadowrocket(小火箭)的连接开关、服务器选择与分流规则是不同的设置。打开连接开关,只表示启用了连接;是否按域名分流,还取决于 Home(首页)中的 Global Routing(全局路由)。本文采用 Config(配置)模式,并以当前配置内的规则决定去向。
开始前,先确认已有服务器能连接。在 Home(首页)服务器列表点选目标条目左侧的选择圆点,将其设为默认服务器,再执行 Connectivity Test(连通性测试)。本文使用内置策略 PROXY(代理);如果原配置将规则指向某个自定义策略组,实际服务器还会受该组选择影响,不能只看默认服务器。
Config(配置)
推荐按当前配置匹配规则。可以让指定域名使用 PROXY(代理),其他请求使用 DIRECT(直连)。
适合:本文的指定网站代理、其余直连。
Proxy(代理)
将受客户端处理的连接统一交给代理,而不是按本文的域名规则分流。可临时用来区分代理连通问题与规则问题。
适合:短时检查已有服务器是否能访问目标。
Direct(直连)
将受客户端处理的连接直接发送,不会因为配置里写了 PROXY 就改用代理。
适合:检查目标在当前网络下的直连情况。
Scene(场景)
按已设置的场景条件应用相应路由安排。它不是本文需要固定使用的配置规则模式,排查时先切回 Config。
适合:已经配置好场景条件的使用方式。
先固定模式,再修改规则
把 Global Routing 设为 Config 后再测试。若同时切换场景、服务器和规则,访问结果发生变化时就无法确定是哪一项起作用。
最小规则:指定域名代理,其余直连
规则行用英文逗号分隔。对于 DOMAIN-SUFFIX(域名后缀匹配),依次填写规则类型、域名后缀、目标策略。域名位置只写主机名,不写协议头、路径、端口或通配符。下面是规则区片段,不是包含 DNS 等设置的完整配置。
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
把这一段合并到现有配置的 [Rule] 区域,不要在文件里重复创建多个同名规则区。若原配置已有规则,先备份,再检查它们是否会抢先匹配。要得到“只有指定网站走代理”的结果,不能继续保留会把其他域名送往代理的宽泛规则,也不能让旧的兜底规则留在中间。
DOMAIN-SUFFIX,example.com,PROXY匹配example.com本身及www.example.com、api.example.com等子域名。- 它不匹配
notexample.com,也不匹配example.com.other.test,因为这些主机名不属于该域名后缀。 FINAL,DIRECT没有匹配值字段;它将此前未匹配的连接交给 DIRECT(直连)。不要写成三字段格式。
这里的“其余直连”指该规则区处理且未命中前面规则的连接,不表示整个设备的所有系统通信都一定出现在请求记录中。它也不代表 DNS 查询必然与网页连接采用完全相同的路径;DNS 仍需按当前配置单独检查。
DOMAIN-KEYWORD 与规则顺序
DOMAIN-KEYWORD(域名关键词匹配)检查域名中是否包含指定文本。它适合确实需要按关键词覆盖多个域名的情况,但范围比后缀匹配宽。只知道一个网站主域名时,优先使用 DOMAIN-SUFFIX,避免把名称中碰巧含有相同字符的其他域名一起代理。
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
DOMAIN-KEYWORD,media-example,PROXY
FINAL,DIRECT
上面的第二条会匹配域名中含有 media-example 的连接。它不是对网页标题、页面文字或完整 URL 的搜索。不要为了匹配网站中的某个目录而填写 example.com/video;域名规则不按 URL 路径区分同一主机上的不同页面。
| 请求主机名 | 先命中的规则 | 策略 |
|---|---|---|
api.example.com | DOMAIN-SUFFIX | PROXY |
img.media-example.test | DOMAIN-KEYWORD | PROXY |
unrelated.test | FINAL | DIRECT |
规则按从上到下的顺序匹配,先命中就使用对应策略,不会自动挑选“看起来更精确”的后续规则。例如,要让 local.example.com 直连、其他同后缀域名代理,就必须把精确域名规则放在后缀规则前面:
[Rule]
DOMAIN,local.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
在 iPhone/iPad 保存并启用配置
下面以已有可用配置为起点。先保留原配置副本,再编辑本地副本;不要直接覆盖唯一可用的文件。远程配置之后重新下载或更新时,可能覆盖本地修改,因此需要区分“更新服务器列表”和“替换规则配置”。
-
备份配置
打开 Config(配置),确认当前选中的文件。使用该文件的操作菜单保留副本,并记录原来的文件名,方便出现问题时切回。
-
编辑规则
在 Config 中打开副本的文件操作菜单,进入 Edit Plain Text(编辑纯文本)。找到
[Rule],把所需域名规则放在FINAL,DIRECT前;保留其他必要配置区。 -
保存选中
保存文件并返回 Config,点选刚编辑的本地配置。确认选中标记在该文件上,而不是仍停留在原来的远程配置。
-
切换模式
进入 Home → Global Routing → Config。回到 Home,确认默认服务器后打开连接开关;首次出现系统 VPN 配置授权时,按系统提示允许。
-
重建连接
关闭此前的测试页面,再重新打开目标。必要时关闭后重新打开 Shadowrocket 连接,让新请求使用刚保存的规则;正在复用的旧连接不适合作为验证依据。
如果 Settings → On Demand(设置 → 按需连接)已启用,手动断开后可能因匹配连接条件而重新连接。测试期间先检查这些条件,必要时暂时停用 On Demand,并记住测试结束后恢复。On Demand 管理连接触发,不负责替代域名规则。
验证命中,再补齐页面依赖域名
验证至少分成两组:一组访问需要代理的目标,另一组访问未写入规则的目标。先在 Home 执行 Connectivity Test,确认默认服务器具备基本连通性,再发起新的网页请求。测试通过只说明测试目标的连通情况,不等于所有网站都能访问。
- 检查目标主机:从浏览器当前地址和请求记录核对实际主机名。跳转后访问的域名可能已经不同,不能只看最初输入的地址。
- 检查命中策略:在请求记录中打开对应连接详情,核对可见的规则与策略信息。需要代理的目标应命中域名规则,其他测试目标应落到
FINAL,DIRECT。 - 检查依赖请求:页面正文出现但图片、登录或视频失败时,查看失败请求的主机名。资源可能来自独立域名,主站后缀规则不会自动覆盖这些域名。
- 逐条补充:只为确认需要代理的依赖域名新增规则,然后重测。不要直接添加过短关键词,以免扩大代理范围。
可按下面的结构加入第二个已确认的资源域名。这里的 static.example.net 仍是教学文本,应替换为请求记录里实际确认的主机名;若只需要这个主机,用 DOMAIN(精确域名匹配)即可,不必代理整个上级域名。
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
DOMAIN,static.example.net,PROXY
FINAL,DIRECT
域名规则也依赖连接中可取得的域名信息。应用直接连接 IP 地址时,单纯的域名规则可能没有匹配对象。不要因此立即添加大段地址范围;先确认请求目标、DNS 解析情况,以及该连接是否确实属于要代理的网站。
GEOIP、IP-CIDR 与订阅更新的边界
GEOIP(按 IP 地理归属匹配)和 IP-CIDR(按 IPv4 地址段匹配)处理的是地址条件,不等同于网站清单。目标是“仅指定域名代理”时,最小片段不需要这两种规则。把广范围地址规则加入前面,会改变后续域名规则和兜底规则的覆盖范围。
| 关键字 | 语法示例 | 检查重点 |
|---|---|---|
DOMAIN-SUFFIX | DOMAIN-SUFFIX,example.com,PROXY | 按主域名及子域名覆盖网站。 |
DOMAIN-KEYWORD | DOMAIN-KEYWORD,media-example,PROXY | 按域名中的文本匹配,注意误覆盖。 |
GEOIP | GEOIP,CN,DIRECT | 按地址归属数据判断,不代表网站所属地区。 |
IP-CIDR | IP-CIDR,192.0.2.0/24,DIRECT,no-resolve | 示例为文档地址段;no-resolve 表示不为此规则主动解析域名。 |
表格用于辨认规则类型,不要求把所有行都加入配置。特别是共享服务器地址可能同时承载多个网站,按 IP 范围代理容易偏离“只选指定网站”的目标。域名本身已明确时,先保留域名方案,只有确认地址匹配需求后才增加地址规则。
- Home 中 Subscribe(订阅)条目的更新通常用于刷新已有服务器列表,不等于替你修改当前本地配置的
[Rule]内容。 - 远程 Config 文件更新可能改变规则。更新后重新核对当前选中文件、域名规则和最后一条 FINAL,不要只确认服务器数量。
- 服务器列表变化后,检查默认服务器或策略组是否仍指向可用条目。规则命中 PROXY 但代理目标不可用,网页同样无法打开。
常见问题:规则写了却没有按预期分流
为什么所有网站都走代理?
先到 Home → Global Routing 确认选择 Config,而不是 Proxy。再打开当前选中的配置,检查是否仍有 FINAL,PROXY 或覆盖范围过大的代理规则。把目标规则之外的去向核对清楚后,再以 FINAL,DIRECT 兜底。
为什么指定网站还是直连?
到 Config 确认正在使用刚编辑的文件。检查域名是否误带协议头或路径、FINAL 是否放在最前面,以及是否存在先命中的 DIRECT 规则。随后关闭旧页面,重新发起请求并查看实际主机名。
主页面能打开,登录和图片却失败?
在请求记录中找出失败资源的主机名,判断它是否位于主站域名之外。将确认需要代理的独立域名加入 FINAL 前,再重新打开页面。不要把一次页面加载失败直接当成整个服务器不可用。
切到 Proxy 能访问,Config 却不行?
先恢复 Home → Global Routing → Config,再查目标请求命中了哪条规则。如果命中 DIRECT,补正域名范围或顺序;如果已命中 PROXY,检查该策略实际选用的服务器是否与临时 Proxy 测试一致,并检查 DNS 与资源域名。
完成后保留可用副本,并记录自己新增了哪些域名。每次只改一项:先模式,再规则,再服务器。按这个顺序回查,可以把“配置未启用”“规则没命中”和“代理连接失败”分开处理,而不是反复替换整份配置。