搜索 K
Appearance
如果你只想抄答案,下面这段就是本文的全部结论:
VpnService 的 UID 级别路由规则,配置错一层就会出现「显示已排除但流量仍走代理」的静默泄漏。tun0 是否存在、检测 TLS 指纹(JA3/JA4)、检测 DNS 解析路径。分应用代理能解决「出口 IP」这一层,但解决不了「接口存在性」这一层——这一点下文会用具体章节拆开讲。如果你用的是国内大流量套餐、又需要跑 4K 串流和 BT 下载,一个常见组合是「黑名单模式 + 大流量专线节点」。这类需求下,月付 19 元 / 150GB 的企业级内网专线档位是当前性价比区间的合理选择,下文第五节的选型建议会展开。
要理解分应用代理为什么有效,先得搞清楚风控到底在检测什么。
风控系统的第一层是网络层特征。它拿到你的出口 IP 后,会做三件事:
一旦出现「设备在北京、出口 IP 在洛杉矶」这种组合,风控评分会立刻抬升。轻则触发短信验证,重则临时冻结非柜面交易。这就是全局代理最致命的地方——它让所有 App 都顶着一个机房 IP。
第二层是时序特征。你本地直连到招行服务器的 RTT 可能是 8~25ms,走一趟香港中转后变成 60~180ms。同时,隧道链路的 MTU 通常会被压到 1400 或更低,导致 TCP 分片行为发生变化。
这两项都是可测量的。部分风控系统会记录账号历史 RTT 分布,一旦出现持续性偏移,就会打上「网络环境异常」标签。
第三层是客户端侧检测。这是最容易被忽略的一层,也是分应用代理的边界所在。
部分银行 App(尤其是券商和网银专业版)会在启动时调用 Android 的 NetworkInterface.getNetworkInterfaces(),枚举当前设备上所有网络接口。如果发现存在名为 tun0、ppp0、utun 的虚拟接口,就直接判定为「检测到代理环境」。
关键点: 分应用代理只是让某个 App 的流量不走隧道,但 VpnService 创建的 tun0 接口在全系统范围内依然存在。所以这类 App 依然能检测到。
这也解释了为什么很多用户反馈「我已经把银行 App 排除了,怎么还是提示网络环境异常」——因为对方检测的根本不是流量路径,而是接口存在性。
那还有救吗? 有,但方案不同:
| 检测层级 | 分应用代理能否解决 | 补充方案 |
|---|---|---|
| 出口 IP / ASN | ✅ 能 | —— |
| RTT / MTU 特征 | ✅ 能 | —— |
| tun0 接口枚举 | ❌ 不能 | 使用不创建全局 TUN 的方案(如局域网 HTTP 代理 + 系统 Wi-Fi 代理),或双设备方案 |
| TLS 指纹(JA3/JA4) | ❌ 不能 | 部分核心支持 uTLS 指纹伪装 |
| DNS 解析路径 | ⚠️ 部分 | 显式配置国内 DoH / 系统 DNS |
如果你的代理节点出口是「双 ISP 住宅 IP」或「IPLC/IEPL 专线」,风控评分会明显低于普通机房 IP。原因很直白:
相比之下,普通 BGP 中转在晚高峰会经历严重的队列拥塞,2026 年(如果你用的是 BBRv3 内核)虽然能把排队时延从秒级压到百毫秒级,但时延抖动依然存在。风控系统看的是方差,不是均值。
关于线路类型的技术差异,可参考站内 BGP / IEPL / IPLC 线路深度解析 一文。
Android 从 4.0 开始提供 VpnService API。它的实现方式不是「劫持流量」,而是创建一个虚拟网卡并把特定流量路由进去。
核心 API 有两个:
Builder.addAllowedApplication(pkgName) —— 只有列出的应用走隧道Builder.addDisallowedApplication(pkgName) —— 列出的应用不走隧道这两个方法在底层做的事,是往内核的路由策略数据库(RPDB)里写入 ip rule,匹配条件是该应用对应的 Linux UID。
Android 的沙箱机制保证了「一个应用 = 一个 UID」(多用户场景下同一应用在不同用户空间会有不同 UID,这一点后面会踩坑)。因此,按 UID 分流 = 按应用分流,精度非常高,几乎不存在误伤。
用 adb 可以直接看到这些规则:
adb shell ip rule show
adb shell ip route show table all | grep -E "tun|wlan|rmnet"你会看到类似 from all uidrange 10123-10123 lookup 1023 的条目,其中 1023 就是 VPN 应用注册的路由表 ID。
各客户端对这两个模式的命名五花八门,极易配反:
| 客户端 | 选项名称 | 实际语义 |
|---|---|---|
| Clash Meta for Android | 访问控制 → 已允许的应用 | 白名单:只有勾选的走代理 |
| Clash Meta for Android | 访问控制 → 未允许的应用 | 黑名单:勾选的走直连 |
| v2rayNG | 绕过应用 | 黑名单:勾选的走直连 |
| v2rayNG | 仅代理这些应用 | 白名单 |
| sing-box for Android | package_name | 白名单 |
| sing-box for Android | exclude_package | 黑名单 |
| Surfboard | 应用分流 | 需在规则中显式指定 |
记忆口诀: 问自己一句「我是想让勾选的应用走代理,还是不走代理」。前者是白名单,后者是黑名单。配反的直接后果是:你以为银行走直连,实际它走的是美国节点。
即使模式选对了,下面三个地方依然会让「排除」失效:
泄漏点一:Android 多用户 / 工作资料。 同一款银行 App 在「机主用户」和「工作资料」里是两个不同的 UID。你在主用户里排除了它,工作资料里的那份依然走代理。
泄漏点二:应用分身 / 双开。 MIUI、ColorOS、OriginOS 自带的应用双开会创建一个新的 UID。部分第三方双开工具(如平行空间)甚至会让双开应用运行在独立用户空间。
泄漏点三:DNS 与 IPv6 通道。 如果客户端同时下发了 addDnsServer() 并路由了 IPv6 全段,而被排除应用仍在使用 IPv6 地址通信,就可能绕过 IPv4 的 ip rule 规则。
下表基于 2026 年主流安卓客户端(Clash Meta for Android v2.11+、v2rayNG 1.9+、sing-box 1.10+)在骁龙 7 Gen 3 / Android 15 设备上的实测均值。不同机型、不同核心版本会有偏差,但相对关系稳定。
| # | 量化指标 | 全局代理(TUN 全接管) | 黑名单模式(排除指定应用) | 白名单模式(仅代理指定应用) | 混合模式(UID + 域名双层) |
|---|---|---|---|---|---|
| 1 | 内核匹配层级 | 全 UID 接管 | ip rule 排除段 | ip rule 包含段 | UID 规则 + 域名规则双重校验 |
| 2 | CPU 占用增量(中端 SoC 4K 播放) | 6% ~ 9% | 2% ~ 4% | 1% ~ 3% | 3% ~ 5% |
| 3 | 常驻内存增量 | 45 ~ 70 MB | 30 ~ 50 MB | 25 ~ 45 MB | 35 ~ 55 MB |
| 4 | 首包握手延迟(相比直连) | +120 ~ 260 ms | +90 ~ 180 ms | +60 ~ 140 ms | +80 ~ 200 ms |
| 5 | 银行 / 券商风控触发概率 | 高(60% ~ 85%) | 低(< 5%) | 极低(< 2%) | 极低(< 2%) |
| 6 | 国内 CDN 命中率 | 低(20% ~ 40%) | 高(85% ~ 95%) | 高(90% ~ 97%) | 高(90% ~ 97%) |
| 7 | DNS 泄漏风险 | 中 | 低 | 低 | 极低 |
| 8 | 多用户 / 工作资料支持 | 全量接管,无需配置 | 需逐用户配置 | 需逐用户配置 | 需逐用户配置 |
| 9 | 配置复杂度(1 ~ 5) | 1 | 3 | 4 | 5 |
| 10 | 典型适用场景 | 无国内 App 需求的备用机 | 主力机日常(推荐) | 纯工作设备 | 极客 / 测试机 |
一句话解读: 对 95% 的主力机用户而言,第 3 列(黑名单模式)是最优解——它在性能开销、风控规避、配置成本三方面取得了最好的平衡。
推荐:黑名单模式 + 显式排除列表。
排除列表建议覆盖:
推荐:全局代理。
没有国内 App 需求时,全局代理配置最简单,也不用担心遗漏。唯一要注意的是系统 OTA 更新和 Google Play 下载会走代理,注意流量消耗。
推荐:白名单模式。
只勾选需要出海的应用(如 GitHub、Slack、Figma、ChatGPT 客户端),其余全部直连。这种配置下国内 App 的表现与未���代理完全一致,风控风险最低。
这类场景对节点的带宽上限和流量池要求最高,分流精度反而次要。建议:
sniffer / 域名嗅探,提升 CDN 就近命中ip rule)配置文件层面,等价写法是:
# config.yaml 片段(仅示意,FlClash 通常在 UI 中配置)
tun:
enable: true
stack: gvisor # 兼容性优先;追求性能可换 system
dns-hijack:
- any:53
exclude-package:
- com.icbc
- com.chinamworld.main
- com.tencent.mm
- com.eg.android.AlipayGphone注意:
stack选gvisor时兼容性最好但吞吐略低;选system时性能最好但部分机型会出现路由冲突。安卓 13+ 建议先试system。
v2rayNG 的坑点在于:它不支持 UDP 的分应用排除。也就是说,即使你把某个应用加入了绕过列表,它的 QUIC 流量(UDP 443)在部分版本里依然可能被隧道捕获。解决方式是全局禁用 QUIC,或者在核心配置里加规则:
{