Shadowrocket 只让指定网站走代理:DOMAIN-SUFFIX 加 FINAL,DIRECT 的白名单分流写法

用实际规则片段演示如何只把列出的域名交给 PROXY、其余全部 DIRECT,并说明在 Config 中修改与验证的步骤。

本文速览

本文适合已经在 Shadowrocket(小火箭)中导入自己已有配置、希望仅让少数网站走代理的用户。操作核心是把目标域名写入 DOMAIN-SUFFIX 规则,在末尾保留 FINAL,DIRECT,再将 Global Routing 设为 Config。下面依次说明最小规则、编辑顺序、连接验证和常见故障;所有示例域名仅用于解释语法,不代表连接服务。

一、先确定白名单分流的边界

这里的“白名单”指代理出站名单:列出的域名交给 PROXY,其余请求由 DIRECT 处理。它不是访问控制名单,也不会禁止名单之外的网站联网。DIRECT 表示直接连接目标,不等于关闭 Shadowrocket;连接仍可能经过本地隧道及规则处理。

要让规则参与判断,先在 Home → Global Routing 选择 Config。选择 Proxy 或 Direct 不能用来验证这份按域名划分的配置;Scene 用于场景相关的路由选择,本次排查也不以它为基准。先固定在 Config,再修改规则,可以避免把模式变化误当成规则生效。

发起请求 取得目标 顺序匹配 确定策略 建立连接

规则按顺序检查,命中后采用对应策略,不再继续寻找后面的普通匹配规则。因而,前面若已有覆盖目标的 DIRECT 规则,新增的代理规则可能根本没有机会命中。白名单分流必须同时检查规则内容和先后位置,不能只确认文件中出现了某个域名。

二、用 DOMAIN-SUFFIX 和 FINAL,DIRECT 写最小规则

下面是规则部分的最小示例。example.com 与 example.net 都是说明用域名;实际操作时应换成自己要处理的网站域名。已有配置通常还包含其他节,本例只展示 [Rule],不能直接当作完整连接配置替换原文件。

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

DOMAIN-SUFFIX,example.com,PROXY 同时匹配 example.com 和 www.example.com、assets.example.com 等子域。它不是任意字符串包含关系,不匹配 notexample.com,也不匹配 example.com.other.test。规则参数只填域名,不带 https://、路径、查询参数或端口号。

2 条
示例中的 DOMAIN-SUFFIX 代理规则
1 条
末尾 FINAL,DIRECT 兜底规则
443
HTTPS 常用目标端口,不写入域名参数

FINAL,DIRECT 接住前面没有匹配的请求,必须放在所有需要参与判断的具体规则之后。若它位于首行,后面的域名规则便无法实现预期效果。PROXY 也不是服务器地址;它表示代理策略,使用前应确认 Home 中有自己已有且可用的服务器,并确认配置没有让实际出站选择偏离预期。

结论:先用最小集合验证

首次验证只保留一个目标域名和末尾兜底;确认代理与直连各有一个可复现的命中结果后,再逐条扩展名单。

三、在 Config 中修改并启用配置

编辑前记录 Home 当前选择的服务器、Global Routing 模式,以及 Config 中正在使用的文件。复制一份配置再修改,比直接覆盖唯一文件更便于回退。如果原文件由远程地址维护,应保留本地副本;后续更新远程配置可能覆盖本地改动。

  1. 保留原配置

    进入 Config,找到当前使用的配置文件,先通过文件操作入口保存副本或导出备份。确认副本可辨认,再开始编辑;不要把节点订阅更新当作规则文件备份。

  2. 编辑规则节

    在 Config 中打开待修改文件的文本编辑入口,找到已有的 [Rule]。把目标 DOMAIN-SUFFIX 规则加入该节,不要重复建立另一个同名节;规则行使用英文逗号。

  3. 检查兜底

    检查整个规则节的顺序,把 FINAL,DIRECT 放到末尾。若要严格做到“仅列出的域名走代理”,还需检查原来的 GEOIP、IP-CIDR、规则集引用及其他代理规则,避免它们额外扩大代理范围。

  4. 选用文件

    保存后返回 Config,确认选中的是刚刚修改的那份文件,而不是名称相近的远程文件。文件已保存与文件已被选用是两件事,必须分别确认。

  5. 启用 Config

    回到 Home → Global Routing → Config,选择已有服务器并建立连接。重新发起测试请求;如旧连接仍在复用,可断开后重新连接,再重新打开测试页面。

