· 规则分流 · 约 8 分钟

Shadowrocket 指定网站走代理:用规则只让部分域名经过节点

以 Global Routing 选 Config 为前提,示范用 DOMAIN-SUFFIX 列出需要代理的站点,其余流量交给 FINAL,DIRECT 直连,并说明写完后怎样验证分流是否生效。

本文速览

Shadowrocket(小火箭)只让指定网站走代理,需要同时满足三个条件:Global Routing 使用 Config、当前配置包含目标域名的 PROXY 规则、最后以 FINAL,DIRECT 处理其余请求。本文适合已经有自己的服务商与可用连接资料的用户,按准备配置、添加规则、检查命中记录的顺序操作,并区分“规则没有匹配”和“匹配后连接失败”。

一、先选 Config,再检查当前配置

规则写对但没有生效,首先应核对 Home → Global Routing。本文的目标是按域名决定去向,因此需要选择 Config。只在 Config 中修改文件,却让 Global Routing 保持 Proxy,不能用来验证“指定网站代理、其他网站直连”的效果。

下面只对照与本次操作直接相关的三种选项,不是 Global Routing 的完整选项清单。Config 决定使用配置规则;规则中的 PROXY 决定请求交给代理策略。两者名称相近,但不是同一个设置。

Config

推荐

按当前生效配置中的规则处理请求。目标域名可以走 PROXY,其他请求可以由 FINAL,DIRECT 直连。

适合:只让明确列出的域名经过代理。

Proxy

将接管的请求交给代理处理,而不是按本文的域名清单划分去向。临时使用后应切回 Config 再做分流测试。

适合:临时检查已有代理连接能否访问目标。

Direct

将接管的请求按直连方式处理,不会因为配置中写有 PROXY 域名规则就自动改用代理。

适合:核对目标在当前网络下的直连表现。

结论:先固定测试条件

开始修改前记录当前配置文件名、所选连接和 Global Routing。后续每次只改一项规则,否则无法判断现象来自配置切换、连接变更还是规则本身。

二、按四步建立最小规则配置

先在 Home 确认可用连接已经选中,再进入 Config 处理配置。已有订阅用于管理连接资料,并不等于已经启用本文需要的域名分流规则。连接列表更新与配置规则修改应分别核对。

  1. 备份配置

    进入 Config,记录当前选中的文件,使用可用的分享或导出操作保留原内容。修改已有配置时,尤其要保留原先的 DNS、Host 与策略设置,避免为了添加域名而覆盖整个文件。

  2. 编辑规则

    在 Config 中打开准备使用的配置并进入编辑,在已有的 [Rule] 段内添加下文示例。若原文件已有该段,就编辑原段,不要再追加第二个同名段。

  3. 启用文件

    保存后回到 Config,确认选中的是刚才编辑的文件,而不是名称相近的另一份配置。仅保存文件不应被当作“已经切换到该文件”的证据。

  4. 选择姿态

    回到 Home → Global Routing → Config,确认 Home 中的目标连接仍然选中,再开启或重新建立连接。接下来通过新的请求检查规则结果,不以已经打开的页面作为唯一依据。

三、用 DOMAIN-SUFFIX 列出代理域名

以下域名仅作语法示例,不是连接服务地址。将它们替换为实际需要访问的网站域名。规则中的域名不带 https://,不带端口,也不带路径;例如目标页面位于 https://www.example.com/account,需要考虑的匹配对象是 www.example.com。

[Rule]
DOMAIN-SUFFIX,example.com,PROXY
DOMAIN-SUFFIX,example.org,PROXY
FINAL,DIRECT

DOMAIN-SUFFIX,example.com,PROXY 匹配 example.com 本身及其子域名,例如 www.example.com 和 api.example.com。它不是“域名中含有 example 就匹配”,因此不会把 notexample.com 当成该域名的子域名。

2 条
示例中的 DOMAIN-SUFFIX 代理规则
1 条
放在规则末尾的 FINAL,DIRECT
3 项
域名规则依次写类型、域名、策略

若只希望某一个主机名经过代理,而不包含整个域名下的其他主机,应使用更窄的 DOMAIN 规则。例如下面只匹配 api.example.com;访问 www.example.com 不会命中这一行,而会继续向下寻找规则。

