
规则匹配顺序错误导致代理规则被直连规则覆盖
直连规则放置在代理规则之前会提前命中
Shadowrocket的规则引擎严格按照配置文件中规则列表的先后顺序逐条匹配,一旦某个规则命中,后续规则不再执行。如果用户在配置中将GEOIP,CN,DIRECT或IP-CIDR,CNIP,DIRECT等国内直连规则放置在了针对特定境外域名的代理规则之前,当访问这些境外网站时,如果该网站的服务器IP恰好属于国内IP段或被CNIP数据库收录,请求会优先匹配直连规则而直接走本地网络,完全跳过后面的代理规则。这种顺序错误是导致部分网站“走不了代理”的最常见原因,用户应检查规则顺序,确保所有PROXY规则和策略组引用位于DIRECT规则之前。
FINAL兜底规则被设置为直连导致未匹配流量不走代理
配置文件中通常会包含一条FINAL或兜底规则,用于处理所有未被前面规则匹配的流量。如果用户将FINAL设置为DIRECT(例如FINAL,DIRECT),那么任何未在规则列表中被明确匹配的域名或IP都将走直连通道。当用户访问的境外网站未被规则明确覆盖时,请求就会落入FINAL的直连范围,表现为走不了代理。用户应检查配置文件的最后一条规则,确保兜底策略为PROXY或指向包含可用节点的策略组,同时将有特殊需求的网站单独添加代理规则。
规则顺序调整建议与优先级规划
一个合理的配置文件应遵循“特例优先、代理次之、直连再次、兜底代理”的规则排列原则:将最需要精确匹配的规则(如特定域名代理规则、去广告拒绝规则)放在最顶部,随后是GEOIP,CN和CNIP直连规则,然后在FINAL之前放置PROXY兜底规则。用户可在Shadowrocket的配置编辑界面中通过拖动规则条目或点击“排序”功能调整顺序,确保代理规则不会被直连规则提前覆盖,从而使境外网站流量正确进入代理通道。
特定域名的代理规则未添加或规则写法不匹配
规则集中未包含目标网站的域名
当用户依赖社区规则集或通用配置时,这些规则集可能未覆盖某些小众或新建的境外网站。未在规则列表中出现过的域名在匹配流程中找不到对应规则,最终落入FINAL兜底策略,如果兜底策略为直连则导致无法走代理。用户应通过Shadowrocket的连接日志捕获该网站发起的域名请求,然后手动在配置文件中添加该域名的代理规则,确保其路径清晰且位于直连规则之前。
域名规则类型选择错误导致匹配失败
Shadowrocket支持多种域名规则类型,包括DOMAIN(精确匹配)、DOMAIN-SUFFIX(后缀匹配)和DOMAIN-KEYWORD(关键词匹配)。如果用户将规则写作DOMAIN,example.com,PROXY但实际访问的是www.example.com,则DOMAIN精确匹配无法命中。正确的写法应为DOMAIN-SUFFIX,example.com,PROXY以匹配所有子域名,或DOMAIN,www.example.com,PROXY针对特定子域名。用户应检查规则写法是否与实际的访问域名一致,确保匹配条件正确覆盖目标网站。
网站使用IP直连方式完全绕过域名规则
部分网站或App在连接阶段直接通过IP地址发起请求而非域名,这类请求在Shadowrocket中无法被任何基于域名的规则(DOMAIN-SUFFIX、DOMAIN-KEYWORD等)匹配,因此即使配置了相应的代理规则也无法生效。处理这类情况需要用户将规则类型调整为IP-CIDR,将该网站或服务所属的IP段纳入代理范围。用户可通过连接日志获取该网站解析到的实际IP地址,或通过nslookup命令查询域名对应的IP段,然后在配置中添加相应的IP-CIDR规则并设为PROXY。
策略组配置不当导致节点选择异常
策略组引用了无效或不可用的节点
当配置文件中将特定域名的流量指向某个策略组而非直接设置为PROXY时,该策略组内部包含的节点列表和选择策略决定了实际使用的代理节点。如果策略组中的所有节点均已失效、超时或不可用,且策略组未配置备用节点或故障转移机制,流量将因无可用节点而无法走代理,可能表现为连接超时或回退至直连。用户应检查策略组中列出的节点是否全部有效,必要时将策略组的节点列表更新为当前可用的节点,或为主策略组添加备用节点实现冗余。
策略组的自动选择逻辑选择了高延迟或不可用节点
当策略组采用“自动选择”或“延迟最低”策略时,Shadowrocket会定期测试组内所有节点的延迟并自动切换到测试结果最优的节点。如果测试过程因网络波动产生不准确的结果,或某个节点在测试瞬间响应快但实际传输能力差,用户可能被分配到一个表现不佳的节点,导致虽然“走了代理”但速度极慢,主观上误以为是“走不了代理”。用户可手动切换策略组中的节点选择,或临时将策略组的选择策略改为“手动选择”以固定使用某个已知好用的节点。
规则中策略组名称与实际配置不一致
配置文件中的规则条目可能引用了某个策略组名称,但该名称在配置文件的策略组定义区域中不存在或已被重命名,Shadowrocket在加载配置时无法找到对应的策略组,该规则将失效,流量落入后续规则处理。用户应进入配置编辑界面,核对每个规则引用的策略组名称是否与策略组列表中的名称完全一致,大小写敏感。修正不一致的引用后重新加载配置即可恢复。
DNS解析环节将域名解析至国内IP导致路由错误
境外网站使用了国内CDN节点回源地址
部分国际网站在国内部署了CDN加速节点,当用户通过国内DNS服务器解析该网站域名时,返回的是国内CDN节点的IP地址而非境外源站地址。Shadowrocket的规则引擎根据目标IP地址进行路由决策,如果该IP属于国内IP段且GEOIP,CN,DIRECT规则位于代理规则之前,则该请求会被判定为“国内流量”而走直连。用户即使配置了该域名的代理规则,也因DNS返回的IP归属地问题导致规则被覆盖。解决方法是在配置文件中为特定域名指定DNS解析服务器,强制使用境外DNS获取原始IP地址。
DNS解析结果受到运营商DNS污染的影响
国内部分网络运营商的DNS服务器对境外域名实施污染,返回错误的IP地址或屏蔽解析请求,导致Shadowrocket无法获取到目标网站的真实IP,即使规则指定走代理,连接也可能因DNS解析失败而无法建立。用户可更换DNS为8.8.8.8或1.1.1.1等境外公共DNS,并在Shadowrocket的DNS设置中启用“DNS over HTTPS”以确保解析请求加密且不被篡改。同时,在配置文件中添加DNS规则,将特定域名的解析请求强制发送至指定DNS服务器,避免运营商的干扰。
DNS缓存导致旧解析IP仍被使用
设备或路由器本地缓存了该域名之前解析的IP地址,即使已经更改了配置或DNS设置,旧IP仍被用于连接请求。用户可清除iOS设备的DNS缓存(通过开关飞行模式或重启设备),或等待缓存过期后重新解析。在Shadowrocket中关闭再开启代理开关也可触发新DNS查询,确保使用最新的解析结果进行路由。
去广告规则误将目标网站视为广告或追踪域名
社区规则集将正常网站域名列入屏蔽列表
部分去广告规则集为了覆盖面广泛,可能将某些正常服务的域名误判为广告或追踪服务器而添加了REJECT规则。当用户访问该服务时,Shadowrocket在规则匹配过程中发现该域名匹配了REJECT规则,直接拒绝连接而不走代理通道,导致用户感觉网站“走不了代理”实际上是被拦截了。用户可通过连接日志查看该域名实际匹配的规则,如果发现匹配了REJECT规则,则将该域名从去广告规则中排除或单独添加一个DOMAIN-SUFFIX,example.com,PROXY规则并放置在去广告规则之前。
规则匹配了REJECT后代理规则无法覆盖
由于Shadowrocket的规则匹配是按顺序执行的,如果去广告的REJECT规则位于用户自定义的代理规则之前,该域名在匹配到代理规则前就已被REJECT命中并拒绝,后续的代理规则完全不会被评估。用户应调整配置中的规则顺序,将特定域名的代理规则放置在所有去广告规则之前,确保代理优先于拒绝。或在连接日志确认后,直接删除或禁用针对该域名的REJECT规则。
REJECT-DROP导致连接超时而非明确的拒绝提示
REJECT-DROP规则通过静默丢弃数据包而不返回任何错误信号,使得用户在浏览器中看到的是长时间加载后超时,而非明确的“连接被拒绝”,更容易被误认为是“代理失效”或“走不了代理”。用户应检查配置中是否存在REJECT-DROP规则命中了目标域名,如有则将该规则改为REJECT或在代理规则之前添加该域名的PROXY规则进行覆盖。
常见问题FAQ
全局模式下网站能访问,规则模式下就不行,是为什么?
这种情况明确说明节点本身是正常的,问题完全在于配置文件的规则设置。用户在全局模式下排除了所有规则干扰,确认代理通道可用后,回到规则模式排查规则顺序、策略组、去广告规则和DNS解析等因素。最便捷的定位方法是开启连接日志,查看该网站在规则模式下匹配了哪条规则(是DIRECT、REJECT还是错误的策略组),然后针对性调整。
同一个配置文件,为什么有的境外网站能走代理,有的不能?
这通常是因为不同网站使用的域名和IP地址归属地不同。能被代理的网站其域名被规则显式匹配或落入了PROXY兜底策略,而不能被代理的网站可能因域名未被覆盖、IP被判定为国内、或被去广告规则拦截等原因落入直连。用户应针对无法走代理的网站单独添加规则,或检查FINAL兜底策略是否为PROXY。
规则模式下设置“代理”策略了,但访问时IP还是国内的,怎么办?
先确认该网站是否使用了国内CDN导致DNS解析返回国内IP,用户可尝试更换境外DNS重新解析。如果DNS解析出的IP确实为境外IP但依然走直连,检查GEOIP,CN和IP-CIDR规则是否在代理规则之前提前匹配了该IP段,调整规则顺序或将代理规则置于直连规则之前。也可在配置中为该域名专门设置DOMAIN-SUFFIX规则并放在规则列表顶部强制走代理。
策略组内节点显示可用,但流量就是走不了代理,为什么?
如果策略组内节点均可连通但流量依然走不了代理,可能原因是规则引用的策略组名称错误或策略组的选择策略配置为“直连”或“拒绝”。用户应检查策略组的定义中是否意外包含了DIRECT选项并将其设为默认,或策略组的使用模式是否正确。也可尝试将策略组的类型改为“手动选择”,然后选择一个已知可用的节点作为测试,排除策略组自动选择逻辑的干扰。