Compartir a través de


Administración de capturas de paquetes en máquinas virtuales con Azure Network Watcher mediante Azure PowerShell

La herramienta de captura de paquetes de Network Watcher permite crear sesiones de captura para registrar el tráfico de red hacia y desde máquinas virtuales (VM) de Azure. La sesión de captura cuenta con filtros para asegurarse de capturar solo el tráfico que se desea. La captura de paquetes ayuda a diagnosticar anomalías de red, tanto de forma reactiva como proactiva. Sus aplicaciones se extienden más allá de la detección de anomalías para incluir la recopilación de estadísticas de red, la adquisición de información sobre intrusiones de red, la depuración de la comunicación entre cliente y servidor, así como la solución de otros desafíos de red. La captura de paquetes de Network Watcher permite iniciar capturas de paquetes de forma remota, lo que reduce la necesidad de ejecución manual en máquinas virtuales específicas.

En este artículo, aprenderás a configurar, iniciar, detener, descargar y eliminar de forma remota una captura de paquetes de máquina virtual con Azure PowerShell. Para obtener información sobre cómo administrar capturas de paquetes mediante Azure Portal o la CLI de Azure, consulta Administración de capturas de paquetes para máquinas virtuales mediante Azure Portal o Administración de capturas de paquetes para máquinas virtuales mediante la CLI de Azure.

Requisitos previos

  • Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita.

  • Azure Cloud Shell o Azure PowerShell.

    Los pasos de este artículo ejecutarán los cmdlets de Azure PowerShell de forma interactiva en Azure Cloud Shell. Para ejecutar los comandos en Cloud Shell, seleccione Abrir Cloud Shell en la esquina superior derecha de un bloque de código. Seleccione Copiar para copiar el código y péguelo, a continuación, en Cloud Shell para ejecutarlo. También podrá ejecutar Cloud Shell desde Azure Portal.

    También podrá instalar Azure PowerShell localmente para ejecutar los cmdlet. En este artículo se necesita el módulo Az de PowerShell. Para más información, vea Procedimiento para instalar Azure PowerShell. Ejecute Get-InstalledModule -Name Az para ver cuál es la versión instalada. Si ejecuta PowerShell localmente, inicie sesión en Azure con el cmdlet Connect-AzAccount.

  • Una máquina virtual con la conectividad TCP de salida siguiente:

    • a la cuenta de almacenamiento en el puerto 443
    • a 169.254.169.254 a través del puerto 80
    • a 168.63.129.16 a través del puerto 8037

Nota:

  • Azure crea una instancia de Network Watcher en la región de la máquina virtual si Network Watcher no se habilitó para esa región. Para obtener más información, consulte Habilitar o deshabilitar Azure Network Watcher.
  • La captura de paquetes de Network Watcher requiere que se instale la extensión de la máquina virtual del agente de Network Watcher en la máquina virtual de destino. Para obtener más información, consulta Instalación del agente de Network Watcher.
  • Las dos últimas direcciones IP y puertos enumerados en los Requisitos previos son comunes en todas las herramientas de Network Watcher que usan el agente de Network Watcher y podrían cambiar ocasionalmente.

Si un grupo de seguridad de red está asociado a la interfaz de red o a una subred en la que se encuentra la interfaz de red, asegúrese de que existen reglas que permiten la conectividad de salida a través de los puertos anteriores. Del mismo modo, garantice la conectividad de salida a través de los puertos anteriores al agregar a la red rutas definidas por el usuario.

Instalación del agente de Network Watcher

Para usar la captura de paquetes, la extensión de máquina virtual del agente de Network Watcher debe estar instalada en la máquina virtual.

Usa el cmdlet Get-AzVMExtension para comprobar si la extensión está instalada en la máquina virtual:

# List the installed extensions on the virtual machine.
Get-AzVMExtension -VMName 'myVM' -ResourceGroupName 'myResourceGroup' | format-table Name, Publisher, ExtensionType, EnableAutomaticUpgrade 

Si la extensión está instalada en la máquina virtual, puedes verla en la salida del comando anterior:

Name                         Publisher                      ExtensionType            EnableAutomaticUpgrade
----                         ---------                      -------------            ----------------------
AzureNetworkWatcherExtension Microsoft.Azure.NetworkWatcher NetworkWatcherAgentLinux                   True

Si la extensión no está instalada, usa el cmdlet Set-AzVMExtension para instalarlo:

# Install Network Watcher agent on a Linux virtual machine.
Set-AzVMExtension -Publisher 'Microsoft.Azure.NetworkWatcher' -ExtensionType 'NetworkWatcherAgentLinux' -Name 'AzureNetworkWatcherExtension' -VMName 'myVM' -ResourceGroupName 'myResourceGroup' -TypeHandlerVersion '1.4' -EnableAutomaticUpgrade 1 
# Install Network Watcher agent on a Windows virtual machine.
Set-AzVMExtension -Publisher 'Microsoft.Azure.NetworkWatcher' -ExtensionType 'NetworkWatcherAgentWindows' -Name 'AzureNetworkWatcherExtension' -VMName 'myVM' -ResourceGroupName 'myResourceGroup' -TypeHandlerVersion '1.4' -EnableAutomaticUpgrade 1 

Después de una instalación correcta de la extensión, verás la siguiente salida:

RequestId IsSuccessStatusCode StatusCode ReasonPhrase
--------- ------------------- ---------- ------------
                         True         OK 

Inicio de una captura de paquetes

Para iniciar una sesión de captura, usa el cmdlet New-AzNetworkWatcherPacketCapture:

