Gestire le acquisizioni di pacchetti nel set di scalabilità di macchine virtuali con Azure Network Watcher usando PowerShell

L'acquisizione di pacchetti network Watcher consente di creare sessioni di acquisizione per tenere traccia del traffico da e verso un'istanza/i del set di scalabilità di macchine virtuali. Vengono forniti filtri per la sessione di acquisizione per assicurarsi di acquisire solo il traffico desiderato. L'acquisizione di pacchetti consente di diagnosticare le anomalie di rete, sia in modo reattivo che proattivo. Altri usi includono la raccolta di statistiche di rete, la raccolta di informazioni sulle intrusioni di rete, il debug della comunicazione client-server e molto altro ancora. Essere in grado di attivare in remoto le acquisizioni di pacchetti, semplifica il carico di esecuzione manuale di un'acquisizione di pacchetti in un'istanza/o di un set di scalabilità di macchine virtuali desiderato, che consente di risparmiare tempo prezioso.

Questo articolo illustra le diverse attività di gestione attualmente disponibili per l'acquisizione di pacchetti.

Operazioni preliminari

Questo articolo presuppone che l'utente disponga delle risorse seguenti:

  • Un'istanza di Network Watcher nell'area in cui creare un'acquisizione di pacchetti.

Importante

L'acquisizione di pacchetti richiede un'estensione del set di scalabilità AzureNetworkWatcherExtensiondi macchine virtuali. Per installare l'estensione in una VM Windows, vedere Estensione macchina virtuale agente Azure Network Watcher per Windows e per una VM Linux VM vedere Estensione macchina virtuale Azure Network Watcher Agent per Linux.

Installare l'estensione del set di scalabilità di macchine virtuali

Passaggio 1

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

Step 2

Installare networkWatcherAgent nel set di scalabilità di macchine virtuali/istanze del set di scalabilità di macchine virtuali/i

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.

Passaggio 3

Per assicurarsi che l'agente sia installato, seguire il passaggio 1

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

Avviare un'acquisizione di pacchetti

Al termine dei passaggi precedenti, l'agente di acquisizione pacchetti viene installato nel set di scalabilità di macchine virtuali.

Passaggio 1

Il passaggio successivo consente di recuperare l'istanza di Network Watcher. Questa variabile viene passata al cmdlet New-AzNetworkWatcherPacketCapture nel passaggio 4.

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

Passaggio 2

Recuperare un account di archiviazione. L'account di archiviazione viene usato per archiviare il file di acquisizione di pacchetti.

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

Passaggio 3

È possibile usare i filtri per limitare i dati archiviati dall'acquisizione di pacchetti. Nell'esempio seguente vengono impostati due filtri. Un filtro acquisisce il traffico TCP in uscita solo dall'indirizzo IP 10.0.0.3 locale verso le porte di destinazione 20, 80 e 443. Il secondo filtro acquisisce solo il traffico 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

Nota

Per un'acquisizione di pacchetti è possibile definire più filtri.

Passaggio 4

Creare l'ambito per l'acquisizione di pacchetti

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

Passaggio 5

Eseguire il cmdlet New-AzNetworkWatcherPacketCaptureV2 per avviare il processo di acquisizione dei pacchetti, passando i valori richiesti recuperati nei passaggi precedenti.


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

Ottenere un'acquisizione di pacchetti

L'esecuzione del cmdlet Get-AzNetworkWatcherPacketCapture consente di recuperare lo stato di un'acquisizione di pacchetti attualmente in esecuzione o completata.

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

L'esempio seguente riporta l'output ottenuto dall'esecuzione del cmdlet Get-AzNetworkWatcherPacketCapture. L'esempio seguente mostra il risultato ottenuto al completamento dell'acquisizione di pacchetti. Il valore PacketCaptureStatus è Stopped, mentre il valore StopReason corrisponde a TimeExceeded. Questo valore indica che l'acquisizione di pacchetti ha avuto esito positivo ed è stata eseguita per il tempo necessario.

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      : []

Interrompere un'acquisizione di pacchetti

Eseguendo il Stop-AzNetworkWatcherPacketCapture cmdlet , se è in corso una sessione di acquisizione, viene arrestata.

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

Nota

Il cmdlet non restituisce alcuna risposta se eseguito in una sessione di acquisizione in corso o in una sessione esistente che è già stata interrotta.

Eliminare un'acquisizione di pacchetti

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

Nota

L'eliminazione di un'acquisizione di pacchetti non elimina il file nell'account di archiviazione.

Scaricare un'acquisizione di pacchetti

Al termine della sessione di acquisizione pacchetti, il file di acquisizione può essere caricato nell'archivio BLOB o in un file locale nell'istanza/i. La posizione di archiviazione dell'acquisizione di pacchetti viene definita al momento della creazione della sessione. Uno strumento utile per accedere ai file di acquisizione salvati in un account di archiviazione è Microsoft Azure Storage Explorer, disponibile qui: https://storageexplorer.com/

Se viene specificato un account di archiviazione, i file di acquisizione di pacchetti vengono salvati in un account di archiviazione nel percorso seguente:

Se sono selezionate più istanze

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

Se è selezionata una singola istanza

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

Passaggi successivi

Per stabilire se un traffico specificato è consentito all'interno o all'esterno di una macchina virtuale, vedere Check IP flow verify (Controllare la verifica del flusso IP).