Config(配置)

配置

配置文件

Shadowrocket内置了一个配置文件default.conf,其中包含了国内外网站的分流规则,满足大多数用户的基本需求。此配置文件的内容跟随应用更新而做不定期的调整。如果在使用过程中错误修改或误删配置文件,可以点击配置 - 恢复默认配置

添加配置文件方法:

  • 从URL下载配置
    • 配置 - 右上角➕ - 粘贴配置链接 - 下载 - 点击对应的配置文件 - 使用配置。
    • Shadowrocket兼容使用Clash YAML格式的配置文件。
  • 从本地存储或云盘导入
    • 配置 - 从云导入,点击对应存储路径的配置文件。

点击配置文件,显示操作菜单:

  • 使用配置
  • 编辑纯文本
  • 更新配置
  • 扩展配置
  • 重新命名
  • 导出

点击配置文件的ⓘ图标,进入编辑菜单:

  • 通用
  • 规则
  • Hosts
  • URL重写
  • HTTPS解密
  • 脚本
  • 代理分组
  • 脚本URL
  • 规则集URL
  • 复制
  • 替换策略
  • 测试规则

配置文件的纯文本编写方法,请参考:

扩展配置

  • 从配置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.88.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.coma.b.example.com

DOMAIN-KEYWORD:匹配请求域名的关键词。

DOMAIN-KEYWORD,exa,DIRECT可以匹配到a.example.coma.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可以匹配到123456端口的所有请求。

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-TLSDNS-over-HTTPSDNS-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,确定其中包含ModulesScript两个子文件夹。
  • 文件app - iCloud云盘 - Shadowrocket - Modules,如果iCloud的本地缓存被清理,此时模块文件是未下载状态,请等待自动下载或手动下载。

身份证书密码

Shadowrocket安装CA证书时,如果遇到「输入证书身份证书的密码」页面,可以尝试输入:Shadowrocket

微信转圈

如果使用Shadowrocket时微信一直显示连接中/收取中,可以尝试的解决方法:

  • 微信分流走直连。
  • 点击配置文件ⓘ - 通用 - 启用IPv6 - 关闭。