使用 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 中的某些流量