使用診斷記錄針對 Azure VPN 閘道進行疑難排解
本文可協助您了解可用於 VPN 閘道診斷的各種記錄,以及如何使用這些記錄對 VPN 閘道問題進行有效的疑難排解。
若本文中未提及您的 Azure 問題,請前往 Microsoft Q&A 及 Stack Overflow 上的 Azure 論壇。 您可以在這些論壇中張貼您的問題,或將問題貼到 Twitter 上的 @AzureSupport。 您也可以提交 Azure 支援要求。 若要提交支援要求,請在 Azure 支援頁面上,選取 [取得支援]。
Azure 中有下列記錄可供使用*:
名稱 | 說明 |
---|---|
GatewayDiagnosticLog | 包含閘道設定事件、主要變更和維護事件的診斷記錄。 |
TunnelDiagnosticLog | 包含通道狀態變更事件。 通道連線/中斷連線事件具有狀態變更的摘要原因 (如果適用)。 |
RouteDiagnosticLog | 記錄靜態路由的變更和閘道上發生的 BGP 事件。 |
IKEDiagnosticLog | 記錄閘道上的 IKE 控制訊息和事件。 |
P2SDiagnosticLog | 記錄閘道上的點對站控制訊息和事件。 |
*針對原則型網路閘道,只有 GatewayDiagnosticLog 和 RouteDiagnosticLog 可供使用。
請注意,這些資料表中有幾個可用的資料行。 在本文中,我們只會呈現最相關的記錄,以方便使用記錄。
設定記錄
請遵循此程序,了解如何使用 Azure Log Analytics 設定來自 Azure VPN 閘道的診斷記錄事件:
使用本文建立 Log Analytics 工作區。
在監視>診斷設定分頁上尋找您的 VPN 閘道。
- 選取網路閘道,然後按一下 [新增診斷設定]。
- 填入診斷設定名稱,選取所有記錄類別,然後選擇 Log Analytics 工作區。
注意
一開始可能需要幾小時的時間才會顯示資料。
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 位址時非常實用,結果應該會有一個以上的 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 位址時非常實用,結果應該會有一個以上的 IP 位址。 |
LocalIP | 正在進行疑難排解的 VPN 閘道 IP 位址。 在真實世界環境中,篩選相關 VPN 閘道的 IP 位址時非常實用,您的訂用帳戶應該會有一個以上的 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 原則。
此外,只要用戶端透過 IKEv2 或 OpenVPN 建立點對站連線,此資料表就會記錄封包活動、EAP/RADIUS 交談,以及使用者的成功/失敗結果。
後續步驟
若要設定通道資源記錄的警示,請參閱設定 VPN 閘道資源記錄的警示。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應