{关键词}实战指南,DNS配置是分流的基石

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解析:

  1. 若使用本地DNS(如223.5.5.5),国内域名解析快,但海外域名可能返回被污染的IP
  2. 若使用远程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 轻量级配置(适合新手)

使用成熟规则集,一键导入:

  1. ConnersHua规则集:区分精细,更新及时
  2. DivineEngine规则集:适合Surge/Shadowrocket通用
  3. 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语法组合,便于维护更新。


总结与建议

配置优先级原则

  1. 精确 > 模糊:具体域名优于关键词,关键词优于GEOIP
  2. 常用 > 稀有:高频访问域名前置
  3. 白名单 > 黑名单:优先定义"什么走直连",其余走代理(适合国内用户)

维护建议

  • 每周检查规则集更新(GitHub源可能变动)
  • 每月审查连接日志,优化误判规则
  • 备份配置文件(导出为.conf文件存至iCloud)

智能分流的终极目标是"无感代理"——用户无需关心流量走向,Shadowrocket在后台自动选择最优路径,通过合理的规则配置,你可以在享受全球互联网便利的同时,保持本地网络访问的极速体验。

延伸阅读

  • Surge官方文档(Shadowrocket兼容Surge语法)
  • RFC 2782(DNS SRV记录与分流)
  • GeoLite2数据库(IP地理位置数据源)

您可以还会对下面的文章感兴趣: