在 PowerShell 中使用 Azure 網路監看員管理虛擬機器擴展集的封包擷取

網路監看員封包擷取可讓您建立擷取工作階段,以追蹤進出虛擬機器擴展集執行個體的流量。 系統會為擷取工作階段提供篩選器,以確保您只會擷取到您想要的流量。 封包擷取有助於以被動和主動方式診斷網路異常。 其他用途包括收集網路統計資料、取得有關網路入侵的資訊,以及偵錯用戶端與伺服器間的通訊等等。 由於能夠從遠端觸發封包擷取,因此可以減輕在所需的虛擬機器擴展集執行個體上手動執行封包擷取的工作負擔,進而省下寶貴的時間。

本文會帶領您逐步完成封包擷取目前可用的不同管理工作。

開始之前

本文假設您具有下列資源:

  • 您想要用來建立封包擷取之區域中的網路監看員執行個體

重要

封包擷取需要虛擬機器擴展集延伸模組 AzureNetworkWatcherExtension。 若要在 Windows VM 上安裝擴充功能,請瀏覽適用於 Windows 的 Azure 網路監看員代理程式虛擬機器擴充功能,若要在 Linux VM 上安裝,則請瀏覽適用於 Linux 的 Azure 網路監看員代理程式虛擬機器擴充功能

安裝虛擬機器擴展集延伸模組

步驟 1

$vmss = Get-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet"

步驟 2

在虛擬機器擴展集/虛擬機器擴展集執行個體上安裝 networkWatcherAgent

Add-AzVmssExtension -VirtualMachineScaleSet $vmss -Name "AzureNetworkWatcherExtension" -Publisher "Microsoft.Azure.NetworkWatcher" -Type "NetworkWatcherAgentWindows" -TypeHandlerVersion "1.4" -AutoUpgradeMinorVersion $True

Update-AzVmss -ResourceGroupName "$resourceGroupName" -Name $virtualMachineScaleSetName -VirtualMachineScaleSet $vmss
Update-AzVmssInstance -ResourceGroupName "$resourceGroupName" -VMScaleSetName $vmss.Name -InstanceId 0
> The `Set-AzVMExtension` cmdlet may take several minutes to complete.

步驟 3

若要確定已安裝代理程式,請遵循步驟 1

Get-AzVMss -ResourceGroupName $vmss.ResourceGroupName  -VMNScaleSetName $vmss.Name

啟動封包擷取

完成上述步驟之後,虛擬機器擴展集上就已安裝封包擷取代理程式。

步驟 1

下一步是擷取網路監看員執行個體。 此變數會在步驟 4 傳遞至 New-AzNetworkWatcherPacketCapture Cmdlet。

$networkWatcher = Get-AzNetworkWatcher  | Where {$_.Location -eq "westcentralus" }

步驟 2

擷取儲存體帳戶。 此儲存體帳戶會用來儲存封包擷取檔案。

$storageAccount = Get-AzStorageAccount -ResourceGroupName testrg -Name testrgsa123

步驟 3

可使用篩選器來限制封包擷取所儲存的資料。 下列範例會設定兩個篩選器。 一個篩選器只會收集從本機 IP 10.0.0.3 流往目的地連接埠 20、80 和 443 的連出 TCP 流量。 第二個篩選器只會收集 UDP 流量。

$filter1 = New-AzPacketCaptureFilterConfig -Protocol TCP -RemoteIPAddress "1.1.1.1-255.255.255.255" -LocalIPAddress "10.0.0.3" -LocalPort "1-65535" -RemotePort "20;80;443"
$filter2 = New-AzPacketCaptureFilterConfig -Protocol UDP

注意

一個封包擷取可以定義多個篩選器。

步驟 4

建立封包擷取的範圍

$s1 = New-AzPacketCaptureScopeConfig -Include "0", "1"

步驟 5

執行 New-AzNetworkWatcherPacketCaptureV2 cmdlet 可啟動封包擷取程序,並傳遞先前步驟中擷取的必要值。


New-AzNetworkWatcherPacketCaptureV2 -NetworkWatcher $networkwatcher -PacketCaptureName $pcName -TargetId $vmss.Id -TargetType "azurevmss" -StorageAccountId $storageAccount.id -Filter $filter1, $filter2

