使用 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 是否允許特定流量流入或流出