使用诊断日志对 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 中的任意一个。 |
消息 | 正在发生的操作的详细信息,并列出了成功/失败结果。 |
以下示例演示了在应用新配置时记录的活动:
请注意,每次在 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 适合用于排查有关 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 对等体以及已交换路由的有用信息。
示例:
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 策略。
此外,当客户端使用 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 网关资源日志设置警报。