Shadowrocket 新手教程:节点/规则/模块配置
Shadowrocket 装完后主界面空空荡荡——没有节点列表、没有规则、没有模块。本篇从「右上角 +」开始,顺着添加订阅节点、配置分流规则、导入社区模块三条线,写清每一步的 UI 路径和最容易点错的位置。适合刚花 $2.99 下载完还没连上过的 iPhone 用户。
操作步骤速查
添加订阅并拉取节点
打开 Shadowrocket → 点右上角 + → 第一行 Type 点进去选 Subscribe(不是默认的 Local)→ 第二行 URL 粘贴完整的订阅链接 → 第三行 Alias 填一个自己能识别的备注(如「主订阅」,建议英文或拼音避免显示不全)→ 点右上角「完成」。回到主页,点刚添加的订阅条目进入详情 → 点「更新」按钮 → 等待解析完成,详情页底部显示节点数量和更新时间。更新成功后返回主页,本地节点列表中出现了按名称排序的节点,每条节点显示协议类型和延迟。
预期结果:订阅详情页显示节点数量≥1,更新时间显示当前时间。主页本地节点列表不为空,每条节点名称、协议类型可见。
添加订阅时最容易犯的错误是忘记把 Type 从 Local 改成 Subscribe。Local 类型建出来的是一个静态的本地节点(没有更新按钮),不是订阅。如果你已经用 Local 保存了,左滑那条条目删除,重新按上面的步骤选 Subscribe。另外订阅链接如果在微信里长按拷贝,经常只复制前半截——粘贴到备忘录确认有 https:// 开头和 ?token= 结尾的完整 URL,再去 Shadowrocket 粘贴。
配置路由规则:国内直连、国外代理
Shadowrocket 底部「配置」标签 → 点当前使用的配置文件右侧的 ⓘ 进入编辑页 → 滑动到「规则」(Rules)区域 → 点「添加规则」→ 类型选 GEOIP → 选项选 CN → 策略选 DIRECT → 保存。再加第二条规则:类型选 FINAL → 策略选 PROXY → 保存。这两条规则的含义:GEOIP 判定的中国 IP 走直连,所有没命中上面规则的流量(兜底)走代理。调整规则顺序:长按右侧三条横线拖动,确保 GEOIP,CN,DIRECT 排在 FINAL,PROXY 上面——Shadowrocket 从上到下匹配,命中第一条就停止。
预期结果:规则列表中 GEOIP,CN,DIRECT 在 FINAL,PROXY 之上。开启连接后访问 http://ip.sb 能看到代理 IP,访问 https://www.baidu.com 速度快且 IP 归属地显示本地宽带 IP。
只靠两条规则不够精细的——比如 Youku/Tencent 视频类 App 部分 CDN 节点在海外但仍想走直连。后续可以通过 DOMAIN-SUFFIX 规则把已知的国内服务域名精确设为 DIRECT,排在 GEOIP 规则之前。Shadowrocket 的规则是纯文本,可以直接在配置文件编辑页手动写 DOMAIN-SUFFIX,youku.com,DIRECT 这种一行规则的格式,不需要每次用 UI 添加。
导入社区规则模块(.sgmodule)
Shadowrocket 配置编辑页 → 滑动到「模块」(Module)区域 → 点「添加模块」→ 在 URL 栏输入 .sgmodule 文件的直链地址(如 https://raw.githubusercontent.com/deezertidal/shadowrocket-rules/main/modules/ad.sgmodule )→ 点完成 → 模块列表中出现新条目。Shadowrocket 会自动下载和解析模块文件,模块内的规则和 MITM hostname 声明以 %APPEND% 方式追加到当前配置。回到主页,点底部「设置」→ 打开「后台刷新」→ 回到配置编辑页确认模块状态为已加载。
预期结果:模块详情页显示规则数量和 MITM hostname 数量。开启连接后 Safari 访问新闻类网站(如 163.com),页面内广告区域明显减少或消失。Shadowrocket 日志中出现被 reject 标记的广告域名请求。
模块里有广告过滤、隐私追踪拦截、YouTube 去广告等分类。不要一次性全导入——先导一个广告过滤模块测试网络正常,再逐个加。模块加载后会导致 Shadowrocket 启动时连接并发突增(规则越多匹配计算越重),iPhone 旧机型可能感觉到发热。如果碰到特定 App 加载异常,先去日志里找被 reject 的域名,确认是不是模块误拦了。
选择节点并首次连接
Shadowrocket 主页 → 点「本地节点」→ 在节点列表中点一条节点(名称前出现蓝色勾表示选中)→ 返回主页 → 打开顶部的连接开关(可能会看到短暂的「连接中…」→ iOS 弹出「Shadowrocket 想要添加 VPN 配置」对话框 → 点「允许」→ Face ID / Touch ID 或密码验证 → 开关变绿,状态栏出现 VPN 小钥匙图标。如果弹窗没出现就开了开关又自动关闭了,去 iOS 设置 → VPN → 点 Shadowrocket 旁的开关手动连接一次 → 再次触发权限授权。连接成功后状态栏 VPN 图标持续显示。
预期结果:Shadowrocket 主页顶部开关显示绿色连接状态,状态栏显示 VPN 图标(小钥匙)。浏览器访问 https://api.ipify.org 显示的是节点出口 IP,不是本地宽带 IP。断开连接开关后刷新页面,IP 恢复为本地宽带 IP。
第一次连接建议选延迟最低的节点(主页 → 本地节点 → 点节点旁的延迟测试按钮,选 <200ms 的)。连接后在 Shadowrocket 主页能看到实时上传/下载速率和连接时长,如果速率一直为 0 但 VPN 图标在,说明节点本身不通——换个节点。iOS 低电量模式会直接阻断后台应用刷新,连 Shadowrocket 的 VPN 保持策略也不例外。如果发现 VPN 频繁断连,先看控制中心是不是开了省电模式。
你花 $2.99 买了 Shadowrocket,下载完打开,看到的是空白主页。右上角一个 +,底部五个标签。没有节点,没有规则,不知道从哪开始。
这篇按顺序走三步:添加订阅拉节点 → 配两条路线规则让国内直连 → 导入社区模块拦截广告。每一步写完 UI 路径和最常见的点错位置。
打开后主界面是空的,从右上角 + 开始
Shadowrocket 刚装完,主页只有三个区域:顶部的连接开关(默认关闭)、中间的空白节点/规则列表、底部的五个标签(首页/配置/日志/设置/关于)。
最常被忽略的事实:Shadowrocket 不加节点也可以打开连接开关,开关会闪一下自动关闭。这不是 bug——没配置任何出站规则时,代理栈启动后找不到可用的下一跳。先去把节点加上,再动连接开关。
主界面的三个入口决定了三种你之后反复操作的东西:
| 在哪操作 | 管什么 | 你的操作频次 |
|---|---|---|
| 右上角 + | 添加节点/订阅 | 配置一次,后续只更新 |
| 底部「配置」标签 | 分流规则 + 模块 | 配置一次,按需调整 |
| 底部「日志」标签 | 查看每一条请求走了什么规则 | 出问题时看 |
本章写第一个入口:+ 按钮。
关闭连接后节点怎么都测不通?先看 Type 是不是选对了
右上角 + 点开,第一行是 Type,默认值 Local。Shadowrocket 的设计逻辑是:
- Local:手动填一个节点的所有参数(地址、端口、协议、加密方式),保存后生成一条静态本地节点。没有更新按钮,订阅源换了 IP 你得手改。
- Subscribe:填一个订阅 URL 和备注名,保存后生成一个订阅条目。点进去有「更新」按钮,每次更新从订阅源重新拉取全部节点。
如果你第一次使用,手里拿到的是一串 https:// 开头的订阅链接,Type 必须选 Subscribe。选 Local 会把订阅链接当成一个 node 的 address 解析,格式不匹配直接报错。
正确的添加流程:
Shadowrocket 首页 → 右上角 +
→ Type → 选 Subscribe(不是 Local)
→ URL → 粘贴完整的订阅链接
→ Alias → 填备注,建议英文
→ 右上角「完成」
完成之后主页出现一条新的订阅条目。但此时本地节点列表还是空的——你只保存了链接,没拉取节点。点进这条订阅条目 → 点顶部的「更新」→ 等详情页底部出现节点数量和更新时间 → 返回主页,本地节点列表出现了。
添加订阅时 Alias 建议用英文或拼音。Shadowrocket 对中文备注在部分 iOS 版本下显示不全,出现「…」截断。
更新后节点数量为 0?先看订阅内容返回了什么
如果更新后详情页底部显示「0 个节点」,点「订阅内容」查看原始返回:
- 以
<!DOCTYPE html>或<html>开头:订阅链接已失效。服务商的后台面板可能换了域名或重置了 token,登录面板重新获取订阅链接。 - 以
proxies:开头(Clash YAML):Shadowrocket 能解析大部分 YAML 节点,但加密 YAML(如 Clash Premium 的加密订阅)解析不出。让服务商提供未加密的 base64 订阅。 - 以长串字母数字开头(base64 编码):格式正常。少数情况下节点列表中混入了非标准字段(如
ssr类型的非标参数),Shadowrocket 会跳过无法解析的行。找服务商确认订阅格式输出为「通用 base64」。
对应的排查优先级:
| 订阅内容以什么开头 | 说明什么 | 先做什么 |
|---|---|---|
<!DOCTYPE html> 或 <html> | 链接失效,返回网页 | 登面板生成新链接 |
proxies: | Clash YAML,可能加密 | 让服务商改 base64 输出 |
| 长串字母数字 | base64 编码,格式正常 | 检查单行格式是否标准 |
节点有了但国内 App 变慢?两条规则做分流
节点有了,但这时的 Shadowrocket 默认行为是把所有流量都发到代理——包括你打开微信、刷淘宝、看 B 站。结果可能是:淘宝加载慢因为走了海外节点访问国内 CDN、微信消息延迟、银行 App 检测到异常 IP 拒绝登录。
两步解决:
第一步:GEOIP 分流国内 IP。
Shadowrocket 底部「配置」标签 → 点当前使用的配置文件右侧的 ⓘ → 滑动到「规则」(Rules)区域 → 添加规则:
类型: GEOIP
选项: CN
策略: DIRECT
第二步:兜底规则走代理。
再加一条:
类型: FINAL
策略: PROXY
两条规则在列表中的顺序必须是 GEOIP,CN,DIRECT 在上、FINAL,PROXY 在下。Shadowrocket 从上到下匹配,命中第一条就停止。如果 FINAL 排在上面,所有请求第一步就被发到代理了,GEOIP 规则永远不会生效。
验证这两条规则是否生效——开启连接后:
- 访问
http://ip.sb→ 显示代理节点的出口 IP。 - 访问
https://www.baidu.com→ 速度快,页面顶部「百度一下」正常显示。再访问http://ip.sb→ 如果百度走了代理,ip.sb 会显示代理 IP(说明 GEOIP 没命中百度的 CDN IP)——这时手动加DOMAIN-SUFFIX,baidu.com,DIRECT排在 GEOIP 规则前面做精确兜底。
模块(Module)是什么:不用手写规则就能拦截广告
Shadowrocket 的模块是一个 .sgmodule 文本文件,里面声明了一组分流规则、MITM hostname 和 URL Rewrite 规则。一个广告过滤模块通常包含:几千条广告域名 DOMAIN-SUFFIX 匹配 → REJECT、对应的 MITM hostname 声明(让 HTTPS 广告也能被拦截)、以及 reject-200 / reject-img 的 Rewrite 规则。
模块的加载路径:
Shadowrocket → 配置 → 点配置文件 ⓘ → 滑动到「模块」→ 添加模块
→ 输入 .sgmodule 的直链 URL → 完成
常用模块源(引用自 deezertidal/shadowrocket-rules 社区维护):
# 广告过滤(通用)
https://raw.githubusercontent.com/deezertidal/shadowrocket-rules/main/modules/ad.sgmodule
# 隐私追踪拦截
https://raw.githubusercontent.com/deezertidal/shadowrocket-rules/main/modules/privacy.sgmodule
# YouTube 去广告
https://raw.githubusercontent.com/deezertidal/shadowrocket-rules/main/modules/YouTube.sgmodule
导入后模块自动加载,规则以 %APPEND% 方式追加到当前配置文件,不会覆盖你手写的规则。模块的更新频率取决于 GitHub 上源文件的维护节奏——打开模块条目可以手动点更新拉最新版规则。
模块里的 MITM hostname 声明只在「HTTPS 解密」开关打开时才生效。如果你只导入了广告模块但没有安装 MITM 证书,HTTP 明文广告请求能拦截,HTTPS 广告请求因为加密读不到域名,模块规则命中不了。MITM 证书安装参考《iOS Shadowrocket MITM 证书安装与 HTTPS 解密配置(2026)》。
节点延迟正常但网页打不开?看日志里走了哪条规则
这种情况日志能直接告诉你答案。Shadowrocket 底部「日志」标签会记录每一条网络请求的:
- 发起 App(如 com.apple.WebKit.Networking)
- 请求域名
- 匹配到的规则(DIRECT / PROXY / REJECT)
- 连接结果(200、timeout、connection refused)
看到延迟正常但打不开网页时,日志里通常出现两种情况:
情况一:请求被 REJECT 了。 日志中域名后面的匹配结果显示 REJECT。确认是不是导入的广告模块误拦了——在模块编辑页暂停该模块,刷新网页看是否恢复。
情况二:走了 DIRECT 但实际不该走。 日志显示规则匹配为 DIRECT,但你的期望是走代理。回到规则列表检查:是不是忘记添加对应域名的规则,导致被 FINAL 兜底前被某条 GEOIP,CN 或其他直连规则提前命中了。
# 日志举例:百度 CDN 节点 IP 被 GEOIP 判定为非中国 → 走代理
# 手动加 DOMAIN-SUFFIX,baidu.com,DIRECT 排在 GEOIP 之前即可
[Rule] baidu.com -> GEOIP,CN (not matched) -> FINAL -> PROXY
一种快速定位手法:在日志界面顶部的搜索框输入要排查的域名关键词,只看匹配该域名的请求行。比上下翻日志快得多。
选节点只比延迟数字不够——端口和协议也影响连通
Shadowrocket 节点列表里每条节点右侧有延迟测试按钮(闪电图标)。延迟数字是 TCP 握手时间,不是实际下载速度。选节点时有三个比延迟更重要的检查点:
- 协议是否对你的网络环境友好。 Hysteria2 / TUIC 走 UDP,在部分企业 Wi-Fi 或校园网里 UDP 被 QoS 限速甚至直接丢包——延迟测试正常(TCP 测的),实际用起来速率跑不动。确认你的 Wi-Fi 环境不限制 UDP 之后再选这类协议节点。
- 端口是否被运营商屏蔽。 常见端口 443(TLS)和 8443 存活率最高。非标端口(如 12345、50000)在某些运营商的下行链路上可能被识别后丢包。同一个节点换端口试试,延迟一样但连通性可能完全不一样。
- 节点地区和你实际访问的服务是否地理匹配。 看 YouTube 选日本/新加坡/香港节点;访问 ChatGPT 选美国/日本。延迟 30ms 的香港节点访问 OpenAI API 可能还不如延迟 120ms 的美国节点快——因为 OpenAI 在香港没有边缘节点,所有流量要跨太平洋到美西。
跑代理之后如果你还需要稳定的出口 IP(固定 IP 不做轮换,适合 ChatGPT API 和白名单 IP 管理场景),多格式测试订阅源可以覆盖这个需求。
相关阅读
常见问题
- Shadowrocket 更新订阅后节点列表还是空的,但订阅链接在 Safari 能打开?
- Safari 能打开但 Shadowrocket 拉不到的情况,先查两点:(1) 点进订阅条目 → 查看「订阅内容」,如果显示的是 HTML 页面(以 <!DOCTYPE html> 开头),说明链接已失效,服务商返回了登录页或 404;(2) 如果内容正常但节点数为 0,检查链接参数——某些订阅 URL 后面有 &flag=shadowrocket 这类参数被手动删除了。订阅 URL 必须原样复制,不能只复制域名部分。
- 规则里写了 GEOIP,CN,DIRECT,为什么百度还是慢?
- GEOIP,CN,DIRECT 这条规则的含义是「IP 归属地判断为中国的请求走直连」,它处理的是 IP 层决策。百度慢的更多原因在 DNS——你的 DNS 查询可能走了代理,导致解析出了一个百度的海外 CDN 节点。在配置编辑页的 DNS 区域,确认国内域名的 DNS 走 system。另一个可能:GEOIP 数据库对个别 IP 段归类可能滞后,手动加 DOMAIN-SUFFIX,baidu.com,DIRECT 排在 GEOIP 规则前面做精确兜底。
- 导入了 .sgmodule 广告过滤模块后,微博/知乎 App 刷不出内容了?
- 社区模块的广告域名列表覆盖面很广,可能误拦了正常的 API 请求。打开 Shadowrocket → 底部「日志」标签 → 过滤 URL 里包含 app 域名关键词的请求 → 看哪些请求被 reject 标记了。如果确认是误拦,在模块编辑界面里找到对应的域名规则删掉,或者在 Rules 里排一条优先级更高的直连规则覆盖它。不想手动排查的话,先关掉模块确认 App 恢复正常,再换一个维护更活跃的广告规则模块。
- Shadowrocket 连接后微信视频通话和游戏延迟变高了?
- DNS 清洗能做分流,但实时通信(微信视频、FaceTime、手游 UDP)对延迟极度敏感——多一跳代理就多 30-100ms。在规则里把已知的国内实时通信域名设为 DIRECT:DOMAIN-SUFFIX,weixin.qq.com,DIRECT、DOMAIN-SUFFIX,qcloud.com,DIRECT。游戏类 App 如果不知道具体域名,开 Shadowrocket 日志打一局游戏,看连接日志中出现的所有域名,确认不是海外服务后全部加直连规则。
- 连接开关打开了,状态栏 VPN 图标闪现一下就消失?
- 两种情况。最常见的是 iOS VPN 权限弹窗被别的通知挡住了——去「iOS 设置 → VPN」里找到 Shadowrocket 的配置项,点右侧开关手动连一次,等同于完成授权。另一种情况是节点的第一个 TCP 握手超时——长按那个节点条目 → 点「延迟测试」,如果显示 timeout,换节点再试。延迟测试不需要走进完整代理流程,只测 TCP 握手。
来源与时间
本文最后查看时间:2026-05-29。操作路径会随客户端版本变化,遇到按钮名称不一致时,优先按同义菜单和官方文档查看。