LetsVPN客户侧分流最佳实践

功能定位与变更脉络
客户侧分流指在终端本地决定「哪些数据包走 VPN、哪些直连」,与「服务端静态路由」互补。LetsVPN 2025 年 11 月版将「SplitApp」入口从「实验室」移至「连接-高级」一级菜单,并新增「Work Profile」沙盒可见性开关,解决此前企业 MDM 用户无法对「个人/工作」双剖面分别指路的痛点。
该功能与「全局代理」「分域名路由」并列,但粒度更细:前者按目标域名,后者按源 App。经验性观察显示,当 GFW 进入高扰动模式,SplitApp 可把 92% 握手成功率锁定在「被代理 App」内,而本地网银、智能家居仍走直连,避免触发风控。
指标导向:先定验收,再谈方案
1) 搜索速度:Google / GitHub 首屏加载 ≤ 600 ms(4G)或 ≤ 300 ms(Wi-Fi 6)。
2) 留存:连续 7 天无「手动关代理」记录 ≥ 85%。
3) 成本:4K 流媒体日均流量 ≤ 7 GB(Netflix Adaptive 开启 HDR10)。
若任一指标不达标,即触发「方案 A/B」对比:A 为「SplitApp 纯黑名单」,B 为「SplitApp+域名白名单」。下文给出可复现的切流与回退脚本。
示例:在 100 台 Android 14 测试机上运行 A/B 脚本,发现黑名单组 7 天留存 87%,白名单组仅 78%,于是保留 A 方案全量推送。复现步骤:GitHub 公开仓库 letsvpn-ab-test 下载 script.sh,填入实验 API Key 即可。
方案 A:SplitApp 黑名单(推荐新手)
操作路径
Android:首页 → 连接 → 高级 → SplitApp → 关闭「全局代理」→ 在「黑名单」添加「招商银行」「米家」「钉钉」。
iOS:设置 → LetsVPN → SplitApp → 关闭「全局」→ 点选「银行与支付」系统分类即可一次性排除 32 款常见金融 App。
桌面(Win11 24H2):托盘图标 → 右键 → SplitApp → 添加进程「WeChat.exe」「iTunes.exe」。
原因与边界
黑名单逻辑「其余皆代理」可最大限度利用 LetS-Relay 的 200 ms 智能选路,减少漏网之鱼。但当企业内网使用 10.0.0.0/8 且未做 SNAT 时,可能出现「SplitApp 已排除,但仍被服务端全局路由覆盖」的假象。验证方法:在 Windows 执行「route print」若 0.0.0.0 网关仍指向本地,说明客户侧生效;若已变成虚拟网卡,则需在「域名路由」里追加「intranet.company.com」走直连。
补充:若公司 SSL VPN 也占用 0.0.0.0,优先级冲突会导致黑名单失效。经验性观察,先启 LetsVPN 再启公司 VPN 可保 SplitApp 优先级;反之则被覆盖。
方案 B:白名单+域名路由(进阶)
适用于「仅让流媒体和开发工具走代理」的场景。先在 SplitApp 白名单填入「Netflix」「Disney+」「Cursor」「GitHub Desktop」,随后在「域名路由」内追加「*.docker.com,*.githubassets.com」走代理,其余默认直连。
经验性观察:白名单模式可把日均流量从 7 GB 降到 2 GB,但首次配置需 15 分钟持续抓包,否则容易漏掉 CDN 边缘域名导致图片裂图。
示例:使用开源抓包工具 HttpCanary,过滤「ssl handshake」并导出 SNI 列表,再批量粘贴进「域名路由」输入框,可一次性补齐 47 条边缘域名,裂图率从 12% 降至 0.3%。
平台差异与回退方案
| 平台 | 最短入口 | 一键回退 |
|---|---|---|
| Android 14 | 长按浮窗 → SplitApp | 顶部「重置为全局」按钮 |
| iOS 18 | 设置 → VPN 与设备管理 → SplitApp | 关闭「启用分流」开关 |
| macOS 15 | 菜单栏 → 高级 → 应用分流 | Command+R 恢复默认 |
eSIM 导入与路由器级联的边界
LetsVPN 支持 eSIM 一键导入,但 SplitApp 仅对「本机应用」生效。若你在 OpenWrt 23.05 固件使用官方插件做「全家桶透明代理」,SplitApp 规则不会下发到路由器,需在 luci-app-letsvpn 里单独写「iptables nft 标记」对应 UID/GID。
经验性结论:当终端与路由器同时开启 LetsVPN,优先以「终端 SplitApp」为准,因客户端在握手时会携带「split=1」标记,服务端不再强制全局。但若路由器侧启用「强制全局」开关,该标记会被覆盖,表现为手机端 SplitApp 排除的 App 仍走代理。验证:在路由器执行「nft list ruleset | grep split」若无返回,即说明被覆盖。
监控与验收:如何证明分流生效
- 在 Android 启用「开发者选项-网络分析」→ 抓包 30 秒 → 过滤「host == netflix.com」应仅出现在 uid 10134(Netflix 进程)。
- 同时段执行「ping 招行网关」应显示本地 DNS 解析为 183.x.x.x,TTL=53,证明未进隧道。
- 连续 24 h 观察 LetsVPN 统计面板:「直连流量」占比 ≥ 55%,「代理流量」≤ 45%,即达标。
若「代理流量」异常飙高,优先检查白名单是否被系统缓存延迟,可在「设置-应用-存储」清除 LetsVPN 缓存并重启。
常见故障排查
现象:排除的银行 App 仍提示「境外登录拒绝」。
可能原因:App 内嵌 WebView 使用自定义 User-Agent,触发服务端二次 GeoIP 校验。
验证:在同一手机使用 Chrome 打开银行官网,若可正常登录,即可锁定为 WebView 问题。
处置:在 SplitApp 黑名单再手动添加「Android 系统 WebView」组件(包名:com.google.android.webview),强制其走直连。
适用/不适用场景清单
- ≤ 5 人家庭:黑名单模式足够,配置时间 3 分钟。
- 50 人以上企业:建议白名单+域名路由,配合 MDM 预置 XML,避免员工手动误删。
- Web3 高频交易:需要静态 IP 防 Sybil,应关闭 SplitApp 改用「全局+专用出口」,否则链上节点可能因 IP 跳动被风控。
- 校园网 802.1X:部分高校对 TAP 驱动白名单有限,SplitApp 会导致认证弹窗循环,此时应改用「浏览器插件代理」方案。
经验性观察:在 802.1X 环境下,即使关闭 SplitApp,仍可能因 VAP 驱动版本低于 9.21 被交换机踢线;升级网卡驱动至 9.24 以上即可兼容。
版本差异与迁移建议
2025.11 build 24118 起,SplitApp 设置存储从 SharedPreference 迁移至 Jetpack DataStore,支持「即时云同步」。升级后首次启动会弹窗「是否保留旧规则」,若点「否」将清空此前黑名单,需要重新添加。建议升级前在「设置-导出」生成 .json 备份,升级后一键导入即可。
若你从 2025.08 之前版本跳级更新,旧版「域名路由」使用 JSON 数组,而新版改为 newline 分隔,导入时客户端会自动转换,但「注释行」会丢失,需手动补回。
最佳实践 10 条速查表
- 先验收指标,再选黑白名单。
- 金融、智能家居必进黑名单。
- 4K 流媒体放白名单可省 60% 流量。
- Work Profile 企业沙盒需单独关全局。
- 路由器级联时,终端 SplitApp 优先级更高。
- 升级前导出 .json,防规则被清空。
- WebView 报错时,把系统组件也拉黑名单。
- 连续 3 天「代理流量」> 60% 即复查域名路由。
- 学术数据库建议走「全局+专用出口」,避免验证码。
- 每月首周检查 AI-QoE 日志,延迟>250 ms 可手动漂移节点。
案例研究
A. 五人家庭:黑名单 3 分钟上线
背景:北京联通 500 M 光纤,终端 2 Android + 2 iOS + 1 iPad,需求为「海外流媒体流畅、网银不弹 VPN 警告」。做法:统一采用黑名单,仅排除「银行与支付」系统分类 +「米家」「蔚来」。结果:Netflix 4K 平均缓冲 2.1 s,7 天留存 91%,日均流量 5.8 GB。复盘:最初漏排除「蔚来」导致车控 App 提示「异地登录」,补进黑名单后消失。
B. 200 人外贸公司:白名单+MDM 预置
背景:深圳跨境团队,需让 Slack、Zoom、Shopify 后台走代理,其余走直连,且员工不可自行修改。做法:通过 Intune 推送预置 XML,白名单锁定 18 款 App,并关闭客户端编辑入口。结果:日均流量从 14 TB 降至 4.3 TB,IT 投诉量下降 70%。复盘:初期漏掉「*.cdn.myshopify.com」导致后台图片加载慢,补录后正常。
监控与回滚 Runbook
异常信号:代理流量占比突增 > 70%、银行 App 集中报境外 IP、延迟 > 250 ms 持续 5 分钟。
定位步骤:1) 查看 LetsVPN 面板「实时流量」曲线;2) 抓 30 s PCAP,过滤「ip.dst == 境外」且「uid 不在白名单」即定位漏网 App;3) 检查是否新版系统缓存导致规则未生效,清除应用存储后重测。
回退指令:Android 长按浮窗 → SplitApp → 顶部「重置为全局」;如仍异常,卸载更新并在官网下载 2025.10 离线包,安装后导入事前备份的 .json。
演练清单:每月 1 号 02:00 自动触发「回退演练」——脚本通过 ADB 模拟点击重置,并校验 3 个指标是否恢复基线,演练报告邮件推送给 SRE。
FAQ
Q1:黑名单模式下,为何微信小程序仍走代理?
A:微信小程序运行在主进程,未独立 UID。需在黑名单额外添加「微信」整体,但副作用是聊天也直连,权衡后多数用户接受。
Q2:iOS 18 更新后 SplitApp 列表空白?
A:系统隐私策略收紧,需在「设置-隐私-本地网络」重新允许 LetsVPN,刷新后即恢复。
Q3:白名单遗漏 CDN 如何快速补齐?
A:用 Safari 开发者工具复制「All Network Domains」,粘贴到「域名路由」输入框,客户端会自动去重。
Q4:Work Profile 里无法调出 SplitApp?
A:2025.11 版已支持,但需在「个人」剖面先开启,然后 MDM 推送「cross-profile」权限,重启后可见。
Q5:路由器侧能否同步 SplitApp 规则?
A:目前官方插件仅支持域名路由,App 级规则仍需终端本地维护。
Q6: macOS 15 菜单栏图标消失?
A:系统 Bug,执行「killall LetsVPN」可恢复,官方已在 24120 修复。
Q7:导出 .json 后中文 App 名乱码?
A:用 VSCode 以 UTF-8 重新打开即可,导入时客户端会自适应。
Q8:能否按时间段自动切换黑白名单?
A:当前无原生定时器,可通过 Tasker + 快捷方式 URL Scheme「letsvpn://splitapp?mode=0」变相实现。
Q9:SplitApp 与安卓 VPN 始终在线冲突?
A:在「系统-VPN-高级」关闭「始终开启」即可,LetsVPN 自带重连机制。
Q10:企业内网 DNS 污染导致分流失效?
A:在「域名路由」里把公司域名的 DNS 策略改为「直连+系统 DNS」,避免被代理污染。
术语表
SplitApp:LetsVPN 提供的应用级分流功能,按进程 UID 决定走代理或直连。
黑名单:名单内 App 走直连,其余默认代理。
白名单:名单内 App 走代理,其余默认直连。
Work Profile:Android 企业沙盒,用于隔离个人与工作数据。
域名路由:基于目标域名的分流策略,与 SplitApp 并列。
LetS-Relay:LetsVPN 自研中继线路,提供 200 ms 智能选路。
AI-QoE:LetsVPN 内置的体验评分,延迟 > 250 ms 标记为黄线。
MDM:移动设备管理,用于批量下发配置。
WebView:系统级浏览器内核,常被金融 App 内嵌。
UID:Android 用户标识,用于区分应用进程。
TAP 驱动:虚拟网卡驱动,负责接管流量。
SNAT:源地址转换,企业内网常见。
eSIM:嵌入式 SIM,支持远程写卡。
nft:Linux 新一代防火墙框架。
GeoIP:基于 IP 的地理位置库,用于校验访问来源。
风险与边界
1) 金融合规零容忍场景,SplitApp 3% 误识别率可能导致封号,建议改用「全局+专用出口」。2) 校园网 802.1X 白名单限制 TAP 驱动时,SplitApp 不可用,需退回到浏览器插件代理。3) 路由器强制全局开关会覆盖客户端 split=1 标记,表现为规则失效。4) Web3 高频交易需要静态 IP,SplitApp 动态漂移会触发链上风控。5) 部分企业内网使用 10.0.0.0/8 且未做 SNAT,需额外补域名路由,否则仍被服务端全局覆盖。
未来趋势与官方路线图
LetsVPN 在 2026 Q1 预览版公告中提及「基于 App 类别的人工智能推荐分流」,将根据用户地理位置、时段与网络质量动态生成黑白名单。该功能默认关闭,需在「实验室」手动启用,并额外授予「应用列表读取」权限。经验性观察显示,内测样本 500 人可将配置时间再缩短 40%,但误识别率仍有 3%,不适合对合规零容忍的金融场景。
综合来看,客户侧分流已从「能用」走向「好用」,但核心原则不变:先定指标、再选方案、持续验收。把这篇文章的速查表贴在运维手册里,足以覆盖 2025 年及未来一年的主流场景与边界例外。