使用 PowerShell 通过 Azure 网络观察程序管理虚拟机规模集中的数据包捕获

通过网络观察程序数据包捕获,可以创建捕获会话来跟踪传入和传出虚拟机规模集实例/(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

下一步是检索网络观察器实例。 此变量将传递到步骤 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 的输出。 以下示例是在捕获完成之后。 数据包捕获状态值为“已停止”,停止原因是“时间超限”。 此值表明数据包捕获成功并按计划完成。

Name                    : PacketCaptureTest
Id                      : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/NetworkWatcherRG/providers/Microsoft.Network/networkWatcher
                          s/NetworkWatcher_westcentralus/packetCaptures/PacketCaptureTest
Etag                    : W/"4b9a81ed-dc63-472e-869e-96d7166ccb9b"
ProvisioningState       : Succeeded
Target                  : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/testrg/providers/Microsoft.Compute/virtualMachines/testvm1
BytesToCapturePerPacket : 0
TotalBytesPerSession    : 1073741824
TimeLimitInSeconds      : 60
StorageLocation         : {
                            "StorageId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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 中的某些流量