使用 Azure CLI 使用 Azure 網路監看員 管理虛擬機的封包擷取
網路監看員 封包擷取工具可讓您建立擷取會話,以記錄 Azure 虛擬機(VM) 的網路流量。 系統會為擷取工作階段提供篩選器,以確保您只會擷取到您想要的流量。 封包擷取有助於主動和主動診斷網路異常。 其應用程式超越異常偵測範圍,包括收集網路統計數據、取得網路入侵的見解、偵錯客戶端-伺服器通訊,以及解決各種其他網路挑戰。 網路監看員 封包擷取可讓您從遠端起始封包擷取,以減輕在特定虛擬機上手動執行的需求。
在本文中,您將瞭解如何使用 Azure PowerShell 從遠端設定、啟動、停止、下載及刪除虛擬機封包擷取。 若要瞭解如何使用 Azure 入口網站 或 Azure CLI 管理封包擷取,請參閱使用 Azure 入口網站 管理虛擬機的封包擷取或使用 PowerShell 管理虛擬機的封包擷取。
必要條件
具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶。
Azure Cloud Shell 或 Azure CLI。
本文中的步驟會在 Azure Cloud Shell 中以互動方式執行 Azure CLI 命令。 若要在 Cloud Shell 中執行命令,請選取程式代碼區塊右上角的 [ 開啟 Cloud Shell ]。 選取 [複製] 以複製程式碼,並將它貼到 Cloud Shell 中以執行。 您也可以從 Azure 入口網站內執行 Cloud Shell。
您也可以 在本機 安裝 Azure CLI 來執行命令。 如果您在本機執行 Azure CLI,請使用 az login 命令登入 Azure。
具有下列輸出 TCP 連線的虛擬機:
- 透過埠 443 對記憶體帳戶
- 至 169.254.169.254,透過埠 80
- 至 168.63.129.16 透過埠 8037
注意
- 如果未為該區域啟用 網路監看員,Azure 會在虛擬機區域中建立 網路監看員 實例。 如需詳細資訊,請參閱啟用或停用 Azure 網路監看員。
- 網路監看員 封包擷取需要 網路監看員 代理程式 VM 擴充功能才能安裝在目標虛擬機上。 如需詳細資訊,請參閱安裝 網路監看員 代理程式。
- 必要條件中列出的最後兩個IP位址和埠,在所有使用 網路監看員 代理程式且偶爾可能會變更的 網路監看員 工具中都是常見的。
如果網路安全組與網路介面或網路介面所屬的子網相關聯,請確定規則存在,以允許透過先前的埠進行輸出連線。 同樣地,在將使用者定義的路由新增至您的網路時,請確定透過先前埠的輸出連線能力。
安裝 網路監看員 代理程式
步驟 1
az vm extension set
執行 命令,在客體虛擬機上安裝封包擷取代理程式。
針對 Windows 虛擬機:
az vm extension set --resource-group resourceGroupName --vm-name virtualMachineName --publisher Microsoft.Azure.NetworkWatcher --name NetworkWatcherAgentWindows --version 1.4
針對 Linux 虛擬機:
az vm extension set --resource-group resourceGroupName --vm-name virtualMachineName --publisher Microsoft.Azure.NetworkWatcher --name NetworkWatcherAgentLinux --version 1.4
步驟 2
若要確定已安裝代理程式,請執行 vm extension show
命令,並傳遞資源群組和虛擬機名稱。 請檢查產生的清單,以確保已安裝代理程式。
針對 Windows 虛擬機:
az vm extension show --resource-group resourceGroupName --vm-name virtualMachineName --name NetworkWatcherAgentWindows
針對 Linux 虛擬機:
az vm extension show --resource-group resourceGroupName --vm-name virtualMachineName --name AzureNetworkWatcherExtension
下列範例是執行中回應的範例 az vm extension show
{
"autoUpgradeMinorVersion": true,
"forceUpdateTag": null,
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/NetworkWatcherAgentWindows",
"instanceView": null,
"location": "westcentralus",
"name": "NetworkWatcherAgentWindows",
"protectedSettings": null,
"provisioningState": "Succeeded",
"publisher": "Microsoft.Azure.NetworkWatcher",
"resourceGroup": "{resourceGroupName}",
"settings": null,
"tags": null,
"type": "Microsoft.Compute/virtualMachines/extensions",
"typeHandlerVersion": "1.4",
"virtualMachineExtensionType": "NetworkWatcherAgentWindows"
}
啟動封包擷取
完成上述步驟之後,封包擷取代理程式就會安裝在虛擬機上。
步驟 1
擷取記憶體帳戶。 此記憶體帳戶可用來儲存封包擷取檔案。
az storage account list
步驟 2
此時,您已準備好建立封包擷取。 首先,讓我們檢查您可能想要設定的參數。 篩選條件是一個這類參數,可用來限制封包擷取所儲存的數據。 下列範例會設定具有數個篩選的封包擷取。 前三個篩選器只會從本機 IP 10.0.0.3 到目的地埠 20、80 和 443 收集傳出 TCP 流量。 最後一個篩選只會收集UDP流量。
az network watcher packet-capture create --resource-group {resourceGroupName} --vm {vmName} --name packetCaptureName --storage-account {storageAccountName} --filters "[{\"protocol\":\"TCP\", \"remoteIPAddress\":\"1.1.1.1-255.255.255.255\",\"localIPAddress\":\"10.0.0.3\", \"remotePort\":\"20\"},{\"protocol\":\"TCP\", \"remoteIPAddress\":\"1.1.1.1-255.255.255.255\",\"localIPAddress\":\"10.0.0.3\", \"remotePort\":\"80\"},{\"protocol\":\"TCP\", \"remoteIPAddress\":\"1.1.1.1-255.255.255.255\",\"localIPAddress\":\"10.0.0.3\", \"remotePort\":\"443\"},{\"protocol\":\"UDP\"}]"
下列範例是執行 az network watcher packet-capture create
命令的預期輸出。
{
"bytesToCapturePerPacket": 0,
"etag": "W/\"b8cf3528-2e14-45cb-a7f3-5712ffb687ac\"",
"filters": [
{
"localIpAddress": "10.0.0.3",
"localPort": "",
"protocol": "TCP",
"remoteIpAddress": "1.1.1.1-255.255.255.255",
"remotePort": "20"
},
{
"localIpAddress": "10.0.0.3",
"localPort": "",
"protocol": "TCP",
"remoteIpAddress": "1.1.1.1-255.255.255.255",
"remotePort": "80"
},
{
"localIpAddress": "10.0.0.3",
"localPort": "",
"protocol": "TCP",
"remoteIpAddress": "1.1.1.1-255.255.255.255",
"remotePort": "443"
},
{
"localIpAddress": "",
"localPort": "",
"protocol": "UDP",
"remoteIpAddress": "",
"remotePort": ""
}
],
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/NetworkWatcherRG/providers/Microsoft.Network/networkWatchers/NetworkWatcher_westcentralus/pa
cketCaptures/packetCaptureName",
"name": "packetCaptureName",
"provisioningState": "Succeeded",
"resourceGroup": "NetworkWatcherRG",
"storageLocation": {
"filePath": null,
"storageId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/gwteststorage123abc",
"storagePath": "https://gwteststorage123abc.blob.core.windows.net/network-watcher-logs/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/{resourceGroupName}/p
roviders/microsoft.compute/virtualmachines/{vmName}/2017/05/25/packetcapture_16_22_34_630.cap"
},
"target": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}",
"timeLimitInSeconds": 18000,
"totalBytesPerSession": 1073741824
}
取得封包擷取
az network watcher packet-capture show-status
執行命令、擷取目前執行中或已完成封包擷取的狀態。
az network watcher packet-capture show-status --name packetCaptureName --location {networkWatcherLocation}
下列範例是 命令的 az network watcher packet-capture show-status
輸出。 下列範例是擷取為 StopExceeded 的 StopReason 時。
{
"additionalProperties": {
"status": "Succeeded"
},
"captureStartTime": "2016-12-06T17:20:01.5671279Z",
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/NetworkWatcherRG/providers/Microsoft.Network/networkWatchers/NetworkWatcher_westcentralus/packetCaptures/packetCaptureName",
"name": "packetCaptureName",
"packetCaptureError": [],
"packetCaptureStatus": "Stopped",
"stopReason": "TimeExceeded"
}
停止封包擷取
藉由執行 az network watcher packet-capture stop
命令,如果擷取會話正在進行中,它就會停止。
az network watcher packet-capture stop --name packetCaptureName --location westcentralus
注意
在目前執行的擷取工作階段或已停止的現有工作階段上執行時,命令不會傳回任何回應。
刪除封包擷取
az network watcher packet-capture delete --name packetCaptureName --location westcentralus
注意
刪除封包擷取並不會刪除記憶體帳戶中的檔案。
下載封包擷取
封包擷取會話完成後,擷取檔案可以上傳至 Blob 記憶體或 VM 上的本機檔案。 封包擷取的儲存位置是在建立會話時定義。 存取儲存至記憶體帳戶之擷取檔案的便利工具 Microsoft Azure 儲存體總管,您可以在這裡下載:https://storageexplorer.com/
如果指定記憶體帳戶,封包擷取檔案會儲存到位於下列位置的記憶體帳戶:
https://{storageAccountName}.blob.core.windows.net/network-watcher-logs/subscriptions/{subscriptionId}/resourcegroups/{storageAccountResourceGroup}/providers/microsoft.compute/virtualmachines/{VMName}/{year}/{month}/{day}/packetCapture_{creationTime}.cap
相關內容
- 若要瞭解如何使用虛擬機警示將封包擷取自動化,請參閱 建立警示觸發的封包擷取。
- 若要判斷虛擬機中或移出特定流量,請參閱 診斷虛擬機網路流量篩選問題。