配置
- 配置文件
- 扩展配置
- 通用参数
- 添加规则
- 规则类型
- 规则策略
- app分流
- 更新规则集
- 修改DNS
- no-resolve的作用
- 代理分组/策略组
- 代理分组类型
- 自动切换节点
- HTTPS解密
- 负载均衡
- 模块
- 证书模块
- 模块消失
- 身份证书密码
- 微信转圈
配置文件
Shadowrocket内置了一个配置文件default.conf
,其中包含了国内外网站的分流规则,满足大多数用户的基本需求。此配置文件的内容跟随应用更新而做不定期的调整。如果在使用过程中错误修改或误删配置文件,可以点击配置
- 恢复默认配置
。
添加配置文件方法:
- 从URL下载配置
- 配置 - 右上角➕ - 粘贴配置链接 - 下载 - 点击对应的配置文件 - 使用配置。
- Shadowrocket兼容使用
Clash YAML格式
的配置文件。
- 从本地存储或云盘导入
- 配置 - 从云导入,点击对应存储路径的配置文件。
点击配置文件,显示操作菜单:
- 使用配置
- 编辑纯文本
- 更新配置
- 扩展配置
- 重新命名
- 导出
点击配置文件的ⓘ图标,进入编辑菜单:
配置文件的纯文本编写方法,请参考:
扩展配置
- 从配置a扩展出配置b,此时默认关系是b包含a,也可以理解为b继承了a的内容。
- 配置b优先级高于配置a,该功能是对配置建立包含关系,以满足同时使用多个配置的需求。
- 点击配置文件ⓘ - 通用 - 包含配置,可以修改或解除包含关系。
通用参数
旁路系统(bypass-system):如果禁用此选项,可能会导致一些系统问题,如推送通知延迟。
跳过代理(skip-proxy):此选项强制域名或IP的连接范围由Shadowrocket TUN接口来处理,而不是Shadowrocket代理服务器。此选项用于解决一些应用程序的一些兼容性问题。
TUN旁路路由(tun-excluded-routes):Shadowrocket TUN接口只能处理TCP协议。使用此选项可以绕过指定的IP范围,让其他协议通过。
DNS覆写(dns-server):使用普通DNS或加密DNS(如doh、doq、dot等)覆盖默认的系统DNS。有些dns over https支持http3,所以尝试查询,如果支持就切换到http3,可在doh链接后面加上#no-h3
关闭。doh强制通过h3查询的写法是将https
改成h3
,如h3://dns.alidns.com/dns-query
。
备用DNS(fallback-dns-server):当覆写DNS查询失败或查询时间超过2秒,Shadowrocket会自动回退备用DNS。如需指定多个DNS,可用逗号分隔。system表示回退到系统DNS。
启用IPv6支持(ipv6):false表示不启用,true表示启用。即使不启用此选项,当本地网络环境支持IPv6,并且节点域名支持IPv6解析,Shadowrocket也会使用节点的IPv6地址进行访问。解决方法是关闭节点域名的IPv6解析,或者在配置文件的[Host]
项目下为节点域名指定IP地址。
首选IPv6(prefer-ipv6):优先向IPv6的DNS服务器查询AAAA记录,优先使用AAAA记录。false表示不启用。
💡 dns-direct-system:直连的域名类规则使用系统dns进行查询。false表示不启用。
💡 icmp-auto-reply:ping数据包自动回复。
💡 always-reject-url-rewrite:不开启时,「重写的REJECT策略」默认只有在配置模式下生效。开启后,可以令该策略在其他全局路由模式下都生效。
私有IP应答(private-ip-answer):如果不启用该选项,域名解析返回私有IP,Shadowrocket会认为该域名被劫持而强制使用代理。
💡 dns-direct-fallback-proxy:直连域名解析失败后使用代理。false表示不启用。
TUN包含路由(tun-included-routes):默认情况下,Shadowrocket接口会声明自己为默认路由,但由于Wi-Fi接口的路由较小,有些流量可能不会通过Shadowrocket接口。使用此选项可以添加一个较小的路由表。
总是真实IP(always-real-ip):这个选项要求Shadowrocket在TUN处理DNS请求时返回一个真实的IP地址而不是假的IP地址。
DNS劫持(hijack-dns):有些设备或软件总是使用硬编码的DNS服务器,例如Netflix通过Google DNS(8.8.8.8
或8.8.4.4
)发送请求,您可以使用此选项来劫持查询。
💡 udp-policy-not-supported-behaviour:当UDP流量匹配到规则里不支持UDP转发的节点策略时重新选择回退行为,可选行为包括DIRECT、REJECT。DIRECT表示直连转发UDP流量,REJECT表示拒绝转发UDP流量。
包含配置(include):表示当前配置包含另一个配置的内容,当前配置的优先级高于被包含配置。该选项是对配置建立包含关系,以满足同时使用多个配置的需求。
带💡符号的参数只能通过配置文件的纯文本模式进行设置,没有UI操作选项。
添加规则
- 点击配置文件ⓘ - 规则 - 右上角➕,根据需求选择规则类型和规则策略,填写规则内容。
- 数据 - 代理 - 启用日志记录,产生网络活动后回到该页面,从最近的日志中查看网络活动记录,点击任一记录查看详情,点击右上角
•••
选择类型添加规则。 - 规则匹配的优先级:
- 上面规则优先于下面规则。
- 域名规则优先于IP规则。
规则类型
DOMAIN-SUFFIX:匹配请求域名的后缀。
如DOMAIN-SUFFIX,example.com,DIRECT
可以匹配到a.example.com
、a.b.example.com
。
DOMAIN-KEYWORD:匹配请求域名的关键词。
如DOMAIN-KEYWORD,exa,DIRECT
可以匹配到a.example.com
、a.b.example.com
。
DOMAIN:匹配请求的完整域名。
如DOMAIN,www.example.com,DIRECT
只能匹配到www.example.com
。
USER-AGENT:匹配用户代理字符串,支持使用通配符*
。
如USER-AGENT,MicroMessenger*,DIRECT
可以匹配到MicroMessenger Client
。
URL-REGEX:匹配URL正则式。
如URL-REGEX,^https?://.+/item.+,REJECT
可以匹配到https://www.example.com/item/abc/123
。
IP-CIDR:匹配IPv4或IPv6地址。
如IP-CIDR,192.168.1.0/24,DIRECT
可以匹配到IP段192.168.1.1~192.168.1.254
。当域名请求遇到IP类规则时,Shadowrocket会向本地DNS服务器发送查询请求,以判断主机IP是否匹配规则。若IP类规则加no-resolve
(如:IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
),则域名请求将会跳过此规则,不会触发本地DNS查询。
IP-ASN:匹配IP地址隶属的ASN编号。
如IP-ASN,56040,DIRECT
可以匹配到属于China Mobile Communications Corporation网络的IP地址。
RULE-SET:匹配规则集内容。规则集的组成部分需包含规则类型。
DOMAIN-SET:匹配域名集内容。域名集的组成部分不包含规则类型。
SCRIPT:匹配脚本名称。
DST-PORT:匹配目标主机名的端口号。
如DST-PORT,443,DIRECT
可以匹配到443目标端口。
GEOIP:匹配IP数据库。
如GEOIP,CN,DIRECT
可以匹配到归属地为CN的IP地址。
FINAL:兜底策略。
如FINAL,PROXY
表示当其他所有规则都匹配不到时才使用FINAL规则的策略。
AND:逻辑规则,与规则。
如AND,((DOMAIN,www.example.com),(DST-PORT,123)),DIRECT
可以匹配到www.example.com:123
。
NOT:逻辑规则,非规则。
如NOT,((DST-PORT,123)),DIRECT
可以匹配到除了123
端口的其他所有请求。
OR:逻辑规则,或规则。
如OR,((DST-PORT,123),(DST-PORT,456)),DIRECT
可以匹配到123
或456
端口的所有请求。
PROTOCOL:匹配传输协议类型。
PROTOCOL
类型不支持单独使用,只能作为子规则类型嵌套于逻辑规则当中。如AND,((PROTOCOL,UDP),(DST-PORT,443)),REJECT-NO-DROP
。
规则策略
PROXY:代理。通过代理服务器转发流量。
DIRECT:直连。连接不经过任何代理服务器。
REJECT:拒绝。返回HTTP状态码404,没有内容。
REJECT-DICT:拒绝。返回HTTP状态码200,内容为空的JSON对象。
REJECT-ARRAY:拒绝。返回HTTP状态码200,内容为空的JSON数组。
REJECT-200:拒绝。返回HTTP状态码200,没有内容。
REJECT-IMG:拒绝。返回HTTP状态码200,内容为1像素GIF。
REJECT-TINYGIF:拒绝。返回HTTP状态码200,内容为1像素GIF。
REJECT-DROP:拒绝。丢弃IP包。
REJECT-NO-DROP:拒绝。返回ICMP端口不可达。
除此之外,规则策略还可以选择代理分组
、订阅名称
、分组
、服务器节点
。
app分流
根据不同app指定分流规则的方法。
示例:YouTube app 分流走代理。
- 复制YouTube的规则集链接
https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Shadowrocket/YouTube/YouTube.list
- 点击配置文件ⓘ - 规则 - 右上角➕,类型选择
RULE-SET
,策略选择PROXY
,输入框内粘贴“规则集链接”,保存完成(策略可以根据需求使用其他选项)。
iOS系统没有常规分应用代理的操作,只能通过域名
/ ip
/ ua
规则实现app分流效果。可自行抓包,或者订阅blackmatrix7的规则集。如果引用的链接是域名集,添加规则时,类型请选择DOMAIN-SET
。
更新规则集
点击配置文件 - 使用配置。
修改DNS
- 点击配置文件ⓘ - 通用 - DNS覆写,删除
system
,添加223.5.5.5,119.29.29.29
。也可以使用加密DNS,如DNS-over-TLS
、DNS-over-HTTPS
、DNS-over-QUIC
。 - 备用DNS:当覆写的DNS查询失败后回退备用DNS进行查询。如需指定多个DNS,可用逗号分隔。
system
表示回退到系统DNS。
no-resolve的作用
- 当域名请求遇到IP类规则时,Shadowrocket会向本地DNS服务器发送查询请求,以判断主机IP是否匹配规则。
- 若IP类规则加
no-resolve
,则域名请求将会跳过此规则,不触发本地DNS查询。如:
IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
代理分组/策略组
- 点击配置文件ⓘ - 代理分组 - 右上角➕。填写名称,根据需求选择类型,通过
正则
匹配策略,或者从策略输入框后面的•••
手动添加策略,保存。 - 策略是规则的组成部分,创建的代理分组只有放到规则里才能发挥作用。 进入对应规则的详情页,点击策略选项,从列表中选择代理分组,保存。
- 首页下拉,可以快捷进入代理分组界面。
代理分组类型
select:手动切换节点。
url-test:自动切换延迟最低节点。
fallback:节点挂掉时自动切换其他可用节点。
load-balance:不同规则的请求使用分组里的不同节点进行连接,相同的域名会使用同一个节点。
random:随机使用分组里的不同节点进行连接。
自动切换节点
自动切换延迟低的节点:
方法一
- 首页 - 全局路由 - 分组 - 简单模式 - 打开。
方法二
- 点击配置文件ⓘ - 代理分组 - 右上角➕ - 类型
url-test
。
HTTPS解密
打开HTTPS解密方法:
- 点击配置文件ⓘ - HTTPS解密 - 证书 - 生成新的CA证书 - 安装证书。
- 系统设置 - 已下载描述文件 - 安装。
- 系统设置 - 通用 - 关于本机 - 证书信任设置 - 开启对应Shadowrocket证书信任。
负载均衡
使用负载均衡策略类型方法:
点击配置文件ⓘ - 代理分组 - 右上角➕,类型选择load-balance
。
「load-balance」表示不同规则的请求使用分组里的不同节点进行连接,相同的域名会使用同一个节点。
模块
添加模块方法:
本地新建模块
- 模块跟配置的语法相同。您可以在模块里调整通用设置以及添加规则、Hosts、重写、脚本、证书内容、解密主机名。
下载远程模块
- 模块 - 右上角➕ - 填写模块链接 - 下载。
- 模块
[MITM]
部分写法:
hostname = %APPEND% 主机名
- 加
%APPEND%
表示把内容插入到配置中,不加时会覆盖配置中对应内容,并影响其他模块功能。
请对正在使用的配置开启HTTPS解密,模块才能完整生效。
证书模块
切换配置文件时免除重复安装CA证书方法:
- 点击「已安装证书的配置文件」后面ⓘ - HTTPS解密 - 证书后面ⓘ - 复制。
- 新建模块:
#!name=证书(名字可更改)
[MITM]
enable=true
ca-passphrase=证书密码(即「已安装证书的配置文件」的证书密码,默认密码是Shadowrocket)
ca-p12=证书内容(即剪贴板复制的内容)
原本是可以省略ca-passphrase
这行参数。但由于引用的配置文件可能已经包含了证书密码,且证书密码可能不是Shadowrocket
,为防止出错,因此才增加ca-passphrase
参数来覆盖引用的配置文件的证书密码。
模块消失
模块页面已经开启保存到iCloud
,如果出现模块消失的问题,请检查:
- 系统设置 - Apple ID - iCloud - 使用iCloud的APP中,确保Shadowrocket/iCloud云盘已经打开同步。
- 文件app - iCloud云盘 - Shadowrocket,确定其中包含
Modules
和Script
两个子文件夹。 - 文件app - iCloud云盘 - Shadowrocket - Modules,如果iCloud的本地缓存被清理,此时模块文件是未下载状态,请等待自动下载或手动下载。
身份证书密码
Shadowrocket安装CA证书时,如果遇到「输入证书身份证书
的密码」页面,可以尝试输入:Shadowrocket
微信转圈
如果使用Shadowrocket时微信一直显示连接中/收取中
,可以尝试的解决方法:
- 微信分流走直连。
- 点击配置文件ⓘ - 通用 - 启用IPv6 - 关闭。