OpenWrt Nikki 代理下 Google Play 更新卡住的排查记录

最近在 OpenWrt/ImmortalWrt 上使用 Nikki,也就是 Mihomo/Clash Meta 核心做透明代理。大部分网站都正常,比如 Netflix、YouTube 都可以访问,但 Google 相关服务一直不稳定。

最开始的表现是:

  • Gemini 打不开,提示 ERR_SSL_VERSION_OR_CIPHER_MISMATCH
  • Google Play 可以打开,可以浏览应用
  • 应用也能开始更新,但经常更新到一半卡住,长期处于“等待中”
  • 面板里能看到一些 Google 连接,但下载速度一直是 0 B/s

初始配置问题

一开始我只设置了一个逻辑:绕过中国 IP

这个配置对普通网页访问有时够用,但对 Google Play 不够。Google Play 的下载不是单一域名完成的,它会用到很多 Google 服务域名,比如:

  • googleapis.com
  • googleusercontent.com
  • gvt1.com
  • gvt2.com
  • gvt3.com
  • xn--ngstr-lra8j.com
  • dl.google.com

如果只按 IP 分流,容易出现页面连接走代理,但真正 APK 下载连接没有被正确接管的情况。

规则应该写在哪里

Nikki 里有两个地方容易混淆:

  • 混入配置 → 规则配置
  • 编辑器 → 用于混入的文件

我最后选择写到:

编辑器 → 选择文件 → 用于混入的文件

这里要用 Nikki 专用字段:

nikki-rules:

而不是标准 Clash 的:

rules:

另外,规则里的代理组名要填策略组名,不是订阅名,也不是单个节点名。

我的配置里:

proxy-groups:
  - name: PROXY
    proxies:
      - BWG
      - DIRECT

所以规则里应该写 PROXY,不是 BWG

最终使用的规则

nikki-rules:
  - "DOMAIN-SUFFIX,google.com,PROXY"
  - "DOMAIN-SUFFIX,googleapis.com,PROXY"
  - "DOMAIN-SUFFIX,googleapis.cn,PROXY"
  - "DOMAIN-SUFFIX,gstatic.com,PROXY"
  - "DOMAIN-SUFFIX,googleusercontent.com,PROXY"
  - "DOMAIN-SUFFIX,googlevideo.com,PROXY"
  - "DOMAIN-SUFFIX,xn--ngstr-lra8j.com,PROXY"
  - "DOMAIN-SUFFIX,dl.google.com,PROXY"
  - "DOMAIN-SUFFIX,gvt1.com,PROXY"
  - "DOMAIN-SUFFIX,gvt2.com,PROXY"
  - "DOMAIN-SUFFIX,gvt3.com,PROXY"

  - "GEOSITE,CN,DIRECT"
  - "GEOIP,CN,DIRECT"

这里顺序很重要。

Google 规则要放在前面,国内直连规则放在后面。因为 Mihomo 的规则是从上往下匹配,第一条命中后就停止。如果把 GEOSITE,CN,DIRECTGEOIP,CN,DIRECT 放得太前,可能会让一些 Google 相关连接被错误处理。

关键原因:绕过 DSCP

真正解决 Google Play 更新卡住的关键,不是继续加规则,而是发现 Nikki 的“绕过”设置里有一条:

绕过 DSCP:4

这会导致带 DSCP 标记的数据包绕过 Nikki,不走代理。

Google Play 商店页面、更新检查这些小连接可以正常走代理,所以看起来“能打开、能开始更新”。但真正的 APK 下载连接可能被系统或下载管理器打了 DSCP 标记,结果绕过代理,最后就表现为:

  • Play 商店能打开
  • 可以点击更新
  • 更新到一半卡住
  • 面板里看不到 gvtngstrgoogleusercontent 这些大下载连接
  • 下载速度一直是 0 B/s

删除 绕过 DSCP:4 后,Google Play 更新恢复正常。

最终 Nikki 设置

最后稳定的设置是:

TCP 模式:Redirect
UDP 模式:TUN
IPv4 DNS 劫持:开启
IPv4 代理:开启
IPv6 DNS 劫持:关闭
IPv6 代理:关闭
Fake-IP Ping 劫持:开启

绕过中国大陆 IP:关闭
绕过中国大陆 IP6:关闭
绕过 DSCP:空
绕过 FWMark:空

国内流量不再靠 Nikki 插件里的“绕过中国大陆 IP”,而是通过混入规则里的:

GEOSITE,CN,DIRECT
GEOIP,CN,DIRECT

自动直连。

中途踩过的坑

还有一个额外问题:我曾经在面板里点了“升级核心”,提示空间不足,之后 Mihomo 核心无法启动,日志只有:

Segmentation fault

SSH 进去执行:

/usr/bin/mihomo -v

也直接报:

Segmentation fault

后来发现当前系统用的是 apk,不是 opkg,而且安装的是:

mihomo-alpha

不是 mihomo-meta

可以用下面命令确认:

apk info | grep -E 'nikki|mihomo'
apk info -W /usr/libexec/mihomo

如果核心损坏,可以重装对应包:

/etc/init.d/nikki stop
apk fix --reinstall mihomo-alpha
/usr/bin/mihomo -v
/etc/init.d/nikki restart

或者切换到 mihomo-meta

/etc/init.d/nikki stop
apk del mihomo-alpha
apk add mihomo-meta
/usr/bin/mihomo -v
/etc/init.d/nikki restart

总结

这次问题的核心不是节点不可用,也不是 Google Play 完全没走代理,而是:

  1. 只靠“绕过中国 IP”不够,Google Play 需要明确的域名规则。
  2. 规则要写到 Nikki 的混入文件里,用 nikki-rules
  3. 代理组名要写策略组名,例如 PROXY,不是节点名。
  4. 国内直连可以用 GEOSITE,CN,DIRECT 和 GEOIP,CN,DIRECT
  5. 插件里的“绕过中国大陆 IP”建议关闭。
  6. 最关键的是清空“绕过 DSCP”,否则 Google Play 的真实下载流量可能绕过代理。

最终结果是:Gemini 正常访问,Google Play 可以正常更新应用,国内网站也可以自动直连。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code