NekoBox Android 端的 TUN 模式是一个容易让人产生”开了就万事大吉”错觉的功能。你点下开关看到 VPN 图标出现在状态栏,以为全局流量都接管了——但 DNS 查询可能正从 Private DNS 的 DoT 通道溜走,部分应用可能因为分应用代理的优先级规则走了直连。这篇文章按 Android VPN 权限、DNS、TUN 路由表、分应用代理四个层级拆开排查。
Android VPN slot 只有一个:谁在抢?
Android 系统的 VPN 框架一次只允许一个应用占据 VPN 通道。如果你同时装了 NekoBox 和另一款代理客户端(比如 v2rayNG、Clash Meta for Android、Hiddify Next),或者系统开启了 Private DNS、安装了带 VPN 功能的广告过滤器,NekoBox 的 TUN 可能已经被抢占了。
排查顺序:
| 先关掉什么 | 为什么 | 怎么关 |
|---|---|---|
| Private DNS | DoT 在 VPN 层之前拦截 DNS | 设置 → 网络和互联网 → Private DNS → 关闭 |
| 其他代理客户端 VPN | 抢占唯一的 VPN slot | 逐个卸载或关闭其 VPN 开关 |
| 广告过滤 VPN(AdGuard 等) | 同样占用 VPN slot | 关闭或改用 NekoBox DNS 规则替代 |
| 系统省电模式 | 可能杀掉 NekoBox 后台进程 | 电池优化 → NekoBox → 不优化 |
验证 VPN slot 是否被 NekoBox 占用:拉下通知栏,长按 VPN 通知,看 “活跃的 VPN” 里是不是只有 NekoBox。如果出现两个 VPN 名称,系统会随机选一个作为默认。
Private DNS:最容易漏掉的一环
Android 9+ 内置的 Private DNS 是 DNS over TLS(DoT,端口 853),这个流量在 TCP 层先于 VPN 接口建立连接。即使 NekoBox 的 TUN 接管了普通 DNS(UDP 53),DoT 流量仍然从系统默认网络栈出去——结果是 dnsleaktest.com 看到的是本地 ISP 的 DNS 而不是代理出口的 DNS。
这是 NekoBox Android 端 DNS 泄漏的第一原因,不是配置问题而是 Android 协议栈的设计限制。关掉 Private DNS 后,所有 DNS 走 UDP 53,TUN 就能正确拦截。
关掉之后,在 NekoBox 里配一个可靠的 DNS:
- 国内 DNS(直连域名):223.5.5.5(AliDNS)或 119.29.29.29(DNSPod)
- 海外 DNS(代理域名):8.8.8.8 或 1.1.1.1
配合路由规则按域名分流 DNS 请求,可以做到国内域名用国内 DNS、海外域名用海外 DNS。
TUN 路由表:不是开了就正确
NekoBox Android 的 TUN 基于 tun2socks,核心逻辑是把所有 IP 流量导入代理。但路由表如果写错了,会出现”部分 IP 走代理、部分直连、部分直接丢包”的情况。
在 Route 设置里看三个关键参数:
| 设置项 | 推荐值 | 说明 |
|---|---|---|
| 代理模式 | 仅代理选中应用 或 全部代理 | 选了全部代理时下面两项才生效 |
| 绕过局域网 | 开启 | 避免把局域网设备(打印机、NAS)的流量送进代理 |
| 绕过中国 IP | 按需求 | 开启后国内 IP 直连,但数据库有漏判风险 |
如果想让部分应用不走代理:在 Route → 应用代理设置 → 绕过列表里勾选这些应用。绕过优先级高于代理——一个应用如果同时在代理列表和绕过列表,会被绕过。
常见场景:微信/支付宝走直连、Telegram/YouTube 走代理。在分应用代理里把微信加入绕过,Telegram 加入代理,其他应用默认跟随全局设置。
分应用代理:规则优先级的坑
NekoBox 的路由决策顺序是:
绕过列表 > 代理列表 > 路由规则 > 全局设置
如果你想精细控制某个应用的代理行为,直接在分应用代理里设置,不要只依赖路由规则。路由规则按域名匹配,但很多应用用的是 IP 直连、WebView 或者后台 Service,域名规则不一定能命中。
WebView 的坑:一些应用内嵌的 WebView 内容(比如 Twitter 客户端打开外部链接)在 Android 上以 com.android.webview 或 com.google.android.webview 的身份产生流量。如果你的分应用代理只匹配了应用本身的包名,WebView 的流量会走系统默认通道。解决方式是直接把这类应用设为”全部代理”而不是”仅代理选中应用”。
多端配置时的 DNS 一致性
如果你在手机、平板、电视盒子上都装了 NekoBox,DNS 配置要写一致。不然同一时间段的同一域名,手机解析到的 IP 是代理出口的、盒子解析到的可能是本地 ISP 的,会导致出站 IP 不一致。
选一个在 DNS 层面和路由规则层面都能统一管理的 兼容 Clash / Singbox / V2Ray 的订阅,可以降低多端 DNS 配置不一致导致的排查成本——订阅里自带的 DNS 和路由规则在所有客户端表现一致。
未覆盖的边界
- 本文基于 NekoBoxForAndroid v1.3.6+ 和 Android 14/15。Android 12 及以下版本的 Private DNS 行为有差异。
- 部分国产 ROM(MIUI HyperOS、ColorOS 15、HarmonyOS)的 VPN 管理策略不同,可能出现本文未描述的系统级 VPN 抢占。
- 分应用代理的 WebView 匹配问题仅在 Android 14 上验证过,Android 15 的 WebView 行为可能有改进。
- tun2socks 的性能损耗在入门级设备(4GB RAM 以下)上可能明显,本文未做量化测试。