Shadowrocket智能分流完全指南:原理、配置与优化实战
智能分流的本质与价值
1 什么是智能分流
智能分流(Intelligent Routing)是Shadowrocket的核心能力,指通过预定义的规则集,让网络请求根据目标域名、IP地址、地理位置等维度,自动选择直连(Direct)或代理(Proxy)通道,相比传统全局代理,它能实现:
- 精准流量控制:国内流量直连,海外流量走代理
- 延迟优化:避免不必要的代理跳转
- 节省流量:减少代理服务器带宽消耗
- 访问稳定性:解决"国内网站走代理变慢"或"海外网站直连不通"的痛点
2 分流决策的底层逻辑
Shadowrocket的分流遵循"自上而下、优先匹配"原则:
请求发起 → DNS解析 → 规则匹配 → 策略执行 → 连接建立
关键机制:
- 域名优先于IP:若规则中存在域名匹配(DOMAIN),则跳过DNS解析直接执行
- CIDR精确度:IP规则(IP-CIDR)支持子网掩码,匹配精度越高优先级越高
- Final兜底:未匹配流量默认走Final策略(通常设为DIRECT或PROXY)
规则类型深度解析
1 基础规则类型
| 规则类型 | 匹配逻辑 | 适用场景 | 性能影响 |
|---|---|---|---|
| DOMAIN | 完整域名匹配 | 特定网站精确控制 | 无DNS查询 |
| DOMAIN-SUFFIX | 后缀匹配(含子域) | 整站控制(如google.com覆盖mail.google.com) | 无DNS查询 |
| DOMAIN-KEYWORD | 关键词模糊匹配 | 应对多级子域或CDN域名 | 无DNS查询 |
| GEOIP | 国家IP段匹配 | 国内外分流 | 需DNS解析 |
| IP-CIDR | 子网段匹配 | 局域网、云服务IP | 需DNS解析 |
| USER-AGENT | 应用标识匹配 | 特定APP分流 | 应用层检测 |
2 高级规则类型
- DST-PORT:按目标端口分流(如22端口SSH直连,443端口代理)
- RULE-SET:引用外部规则集(支持自动更新)
- AND/OR/NOT:逻辑组合规则(需Surge语法支持)
⚠️ 性能提示:DOMAIN类规则性能最优,应优先使用;GEOIP/IP-CIDR需等待DNS解析,会增加~5-50ms延迟。
配置文件架构实战
1 标准配置结构
[General]dns-server = 223.5.5.5, 119.29.29.29, 8.8.8.8 ipv6 = false prefer-ipv6-dns = false [Proxy] # 节点定义 Direct = direct Proxy = http, 1.2.3.4, 8080 [Proxy Group] # 策略组:自动选择延迟最低节点 Auto = url-test, Proxy1, Proxy2, Proxy3, interval=600, tolerance=50 # 策略组:故障转移 Failover = fallback, Proxy1, Proxy2, interval=600 [Rule] # 局域网直连 DOMAIN-SUFFIX, local, Direct IP-CIDR, 192.168.0.0/16, Direct IP-CIDR, 10.0.0.0/8, Direct # 国内域名直连(使用规则集) RULE-SET, https://cdn.jsdelivr.net/gh/ConnersHua/RuleGo@master/Surge/Ruleset/Direct.list, Direct # 海外代理 RULE-SET, https://cdn.jsdelivr.net/gh/ConnersHua/RuleGo@master/Surge/Ruleset/Proxy.list, Auto # 广告拦截 RULE-SET, https://cdn.jsdelivr.net/gh/ConnersHua/RuleGo@master/Surge/Ruleset/Reject.list, Reject # 兜底策略 GEOIP, CN, Direct FINAL, Auto
2 策略组(Policy Group)进阶配置
URL-Test策略(自动测速):
Auto-Select = url-test, 香港节点, 新加坡节点, 美国节点, url=http://www.gstatic.com/generate_204, interval=300, tolerance=100
- interval:测速间隔(秒)
- tolerance:切换阈值(当前节点延迟 - 最优节点延迟 < tolerance时不切换,防止频繁跳动)
Fallback策略(故障转移):
Stable = fallback, 主节点, 备用节点1, 备用节点2, url=http://www.gstatic.com/generate_204, interval=600
负载均衡(Load Balance):
Balance = load-balance, 节点1, 节点2, 节点3, persistent=true
persistent=true:同一域名始终使用同一节点(保持会话一致性)
DNS优化:分流的隐形瓶颈
1 DNS解析与分流的耦合关系
智能分流的准确性高度依赖DNS解析:
- 若使用本地DNS(如223.5.5.5),国内域名解析快,但海外域名可能返回被污染的IP
- 若使用远程DNS(如8.8.8.8通过代理查询),海外域名准确,但增加延迟
最佳实践:
[General] # 配置DNS分流解析 dns-server = 223.5.5.5, 119.29.29.29 doh-server = https://dns.alidns.com/dns-query, https://doh.pub/dns-query # 启用DNS劫持防止泄露 hijack-dns = *:53
2 域名解析策略(DNS Strategy)
在规则中指定解析方式:
[Rule] # 强制使用本地DNS解析(适合国内域名) DOMAIN-SUFFIX, baidu.com, Direct, dns-direct # 强制使用远程DNS解析(适合海外域名) DOMAIN-SUFFIX, google.com, Proxy, dns-remote
实战场景配置方案
1 精细化分流方案(适合高级用户)
场景:国内用户,需要区分流媒体、金融、游戏流量
[Proxy Group] Global = select, Direct, Auto-HK, Auto-SG, Auto-US Streaming = select, Auto-US, Auto-HK, Direct Finance = select, Direct, Auto-HK Game = select, Direct, Auto-JP [Rule] # 金融类强制直连(防止风控) DOMAIN-KEYWORD, alipay, Finance DOMAIN-KEYWORD, bank, Finance DOMAIN-SUFFIX, wechat.com, Finance # 流媒体分流 DOMAIN-SUFFIX, netflix.com, Streaming DOMAIN-SUFFIX, disneyplus.com, Streaming DOMAIN-SUFFIX, bilibili.com, Direct # 游戏加速 DOMAIN-SUFFIX, steamcommunity.com, Game IP-CIDR, 103.10.124.0/24, Game # Steam下载服务器 # 默认规则 GEOIP, CN, Direct FINAL, Global
2 轻量级配置(适合新手)
使用成熟规则集,一键导入:
- ConnersHua规则集:区分精细,更新及时
- DivineEngine规则集:适合Surge/Shadowrocket通用
- ACL4SSR规则集:国内用户优化版
导入方法: 配置 → 远程文件 → 添加URL → 选择规则集类型 → 自动更新设置(建议每天凌晨4点)
性能优化与故障排查
1 规则优化 checklist
- [ ] 去重检查:使用
DOMAIN-SUFFIX覆盖后,删除冗余的DOMAIN规则 - [ ] 顺序调整:高频访问域名(如微信、支付宝)放在规则表前部
- [ ] GEOIP精度:CN规则放在Final前,避免误判
- [ ] 规则数量控制:超过5000条规则可能影响性能,建议定期清理
2 常见问题诊断
问题1:国内网站走代理
- 诊断:查看日志(Log)中的DNS解析结果
- 解决:添加
DOMAIN-SUFFIX, 该域名, Direct到规则表顶部
问题2:海外网站直连失败
- 诊断:检查是否为IP直连应用(如部分游戏)
- 解决:添加
GEOIP, US, Proxy或特定IP段规则
问题3:DNS泄露
- 诊断:访问dnsleaktest.com,查看显示的DNS服务器
- 解决:启用
hijack-dns,确保所有53端口流量走代理
问题4:规则不生效
- 检查:确认规则文件已下载(远程文件显示绿色对勾)
- 检查:规则语法错误(缺少逗号、空格)
- 检查:策略组名称与Rule中引用的一致
3 日志分析技巧
开启日志记录(设置 → 日志级别 → Verbose):
matched policy Direct from rule DOMAIN:规则匹配成功DNS resolve failed:DNS解析失败,检查dns-server配置TCP connection timeout:节点连接问题,切换策略组节点
进阶技巧
1 脚本分流(Scripting)
对于复杂逻辑(如按时间段分流),使用JavaScript:
// 工作日9:00-18:00使用办公网络,其余时间使用代理
const hour = new Date().getHours();
const day = new Date().getDay();
if (day >= 1 && day <= 5 && hour >= 9 && hour < 18) {
$surge.setSelectGroupPolicy("Global", "Direct");
} else {
$surge.setSelectGroupPolicy("Global", "Auto");
}
2 模块化管理(Module)
将不同用途的规则拆分为模块:
AdBlock.module:广告拦截Netflix.module:流媒体解锁ChinaDirect.module:国内直连
通过#!include语法组合,便于维护更新。
总结与建议
配置优先级原则:
- 精确 > 模糊:具体域名优于关键词,关键词优于GEOIP
- 常用 > 稀有:高频访问域名前置
- 白名单 > 黑名单:优先定义"什么走直连",其余走代理(适合国内用户)
维护建议:
- 每周检查规则集更新(GitHub源可能变动)
- 每月审查连接日志,优化误判规则
- 备份配置文件(导出为.conf文件存至iCloud)
智能分流的终极目标是"无感代理"——用户无需关心流量走向,Shadowrocket在后台自动选择最优路径,通过合理的规则配置,你可以在享受全球互联网便利的同时,保持本地网络访问的极速体验。
延伸阅读:
- Surge官方文档(Shadowrocket兼容Surge语法)
- RFC 2782(DNS SRV记录与分流)
- GeoLite2数据库(IP地理位置数据源)