本文适合已经在 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://、路径、查询参数或端口号。
FINAL,DIRECT 接住前面没有匹配的请求,必须放在所有需要参与判断的具体规则之后。若它位于首行,后面的域名规则便无法实现预期效果。PROXY 也不是服务器地址;它表示代理策略,使用前应确认 Home 中有自己已有且可用的服务器,并确认配置没有让实际出站选择偏离预期。
结论:先用最小集合验证
首次验证只保留一个目标域名和末尾兜底;确认代理与直连各有一个可复现的命中结果后,再逐条扩展名单。
三、在 Config 中修改并启用配置
编辑前记录 Home 当前选择的服务器、Global Routing 模式,以及 Config 中正在使用的文件。复制一份配置再修改,比直接覆盖唯一文件更便于回退。如果原文件由远程地址维护,应保留本地副本;后续更新远程配置可能覆盖本地改动。
-
保留原配置
进入 Config,找到当前使用的配置文件,先通过文件操作入口保存副本或导出备份。确认副本可辨认,再开始编辑;不要把节点订阅更新当作规则文件备份。
-
编辑规则节
在 Config 中打开待修改文件的文本编辑入口,找到已有的
[Rule]。把目标 DOMAIN-SUFFIX 规则加入该节,不要重复建立另一个同名节;规则行使用英文逗号。 -
检查兜底
检查整个规则节的顺序,把
FINAL,DIRECT放到末尾。若要严格做到“仅列出的域名走代理”,还需检查原来的 GEOIP、IP-CIDR、规则集引用及其他代理规则,避免它们额外扩大代理范围。 -
选用文件
保存后返回 Config,确认选中的是刚刚修改的那份文件,而不是名称相近的远程文件。文件已保存与文件已被选用是两件事,必须分别确认。
-
启用 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
网站不是单一域名的同义词。主页面、登录接口、图片、字体或视频可能来自不同主机。只加入页面地址对应的主域,可能出现文字正常、图片不显示,或页面打开但登录失败。遇到这种情况应查看失败请求的实际主机名,再决定是否加入名单,不要直接把所有流量改为代理来掩盖缺失规则。
- 同主域的子域:
cdn.example.com已被DOMAIN-SUFFIX,example.com,PROXY覆盖,无需再写相同策略。 - 独立的资源域:若页面依赖
static.example.net,可先用DOMAIN,static.example.net,PROXY精确处理,再根据实际需求决定是否扩大到整个后缀。 - 直接访问 IP:仅靠 DOMAIN-SUFFIX 不能保证命中。IP-CIDR 匹配地址网段,GEOIP 按地址所属地区判断,两者都不是域名后缀匹配的替代写法。
- URL 路径:
example.com/account与example.com/news的主机名相同;此处的域名规则不能仅把其中一个路径交给代理。
添加 IP-CIDR 时还需注意共享地址:同一地址可能承载多个域名,按地址代理会影响不在域名名单中的其他请求。因此,“仅指定网站”的配置应优先从实际主机名入手,只有明确理解地址范围和影响时才增加地址规则。
五、用规则命中验证,而不是只看网页能否打开
网页能打开,只说明某条访问路径可用,不能证明使用了 PROXY;网页打不开,也不能直接证明规则写错。验证时在 Shadowrocket 的连接记录或日志中核对目标主机、命中规则与最终策略,观察一次新建立的连接,而不是只看服务器延迟测试。
- 先选一个名单内的真实网站和一个名单外、当前网络可直接访问的网站,记下各自的完整主机名。示例域名只用于说明语法,不能替代用户的实际测试目标。
- 在 Config 模式连接后,重新访问名单内网站。应看到目标命中相应 DOMAIN-SUFFIX 或 DOMAIN 规则,策略为 PROXY;随后核对最终使用的代理出站。
- 访问名单外网站,检查其请求是否由 FINAL 接住,策略是否为 DIRECT。如果它命中了其他规则,回到 Config 检查保留下来的条目。
- 为主页面和失败资源分别检查记录。同一页面内既有 PROXY 又有 DIRECT 并不一定异常,关键是每个主机的结果是否符合名单。
- 每次只修改一项,重新建立连接后重复同一组测试。保留修改前后的目标、规则和结果,便于确认究竟是哪一条变更产生影响。
域名解析失败时,后续连接可能尚未建立;应用内置的加密 DNS、直接使用 IP 的请求,也可能影响可用的域名信息。不要为了修正域名规则同时更换多项 DNS 设置。先保留当前设置核对解析结果,再处理单独的解析问题;对已建立的长连接,则重新连接后再看新记录。
六、按现象区分规则问题与连接问题
遇到异常先看两层:第一层是请求有没有命中预期规则,第二层是选定的出站能否完成连接。下面两条是网络连接中可能出现的原始错误文本,不代表每次都会在同一界面以完全相同形式显示;应结合记录中的目标地址与出站方向判断。
报错:Connection timed out
原因:连接在等待期限内未完成,可能发生在代理服务器连接或目标站连接阶段,不能仅凭此文本判定 DOMAIN-SUFFIX 无效。
解法:先核对命中策略;若确为 PROXY,再测试自己已有服务器的连通性及相同目标的访问情况,区分代理出站故障和目标站不可达。
报错:Connection refused
原因:连接被远端拒绝,常见于目标端口未监听或服务器地址、端口与实际服务不一致。
解法:先确认错误对应代理服务器还是网站,再向自己的服务商核对已有配置的地址和端口;不要把网站的 HTTPS 端口 443 直接照填为代理服务器端口。
- 所有网站都走代理:先看 Global Routing 是否仍是 Proxy,再查配置中是否存在覆盖面更大的代理规则,或末尾是否仍为
FINAL,PROXY。 - 名单内网站仍直连:检查是否正在使用另一个配置文件、前面是否有 DIRECT 规则,以及域名参数中是否误带协议前缀或路径。
- 只有部分内容失败:核对实际失败的资源域名;如果已正确命中 PROXY,再排查代理连接,不要反复添加相同的主域规则。
- 刷新后修改消失:确认更新的是远程 Config 还是服务器订阅。两者维护的内容不同,应在本地副本中保留自定义规则,并在更新后核对差异。
结论:以命中记录决定下一步
命中错误就修正规则和顺序;命中正确但连接失败,就排查对应出站。两类问题分开处理,才能保留“名单代理、其余直连”的配置边界。
最后保留一份已经验证的本地配置,以及一组固定的名单内、名单外测试目标。以后新增网站、调整订阅或更新远程配置后,重复相同的验证步骤。Shadowrocket 的客户端购买与连接服务分别处理,本文以用户已经拥有自己的服务商和配置为前提。