[Rule]
DOMAIN,api.example.com,PROXY
FINAL,DIRECT

DOMAIN 与 DOMAIN-SUFFIX 不能区分同一域名下的网页路径。若希望同一网站的 /video 走代理、/news 直连,不能通过在 DOMAIN-SUFFIX 后面添加路径实现。先确定需求是按域名区分,还是按页面内容区分,再决定是否适用本文方法。

四、检查规则顺序与 FINAL 的位置

规则按顺序匹配,命中后通常不再继续寻找后面的规则。更具体的例外应写在范围较大的规则前面。FINAL 是剩余请求的兜底项,不应放在待匹配的域名规则之前,也不应把多份配置的 FINAL 原样堆叠在同一个规则段里。

[Rule]
DOMAIN,account.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT

这个例子使 account.example.com 先命中 DIRECT;同属 example.com 的其他主机仍可命中后面的 PROXY 规则。如果将前两行交换,范围较大的 DOMAIN-SUFFIX 会先匹配,前述直连例外便无法达到预期。

五、用连接记录验证分流结果

页面能打开,只能说明这次访问成功,不能证明走了预期策略。应同时检查目标主机名、命中规则和实际策略。验证时先使用目标网站与一个不在清单内的网站各产生一组新请求,减少已有连接与页面缓存对判断的干扰。

  1. 确认 Home → Global Routing 仍为 Config,Config 中仍选中刚修改的文件,并确保连接已经开启。
  2. 重新发起对目标网站的访问,在应用内连接记录中查找对应主机名,核对是否命中预期的 DOMAIN 或 DOMAIN-SUFFIX 规则,以及是否交给 PROXY。
  3. 访问一个未写入代理清单的站点,核对相应请求是否由 FINAL 处理并交给 DIRECT。不要用同一网站的另一个子域名充当这个对照样本。
  4. 若有跳转、登录或图片加载,再分别查看新增请求的主机名。把页面主域名与它依赖的资源域名分开记录,不要只看地址栏。
观察到的现象优先核对下一步操作
目标请求命中 FINAL,DIRECT域名范围与生效配置检查记录里的实际主机名,确认它是否属于已写入的域名后缀。
目标命中 PROXY,但请求超时所选连接与服务端可达性保持规则不变,核对已有连接资料和连接测试结果。
未列入清单的站点也走 PROXYGlobal Routing 与其他代理规则确认不是 Proxy,并检查更早的规则或规则集引用。
网页文字出现,图片或登录失败资源与认证域名查找失败请求的主机名,按实际需要补充窄范围规则。

这些是用于判读连接记录的预期现象,不是对任意网络环境的测速结论。若记录已经显示正确命中 PROXY,继续重复添加同一域名没有帮助;此时应转向连接参数、服务端状态或目标访问限制的排查。

六、处理资源域名、DNS 与自动连接干扰

一个网页可能同时请求主站、登录接口、图片域名和独立的内容分发域名。给主站添加 DOMAIN-SUFFIX,不代表页面的全部依赖都在同一个后缀下。应先从失败记录确认域名用途,再决定是否添加,避免为了修复一个资源而代理过大的公共域名范围。

如果为了排查暂时调整了 On Demand,验证结束后应恢复原先需要的设置。不要用“连接开关一直开启”替代对实际策略的检查;连接状态说明流量接管是否建立,规则记录才用于判断具体请求的去向。

七、保存可回退的规则清单

验证通过后,保留一份能够工作的配置,并记录每个新增域名的用途。后续遇到某个功能失败时,先看它是否新增了请求域名,再做小范围调整。维护目标是让规则与实际需要一致,而不是不断扩大代理范围。

Shadowrocket 是闭源商业应用,客户端买断 ≠ 线路套餐。本文以用户已有自己的服务商和连接资料为前提。应用主要用于 iPhone、iPad,也可在 App Store 页面核对 Mac、Apple TV 与 Apple Vision 的兼容性;系统要求与购买适用性以 App Store 页面标注为准,唯一获取入口是 App Store。

下载 Shadowrocket