如果连接开关在手动关闭后又自动打开,应检查 Settings → On Demand 的现有设置。On Demand 影响按条件连接的行为,不负责定义网站域名的代理名单。为便于复现,可以在记录原设置后临时关闭相关自动连接条件,测试完成再恢复。

四、处理子域例外与网站附属资源

如果一个主域大部分需要代理,但某个子域必须直连,先写更具体的例外,再写范围较大的后缀规则。例如只让 status.example.com 直连,可使用下面的顺序。DOMAIN 只匹配这个完整主机名,不会自动覆盖它下面的子域。

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

网站不是单一域名的同义词。主页面、登录接口、图片、字体或视频可能来自不同主机。只加入页面地址对应的主域,可能出现文字正常、图片不显示,或页面打开但登录失败。遇到这种情况应查看失败请求的实际主机名,再决定是否加入名单,不要直接把所有流量改为代理来掩盖缺失规则。

添加 IP-CIDR 时还需注意共享地址:同一地址可能承载多个域名,按地址代理会影响不在域名名单中的其他请求。因此,“仅指定网站”的配置应优先从实际主机名入手,只有明确理解地址范围和影响时才增加地址规则。

五、用规则命中验证,而不是只看网页能否打开

网页能打开,只说明某条访问路径可用,不能证明使用了 PROXY;网页打不开,也不能直接证明规则写错。验证时在 Shadowrocket 的连接记录或日志中核对目标主机、命中规则与最终策略,观察一次新建立的连接,而不是只看服务器延迟测试。

  1. 先选一个名单内的真实网站和一个名单外、当前网络可直接访问的网站,记下各自的完整主机名。示例域名只用于说明语法,不能替代用户的实际测试目标。
  2. 在 Config 模式连接后,重新访问名单内网站。应看到目标命中相应 DOMAIN-SUFFIX 或 DOMAIN 规则,策略为 PROXY;随后核对最终使用的代理出站。
  3. 访问名单外网站,检查其请求是否由 FINAL 接住,策略是否为 DIRECT。如果它命中了其他规则,回到 Config 检查保留下来的条目。
  4. 为主页面和失败资源分别检查记录。同一页面内既有 PROXY 又有 DIRECT 并不一定异常,关键是每个主机的结果是否符合名单。
  5. 每次只修改一项,重新建立连接后重复同一组测试。保留修改前后的目标、规则和结果,便于确认究竟是哪一条变更产生影响。
DNS 与连接复用会影响观察

域名解析失败时,后续连接可能尚未建立;应用内置的加密 DNS、直接使用 IP 的请求,也可能影响可用的域名信息。不要为了修正域名规则同时更换多项 DNS 设置。先保留当前设置核对解析结果,再处理单独的解析问题;对已建立的长连接,则重新连接后再看新记录。

六、按现象区分规则问题与连接问题

遇到异常先看两层:第一层是请求有没有命中预期规则,第二层是选定的出站能否完成连接。下面两条是网络连接中可能出现的原始错误文本,不代表每次都会在同一界面以完全相同形式显示;应结合记录中的目标地址与出站方向判断。

报错:Connection timed out

原因:连接在等待期限内未完成,可能发生在代理服务器连接或目标站连接阶段,不能仅凭此文本判定 DOMAIN-SUFFIX 无效。

解法:先核对命中策略;若确为 PROXY,再测试自己已有服务器的连通性及相同目标的访问情况,区分代理出站故障和目标站不可达。

报错:Connection refused

原因:连接被远端拒绝,常见于目标端口未监听或服务器地址、端口与实际服务不一致。

解法:先确认错误对应代理服务器还是网站,再向自己的服务商核对已有配置的地址和端口;不要把网站的 HTTPS 端口 443 直接照填为代理服务器端口。

结论:以命中记录决定下一步

命中错误就修正规则和顺序;命中正确但连接失败,就排查对应出站。两类问题分开处理,才能保留“名单代理、其余直连”的配置边界。

最后保留一份已经验证的本地配置,以及一组固定的名单内、名单外测试目标。以后新增网站、调整订阅或更新远程配置后,重复相同的验证步骤。Shadowrocket 的客户端购买与连接服务分别处理,本文以用户已经拥有自己的服务商和配置为前提。

前往 App Store