# Place the virtual machine configuration into a variable.
$vm = Get-AzVM -ResourceGroupName 'myResourceGroup' -Name 'myVM'

# Place the storage account configuration into a variable.
$storageAccount = Get-AzStorageAccount -ResourceGroupName 'myResourceGroup' -Name 'mystorageaccount'

# Start the Network Watcher capture session.
New-AzNetworkWatcherPacketCapture -Location 'eastus' -PacketCaptureName 'myVM_1' -TargetVirtualMachineId $vm.Id  -StorageAccountId $storageAccount.Id 

Una vez iniciada la sesión de captura, verás la siguiente salida:

ProvisioningState Name   BytesToCapturePerPacket TotalBytesPerSession TimeLimitInSeconds
----------------- ----   ----------------------- -------------------- ------------------
Succeeded         myVM_1 0                       1073741824           18000

En la tabla siguiente se describen los parámetros opcionales que puede usar con el cmdlet New-AzNetworkWatcherPacketCapture:

Parámetro descripción
-Filter Agrega filtros para capturar solo el tráfico que desees. Por ejemplo, solo puedes capturar el tráfico TCP de una dirección IP específica a un puerto específico.
-TimeLimitInSeconds Establece la duración máxima de la sesión de captura. El valor predeterminado es de 18000 segundos (5 horas).
-BytesToCapturePerPacket Establece el número máximo de bytes que se capturarán por cada paquete. Todos los bytes se capturan si no se usan o se escribe 0.
-TotalBytesPerSession Establece el número total de bytes que se capturan. Una vez que se alcanza el valor, la captura de paquetes se detiene. Si no se usa, se capturan hasta 1 GB (1073 741 824 bytes).
-LocalFilePath Escribe una ruta de acceso de archivo local válida si deseas que la captura se guarde en la máquina virtual de destino (por ejemplo, C:\Capture\myVM_1.cap). Si usa una máquina Linux, la ruta de acceso debe comenzar con /var/captures.

Detención de una captura de paquetes

Usa el cmdlet Stop-AzNetworkWatcherPacketCapture para detener manualmente una sesión de captura de paquetes en ejecución.

# Manually stop a packet capture session.
Stop-AzNetworkWatcherPacketCapture -Location 'eastus' -PacketCaptureName 'myVM_1'

Nota:

El cmdlet no devuelve una respuesta si se ejecutó en una sesión de captura que se está ejecutando actualmente o en una sesión que ya se ha detenido.

Obtención de una captura de paquetes

Usa el cmdlet Get-AzNetworkWatcherPacketCapture para recuperar el estado de una captura de paquetes (en ejecución o completada).

# Get information, properties, and status of a packet capture.
Get-AzNetworkWatcherPacketCapture -Location 'eastus' -PacketCaptureName 'myVM_1'

La salida siguiente es un ejemplo de la salida del cmdlet Get-AzNetworkWatcherPacketCapture. El ejemplo siguiente es una vez completada la captura. El valor de PacketCaptureStatus es Stopped, con un valor de StopReason de TimeExceeded. Este valor muestra que la captura de paquetes fue correcta y agotó su tiempo.

ProvisioningState Name   Target                                                                                                                              BytesToCapturePerPacket TotalBytesPerSession TimeLimitInSeconds
----------------- ----   ------                                                                                                                              ----------------------- -------------------- ------------------
Succeeded         myVM_1 /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM 0                       1073741824           18000

Nota:

Para obtener más detalles en la salida, agrega | Format-List al final del comando.

Descarga de una captura de paquetes

Una vez finalizada la sesión de captura de paquetes, el archivo de captura resultante se guardará en Azure Storage, un archivo local en la máquina virtual de destino o en ambos. El destino de almacenamiento de la captura de paquetes se especifica durante su creación. Para obtener más información, consulte Iniciar capturas de paquetes.

Si se especifica una cuenta de almacenamiento, los archivos de captura se guardan en la cuenta de almacenamiento en la siguiente ruta de acceso:

https://{storageAccountName}.blob.core.windows.net/network-watcher-logs/subscriptions/{subscriptionId}/resourcegroups/{storageAccountResourceGroup}/providers/microsoft.compute/virtualmachines/{virtualMachineName}/{year}/{month}/{day}/packetcapture_{UTCcreationTime}.cap

Para descargar un archivo de captura de paquetes guardado en Azure Storage, usa el cmdlet Get-AzStorageBlobContent:

# Download the packet capture file from Azure storage container.
Get-AzStorageBlobContent -Container 'network-watcher-logs' -Blob 'subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myresourcegroup/providers/microsoft.compute/virtualmachines/myvm/2024/01/25/packetcapture_22_44_54_342.cap' -Destination 'C:\Capture\myVM_1.cap'

Nota:

También puedes descargar el archivo de captura desde el contenedor de la cuenta de almacenamiento mediante el Explorador de Azure Storage. Explorador de Storage es una aplicación independiente que se puede usar convenientemente para acceder a los datos de Azure Storage y trabajar con ellos. Para obtener más información, consulte Introducción a Explorador de Storage.

Eliminación de una captura de paquetes

# Remove a packet capture resource.
Remove-AzNetworkWatcherPacketCapture -Location 'eastus' -PacketCaptureName 'myVM_1'

Importante

La eliminación de una captura de paquetes en Network Watcher no elimina el archivo de captura de la cuenta de almacenamiento o la máquina virtual. Si el archivo de captura ya no fuese necesario, deberá eliminarlo manualmente de la cuenta de almacenamiento para evitar ocasionar costes de almacenamiento.