最近在 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.comgoogleusercontent.comgvt1.comgvt2.comgvt3.comxn--ngstr-lra8j.comdl.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,DIRECT、GEOIP,CN,DIRECT 放得太前,可能会让一些 Google 相关连接被错误处理。
关键原因:绕过 DSCP
真正解决 Google Play 更新卡住的关键,不是继续加规则,而是发现 Nikki 的“绕过”设置里有一条:
绕过 DSCP:4
这会导致带 DSCP 标记的数据包绕过 Nikki,不走代理。
Google Play 商店页面、更新检查这些小连接可以正常走代理,所以看起来“能打开、能开始更新”。但真正的 APK 下载连接可能被系统或下载管理器打了 DSCP 标记,结果绕过代理,最后就表现为:
- Play 商店能打开
- 可以点击更新
- 更新到一半卡住
- 面板里看不到
gvt、ngstr、googleusercontent这些大下载连接 - 下载速度一直是 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 完全没走代理,而是:
- 只靠“绕过中国 IP”不够,Google Play 需要明确的域名规则。
- 规则要写到 Nikki 的混入文件里,用
nikki-rules。 - 代理组名要写策略组名,例如
PROXY,不是节点名。 - 国内直连可以用
GEOSITE,CN,DIRECT和GEOIP,CN,DIRECT。 - 插件里的“绕过中国大陆 IP”建议关闭。
- 最关键的是清空“绕过 DSCP”,否则 Google Play 的真实下载流量可能绕过代理。
最终结果是:Gemini 正常访问,Google Play 可以正常更新应用,国内网站也可以自动直连。