Github地址:https://github.com/LOWERTOP/Shadowrocket
软件首页
已支持的协议
现阶段已支持的协议类型
Subscribe(订阅)、Shadowsocks、ShadowsocksR、Vmess、VLESS、Relay、Socks5、Socks5 Over TLS、HTTP、HTTPS、HTTP2、Trojan、Hysteria、Hysteria2、AnyTLS、TUIC、Juicity、WireGuard、Snell v2、Brook、Lua
也可以在 首页 > 右上角 ➕ > 类型 中查看
各协议节点的纯文本格式参见 编写本地节点
添加节点
Shadowrocket 兼容多种服务器订阅格式,以及支持多种 代理协议 包括 WireGuard 节点
首页 > 左上角 > 扫码添加
此操作须开启摄像头权限
复制节点链接,如 trojan://* vmess://* vless://* 等,打开 Shadowrocket 时会自动识别导入
此操作须开启剪贴板读取权限
首页 > 右上角 ➕ > 类型 Subscribe > URL 栏输入服务器订阅链接 > 保存
订阅链接后面加上 "#1"、"#2"、"#3" 等,可以重复添加同一个订阅
首页 > 右上角 ➕,选择对应节点类型,填写节点配置信息并保存
Shadowrocket 为了兼容部分其他类型的配置文件,也支持在配置文件中 编写本地节点 信息,但不要当作 添加节点 的优先选择
若添加或更新订阅时出现异常,请参见 订阅异常
添加WireGuard节点
首页 > 右上角 ➕ > 类型选择 WireGuard,填写配置信息
复制如下格式的 WireGuard 配置信息,打开 Shadowrocket 时会自动弹出 添加对话框,点击添加
[Interface]
PrivateKey = xxxxxx
Address = 172.16.0.2/32
DNS = 1.1.1.1
MTU = 1420
[Peer]
PublicKey = xxxxxx
AllowedIPs = 0.0.0.0/0
AllowedIPs = ::/0
Endpoint = engage.cloudflareclient.com:2408
Reserved = 12,34,56
如果没有自动弹出对话框,可能是因为设置中的 允许检测剪贴板 被关闭了,您可以重新打开,或者点击首页 连通性测试 下方的 粘贴 按钮,手动添加配置信息
更新订阅节点
订阅右滑 > 更新
点击首页的更新订阅按钮🔄
设置 > 订阅 > 打开时更新(刷掉后台,重新打开应用程序时会自动更新订阅)
设置 > 订阅 > 自动后台更新(需在系统 设置 > 通用 > 后台App刷新 中开启对 Shadowrocket 的允许,更新周期可设1-24小时)
Shadowrocket 提供了 更新订阅 的快捷指令,可以实现自动化操作
长按屏幕的应用图标 > 更新订阅
若添加或更新订阅时出现异常,请参见 订阅异常
节点排序
设置 > 订阅 > 根据 Ping 排序
节点分享与整理
节点分享
长按节点 > 拷贝,可以把节点链接分享给其他设备
左滑节点 > 二维码,其他设备可以通过扫码添加节点(二维码页面点击右上角的 分享 按钮,可以选择其他形式传送二维码)
节点二维码缺乏统一标准。当使用其他代理工具扫码添加某些节点时,可能会丢失部分节点信息,导致不能连接。如果遇到此问题,请仔细检查同一个节点的各项配置信息是否一致
点击节点后面的 ⓘ 图标,滑动至页面底部,有多种分享节点的菜单
展开节点列表,点击连通性测试下方的编辑按钮 •••,勾选需要分享的节点,点击左上角的 复制,可以把多个节点链接同时分享给其他设备
节点整理
调整顺序:点击编辑按钮 •••,按住订阅后面的 ≡ 图标可以调整订阅之间的上下顺序(本地节点默认置顶位置)
节点分类:非订阅形式添加的节点,默认会归类为 本地节点。如果需要重新对本地节点进行分类,可以使用 折叠 功能。点击编辑按钮 •••,勾选节点,点击左上角的 折叠,为新分类的节点组命名(折叠 功能可以选择本地节点或者订阅节点)
删除节点:点击编辑按钮 •••,点击左上角的 删除,可以选择删除全部节点或者删除连通性测试结果中的超时节点
滑动菜单:向右滑动订阅,可以选择 测试 当前订阅节点的连通性,或者 更新 当前订阅节点。向右滑动节点,点击 测试 可以获取单个节点的连通性测试结果,点击 复制,可以在当前节点列表中新增一个同样配置信息的节点
订阅节点筛选
节点筛选
首页 > 订阅后面的 ⓘ 图标 > 过滤
保留节点名称含有关键词 A 和 B 的节点:
/(?=.*(A))^(?=.*(B))^.*$/
保留节点名称含有关键词 A 或 B 的节点:
A|B
排除节点名称含有关键词 A 或 B 的节点:
/^((?!(A|B)).)*$/
保留节点名称含有关键词 A 并排除含有关键词 B 的节点:
/(?=.*(A))^((?!(B)).)*$/
分组、代理分组中的正则写法与上述【过滤】中使用的命令相同,但需删除前后 "/" 符号
批量整理
节点订阅筛选功能支持使用脚本代码批量整理和修改相应订阅中节点的功能选项及节点名称
批量给节点中的关键词 a 替换成 b:
$server.title=$server.title.replace(/关键词a/g,'关键词b')
批量给节点名称增加 abc 开头的关键词:
$server.title='abc'+$server.title
批量给节点名称增加 abc 结尾的关键词:
$server.title=$server.title+'abc'
批量开启全部节点的片段:
$server.reserved="1,40-60,30-50"
批量开启全部节点的多路复用:
$server.mux=1
批量设置全部订阅节点的 代理链/链式代理/代理通过,以下两种方式以生效者为准
$server.chain="订阅名称/节点名称"
$server['dialer-proxy']="UUID值"
其中 “UUID 值” 可在中转节点或订阅的 JSON 文本中复制,第一种命令的 “订阅名称/节点名称” 也可以使用 UUID 值
当节点名称不包含地区标识,且节点地址有可以分辨地区的关键词时,可以使用以下脚本为节点名称批量添加地区关键词或旗帜标识
if (/节点地址关键词/i.test($server.host)) {
$server.title = '需要添加的关键词或旗帜'+ $server.title
return true;
}
其他命令
该功能也支持更复杂的脚本指令,可以参阅 此处示例
代理通过/代理链
当前代理通过另一个代理进行连接,支持多级链式代理。使用代理链方法:
使用节点 A 连接,点击节点 A 后面的 ⓘ 图标,代理通过 选择节点 B,流量走向:Client > B > A > Web server
支持使用整个订阅作为中转代理链,其生效节点是在该订阅的节点中随机选择。具体生效节点可在 VPN 日志搜索 backend chain 确认
支持批量修改订阅节点的代理链,可实现同时部署多个节点的链式代理。具体命令可查看 订阅节点筛选 > 批量整理 中的相关指令
取消代理通过/代理链:点击开启该功能节点后面的 ⓘ 图标,代理通过 选择右上角的 取消 后保存
全局路由
配置:流量根据设定规则进行分配,有些通过节点连接,有些则不通过
代理:全部流量都通过同一个节点连接
直连:全部流量都不通过节点连接
场景:根据不同的网络连接类型(Wi-Fi、蜂窝数据)自动切换到预先设置的路由模式,并选择对应的配置文件和节点连接
连通性测试
点击首页的 连通性测试,节点列表将会显示以毫秒(ms)为单位的延迟数字,这是数据包的传输时间,不同的 延迟测试方法 对应不同的计算结果。长按首页的 连通性测试,可以临时调整测试方法,仅对本次测试生效
设置 > 延迟测试方法
TCP:建立 TCP 连接的往返时间
ICMP:发送 ICMP 回显请求报文和接收 ICMP 回显应答报文的往返时间
CONNECT:向测试 URL 发送一个 HTTP HEAD 请求,测量从发送请求到接收响应头部信息的往返时间
请优先选择 CONNECT,因为它更能准确反映节点的连通性。延迟大小与网络上传下载速度没有直接关系,测速请使用其他方法,如:https://www.speedtest.net
修改测试地址
用于首页和分组节点的延迟测试
设置 > 延迟测试方法 > URL 测试设置
首页 > 连通性测试后面的圆形图标 > URL 测试设置
用于代理分组内节点的延迟测试
点击配置文件的 ⓘ 图标 > 代理分组 > 编辑或添加包含自动测试类型的分组 > 最下方 URL 栏
场景
场景是根据不同的网络连接类型(Wi-Fi、蜂窝数据)自动切换到预先设置的路由模式,并选择对应的配置文件和节点连接
首页 > 全局路由 > 设置的 场景 > 添加场景
为指定的网络连接类型设置对应的路由模式(配置、直连、代理),类型(节点、分组)、配置文件 及 备注
网络连接类型分别为:Wi-Fi、蜂窝数据、默认。选择Wi-Fi类型时,SSID需填写Wi-Fi名称
首页 > 全局路由 > 选择 场景
软件支持添加蜂窝数据场景,支持以 网络接口 作为匹配条件
默认(留空)代表接口 pdp_ip0
当设备启用了多个蜂窝数据网络时,可在 Shadowrocket 的 设置 > 诊断 > 网络 中查看对应的接口信息
输入格式:pdp_ip1 pdp_ip2 pdp_ip3 等
首次添加场景,可能会弹出申请权限的对话框,具体原因请看 定位权限。当没有允许定位权限时,场景列表的 ✅ 标记不会随着网络类型的切换而自动切换,但这不影响场景功能的正常生效
设置 > 隧道/按需求连接 中的 包含所有网络 相关选项可能会对场景模式的生效造成影响
简单模式
简单模式是一种以相对简单的方式实现自动测试并选择延迟低的节点进行连接的设置模式
首页 > 全局路由 > 分组 > 简单模式
节点的范围是什么?
当开启简单模式,此时下方会出现分组选项,如果没有继续添加分组的操作,节点范围就是首页全部节点,如果添加分组,范围就变成分组里的节点
自动测试的周期是多久?延迟低的判断依据是什么?
设置 > 延迟测试方法 > URL测试设置,这里规定了测试的间隔时间,默认 600s,即表示每 10 分钟自动进行一次节点延迟测试。相邻两次测试结果中最小延迟值的对比,根据公差机制决定是否切换节点,公差越大,触发节点切换的频次越低,默认 0ms,即表示只要后面测试结果的最低延迟节点比前面测试结果的最低延迟节点延迟小就会自动切换
切换的节点给什么规则使用?
Shadowrocket 内置策略 proxy,简单模式时自动切换的节点使用于所有指向 proxy 策略的规则
简单模式是自动切换延迟低节点,代理分组的 url-test 类型也是自动切换延迟低节点,两者有何不同?
代理分组创建后,需要在规则中修改策略指向,而简单模式已经关联 proxy 策略,节省了修改规则的步骤
全局路由 选择 代理 时将导致所有 代理分组 失效,而简单模式依然能够实现自动切换节点
添加分组时,测速 开关是什么作用?
开启测速,这个分组才允许自动切换节点。不开启测速,这个分组只能手动选择节点
启用回退
首页 > 全局路由 > 启用回退
启用回退 的功能是当节点连接失败时自动切换其他可用节点
连接失败3次才会触发回退机制
节点只满足可用性,不要求是最低延迟节点
随机切换,不按照节点顺序选择
策略为 proxy,节点切换范围就是首页全部节点,如果开启简单模式并选择分组,则范围缩小至分组内节点
策略为 非 select 类型 的 分组/代理分组类型,节点切换范围就是分组或代理分组内节点
具体切换到哪个节点,请查看 代理日志
配置页面
配置文件
Note
Shadowrocket 的配置文件(通常以 *.conf 格式存在)主要用于快速设置和调整软件的主要功能。配置文件还可以在多设备间同步以及分享配置文件给其他用户,以快速部署相同设置,简化用户手动配置的流程。用户可以在配置文件里设置 通用参数 以及 添加规则、Hosts、URL重写、HTTPS解密、脚本等内容。模块 的写法与配置文件相同
同时,Shadowrocket 支持在配置文件中 编写本地节点,但该操作方式仅是为了兼容部分其他类型的配置文件,不能当作 Shadowrocket 添加节点 的优先选择
Shadowrocket 内置了一个默认配置文件 default.conf,其中包含了国内外主要网站或服务的分流规则,一般可以满足大多数用户的基本需求。此配置文件的内容跟随应用更新而做不定期的调整。如果在使用过程中错误修改或误删配置文件,可以点击 配置 > 恢复默认配置。
添加配置文件方法:
从 URL 下载配置
配置 > 右上角 ➕ > 粘贴配置链接 > 下载 > 点击对应的配置文件 > 使用配置 / 编译配置
Shadowrocket 兼容使用 Clash YAML 格式 的配置文件。使用含节点信息的标准 Clash 链接可以同时导入配置文件和节点信息
从本地存储或云盘导入
配置 > 从云导入,点击对应存储路径的配置文件
点击配置文件,显示操作菜单(以下选项可能根据不同的软件版本有所不同):
使用配置
编辑配置
编辑纯文本
编译配置
预览配置
更新配置
扩展配置
重新命名
导出配置
点击配置文件的 ⓘ 图标或点击 编辑配置,进入编辑菜单(以下选项可能根据不同的软件版本有所不同):
通用
规则
Hosts
URL重写
头部重写
正文重写
HTTPS解密
脚本
代理分组
规则集URL
脚本URL
复制
替换策略
测试规则
使用配置
点击 使用配置 可以编译并启用该配置文件。该功能会对该配置使用的远程 规则集、脚本 等远程资源进行更新
编辑配置
使用 UI 交互界面对配置文件的可设置项进行调整。部分设置或命令 不提供 UI 编辑界面,如有需要可在 纯文本编辑 中使用
编辑纯文本
使用纯文本模式对配置文件的可设置项进行调整。部分设置或命令 不提供 UI 编辑界面,仅在纯文本模式下可以设置
配置文件的纯文本编写方法可以参考:
懒人配置
懒人配置(含策略组)
编译配置
点击 编译配置 可以对该配置文件进行重新编译。可以理解为软件将该配置文件重新编辑并转译为符合当前版本规范和逻辑的底层格式。该功能会更新该配置文件所用到的 规则集、脚本 等远程资源。仅当软件版本大于等于特定版本时才具有该选项
预览配置
查看配置文件的纯文本格式。该选项仅当配置文件是以远程配置文件的形式添加进来的才会出现
更新配置
该选项仅当配置文件是以远程配置文件的形式添加进来时才会出现。该功能一般适用于在远端维护的配置文件或远程配置需要恢复时使用,更新将使用远程配置对本地配置进行完整的更新替换,除配置设置外该功能还会同时更新该配置所用的 规则集、脚本 等远程资源。软件同时提供自动更新功能,参见 自动更新 词条
Caution
更新配置会覆盖在本地对配置文件所做的修改,对于在本地修改过的远程配置而言需要谨慎使用此功能
Tip
若仅需要更新规则集等远程资源,请使用 使用配置 / 编译配置 功能
若要禁用更新配置功能,进入 纯文本编辑 删除或注释掉 update-url = *
自动更新相关技巧请参考:自动更新
重新命名
重命名当前配置文件
导出配置
将当前配置文件以文件的形式导出
扩展配置
从配置 a 扩展出配置 b,此时默认关系是 b 包含 a,也可以理解为 b 继承了 a 的内容
配置 b 优先级高于配置 a,该功能是对配置建立包含关系,以满足同时使用多个配置的需求
点击配置文件的 ⓘ 图标 > 通用 > 包含配置,可以修改或解除包含关系
通用参数
旁路系统(bypass-system):如果禁用此选项,可能会导致一些系统问题,如推送通知延迟
跳过代理(skip-proxy):跳过代理接口,使用 TUN 接口接管。此选项强制列表中的域名或 IP 的连接范围交由 Shadowrocket TUN 接口 来处理,而不是 Shadowrocket 代理接口。此选项用于提高部分应用程序对于代理环境的兼容性。若开启 TUN 模式 时,将强制使用 TUN 接管所有连接,此处地址列表可以忽略
TUN旁路路由(tun-excluded-routes):Shadowrocket TUN 接口 只能处理 TCP 协议。使用此选项可以绕过指定的 IP 范围,让其他协议通过
DNS覆写(dns-server):使用普通 DNS 或加密 DNS(如 doh doq dot 等)覆盖默认的系统 DNS。DNS 覆写支持同时添加多个地址,Shadowrocket 采用并行查询的方式进行解析请求,最先返回的结果将被采用。有些 dns over https 支持 http3,所以将会尝试查询,如果支持就切换到 http3,可在 doh链接 后面加上 #no-h3 关闭。doh 强制通过 h3 查询的写法是将 https 改成 h3,如h3://dns.alidns.com/dns-query。其他示例或写法参见:修改DNS、DNS-over-PROXY
备用DNS(fallback-dns-server):当覆写 DNS 查询失败或查询时间超过2秒,Shadowrocket 会自动回退备用 DNS。如需指定多个 DNS,可用逗号分隔。system 表示回退到系统 DNS,清空备用 DNS 等于将其设置为 system
启用IPv6支持(ipv6):false 表示不启用,true 表示启用。即使不启用此选项,当本地网络环境支持 IPv6,并且节点域名支持 IPv6 解析,Shadowrocket 也会使用节点的 IPv6 地址进行访问。解决方法是关闭节点域名的 IPv6 解析,或者在配置文件的 [Host] 项目下为节点域名指定 IP 地址。在部分地区启用 IPv6 支持可能存在 微信转圈 之类的故障
首选IPv6(prefer-ipv6):优先向 IPv6 的 DNS 服务器查询 AAAA 记录,优先使用 AAAA 记录。false 表示不启用
私有IP应答(private-ip-answer):如果不启用该选项,域名解析返回私有 IP,Shadowrocket 会认为该域名被劫持而强制使用代理
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)发送请求,您可以使用此选项来劫持查询
包含配置(include):表示当前配置包含另一个配置的内容,当前配置的优先级高于被包含配置。该选项是对配置建立包含关系,以满足同时使用多个配置的需求
💡 dns-direct-system:直连的域名类规则使用系统 DNS 进行查询。false 表示不启用
💡 icmp-auto-reply:ping 数据包自动回复
💡 always-reject-url-rewrite:不开启时,「重写的REJECT策略」默认只有在配置模式下生效。开启后,可以令该策略在其他全局路由模式下都生效
💡 dns-direct-fallback-proxy:直连域名解析失败后使用代理。false 表示不启用
💡 udp-policy-not-supported-behaviour:当 UDP 流量匹配到规则里不支持 UDP 转发的节点策略时重新选择回退行为,可选行为包括 DIRECT REJECT。DIRECT 表示直连转发 UDP 流量,REJECT 表示拒绝转发 UDP 流量
💡 stun-response-ip:此选项包含两个命令:stun-response-ip 和 stun-response-ipv6。该选项允许返回一个虚假的IP地址,如 stun-response-ip=1.1.1.1 stun-response-ipv6=::1,目的是防止真实IP地址泄漏,提高 WebRTC 的隐私和安全性。使用此命令将忽略软件设置选项内的 禁用STUN 的启用状态
💡 compatibility-mode:网络兼容模式。0 > 禁用;1 > Proxy with Loopback Address;2 > Proxy Only;3 > TUN Only。当参数的值设定为3时的效果等同于启用 Tun模式:设置 > 代理 > 代理类型 > None
💡 always-ip-address:强制所有域名使用本地 DNS 解析。设置为 true 表示启用。(此参数为隐藏属性,建议谨慎设置,可能导致相关域名的 CDN 失效。)
💡 proxy-dns-server:通过 proxy-dns-server = 参数来使用特定 DNS 解析所有节点域名。若未设置此参数,节点域名默认使用 dns-server 进行解析,对于 DNS-over-PROXY 则使用系统 DNS 解析
带💡符号的参数只能通过配置文件的纯文本模式进行设置,没有 UI 操作选项
添加规则
在 Shadowrocket 中,"规则"是指用来决定哪些网络请求应该走代理、哪些请求应该直接连接互联网的规则集合。规则通常是基于用户的需求来配置 规则策略,目的是实现对流量的精细控制。软件对规则集的识别不受文件后缀的影响,是以规则集的内容为识别标准
点击配置文件的 ⓘ 图标 > 规则 > 右上角 ➕,根据需求选择 规则类型 和 规则策略,填写规则内容
数据 > 代理 > 启用日志记录,产生网络活动后回到该页面,从最近的日志中查看网络活动记录,点击任一记录查看详情,点击右上角 ••• 选择类型添加规则
规则匹配需要着重注意 规则的优先级 顺序
规则优先级
规则的匹配是从上到下逐条匹配的,一旦匹配到某条规则,Shadowrocket 就会停止继续匹配。因此,规则的顺序非常重要,优先级高的规则应该放在前面
模块中的规则优先于配置文件
上面的规则优先于下面的规则
域名类的规则优先于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-WILDCARD:匹配请求域名,支持使用通配符 *、?
如 DOMAIN-WILDCARD,a*c.example*.com,DIRECT 可以匹配到 abc.example123.com、aqwec.example456.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覆写
点击配置文件 ⓘ 图标 > 通用 > DNS 覆写
支持普通 DNS 或加密 DNS(如 DoH、DoQ、DoT 等)。填 system 表示使用系统 DNS。也支持使用 通过代理转发 DNS 查询请求
普通 DNS 示例
dns-server = 223.5.5.5,119.29.29.29
加密 DNS 示例
1、DNS-over-HTTPS(DoH)
dns-server = https://dns.alidns.com/dns-query
2、DNS-over-HTTP/3(DoH3)
dns-server = h3://dns.alidns.com/dns-query
3、DNS-over-QUIC(DoQ)
dns-server = quic://223.5.5.5
4、DNS-over-TLS(DoT)
dns-server = tls://223.5.5.5
5、DNS-over-PROXY
备用DNS
当覆写的 DNS 查询失败或查询时间超过2秒后回退备用 DNS 进行查询。如需指定多个 DNS,可用逗号分隔。填写 system 或者留空表示可回退到系统 DNS
DNS-over-PROXY
通过代理转发 DNS 查询请求
proxy
支持使用 默认节点 转发 DNS 查询请求,有以下两种写法:
dns-server=https://dns.google/dns-query#proxy
dns-server=https://dns.google/dns-query#proxy=proxy
proxy=name
支持使用 指定节点 转发 DNS 查询请求,需要注意此处的代理名称仅支持 URL 编码,以 香港 01 示例:
dns-server=https://dns.google/dns-query#proxy=%E9%A6%99%E6%B8%AF%2001
此处指定的节点若填写不规范会自动回退至默认节点
ecs=子网范围
ecs 参数用于设置 EDNS Client Subnet (ECS),向 DNS 服务器传递客户端的子网信息。ECS 允许 DNS 服务器根据指定的子网范围(而非实际客户端 IP)来返回最优结果
示例:
dns-server=https://dns.google/dns-query#ecs=120.76.0.0/14|2620:149:af0::10/56&ecs-override=true
ecs-override=true
ecs 参数的强制覆盖。即使客户端的实际 IP 提供了不同的地理位置,查询会强制使用 ecs 指定的子网范围
示例:
dns-server=https://dns.google/dns-query#proxy=name&ecs=1.1.0.0/14|2620:149:af0::10/56&ecs-override=true
no-resolve的作用
当域名请求遇到 IP 类规则时,Shadowrocket 会向本地DNS服务器发送查询请求,以判断主机 IP 是否匹配规则
若IP类规则加 no-resolve,则域名请求将会跳过此规则,不触发本地 DNS 查询。如:
IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
代理分组
代理分组 也可称之为 策略组,是用来 灵活管理和切换不同代理节点、自动分流网络请求 的一种核心功能。它的作用类似于一个 智能路由系统,可以根据设定的规则将不同的流量导向不同的代理节点或行为。简单来说,它就是一个 容器,里面可以包含多个代理节点或其他代理分组。你可以根据需求通过 规则 → 代理分组 → 代理节点 的路径手动或自动切换。代理分组支持的类型可以查看:代理分组类型
点击配置文件的 ⓘ 图标 > 代理分组 > 右上角 ➕。填写名称,根据需求选择 代理分组类型,通过 正则 匹配策略,或者从策略输入框后面的 ••• 手动添加策略,保存
策略是规则的组成部分,创建的代理分组只有放到规则里才能发挥作用
进入对应规则的详情页,点击策略选项,从列表中选择所需的代理分组,保存
代理分组中可以包含其他代理分组,形成层级结构,但需要注意各级代理分组的 类型
代理分组内的右上角设有 测试 按钮,点击 测试 可对当前分组内的节点进行延迟测试
代理分组下方设有 测试并选择最快服务器 选项
该选项开启后,将在手动点击右上角的 测试 后自动选择并使用延迟最低的节点
该选项的开启或关闭对全部代理分组同时生效
该选项仅存在于版本号大于等于 2.2.65 (2604) 的软件上
快捷进入代理分组
首页下拉,可以快捷进入代理分组界面
首页本地节点上方设有指示牌图标,点击该图标可以快捷进入代理分组界面,软件版本需大于等于 2.2.65 (2614)
代理分组类型
select:允许用户手动选择一个子策略,可以指定其他代理分组或代理服务器
url-test:根据设定的自动测试周期和结果自动切换延迟最低的节点。此类型受该类型的相关选项制约。此类型不推荐包含其他代理分组
fallback:节点不可用时自动切换其他可用节点,可用节点范围被上次自动测试结果所限。此类型不推荐包含其他代理分组
load-balance:不同规则的请求使用分组里的不同节点进行 负载均衡,相同的域名会使用同一个节点。此类型不推荐包含其他代理分组
random:随机使用分组里的不同节点进行连接,相同的域名可能使用不同的节点,该类型也可以用作 负载均衡。此类型不推荐包含其他代理分组
负载均衡
代理分组类型 中的 load-balance、random 表示将连接请求随机使用分组里的节点进行连接,能够尽可能将流量平均分配给所有子策略或代理。其中 load-balance 会将相同的域名使用同一个节点进行连接,random 会将所有请求使用随机节点进行连接,不区分是否是同一个域名
使用负载均衡的方法:
点击配置文件的 ⓘ 图标 > 代理分组 > 右上角 ➕,类型选择 load-balance 或者 random
规则集URL
配置 > 配置文件 > 编辑配置 > 规则集 URL
当前使用的所有远程规则资源的展示页面,其后显示的数字为当前生效的数量和总共包含的数量。进入后所显示的 ✅ 表示当前规则状态生效,❎ 表示当前规则状态失效。点击相应地址可重新拉取并弹出状态提示,但不会重新编译更新配置文件,点击 使用配置 / 编译配置,可以对当前所有 URL 进行更新并重新编译更新配置文件
脚本URL
配置 > 配置文件 > 编辑配置 > 脚本 URL
当前使用的所有远程脚本资源的展示页面,其后显示的数字为当前生效的数量和总共包含的数量。进入后所显示的 ✅ 表示当前脚本状态生效,❎ 表示当前脚本状态失效。点击相应地址可重新拉取并弹出状态提示,但不会重新编译更新配置文件,点击 使用配置 / 编译配置,可以对当前所有 URL 进行更新并重新编译更新配置文件
复制配置文件
配置 > 点击配置文件 > 编辑配置 > 复制
点击该选项可将当前配置生成一份备份并命名为 *-copy.conf
替换策略
配置 > 点击配置文件 > 编辑配置 > 替换策略
点击查找右侧的 ⓘ 图标选择准备替换的策略,或输入准备替换的策略
点击替换右侧的 ⓘ 图标选择欲替换成的策略,或输入欲替换成的策略
点击完成后替换完成
测试规则
配置 > 测试规则
测试当前生效配置包含的规则
配置 > 点击配置文件 > 编辑配置 > 测试规则
仅测试该配置文件所包含的规则
Hosts
主要功能
将特定域名映射到指定 IP 地址,绕过 DNS 解析,直接控制域名到 IP 的对应关系
将特定域名指定特定的 DNS 服务器进行解析
常见用途
屏蔽广告/追踪域名:将广告域名解析到无效 IP(如 0.0.0.0 或 127.0.0.1),使其无法加载
绕过 DNS 污染:强制将某些域名指向正确的 IP,避免被劫持
本地开发调试:将测试域名指向本地服务器 IP
加速访问:手动指定更快的 CDN IP
URL重写
功能作用
修改 HTTP(S) 请求/响应,动态拦截并修改请求的 URL 或内容
常见用途
去广告:将广告请求重定向到空地址或本地
反追踪:移除 URL 中的跟踪参数
路径修正:调整 API 请求路径以适配不同服务器
调试工具:将生产环境请求转发到测试服务器
头部重写
支持请求/响应头部重写功能,包含 del、add、replace、replace-regex 几种操作
类型:
http-request:作用于请求头
http-response:作用于响应头
行为:
header-del:从请求头或响应头中删除指定字段
header-add:向请求头或响应头中添加字段及其对应的值
header-replace:在请求头或响应头中替换指定字段的值
header-replace-regex:使用正则表达式在请求头或响应头中替换字段的值
表达式:
正则表达式用于匹配目标网站的 URL
常用字段:
Content-Type、User-Agent、Accept-Language、Authorization、Host、Referer、Cookie、X-Forwarded-For、Location 等
正文重写
支持请求体/响应体重写功能
类型:
http-request:作用于请求体
http-response:作用于响应体
http-request-jq:使用 jq 语法处理请求体
http-response-jq:使用 jq 语法处理响应体
表达式:
正则表达式用于匹配目标网站的 URL
HTTPS解密
对正在使用的配置开启 HTTPS 解密才能使包含 MITM 的模块完整生效,不包含 MITM 的模块除外
打开HTTPS解密方法:
点击配置文件的 ⓘ 图标 > HTTPS 解密 > 证书 > 生成新的 CA 证书 > 安装证书
系统设置 > 已下载描述文件 > 安装
系统设置 > 通用 > 关于本机 > 证书信任设置 > 开启对应 Shadowrocket 证书信任
HTTPS解密仅对启用此功能的配置文件生效,若切换或更换配置文件需要对新配置文件重新 开启解密,为避免重复安装证书可使用 证书模块
脚本
使用 JavaScript 拓展 Shadowrocket 的功能,规则示例如下:
[Script]
script = type=rule,script-path=rule.js
模块
模块是指为 Shadowrocket 提供额外功能的插件或者扩展项,一般是以增强或自定义软件的使用体验为出发点。模块的写法与 配置文件 相同,且模块的 规则优先级 高于配置文件。一般情况下,模块仅包含完整配置文件格式中的特定部分,以实现特定的特殊效果且不影响配置文件的其他功能。用户可以在模块里另外设置 通用参数 以及添加 规则、Hosts、URL重写、证书内容、解密主机名、脚本 等内容
下载远程模块
配置 > 模块 > 右上角 ➕ > 填写链接 > 下载
本地新建模块
配置 > 模块 > 新建模块 > 编辑后保存
模块 [MITM] 部分需要加 %APPEND%,表示把内容插入到配置中,不加时会覆盖配置中对应内容,并影响其他模块功能。域名默认仅解密443端口,若域名使用非标端口号需要此处写明
hostname = %APPEND% 主机名
备注
对正在使用的配置 开启 HTTPS 解密 或使用 证书模块,才能使包含 MITM 的模块完整生效,不包含 MITM 的模块除外
因模块可能包含不同规则,所以大多数模块仅在 全局路由 设为配置时生效,不包含规则类的模块除外
iOS 15 之后,NE的内存限制由 15 MB 增加到了 50 MB,低版本系统可能因内存不足导致 模块失效 或 VPN 自动断开
若出现以下问题可以查看相应说明:模块消失、模块失效
编辑参数
Shadowrocket 的 编辑参数 / 传递参数 功能,是用于对请求或响应中的参数进行动态修改的一个高级功能,可用于配合模块中的 URL Rewrite、Script、MITM 等代码使用,目的是实现对网络请求的精准控制与定制化处理
示例:
#!name=证书模块
#!desc=需要以编辑参数的方式启用并填写完整
#!arguments=证书模块:false, 证书内容:此处粘贴有效的证书内容, 证书密码:Shadowrocket
#!arguments-desc=证书模块:启用并填写证书内容方可生效\n\n证书内容:粘贴自有效证书\n\n证书密码:若默认密码是Shadowrocket则可不动
[MITM]
enable={{{证书模块}}}
ca-passphrase={{{证书密码}}}
ca-p12={{{证书内容}}}
证书模块
在实际使用软件时如果需要切换或更换 配置文件,且原配置已开启过 HTTPS 解密,则需要对新的配置文件重新安装并信任证书,才可使解密继续生效。为免除重复安装 CA 证书,可以选择使用证书模块。证书模块是一组手动添加已生效解密证书的模块,由于模块的优先级高于配置文件,可以使解密状态不受更换配置的影响。其原理参见:模块
点击「已安装证书的配置文件」后面的 ⓘ 图标 > HTTPS 解密 > 证书后面的 ⓘ 图标 > 复制
新建模块:
软件 配置 > 模块 > 新建模块,粘贴并自行修改以下内容:
#!name=证书(名字可更改)
[MITM]
enable=true
# 确认下方 “ca-passphrase=” 后面填写的「已安装证书的配置文件」的证书密码是否正确,默认密码是:Shadowrocket
ca-passphrase=Shadowrocket
# 在下方 “ca-p12=” 后面粘贴证书内容
ca-p12=
原本是可以省略 ca-passphrase 这行参数。但由于引用的配置文件可能已经包含了证书密码,且证书密码可能不是 Shadowrocket,为防止出错,因此才增加 ca-passphrase 参数来覆盖引用的配置文件的证书密码
enable=true 忽略当前配置文件内的HTTPS解密状态,使用该模块的证书进行HTTPS解密
身份证书密码
Shadowrocket 安装 CA 证书时,如果遇到「输入证书 身份证书 的密码」页面,可以尝试输入:Shadowrocket
编写本地节点
Shadowrocket 支持在 配置文件 中编写本地节点,但该操作方式仅是为了兼容部分其他类型的配置文件,不能当作 Shadowrocket 添加节点 的优先选择
Shadowsocks类型
节点名称=ss,地址,端口,password=密码,其他参数(如method=aes-256-cfb,obfs=websocket,plugin=none)
Vmess类型
节点名称=vmess,地址,端口,password=密码,其他参数(如alterId=0,method=auto,obfs=websocket,tfo=1)
VLESS类型
节点名称=vless,地址,端口,password=密码,tls=true,其他参数(如obfs=websocket,peer=example.com)
HTTP/HTTPS/Socks5/Socks5 Over TLS等类型
节点名称=http,地址,端口,用户,密码 节点名称=https,地址,端口,用户,密码 节点名称=socks5,地址,端口,用户,密码 节点名称=socks5-tls,地址,端口,用户,密码,skip-common-name-verify=true
Trojan类型
节点名称=trojan,地址,端口,password=密码,其他参数(如allowInsecure=1,peer=example.com)
Hysteria类型
节点名称=hysteria,地址,端口,auth=密码,obfsParam=混淆,protocol=协议,udp=1,其他参数(如peer=example.com,alpn=h2,upmbps=100,downmbps=100)
Hysteria2类型
节点名称=hysteria2,地址,端口,auth=密码,obfsParam=混淆,udp=1,其他参数(如peer=example.com,alpn=h3)
TUIC类型
节点名称=tuic,地址,端口,password=密码,udp=1,其他参数(如user=uuid值,peer=example.com,alpn=h2)
Juicity类型
节点名称=juicity,地址,端口,password=密码,udp=1,其他参数(如user=uuid值,peer=example.com,alpn=h2)
WireGuard类型
节点名称=wireguard,地址,端口,privateKey=私钥,publicKey=公钥,ip=子网IP,udp=1,其他参数(如dns=1.1.1.1,mtu=1350,keepalive=40,reserved=1/2/3)
Snell v2 类型
节点名称=snell,地址,端口,password=密码,udp=1,其他参数(如obfs=http,obfs-host=example.com,obfs-uri=/abc)
数据页面
代理日志
代理日志 记录了网络活动过程中 Shadowrocket 处理请求的具体信息
数据 > 代理 > 启用日志记录
产生网络活动时,返回 数据 > 代理 页面查看日志文件
每条记录包含信息:
请求 URL
请求匹配的规则策略
请求传输协议
请求发送时间
记录显示 MITM,表示请求域名已启用解密
点击每条记录查看详情,详情页右上角 ••• 可以选择类型添加规则
数据 > 代理 页面,右上角 ••• 可以手动删除所有日志文件。日志文件页面,右上角 ••• 可以选择导出
数据 > 自动删除 > 打开,程序会自动删除7天前的日志文件。Shadowrocket 已连接状态,手动删除将保留最新的日志文件,未连接时,手动删除所有
DNS日志
DNS 日志 记录了网络活动过程中 DNS 服务器处理域名查询请求的具体信息
数据 > 代理 > DNS > 启用日志记录
产生网络活动时,返回 数据 > DNS 页面查看日志文件
每条记录包含信息:
请求域名
查询结果
DNS 响应时间
处理请求的 DNS
旗帜是根据返回IP地址的地理位置信息自动显示
覆写 DNS 不可用或未返回有效响应时,将回退至 备用 DNS 来查询域名
记录信息中如果响应时间超过2秒,意味着系统正在触发回退机制
iCloud自动同步
Shadowrocket 支持将服务器节点、配置文件、模块和脚本文件等数据类型自动同步至 iCloud 云端
数据 > iCloud > 自动同步 > 打开
设备 设置 > 账号 > iCloud,确保使用 iCloud 的 APP 列表中已经开启 Shadowrocket 和 iCloud 云盘 项目,否则会出现 iCloud 自动同步失败 的提示
同步成功时,点击 iCloud 文件 可以看到存储云端的配置文件
文件app > iCloud 云盘 > Shadowrocket,可以看到存储云端的所有数据。其中的 shadowrocket.v2.model 文件包含服务器节点的配置信息
iCloud 服务中断、网络连接问题以及其他复杂原因可能导致 iCloud 同步异常,这种情况建议选择手动删除 iCloud 备份并重新同步数据
如果用户删除首页某个节点后发现它又自动恢复,可以尝试以下解决方法:数据 > iCloud,服务器节点下面点击删除 iCloud 备份和同步服务器节点
添加的 场景 和 分组 不属于 iCloud 自动同步的数据类型,需要手动备份下载,才能在设备间共享数据
节点数据管理
导出节点:将首页的所有节点数据整合成一个 JSON 文件,选择存储在本地或云端,也可以通过其他共享方式传输文件
导入节点:将存储在本地或云端 JSON 文件中的节点数据解析并添加到首页
删除本地节点:一键删除首页所有节点数据
流量统计信息
统计 是 Shadowrocket 开启连接后接管设备所有网络传输的流量统计信息
数据 > 统计
统计包含信息:
开始时间
连接时间
Wi-Fi 和蜂窝数据的上下行流量
流量分流的柱形图统计
默认记录所有流量统计信息。打开 启用存档 将会单独记录每一次连接的流量统计信息,关闭首页连接后可以从归档查看
点击右上角 ••• 可以重置统计信息
首页 订阅 支持显示流量统计信息
方法一,订阅链接添加响应头:subscription-userinfo: upload=xxx; download=xxx; total=xxx; expire=xxx
方法二,在订阅链接指向的纯文本 base64 编码前添加 STATUS=xxx 或 REMARKS=xxx 字段,这样订阅名称下方就能显示自定义信息。如果没有添加字段或者隐藏用户代理字符串,可能导致不返回相关统计信息,只显示时间
设置页面
延迟测试方法
详见词条 连通性测试
小组件
设置 > 小组件
服务器节点:根据需求添加6个常用节点,点击 Today 小组件 右上角的 > 可以展开查看,方便手动切换节点
显示Ping值:启用后,长按 Today小组件 中心位置可以测试 服务器节点 连通性并显示延迟数字
根据Ping排序:启用后,长按 Today小组件 中心位置可以测试 服务器节点 连通性并依延迟大小自动排序
添加小组件方法:
Today 小组件
负一屏 > 编辑 > 自定 > 点击 Shadowrocket 旁边的 添加 按钮 ➕。(系统要求低于 iOS 18)
屏幕小组件
长按屏幕 > 左上角 ➕ > Shadowrocket,选择合适类型添加。(系统要求≥ iOS 17)
更新 Shadowrocket 后,如果找不到小组件添加按钮,请尝试重启手机。如果小组件显示 无法加载,请尝试以下方法:
系统设置 > 通用 > 语言与地区,添加或删除一种其他语言
按需求连接
始终开启
VPN 保持连接状态。意外断开 或者重启设备,也会自动连接
脚本 / 模块 / 解密 等需求比较多时建议开启
按需求连接
根据添加的 按需求规则 自动切换 VPN 状态。默认规则是任意网络类型下保持连接状态,相当于 始终开启
按需求规则:
当访问列表中的 域名 时,系统会向 Shadowrocket 发送请求,如果响应成功,VPN 自动连接
网络中指定的 DNS(通常认为是网络运营商/Wi-Fi路由器提供的 DNS 服务器地址)与列表任一内容相匹配时,VPN 自动连接或断开
SSIDS 填写需要匹配的 Wi-Fi 名称
VPN 连接行为可以通过 网络类型 / 域名 / DNS 条件触发
VPN 断开行为可以通过 网络类型 / DNS 条件触发,不能通过 域名 条件触发
从上到下依次匹配添加的 按需求规则
添加 按需求规则 后,打开 按需求连接 开关,规则才能生效
同时打开 始终开启 和 按需求连接,只有 始终开启 选项能够生效
睡眠时断开
当设备进入睡眠状态,VPN 自动断开连接
Shadowrocket 响应系统发送的睡眠指令才会断开连接,有时候熄屏的系统未必处于睡眠状态
显示断开信息
显示 VPN 断开连接的通知信息
隧道
强制路由
如果开启,这个隧道的路由规则将优先于任何本地自定义的路由,默认是关闭状态
包括所有网络
启用后系统会通过隧道进行路由所有的网络流量,但为维持预期设备功能所必需的指定系统服务的流量除外
包括本地网络:如果开启,所有发送到本地网络的流量都将包含在隧道中,如 AirPlay、AirDrop 和 CarPlay 的网络连接
包括APNs:如果开启,苹果的 Apple Push Notification 推送通知服务(APN)的网络流量将包含在隧道中
包括蜂窝服务:如果开启,来自蜂窝服务的互联网可路由网络流量(VoLTE、Wi-Fi通话、IMS、MMS、视觉语音信箱等)将包含在隧道中。
兼容模式
当前设备与家庭中枢设备处于同一局域网下且开启代理时,如果出现无法正常使用 “家庭” 应用查看流式传输的 HomeKit 实况影像时,可以尝试开启此项以提高相应的兼容性
前置代理
设置 > 代理 > 前置代理
「前置代理」表示所有流量先通过 HTTP/SOCKS5 代理转发,再根据配置规则向节点服务器发送请求
代理共享
代理共享指的是将你当前配置的代理设置分享给其他设备使用。通过代理共享,你可以把自己配置好的代理服务器(如Shadowsocks、Vmess等)通过局域网或者热点网络的方式让其他设备也能够通过相同的代理设置访问互联网
在局域网条件下
A设备:设置 > 代理 > 代理共享 > 启用共享
B设备:系统设置 > WiFi > WiFi 名称后面的 ⓘ 图标 > HTTP代理 > 手动输入Shadowrocket「代理共享」的IP和端口
使用热点条件下
A设备:开启热点
B设备:连接热点
然后按照局域网条件下方法进行设置
此处需要注意下操作顺序,原理是连接设备热点后先形成局域网环境,然后按照局域网条件进行设置
备注
当 iOS 设备开启代理共享时,或需保持该设备屏幕常亮或连接充电器,以防意外退出
如果配置文件开启了 HTTPS 解密,请确保其他设备已安装并信任相同的证书才能正常使用。当其他设备不需要使用解密功能时,可以在“代理共享”页面关闭「HTTPS解密」开关
使用代理共享时需要对应的 APP 打开系统设置中的“本地网络”开关
Telegram 可能不被系统代理接管,可单独在应用内添加 SOCKS5 代理
代理类型
Shadowrocket 代理类型:
设置 > 代理 > 代理类型
HTTP:系统代理模式,对于不支持的程序会交给 TUN 接管网络连接
None:TUN 模式,全部网络请求都将通过 TUN 接口进行处理。效果等同于 配置文件 内设置 compatibility-mode=3
开启UDP转发
设置 > UDP > 启用转发 > 打开
首页 > 订阅后面的 ⓘ 图标 > UDP转发 > 打开
首页 > 节点后面的 ⓘ 图标 > UDP转发 > 打开
禁用STUN
设置 > UDP > 禁用STUN > 打开
禁用 STUN(Session Traversal Utilities for NAT) 的意思是完全阻止 WebRTC 通过 STUN 服务器获取公网 IP,从而彻底杜绝 WebRTC IP 泄露的问题
若在配置文件 通用参数 中使用 stun-response-ip 的相关命令,则此处的开关状态将被忽略
隐藏VPN图标
设置 > 排除路由 0.0.0.0/31 > 打开
注意:该选项其实是利用系统漏洞实现的,打开开关可能会导致网络异常,如遇问题请关闭此项
GEOIP数据库
设置 > GeoLite2 数据库
方法一
填写 MaxMind官网 注册的账户 ID 和密钥,点击下方的 更新 按钮
方法二
关注 GitHub 的 IP 数据库项目,复制 mmdb 格式的下载链接,粘贴在国家/ASN 对应的 URL 位置,点击 更新 按钮。当点击 重置 时,可以恢复为系统自带的数据库
Loyalsoldier 的 IP 数据库:
https://raw.githubusercontent.com/Loyalsoldier/geoip/release/Country.mmdb
Hackl0us 的 IP 数据库:
https://github.com/Hackl0us/GeoIP2-CN/raw/release/Country.mmdb
Masaiki 的 IP 数据库:
https://github.com/Masaiki/GeoIP2-CN/raw/release/Country.mmdb
P3TERX 的 ASN 数据库:
https://github.com/P3TERX/GeoLite.mmdb/raw/download/GeoLite2-ASN.mmdb
自动更新
现阶段软件的自动更新包含配置文件自动更新、服务器订阅自动更新以及 GeoLite2 数据库自动更新。需要在 系统设置 > 通用 > 后台App刷新 中为 Shadowrocket 启用后台刷新
配置:根据设置自动 更新配置 以及当前所用的 规则集、脚本 等远程资源。
自动后台更新:开启后可根据设置自动更新配置文件
更新提醒:开启后,更新时会弹出相应提醒。需要开启设备推送通知
更新间隔:单位为 天,可选 1-7 天
若当前配置文件是不含更新地址的本地配置文件,则自动更新功能仅会更新当前所用的规则集、脚本等远程资源,参见:使用配置 / 编译配置、规则集URL、脚本URL
规则集/脚本资源手动更新方法:点击 配置文件 > 使用配置 / 编译配置
需要注意:自动更新配置会覆盖自定义设置,参见 更新配置
订阅:参见此处
GeoLite2 数据库:包含自动后台更新选项、更新提醒选项、更新间隔选项,其中更新间隔单位为 天 。其他设置 参见此处
Tip
若当前配置是远程配置,希望定期更新远程资源,且不希望自定义设置被覆盖或丢失时,可参考以下两种方法:
进入 纯文本编辑 删除或注释掉 update-url = *,然后再使用自动更新功能
使用 扩展配置/包含配置 功能后,再使用自动更新功能
温和策略机制
当使用温和策略机制时,切换策略不会打断之前与之相关的TCP连接,仅会对之后的网络请求使用新的策略进行连接
当不使用该功能机制时,切换策略会打断与该策略相关的旧有 TCP 连接,若继续使用则使用新的策略重新连接
例如:打断会使旧有策略相关的连接所进行的下载任务中断
其他问题
自动切换节点
自动切换延迟低的节点:
方法一
首页 > 全局路由 > 分组 > 简单模式 > 打开
方法二
点击配置文件的 ⓘ 图标 > 代理分组 > 右上角 ➕ > 类型 url-test
备注
如果节点不稳定,可同时 开启回退
订阅异常
添加/更新订阅时异常的原因:
forbidden 表示订阅被重置或令牌 token 错误
not found 表示订阅路径或链接信息错误
service unavailable 表示域名信息错误或域名被运营商屏蔽
SSL 错误 表示无法建立与该服务器的安全连接
添加/更新订阅链接时,如果发生异常,可以尝试的解决方法:
全局路由选代理,使用另外一个节点来添加/更新订阅链接
切换网络后再添加/更新订阅链接
检查订阅链接是否错误或失效
节点旗帜
节点优先根据备注名称匹配旗帜,如果匹配不成功,由节点地址解析出 IP,通过数据库判断该IP的国家或地区,然后显示对应的旗帜
节点后面的 ⓘ 图标 > 地址栏的图标,可以手动修改旗帜
订阅后面的 ⓘ 图标 > 订阅界面的 筛选 输入框,输入相关脚本能批量修改旗帜,参考:订阅节点筛选
如果把旗帜的 Emoji 放在节点备注开头,保存时会自动显示对应的旗帜,且不显示开头的 Emoji
节点感叹号
节点显示感叹号 ⚠ 的原因:
您的节点使用了 TLS,地址是 IP,却没有设 SNI
这不是正确的服务器设置,但为了可以正常连接,Shadowrocket 会主动开启 允许不安全。允许不安全 将跳过TLS证书验证,这将导致一些安全问题。如果您使用自签名证书,请将证书导入系统并信任它,否则请及时续订服务器端证书,以防止证书过期。在 2.2.23 等特定版本中,该选项可能默认为关闭状态
微信转圈
如果使用 Shadowrocket 时微信一直显示 连接中/收取中,可以尝试的解决方法:
微信分流走直连
点击配置文件的 ⓘ 图标 > 通用 > 启用IPv6 > 关闭
本质上该问题是由于现阶段使用的 IPv6 分流并不完善,可能造成国内的部分 IPv6 地址被错误地分流至代理隧道造成的
模块消失
模块页面已经开启 保存到iCloud,如果出现模块消失的问题,请检查:
系统设置 > Apple ID > iCloud > 使用iCloud的APP中,确保Shadowrocket/iCloud云盘已经打开同步
文件app > iCloud云盘 > Shadowrocket,确定其中包含 Modules 和 Script 两个子文件夹
文件app > iCloud云盘 > Shadowrocket > Modules,如果iCloud的本地缓存被清理,此时模块文件是未下载状态,请等待自动下载或手动下载
模块失效
切换配置文件需要重新 开启解密,为避免解密失效可使用 证书模块
若 模块 确认有效且解密设置无误时存在模块失效的情况,则可能是加载资源时因内存、网络等原因导致部分内容出现漏编译的情况。尝试对当前配置点击 使用配置 / 编译配置,以使远程资源进行重新拉取,一般可恢复正常
VPN自动断开
因系统版本低于 iOS 15、处理复杂请求、加解密数据、运行脚本等因素或多种因素相互作用之下可能导致 NE 内存占用过高,从而造成 VPN 自动断开,解决方法:
设置 > 按需求连接 > 始终开启 > 启用
检测代理
如果在使用 Shadowrocket 的时候,遇到某些 APP 提示需关闭代理才能使用,可以在 Shadowrocket > 设置 > 代理类型 > 选择 None
该设置将使用 TUN 模式 接管代理,能很大程度上缓解上述情况,但对于某些直接检测系统 VPN 状态的 APP 无效
定位权限
iOS 系统的要求,开启定位权限才能获取 Wi-Fi 名称
如果不需要在 Shadowrocket 里看到 Wi-Fi 信息,那么就可以不用开启
编译原因
Shadowrocket 2.2.29 之前的版本是使用 Xcode 13.2.1 编译的
2023年4月份以后,苹果官方要求开发者在提交应用到 App Store 时必须至少使用 Xcode 14 编译,所以 iOS12 以下系统无法使用
Shadowrocket 在版本 2.2.30 之后设置最低安装要求 iOS12,然后停止 2.2.29 版本,iOS 低版本用户可以安装 2.2.28 版本
URL-Schemes
请使用相应内容直接替换代码中的大括号及其内容
启动 VPN 隧道
shadowrocket://connect
shadowrocket://open
停止 VPN 隧道
shadowrocket://disconnect
shadowrocket://close
切换 VPN 开关状态
shadowrocket://toggle
使用特定节点
shadowrocket://select?s={节点名称}
添加 订阅/节点
shadowrocket://add/{url}
安装/使用 配置
shadowrocket://config/add/{url}
安装/使用 模块
shadowrocket://install?module={url}
切换全局路由(代理/配置/直连/场景)
shadowrocket://route/proxy
shadowrocket://route/config
shadowrocket://route/direct
shadowrocket://route/scene
安装/使用 配色
shadowrocket://color?{配色设置}