用户连不上点到站点网关,你打开网关边栏,页面上任何地方都没有连接历史。配置、证书、状态都在,却没有记录。日志确实存在,但它们根本不是网络页面生成的。它们来自附加在网关资源上的诊断设置,而该设置位于 Monitor 之下;所以第一次在显而易见的地方搜索什么也找不到,人们便以为该服务不保留任何审计记录。

为什么显而易见的搜索会失败

较早的指南称 Azure 点到站点 VPN 没有审计,在服务不提供逐连接记录的时代,这话是对的。现在的网关会发布隧道诊断记录,所以有用的问题变了:不是有没有日志,而是哪个资源发出日志、你开启了哪个类别。网关边栏是配置界面,而配置界面很少同时充当日志查看器。诊断设置是按资源划分的对象,因此你选择的资源决定后续的一切。

另一半困惑来自身份验证。基于证书的点到站点连接不会像身份提供程序那样生成逐用户登录事件,所以找不到某个具名用户输入密码的记录。

把诊断设置附加到网关资源

打开 Monitor,然后打开 Diagnostic settings,新增一个设置,目标应是虚拟网络网关本身,而不是包含它的虚拟网络。选择名为 P2SDiagnosticLog 的点到站点诊断类别,因为它才承载逐客户端连接记录;隧道、路由或 IKE 类别只在该类别覆盖站点到站点错误时才添加。然后把数据发送到由你掌控的 Log Analytics 工作区,并设定你刻意选择的保留期。大多数失败的搜索是把设置附加到了错误的资源,而不是缺少功能。

类别列表因网关类型和代际而异。如果没有点到站点类别,网关可能早于该功能,或运行着从不发出该类别的 SKU,所以在排查权限问题前先确认受支持的类别。没有点到站点类别的网关并没有坏;它只是不能成为该记录的来源,最接近的替代是隧道或 IKE 类别,它记录客户端地址,尽管不描述点到站点会话。在就日志缺失提交支持工单前,先确认类别列表。

在所用模式对应的表里读取记录

在旧版收集模式下,条目进入 AzureDiagnostics 表,类别显示为列值,而在资源专属表中网关有自己的表。无论哪种情况,都按网关资源和失败尝试前后时间窗查询,然后读关联关系,而不是逐行去看:

AzureDiagnostics
| where ResourceType == "VIRTUALNETWORKGATEWAYS"
| where _ResourceId has "gateway-name"
| where TimeGenerated > ago(2h)
| project TimeGenerated, Category, OperationName, ResultType, ResultDescription
| order by TimeGenerated desc

列集合取决于你的收集模式,所以把查询当作一种形状,而不是脚本。你要找的是一个出现后又消失的客户端地址,以及一个不是成功的结果类型。

把网关记录与客户端自己的视角配对

网关日志描述的是隧道,而不是笔记本为什么没能建立隧道。在同一时间戳收集客户端一侧:RAS 客户端的 Windows 事件日志、macOS 连接日志,或客户端应用显示的错误文本。没有匹配客户端尝试的网关记录指向客户端;客户端报告成功而网关什么也没记录,通常说明配置文件指向了另一个网关。

把两半放在同一张工单里。只有网关日志会引出错误结论,只有客户端日志则无法说明数据包是否曾经到达。

如果两边都没有任何记录,先检查客户端的时钟,再怀疑平台。时间戳偏差会让关联失败,看起来和缺数据一模一样。

保留、范围与 runbook 条目

隧道记录包含客户端地址和连接时间戳,所以应当把它们当作有删除计划的个人数据,而不是保留平台默认值。还要检查工作区没有在摄取订阅中每个资源的每个类别,因为嘈杂的工作区会让关联比直接读客户端日志更慢。

最后,把设置名称、工作区和所选类别写进网关的 runbook。下一个调试客户端的人会先看网关边栏,什么也找不到,然后断定日志不存在。

相关文章