使用診斷記錄針對 Azure VPN 閘道進行疑難排解
本文可協助您了解可用於 VPN 閘道診斷的各種記錄,以及如何使用這些記錄對 VPN 閘道問題進行有效的疑難排解。
若本文中未提及您的 Azure 問題,請前往 Microsoft Q&A 及 Stack Overflow 上的 Azure 論壇。 您可以在這些論壇中張貼您的問題,或將問題貼到 Twitter 上的 @AzureSupport。 您也可以提交 Azure 支援要求。 若要提交支援要求,請在 Azure 支援頁面上,選取 [取得支援]。
以下是可在 Azure 中使用的記錄:
- GatewayDiagnosticLog
- TunnelDiagnosticLog
- RouteDiagnosticLog
- IKEDiagnosticLog
- P2SDiagnosticLog
*針對原則型網路閘道,只有 GatewayDiagnosticLog 和 RouteDiagnosticLog 可供使用。
如需所有 VPN 閘道記錄,請參閱 Azure VPN 閘道監視資料參考
若要使用 Azure Log Analytics 從 Azure VPN 閘道設定診斷記錄事件,請參閱在 Azure 監視器中建立診斷設定。
GatewayDiagnosticLog
設定變更會在 GatewayDiagnosticLog 資料表中進行審核。 可能需要幾分鐘的時間,您執行的變更才會反映在記錄中。
在這裡,我們提供您範例查詢作為參考。
AzureDiagnostics
| where Category == "GatewayDiagnosticLog"
| project TimeGenerated, OperationName, Message, Resource, ResourceGroup
| sort by TimeGenerated asc
這項關於 GatewayDiagnosticLog 的查詢會顯示多個資料行。
名稱 | 說明 |
---|---|
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 的查詢會顯示多個資料行。
名稱 | 說明 |
---|---|
TimeGenerated | 每個事件的時間戳記 (UTC 時區)。 |
OperationName | 發生的事件。 可以是 TunnelConnected 或 TunnelDisconnected。 |
remoteIP_s | 內部部署 VPN 裝置的 IP 位址。 在真實世界的案例中,如果有多個相關的內部部署裝置,則依其 IP 位址進行篩選會很有用。 |
Instance_s | 觸發事件的閘道角色執行個體。 可以是 GatewayTenantWorker_IN_0 或 GatewayTenantWorker_IN_1,也就是兩個閘道執行個體的名稱。 |
資源 | 指出 VPN 閘道的名稱。 |
ResourceGroup | 指出閘道所在的資源群組。 |
範例輸出︰
對於過去非預期發生的 VPN 中斷連線事件,適合使用 TunnelDiagnosticLog 進行疑難排解。 這個記錄的輕量型特性可讓您輕輕鬆鬆分析幾天內的大量時間範圍。 只有在找出中斷連線的時間戳記之後,才能切換至 IKEdiagnosticLog 資料表更詳細的分析,深入探索中斷連線的原因應該與 IPsec 有關。
一些疑難排解提示:
- 如果您在一個閘道執行個體上觀察到中斷連線事件,然後在幾秒鐘內看到不同閘道執行個體上發生連線事件,則表示發生了閘道容錯移轉。 這類事件通常是由於閘道執行個體上的維護而造成的。 若要深入了解此行為,請參閱關於 Azure VPN 閘道備援。
- 如果您在 Azure 端故意執行閘道重設 - 這會導致使用中閘道執行個體重新啟動。 若要深入了解此行為,請參閱重設 VPN 閘道。
- 如果您在一個閘道執行個體上看到中斷連線事件,然後在幾秒鐘內看到相同的閘道執行個體發生連線事件,則可能發生造成 DPD 逾時的網路問題,或是內部部署裝置錯誤傳送中斷連線。
RouteDiagnosticLog
RouteDiagnosticLog 資料表靜態修改的路由或透過 BGP 接收的路由相關活動。
在這裡,我們提供您範例查詢作為參考。
AzureDiagnostics
| where Category == "RouteDiagnosticLog"
| project TimeGenerated, OperationName, Message, Resource, ResourceGroup
這項關於 RouteDiagnosticLog 的查詢顯示多個資料行。
名稱 | 說明 |
---|---|
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 的查詢顯示多個資料行。
名稱 | 說明 |
---|---|
TimeGenerated | 每個事件的時間戳記 (UTC 時區)。 |
RemoteIP | 內部部署 VPN 裝置的 IP 位址。 在真實世界的案例中,如果有多個相關的內部部署裝置,則依其 IP 位址進行篩選會很有用。 |
LocalIP | 正在進行疑難排解的 VPN 閘道 IP 位址。 在真實世界的案例中,如果在訂用帳戶中有多個相關的 VPN 閘道,則依其 IP 位址進行篩選會很有用。 |
事件 | 包含適用於疑難排解的診斷訊息。 這些訊息通常會以關鍵字開頭,並參考 Azure 閘道所執行的動作:[傳送] 表示由 Azure 閘道傳送的 IPSec 封包所造成的事件。 [接收] 表示從內部部署裝置接收封封包所產生的事件。 [本機] 表示 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 閘道資源記錄的警示。