解决LetsVPN频繁断线:日志必看的5个字段

为什么日志字段比「一键诊断」更可靠
LetsVPN 的 AI-QoE 引擎确实能在 30 ms 内触发节点漂移,但运营经验表明,30 ms 的切换只解决「服务端抖动」。当断线根因落在本地路由器、ISP QoS 或企业防火墙时,客户端界面只会给出「网络不稳定」这一模糊提示,既不含节点编号,也不记录重试次数。此时唯一能还原现场的就是本地日志中的五个关键字段。
2025 年 11 月版(Windows 10.12.4 / Android 10.12.6)开始,官方把日志目录从安装路径挪到用户区,解决了旧版「写入失败导致空日志」的 Bug,也让我们在排障时拿到完整时间轴。新版还顺带把日志缓冲区从 128 KB 扩容到 1 MB,高并发刷屏时丢行率从 5 % 降到经验性观察低于 0.3 %。
一分钟拿到日志:平台差异与最短路径
Windows 桌面端
托盘图标右键 → 帮助 → 导出调试日志(约 3 s 生成 ZIP)。解压后定位到 letsvpn.log,用 VS Code 或 Notepad++ 以 UTF-8 无 BOM 打开,避免中文节点名乱码。若公司电脑装了 DLP 软件,ZIP 可能被加密网关截留,此时可直接复制 %LOCALAPPDATA%\LetsVPN\logs 目录,跳过压缩步骤。
Android 端
侧滑菜单 → 设置 → 关于 → 长按「版本号」7 次 → 开发者选项激活 → 返回设置 → 调试 → 导出日志。文件保存在 /Android/data/com.letsvpn/files/logs/,MIUI 14 及以上需手动授予「所有文件访问」权限,否则看到的是空文件夹。HarmonyOS 4 路径相同,但「文件」应用默认不显示 Android 目录,需用系统自带的「日志共享」按钮一键发邮件。
提示:若你开启了「自动清理缓存」,日志最长只保留 48 h;排障前先把「设置-存储-日志保留天数」调到 7 天,避免关键现场被循环覆盖。
五个字段速查表:含义、正常值与异常阈值
| 字段 | 正常示例 | 异常阈值 | 读到异常下一步 |
|---|---|---|---|
| timestamp | 2025-11-19T14:23:45.123Z | 与系统时间差 >30 s | 检查本地 CMOS 电池、是否开启自动校时 |
| node_id | lax-009 | 出现「unk-000」 | 表明节点注册表拉取失败,清应用数据重登 |
| handshake_retry | 0-2 | 连续 >5 | 本地 UDP 被限速,切 TCP 或换 443 端口 |
| qoe_score | 85-100 | <60 且持续 10 s | 触发节点漂移,若仍 <60 则判定为本地宽带抖动 |
| error_code | 0 | 1006/5023 | 1006=被 GFW 主动探测 RST;5023=服务器过载 |
经验性观察:在 2025 年 9 月的高扰动日,handshake_retry ≥ 6 且 error_code=1006 的组合出现概率提升到 34 %(样本 200 条,采集自 3 个省级教育网出口)。此时即便触发 AI 漂移,新节点仍会被 RST,必须手动降跳数或开启 Obfs4。若你在日志里同时发现 qoe_score 在 90 以上,基本可排除链路质量问题,把排查重点锁在特征识别层面。
决策树:先判本地还是远端
- 若
qoe_score在 60 以上但handshake_retry高,优先怀疑本地 UDP 限速 → 切 TCP/443。 - 若
qoe_score持续 <60 且 node_id 已漂移 2 次,怀疑省级出口晚高峰丢包 → 手动选延迟更低的 IDC 节点。 - 若
error_code=1006且多级跳数 ≥4,怀疑特征被识别 → 降跳数到 2 并开启 Obfs4。 - 若
timestamp与系统时间差 >30 s,TLS 证书会校验失败直接断连 → 先校准时间再重连。
回退方案:任何手动调整节点后,先在「设置-实验室」关闭「AI 自动漂移」30 分钟,避免人机互搏导致日志刷屏。经验性观察显示,关闭后日志量平均下降 42 %,关键异常行更易浮现。
可复现实验:用 PowerShell 快速过滤异常
把以下脚本保存为 scan.ps1,放到解压后的日志目录执行,即可输出过去 1 h 内异常记录:
Get-Content letsvpn.log -Wait |
Select-String -Pattern 'handshake_retry.*[5-9]|error_code.*(1006|5023)|qoe_score.*[0-5][0-9]' |
ForEach-Object { Write-Host "$(Get-Date -f HH:mm:ss) 异常行: $_" -ForegroundColor Red }
经验性结论:当脚本 10 分钟内连续吐出 ≥3 行,说明「断线-重连」进入死循环,此时再切节点已无意义,应降跳数或换协议。你可以把输出重定向到 CSV,再用 Excel 画折线,直观看到异常波峰是否对齐本地晚高峰。
SplitApp 分流与日志冲突:一个容易被忽视的细节
LetsVPN 的 SplitApp 允许把「国内应用」设为直连。但 2025 年 11 月版前,若被分流的应用恰好触发系统 VPN 保活(如微信后台心跳),会让 handshake_retry 瞬间 +1,而用户却感知不到真正的出口流量。解决方法是:在 SplitApp 列表里把「系统组件-Android 系统」也勾回代理,或升级到 10.12.6 以上,官方已把保活包标记为「Bypass SplitApp」。若你坚持使用旧版,可在日志检索 bypass=false 的行,确认保活是否被误送代理。
版本差异与迁移建议
Windows 10.11 → 10.12
日志格式由 CSV 改为 NDJSON,老版本排障脚本需把分隔符从「,」换成正则「\s+」。迁移时先把旧日志另存,避免字段错位。NDJSON 的好处是嵌套结构可扩展,官方后续计划在 meta 对象里追加 CPU 温度、Wi-Fi 信道等上下文,方便做交叉分析。
Android 10.10 → 10.12
新增「qoe_score」字段,旧版日志里该列恒为 null。若跨版本对比,需要过滤空值再统计。10.12 还在日志头写入 "log_ver":2,脚本可通过该标记自动切换解析模式,实现一份代码兼容新旧日志。
何时不该死磕日志:三条硬边界
- 公司网络已部署 TLS 1.3 中间人代理 → 日志里会高频出现
error_code=5250(证书校验失败),此时唯一解是向 IT 申请白名单,日志无法自愈。 - 校园网 802.1X 每 30 分钟强制重认证 → 即使节点质量 100 分也会周期性掉线,应改用路由器拨号,日志只能确认周期,无法消除。
- 出口 NAT 为运营商级 CGN,UDP 源端口 5 分钟回收 →
handshake_retry必爆,切 TCP 是唯一出路。
遇到上述场景,再漂亮的漂移策略也救不了,节省时间的办法是:先对照硬边界清单,确认命中即换网络环境,而非继续刷日志。
验证与观测方法:让结论可量化
1. 基准测试:选同一节点,连续 Ping 1.1.1.1 1000 次,记录丢包率 A。
2. 客户端观测:清空日志后重连,运行 30 分钟,用脚本提取 qoe_score 均值 B。
3. 对比:若 B<60 且 A<1%,说明丢包发生在 VPN 隧道外,需调跳数;若 A≈B,则丢包在物理链路,优先换宽带。
示例:家庭 300 Mbps 宽带晚高峰 Ping 丢包 0.2 %,同一时段日志 qoe_score 均值 55,降跳数后 score 提到 78,而 Ping 丢包无变化,证明调优有效且瓶颈不在 ISP。
常见 FAQ
Q: 日志里看到「unk-000」但节点列表能刷新,怎么办?
A: 这是本地缓存与节点注册表版本号不一致,清应用数据后重登即可,无需卸载。若清数据后仍复现,经验性观察多为运营商 DNS 劫持导致注册表域名解析失败,可手动把 DNS 切到 8.8.8.8 再试。
Q: 为什么 AI 漂移后延迟反而更高?
A: AI 选路以「QoE 分数」优先,不是地理距离。若你想手动锁定低延迟,可在「节点-延迟排序」里 star 标记固定出口,AI 会排除该节点外的漂移。经验性观察显示,star 后平均延迟可再降 8–12 ms,但牺牲 2 % 的带宽峰值。
Q: PowerShell 脚本在 Windows 7 无法识别 -Wait 参数?
A: -Wait 需要 PS 5.0+,Win7 默认 2.0。可把脚本改成轮询:while($true){Get-Content ...;Start-Sleep 5},功能等价。
Q: Android 日志导出按钮灰色?
A: 多出现在 ColorOS 13,系统禁止第三方应用读取自身目录。解决办法:设置 → 应用管理 → LetsVPN → 权限 → 文件与媒体 → 改为「允许」。
Q: error_code=5023 持续 20 分钟,是否节点炸了?
A: 5023 表示「节点过载但未彻底宕机」,官方负载均衡会在 15 分钟内逐步踢掉重试连接。若你业务紧急,手动切到其他 IDC 即可,无需等自动恢复。
最佳实践速查表
- 日志先留 7 天,再开「自动清理」。
- 出现 1006 先降跳数,再开 Obfs4,最后才换协议。
- 每季度用脚本批量比对
handshake_retry趋势,>3 倍方差即向官方提工单。 - 企业用户务必在路由器端关闭 UDP 443 重定向,避免与 LetS-Relay 冲突。
案例研究
案例 A:50 人外贸公司午休集体掉线
现象:12:30 起全员 LetsVPN 断流,持续 5 分钟,界面提示「网络不稳定」。
排查:提取网关出口日志,发现同一时段 handshake_retry 中位数 7,error_code=1006 占 82 %。
做法:当场降跳数到 2 并开启 Obfs4,3 分钟内恢复;后续把午休时段设为「静态节点」模式。
复盘:根因是办公网出口 IP 固定,午休高并发流量被 GFW 特征聚类,日志里 1006 集中爆发给出明确信号。
案例 B:高校宿舍晚高峰游戏延迟暴涨
现象:21:00 后延迟从 40 ms 飙升到 200 ms,游戏掉帧。
排查:对比基线 Ping 丢包 0.1 %,日志 qoe_score 均值 52,node_id 已漂移 3 次。
做法:手动选「上海 BGP」节点并切 TCP,延迟回到 45 ms;同时把日志保留天数调到 14,用于期中报告。
复盘:教育网省网出口晚高峰 QoS 限速 UDP,日志 score 与 Ping 丢包背离,指明问题在隧道外。
监控与回滚 Runbook
异常信号:10 分钟内 handshake_retry>5 出现 ≥5 次或 qoe_score 连续 3 个采样点 <60。
定位步骤:1. 立即导出日志;2. 用脚本过滤异常行;3. 对照「五个字段速查表」打标签。
回退指令:降跳数→开 Obfs4→切 TCP→手动选 IDC 节点→关闭 AI 漂移 30 min。
演练清单:每季度安排一次「午休封 443 UDP」模拟,验证脚本告警阈值是否漂移,确保值班同事 5 分钟内完成回退。
风险与边界
1. 日志不包含加密密钥,但仍含节点 IP,导出后勿直接上传公网论坛。
2. 低端路由器(<128 MB 内存)开 TCP 443 可能触发 NAT 表溢出,表现与 handshake_retry 高类似,需换路由器验证。
3. Android 13 以上启用了「内存压缩」,后台导出大日志时可能被系统杀进程,建议前台操作或分段导出。
未来趋势:云端日志订阅展望
LetsVPN 在 2025 年冬季 roadmap 中预告将开放「云端日志订阅」Beta,届时用户可把加密日志流推送到自托管 Loki,配合 Grafana 做可视化。这意味着今天的五个字段只是最小闭环,未来排障会走向「本地+云端」混合观测。先把脚本和字段含义吃透,等新版发布你就能直接复用现有正则,把排障时间从 10 分钟再压缩到 2 分钟。官方访谈透露,Beta 初期将免费提供 30 天 5 GB 流量,足够一个 50 人团队做全量观测试点。