取得封包擷取

執行 Get-AzNetworkWatcherPacketCapture Cmdlet 以擷取目前正在執行或已完成之封包擷取的狀態。

Get-AzNetworkWatcherPacketCapture -NetworkWatcher $networkWatcher -PacketCaptureName "PacketCaptureTest"

下列範例是 Get-AzNetworkWatcherPacketCapture Cmdlet 的輸出。 下列範例是在擷取完成後。 PacketCaptureStatus 值為 Stopped,而 StopReason 為 TimeExceeded。 這個值說明封包擷取已順利完成,並執行了它的時間。

Name                    : PacketCaptureTest
Id                      : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/NetworkWatcherRG/providers/Microsoft.Network/networkWatcher
                          s/NetworkWatcher_westcentralus/packetCaptures/PacketCaptureTest
Etag                    : W/"4b9a81ed-dc63-472e-869e-96d7166ccb9b"
ProvisioningState       : Succeeded
Target                  : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testrg/providers/Microsoft.Compute/virtualMachines/testvm1
BytesToCapturePerPacket : 0
TotalBytesPerSession    : 1073741824
TimeLimitInSeconds      : 60
StorageLocation         : {
                            "StorageId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testrg/providers/Microsoft.Storage/storageA
                          ccounts/examplestorage",
                            "StoragePath": "https://examplestorage.blob.core.windows.net/network-watcher-logs/subscriptions/00000000-0000-0000-0000-00000
                          0000000/resourcegroups/testrg/providers/microsoft.compute/virtualmachines/testvm1/2017/02/01/packetcapture_22_42_48_238.cap"
                          }
Filters                 : [
                            {
                              "Protocol": "TCP",
                              "RemoteIPAddress": "1.1.1.1-255.255.255",
                              "LocalIPAddress": "10.0.0.3",
                              "LocalPort": "1-65535",
                              "RemotePort": "20;80;443"
                            },
                            {
                              "Protocol": "UDP",
                              "RemoteIPAddress": "",
                              "LocalIPAddress": "",
                              "LocalPort": "",
                              "RemotePort": ""
                            }
                          ]
CaptureStartTime        : 2/1/2017 10:43:01 PM
PacketCaptureStatus     : Stopped
StopReason              : TimeExceeded
PacketCaptureError      : []

停止封包擷取

執行 Stop-AzNetworkWatcherPacketCapture Cmdlet 會停止正在進行的擷取工作階段。

Stop-AzNetworkWatcherPacketCapture -NetworkWatcher $networkWatcher -PacketCaptureName "PacketCaptureTest"

注意

此 Cmdlet 若執行於目前正在執行的擷取工作階段或已停止的現有工作階段,則不會傳回任何回應。

刪除封包擷取

Remove-AzNetworkWatcherPacketCapture -NetworkWatcher $networkWatcher -PacketCaptureName "PacketCaptureTest"

注意

刪除封包擷取不會刪除儲存體帳戶中的檔案。

下載封包擷取

封包擷取工作階段完成後,即可將擷取檔案上傳到 Blob 儲存體或執行個體上的本機檔案。 封包擷取的儲存位置會在建立工作階段時定義。 若要存取這些儲存至儲存體帳戶的擷取檔案,Microsoft Azure 儲存體總管是很便利的工具,您可以在這裡下載︰https://storageexplorer.com/

如果指定了儲存體帳戶,封包擷取檔案便會儲存到儲存體帳戶的下列位置︰

如果選取多個執行個體

https://{storageAccountName}.blob.core.windows.net/network-watcher-logs/subscriptions/{subscriptionId}/resourcegroups/{storageAccountResourceGroup}/providers/microsoft.compute/virtualmachinescalesets/{VMSSName}/{year}/{month}/{day}/packetCapture_{creationTime}

如果選取單一執行個體

https://{storageAccountName}.blob.core.windows.net/network-watcher-logs/subscriptions/{subscriptionId}/resourcegroups/{storageAccountResourceGroup}/providers/microsoft.compute/virtualmachinescalesets/{VMSSName}/virtualMachines/{instance}/{year}/{month}/{day}/packetCapture_{creationTime}.cap

下一步

造訪檢查 IP 流量驗證來得知 VM 是否允許特定流量流入或流出