Shadowrocket 规则不生效或开启后断网:Config 与 TUN 设置排查
简答:iPhone 和 iPad 上,Shadowrocket 通常没有单独的 TUN 开关,打开连接后就会启用系统 VPN 隧道;需要按规则分流时选择 Config,再检查活动配置、规则顺序、DNS 与隧道路由。
定义:Shadowrocket 规则配置是按域名、IP 或地理位置匹配请求,并将其交给 PROXY、DIRECT 或 REJECT;TUN 通常指由系统 VPN 数据包隧道接管符合路由的流量。
先看症状:3 秒找到第一步
| 症状 | 先做什么 | 重点检查 |
|---|---|---|
| 规则写了但没有生效 | 打开 Home,把 Global Routing 改为 Config | 活动配置文件、规则顺序、策略名称和命中日志 |
| 打开连接后全部断网 | 关闭连接,确认系统原生网络正常 | VPN 权限、活动配置、节点连接和 DNS |
| 局域网设备打不开 | 先关闭连接,用局域网 IP 地址测试 | 局域网网段、skip-proxy、tun-excluded-routes 和本地 DNS |
| 浏览器正常但某个 App 异常 | 分别测试网页、IPv4、IPv6 和实时通信 | UDP/QUIC、硬编码 DNS、IPv6 或应用自身代理兼容性 |
先记住一个结论:在 iPhone 和 iPad 上,Shadowrocket 通常没有一个必须单独打开、名称就是“TUN”的开关。点击连接后,应用会使用系统 VPN 网络扩展处理符合路由的网络流量;Apple 的数据包隧道文档说明,这类隧道可以接收系统转入的 IP 数据包,并通过包含路由和排除路由决定哪些流量进入隧道。可参考 Apple Packet Tunnel Provider 文档 和 Apple VPN 流量路由文档。
因此,TUN、Config、Proxy 和 Direct 不是同一层面的选项:TUN更接近系统流量接管方式,Config、Proxy、Direct则是 Shadowrocket 的流量处理模式。下面按这个顺序排查。
Config、Proxy、Direct 怎么选:先把规则分流与隧道分开
| 模式 | 作用 | 适用场景 | 不要误解为 |
|---|---|---|---|
| Config | 按当前配置文件中的规则,将请求分配给不同策略 | 日常使用、国内直连与其他流量分流 | 不是关闭 VPN |
| Proxy | 把请求统一交给当前选定的代理策略或服务器 | 对照测试节点或排查规则是否导致异常 | 不是规则已经正确 |
| Direct | 按直连策略处理请求 | 在 Shadowrocket 连接仍开启时做直连模式对照 | 不是关闭连接 |
- 打开 Shadowrocket 的 Home 页面,确认连接开关状态。
- 需要规则分流时,在 Global Routing 中选择 Config。
- 如果怀疑规则导致异常,临时选择 Proxy,使用同一个节点或策略测试同一目标。
- 如果要比较 Shadowrocket 内的直连处理,选择 Direct;如果要做完全不经过 Shadowrocket 的测试,必须关闭连接后再访问。
- 每次只改变一个变量,并记录网页、局域网设备和异常 App 的结果。
App Store 对 Shadowrocket 的介绍包含基于域名、域名后缀、域名关键词、CIDR IP 范围和 GeoIP 的规则能力,也列出本地 DNS 映射、IPv6 和 DNS over HTTPS、DNS over TLS、DNS over QUIC 等功能;具体入口和可用字段仍以当前应用界面为准。可查看 App Store 的 Shadowrocket 产品说明。
导入、备份和编辑配置文件:避免改错活动配置
- 打开 Shadowrocket 的 Config 页面,确认已经导入配置文件。
- 先复制或导出当前配置,保留一份未修改的备份。
- 确认当前选中的文件就是 Home 页面正在使用的活动配置。
- 进入配置编辑界面,优先检查 [General] 和 [Rule] 区域。
- 一次只修改规则顺序、DNS 或隧道路由中的一项,保存后重新连接测试。
- 如果修改后无法连接,先恢复备份,不要继续叠加新的规则和参数。
订阅链接、规则文件和配置模块都可能改变请求的处理方式。不要导入来源不明的配置、模块或证书,也不要在没有理解用途时开启 MITM、HTTPS 解密或证书相关选项。此类功能可能改变应用看到的请求内容,并带来隐私与兼容性影响;不需要调试特定 HTTPS 请求时,建议保持关闭。
配置来源也应单独核验:确认链接来源、更新时间和维护者说明,检查配置是否包含陌生域名、重写、脚本、证书或不明远程资源。无法核实来源的配置不要直接用于主要设备。
规则顺序怎么排:具体条件在前,FINAL 必须最后
本文按“自上而下匹配,命中即停止”理解规则。更具体的匹配条件放在更宽泛的条件前面,局域网和本机网段放在 GEOIP 之前,广告拦截规则放在可能覆盖它的直连规则之前,FINAL 放在最后。IP 类局域网规则可加 no-resolve,避免为了匹配 IP 规则而提前进行域名解析。
| 建议顺序 | 匹配类型 | 常见用途 | 注意事项 |
|---|---|---|---|
| 1 | IP-CIDR、IP-CIDR6 | 局域网、本机或明确网段 | 局域网规则通常加 no-resolve |
| 2 | DOMAIN | 匹配一个完整域名 | 比后缀和关键词更具体 |
| 3 | DOMAIN-SUFFIX | 匹配域名及其子域名 | 较窄后缀放在较宽后缀前 |
| 4 | DOMAIN-KEYWORD | 按域名中的关键词匹配 | 范围较宽,容易误伤正常域名 |
| 5 | GEOIP | 按解析后的 IP 地理位置分流 | 不应覆盖前面的明确域名规则 |
| 6 | FINAL | 处理前面没有命中的请求 | 必须放在最后 |
| 请求 | 先命中的规则 | 结果 |
|---|---|---|
| api.example.com 同时符合 DOMAIN 和 DOMAIN-SUFFIX | DOMAIN,api.example.com,DIRECT | 命中更具体的 DOMAIN,后面的后缀规则不再覆盖 |
| img.example.com 同时符合 DOMAIN-SUFFIX,example.com 和 GEOIP,CN,DIRECT | DOMAIN-SUFFIX,example.com,PROXY | 先按明确后缀处理,不再继续到 GEOIP |
| 某请求没有命中局域网、域名或 GEOIP 规则 | FINAL,PROXY | 由 FINAL 兜底,避免出现无匹配状态 |
规则类型和策略是两件事:DOMAIN-SUFFIX 是匹配方式,PROXY、DIRECT、REJECT 是匹配后采用的策略。不要把 REJECT 和 GEOIP 当成同一类规则,也不要把所有关键词规则放在明确域名规则前面。
最小规则示例:局域网直连、广告拦截、国内直连与兜底
下面只是语法示例,不能直接当作完整配置使用。配置中的 PROXY 必须替换为当前配置里确实存在的策略名称;如果该策略不存在,规则可能无法执行。示例域名仅用于演示,不代表任何服务可用。
[General]
skip-proxy = 192.168.0.0/16,10.0.0.0/8,172.16.0.0/12,127.0.0.0/8
tun-excluded-routes = 192.168.0.0/16,10.0.0.0/8,172.16.0.0/12,127.0.0.0/8
[Rule]
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
DOMAIN-SUFFIX,ads.example.com,REJECT
DOMAIN-SUFFIX,example.cn,DIRECT
GEOIP,CN,DIRECT
FINAL,PROXYDOMAIN-SUFFIX,ads.example.com,REJECT 只是明确的占位示例,用来演示如何拦截某个广告域名后缀。不要把 DOMAIN-KEYWORD,ads,REJECT 直接复制到实际配置中,因为 uploads、downloads、leads 等正常域名也可能包含相同字符串,造成误拦截。
skip-proxy 可以理解为代理例外地址或域名列表;tun-excluded-routes 用于排除隧道路由中的网段。不同版本、不同配置编辑器对字段支持和入口可能不同,使用前应备份,并以当前应用显示的字段说明为准。若编辑器不识别某个字段,不要强行保留。
如果配置文件中没有名为 PROXY 的策略,应先查看策略列表,把最后一行替换成已有策略名称。FINAL 必须最后出现;局域网规则、明确域名规则和广告拦截规则都应位于 GEOIP 之前。
DNS、IPv6、UDP/QUIC 与异常 App:按协议逐项验证
DNS 怎么查
- 先关闭 Shadowrocket 连接,访问同一个域名,记录系统直连结果。
- 打开连接并使用 Config,再访问同一个域名,查看请求日志或规则命中情况。
- 如果配置编辑器提供
dns-server、DNS 覆写或本地 DNS 映射字段,先记录原值,再一次只改一项。 - 分别测试系统 DNS 和配置 DNS,不要在没有日志的情况下直接判断为 DNS 泄漏或节点故障。
- 如果只有局域网设备名称无法解析,但直接输入局域网 IP 可以访问,优先检查本地 DNS 映射或局域网 DNS。
App Store 页面列出了 Shadowrocket 的本地 DNS 映射和多种加密 DNS 能力,但这不代表每个配置文件都已经启用这些功能。配置 DNS 与系统 DNS 的实际作用取决于当前应用设置、规则和隧道路由。
IPv6 怎么查
- 先测试同一目标的 IPv4 访问,再测试 IPv6 访问。
- 如果配置编辑器提供
ipv6或 IPv6 相关开关,先记录当前状态,再切换一次进行对照。 - 若关闭 IPv6 后恢复,继续检查节点、DNS 和规则是否支持 IPv6;不要只修改规则而忽略解析结果。
- 如果界面没有该字段,不要自行添加未经确认的配置键,以当前版本支持的设置为准。
UDP/QUIC 和游戏流量怎么查
- 用普通网页测试 TCP 类访问,再用视频通话、实时通信或游戏测试可能使用 UDP 的流量。
- 如果只有实时应用异常,查看当前节点或策略是否提供 UDP 转发选项;有开关时分别测试开启和关闭。
- 对浏览器类问题,可临时让应用使用 TCP 可用的访问方式进行对照,但不要把未知的 UDP 规则直接粘贴进配置。
- 游戏无法连接时,记录是登录、匹配、语音还是实时对战阶段失败,再分别检查 DNS、IPv6、UDP 和节点策略。
没有可复现的日志和对照结果时,不要直接断定是线路或服务端故障。Shadowrocket 的 App Store 说明列出 IPv6、DNS 与协议相关能力,但具体节点是否支持 UDP、某个 App 是否使用 QUIC,仍需以当前配置和应用表现核对。
哪些情况适合开启连接:兼容性与耗电要一起看
| 场景 | 建议 | 原因或检查点 |
|---|---|---|
| 需要按域名分流、局域网直连和其他流量代理 | 选择 Config 并开启连接 | 规则需要在连接建立后参与流量处理 |
| 只想比较某个节点或代理策略 | 短时间选择 Proxy | 减少规则变量,便于对照测试 |
| 需要确认系统原生网络是否正常 | 关闭连接后测试 | 避免把 Direct 模式误认为完全退出隧道 |
| 依赖局域网发现、投屏、打印或企业内网 | 先测试局域网排除项 | Apple 文档说明 VPN 可设置包含和排除路由,系统路由表也可能影响最终结果 |
| 手机电量紧张或某个 App 兼容性异常 | 暂时关闭连接做对照 | 持续运行网络扩展可能增加系统网络处理变量,具体影响因设备、配置和流量而异 |
开启连接并不等于所有流量一定采用同一种策略;实际结果还受配置规则、包含路由、排除路由、系统路由表和应用自身网络实现影响。Apple 文档明确说明,系统路由表可能优先于某些包含或排除路由,因此局域网异常应结合设备 IP、路由和 DNS 一起判断,而不是只切换 Config、Proxy、Direct。
iPhone、iPad 与 Mac 的照做路径
iPhone 与 iPad
- 打开 Shadowrocket,进入 Home。
- 确认已经导入服务器或配置,并确认当前活动配置文件。
- 点击连接开关;首次使用时按系统提示允许添加 VPN 配置。
- 回到 Home,将 Global Routing 设为 Config。
- 进入 Config 检查 [General] 和 [Rule],先测试一个明确域名,再测试局域网 IP。
- 如果异常,关闭连接确认系统原生网络,再使用 Proxy 做对照。
Mac
- 在 App Store 打开 Shadowrocket 页面,先查看“兼容性”一栏。当前页面列出 Mac 需要 macOS 10.15 或更高版本;系统和硬件是否兼容,以 App Store 当前页面为准。
- 安装并打开应用,在主窗口中找到 Home 或 Global Routing。不同版本的菜单布局可能不同,不要照搬旧截图。
- 确认活动配置文件后选择 Config,再测试明确域名。
- 若 Config 异常,临时切换 Proxy 测试同一策略;Proxy 正常而 Config 异常时,优先检查规则顺序、策略名称和 FINAL。
- 如果找不到某个入口,使用当前版本主窗口、菜单栏或设置页中显示的同名项目,不要按其他版本的截图添加不存在的字段。
App Store 页面列出了 iPhone、iPad、Mac 等支持平台及当前兼容性信息,但应用界面和菜单位置可能随版本变化。页面主体功能包括规则匹配、配置导入、DNS、IPv6 和流量处理能力,具体以应用当前显示为准。
改完配置后的自查清单
- 是否已备份原配置文件?
- 是否确认当前活动配置就是刚刚修改的文件?
- 是否确认 Global Routing 为 Config,而不是仍处于 Proxy 或 Direct?
- 是否把 Direct 与关闭 VPN 区分开?
- 局域网、127.0.0.0/8 和其他本机网段是否位于 GEOIP 与 FINAL 之前?
- 明确 DOMAIN 是否位于宽泛 DOMAIN-SUFFIX 和 DOMAIN-KEYWORD 之前?
- 广告拦截是否使用明确的 DOMAIN-SUFFIX 示例,而不是宽泛关键词?
- IP-CIDR 局域网规则是否添加 no-resolve?
- FINAL 是否放在规则最后?
- 规则中的 PROXY 是否确实存在于当前策略列表?
- 是否检查了 skip-proxy、tun-excluded-routes 和本地网段?
- 是否分别测试 DNS、IPv4、IPv6、UDP/QUIC 和异常 App?
- 是否避免导入来源不明的配置、模块或证书?
最小复测流程是:关闭连接测试一次,打开连接并选择 Config 测试一次,使用 Proxy 做一次对照;每轮只修改一个变量,并记录实际命中的规则。这样比单纯反复切换节点更容易定位问题。
常见问题
Shadowrocket 在 iPhone 和 iPad 上有独立的 TUN 开关吗?
通常没有一个名称就是“TUN”的独立开关。打开 Shadowrocket 的连接后,应用通过系统 VPN 网络扩展处理符合路由的流量;具体哪些流量进入隧道,还取决于配置规则、包含路由和排除路由。
Config、Proxy、Direct 应该选哪个?
需要按规则分流时选 Config;需要把同一目标统一交给选定代理做对照时选 Proxy;需要测试 Shadowrocket 内部直连策略时选 Direct。Direct 不是关闭 VPN,完全不经过 Shadowrocket 的测试必须关闭连接。
为什么规则写了却不生效?
先确认活动配置文件,再确认 Global Routing 为 Config,然后检查规则是否从上到下排列、策略名称是否存在、FINAL 是否最后,并通过请求日志或规则测试确认实际命中项。
skip-proxy 和 tun-excluded-routes 是一回事吗?
不能直接当成同一个字段。前者可理解为代理例外,后者用于隧道路由排除;具体支持方式可能随应用版本和配置编辑器变化,修改前应备份并以当前版本显示为准。
为什么开启连接后局域网设备打不开?
先关闭连接确认局域网本身正常,再用局域网 IP 地址测试。如果 IP 可以访问而设备名称不能解析,优先检查本地 DNS;如果 IP 也无法访问,检查局域网网段是否被隧道接管,以及 skip-proxy 和 tun-excluded-routes 是否覆盖该网段。
为什么浏览器正常,但游戏或某个 App 不能用?
分别检查 IPv4、IPv6、DNS 和 UDP/QUIC。查看当前节点或策略是否提供 UDP 转发选项,并分别测试开启和关闭;不要仅凭浏览器正常就判断所有应用都能通过同一连接。
Mac 能不能安装 Shadowrocket?
App Store 当前页面列出 Mac 支持,并显示 macOS 10.15 或更高版本要求;具体硬件和系统兼容性应以当前 App Store 的“兼容性”一栏为准。