使用诊断日志对 Azure VPN 网关进行故障排除

本文将帮助你了解可用于 VPN 网关诊断的不同日志,并学习如何使用它们来有效地排查 VPN 网关问题。

如果本文未解决 Azure 问题,请访问 Microsoft Q&A 和 Stack Overflow 上的 Azure 论坛。 可以在这些论坛上发布问题。 还可提交 Azure 支持请求。 若要提交支持请求,请在 Azure 支持页上提交。

Azure 中提供以下日志:

  • GatewayDiagnosticLog
  • TunnelDiagnosticLog
  • RouteDiagnosticLog
  • IKEDiagnosticLog
  • P2SDiagnosticLog

*对于基于策略的网关,只有 GatewayDiagnosticLog 和 RouteDiagnosticLog 可用。

有关所有 VPN 网关日志,请参阅 Azure VPN 网关监视数据参考

若要使用 Azure Log Analytics 基于 Azure VPN 网关设置诊断日志事件,请参阅在 Azure Monitor 中创建诊断设置

GatewayDiagnosticLog

在 GatewayDiagnosticLog 表中审核配置更改。 你执行的更改可能几分钟后才会在日志中反映出来。

这里有一个示例查询可供参考。

AzureDiagnostics  
| where Category == "GatewayDiagnosticLog"  
| project TimeGenerated, OperationName, Message, Resource, ResourceGroup  
| sort by TimeGenerated asc

此查询是关于 GatewayDiagnosticLog 的,它显示多个列

Name 说明
TimeGenerated 每个事件的时间戳(UTC 时区)。
OperationName 发生的事件。 它可以是 SetGatewayConfiguration、SetConnectionConfiguration、HostMaintenanceEvent、GatewayTenantPrimaryChanged、MigrateCustomerSubscription、GatewayResourceMove、ValidateGatewayConfiguration 中的任意一个。
消息 正在发生的操作的详细信息,并列出了成功/失败结果。

以下示例演示了在应用新配置时记录的活动:

GatewayDiagnosticLog 中所示的“设置网关”操作的示例。

请注意,每次在 VPN 网关或本地网关上修改某个配置时,都会记录 SetGatewayConfiguration

通过将 GatewayDiagnosticLog 表中的结果与 TunnelDiagnosticLog 表的结果相比较,可帮助我们确定在更改配置或进行维护活动时隧道连接是否失败。 如果失败,它会为潜在的根本原因提供重要指示。

TunnelDiagnosticLog

TunnelDiagnosticLog 表适合用于检查隧道的历史连接状态

这里有一个示例查询可供参考。

AzureDiagnostics
| where Category == "TunnelDiagnosticLog"
//| where remoteIP_s == "<REMOTE IP OF TUNNEL>"
| project TimeGenerated, OperationName, remoteIP_s, instance_s, Resource, ResourceGroup
| sort by TimeGenerated asc

此查询是关于 TunnelDiagnosticLog 的,它显示多个列

Name 说明
TimeGenerated 每个事件的时间戳(UTC 时区)。
OperationName 发生的事件。 它可以是 TunnelConnected 或 TunnelDisconnected 。
remoteIP_s 本地 VPN 设备的 IP 地址。 在实际情况中,按相关本地设备的 IP 地址进行筛选将很有用(如果有多个 IP 地址)。
Instance_s 触发事件的网关角色实例。 它可以是 GatewayTenantWorker_IN_0 或 GatewayTenantWorker_IN_1(它们是网关的两个实例的名称)。
资源 指示 VPN 网关的名称。
ResourceGroup 指示网关所在的资源组。

示例输出:

TunnelDiagnosticLog 中所示的隧道连接事件的示例。

TunnelDiagnosticLog 适合用于排查有关 VPN 意外断开连接的历史事件问题。 它的轻型特性让你能够轻松分析几天内较大的时间范围。 只有在确定断开连接的时间戳之后,才能切换到 IKEdiagnosticLog 表的更详细分析,来更深入地了解断开连接的原因(如果这些断开连接与 IPsec 有关)。

一些故障排除技巧:

  • 如果在一个网关实例上观察到断开连接事件,且几秒钟后在不同的网关实例上观察到连接事件,则表示网关故障转移。 此类事件通常是由于网关实例上的维护而引起的。 若要详细了解此行为,请查看关于 Azure VPN 网关冗余
  • 如果你有意在 Azure 端上运行网关重置,则会观察到此行为,这将导致重启活动网关实例。 若要详细了解此行为,请查看重置 VPN 网关
  • 如果在一个网关实例上看到断开连接事件,且几秒钟后在同一网关实例上看到连接事件,则可能是由于网络问题导致 DPD 超时,或者本地设备错误地发送了断开连接事件

RouteDiagnosticLog

RouteDiagnosticLog 表跟踪静态修改的路由或通过 BGP 接收的路由的活动。

这里有一个示例查询可供参考。

