Share via


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

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

本文會引導您完成目前可用於封包擷取的不同管理工作。

開始之前

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

  • 您想要建立封包擷取區域中 網路監看員的實例

重要

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

安裝虛擬機擴展集擴充功能

步驟 1

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

步驟 2

在虛擬機擴展集/虛擬機擴展集實例/(s) 上安裝 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

下一個步驟是擷取 網路監看員 實例。 此變數會傳遞至 New-AzNetworkWatcherPacketCapture 步驟 4 中的 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"

下列範例是 Cmdlet 的 Get-AzNetworkWatcherPacketCapture 輸出。 下列範例是在擷取完成之後。 PacketCaptureStatus 值為 Stopped,具有 TimeExceeded 的 StopReason。 此值顯示封包擷取成功並執行其時間。

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 記憶體或實例/(s) 上的本機檔案。 封包擷取的儲存位置是在建立會話時定義。 存取儲存至記憶體帳戶之擷取檔案的便利工具 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 是否允許特定流量流入或流出