监控路由器 VPN,别只信一盏状态灯
对端状态、所选路由和一次被允许的应用探测回答的是不同问题。在失败的边界上告警,而不是盯着一枚绿色图标。
状态页显示已连接,指示灯是绿的,办公室却访问不了文件服务器。这两个事实一个关于隧道,另一个关于穿过隧道的路径。同时监控两者,才能区分可据以行动的告警和学会忽略的告警。
按从对端向外的顺序,做五项检查。
检查 1:对端或关联状态
每种协议都暴露自己的状态。WireGuard 通过 wg show 显示每个对端最近一次握手和传输计数。OpenVPN 把会话状态写进状态文件或管理接口,IPsec 则通过 ipsec statusall 这类工具暴露安全关联。陷阱是把时间戳当成结论来读:一个没有数据要发的空闲 WireGuard 对端不会在近期握手,这并不等于故障。
在通知任何人之前,把时间戳与预期流量和 keepalive 设置作对比。
检查 2:所选路由
隧道接口可以存在,却没有任何流量被路由进去。检查你关心的目的地址的转发表,而不是隧道自身子网。若前缀缺失或指向别处,对端状态便无关紧要。
这项检查能抓住状态灯永远不会显示的那类故障。
有用的第二项检查还要比对源地址。ip route get 10.20.5.10 会返回下一跳、接口和首选源地址,而源地址错误就足以在远端破坏回程流量。把预期三元组记录一次,之后任一元素变化就告警。仅这一行就能抓住 NAT 变更、接口抖动和策略路由错误。
检查 3:被允许的应用路径
探测能代表真实需求的东西。路由器发出的 ping 使用路由器自身的地址和策略,可能与转发的 LAN 流量不同,而且许多主机会限速 ICMP。若需求是私有服务,就在其真实端口上测试该服务。
探测量要适度。监控循环不应变成它所测量的流量。
检查 4:变化了什么、何时变化
把 WAN 变更、密钥更新、路由撤销和应用故障关联到同一条时间线上。把隧道故障与悄悄恢复普通上网的备用路由区分开,因为二者会产生相同的用户报告和相反的诊断。时区错误会把顺序颠倒,所以比较前先归一化。正是时间线让四项检查变成一个原因。
日志只保留状态转换,不保留载荷。
检查 5:告警要指明边界
只说“VPN 断了”的告警有一半概率把人指错方向。而说“对端握手已陈旧十二分钟”“到 10.20.0.0/16 的路由缺失”或“到 445 端口的探测失败”的告警,则指向某一项具体检查。
保留运行计数器,而不是翻看载荷。计数器足以回答监控问题,又不必收集你并不需要的内容。
而下一步怎么办交给故障切换策略决定。监控应当指出哪条边界失败,而不是每次探测失败都放行一次大范围绕过。OpenVPN 2.6 手册记录了状态文件和管理接口,使第一项检查可以脚本化。