AzureDiagnostics
| where Category == "RouteDiagnosticLog"
| project TimeGenerated, OperationName, Message, Resource, ResourceGroup

此查询是关于 RouteDiagnosticLog 的,它显示多个列

Name 说明
TimeGenerated 每个事件的时间戳(UTC 时区)。
OperationName 发生的事件。 可以是 StaticRouteUpdate、BgpRouteUpdate、BgpConnectedEvent、BgpDisconnectedEvent 中的任意一个。
消息 正在发生的操作的详细信息。

输出将显示有关已连接/断开连接的 BGP 对等体以及已交换路由的有用信息。

示例:

RouteDiagnosticLog 中所示的 BGP 路由交换活动的示例。

IKEDiagnosticLog

IKEDiagnosticLog 表为 IKE/IPsec 提供详细的调试记录。 在排查断开连接故障或连接 VPN 方案失败时,这非常有用。

这里有一个示例查询可供参考。

AzureDiagnostics  
| where Category == "IKEDiagnosticLog" 
| extend Message1=Message
| parse Message with * "Remote " RemoteIP ":" * "500: Local " LocalIP ":" * "500: " Message2
| extend Event = iif(Message has "SESSION_ID",Message2,Message1)
| project TimeGenerated, RemoteIP, LocalIP, Event, Level 
| sort by TimeGenerated asc

此查询是关于 IKEDiagnosticLog 的,它显示多个列

Name 说明
TimeGenerated 每个事件的时间戳(UTC 时区)。
RemoteIP 本地 VPN 设备的 IP 地址。 在实际情况中,按相关本地设备的 IP 地址进行筛选将很有用(如果有多个 IP 地址)。
LocalIP 正在进行故障排除的 VPN 网关的 IP 地址。 在实际情况中,按相关 VPN 网关的 IP 地址进行筛选将很有用(如果订阅中有多个 IP 地址)。
事件 包含用于故障排除的诊断消息。 它们通常以关键字开头,指的是 Azure 网关执行的操作:[SEND] 表示由 Azure 网关发送的 IPSec 数据包引发的事件。 [RECEIVED] 表示由于从本地设备接收到的数据包而引发的事件。 [LOCAL] 表示 Azure 网关在本地执行的操作。

请注意,RemoteIP、LocalIP 和 Event 列并没有出现在 AzureDiagnostics 数据库上的原始列列表中,而是通过分析“Message”列的输出来添加到查询中,从而简化其分析。

疑难解答提示:

  • 若要确定 IPSec 协商的开始,需要找到初始 SA_INIT 消息。 此类消息可由隧道的任一端发送。 发送第一个数据包的一方在 IPsec 术语中称为“发起程序”,另一方则称为“响应方”。 第一个 SA_INIT 消息始终是 rCookie = 0 的消息。

  • 如果 IPsec 隧道未能建立,Azure 将每几秒继续重试一次。 出于此原因,在 IKEdiagnosticLog 上排查“VPN 关闭”问题很方便,因为你无需等待特定时间就可重现问题。 而且在理论上,每次尝试时失败都始终相同,因此你可随时放大到一个失败的协商“示例”。

  • SA_INIT 包含对等机要用于此 IPSec 协商的 IPSec 参数。 官方文档默认的 IPsec/IKE 参数列出了具有默认设置的 Azure 网关支持的 IPsec 参数。

P2SDiagnosticLog

VPN 诊断的最后一个可用表是 P2SDiagnosticLog。 此表跟踪点到站点的活动(仅限 IKEv2 和 OpenVPN 协议)。

这里有一个示例查询可供参考。

AzureDiagnostics  
| where Category == "P2SDiagnosticLog"  
| project TimeGenerated, OperationName, Message, Resource, ResourceGroup

此查询是关于 P2SDiagnosticLog 的,它将显示多个列。

名称 说明
TimeGenerated 每个事件的时间戳(UTC 时区)。
OperationName 发生的事件。 将为 P2SLogEvent。
消息 正在发生的操作的详细信息。

输出将显示网关应用的所有点到站点设置,以及现有的 IPsec 策略。

P2SDiagnosticLog 中所示的点到站点连接的示例。

此外,当客户端使用 OpenVPN 和 Microsoft Entra ID 身份验证建立点到站点的连接时,该表将记录数据包活动,如下所示:

[MSG] [default] [OVPN_XXXXXXXXXXXXXXXXXXXXXXXXXXX] Connect request received. IP=0.X.X.X:XXX
[MSG] [default] [OVPN_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx] AAD authentication succeeded. Username=***tosouser@contoso.com
[MSG] [default] [OVPN_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx] Connection successful. Username=***tosouser@contoso.com IP=10.0.0.1

注意

在点到站点日志中,用户名部分地进行模糊处理。 客户端用户 IP 的第一个八位位组替换为 0

后续步骤

若要基于隧道资源日志配置警报,请参阅基于 VPN 网关资源日志设置警报