Captura de paquetes en un ESXi

Captura de paquetes en un ESXi

La primer pregunta que vamos a hacer es: ¿Se puede hacer una captura de paquetes en un ESXi? ¿Qué estamos capturando?

Bueno, así como en un red física, el tráfico de nuestras VMs puede ser capturado con herramientas que ya el ESXi tiene disponible, para posteriormente ser analizadas, por ejemplo con Wireshark.

ESXi pktcap-uw

Es una  utilidad pre-instalada en el ESXi para inspeccionar el contenido de los paquetes mientras atraviesan la de red en virtual de un host ESXi. Está no es la única opción para capturas de paquetes en un ambiente virtualizado con VMware.

¿Donde puedo capturar paquetes?

El siguiente diagrama nos da una idea de los múltiples puntos captura que los que podemos contar. ¡Son muchos!

Cada una de las líneas que indican > pktcap-uw son puntos diferentes para capturar tráfico. En este post analizaremos un escenario básico, basado en tráfico IP:

  • Captura tráfico saliente y entrante de una VM

Fundamentos

Para realizar la captura necesitamos algunos datos:

  • Una sesión remota al ESXi donde está alojada la VM
  • Identificar el World ID de mi VM
  • La interface de está VM en la cual quiero reazalizar la captura
  • Una vez tengamos estos datos, podemos realizar la captura con la ultilidad pktcap-uw.

Identificar VM

Una vez tenemos sesión remota abierta hacia nuestro ESXi, necesitamos identificar al puerto lógico en donde nuestra VM esta conectada. Así como si fuese un switch físico, nuestras vm también tiene un puerto al cuál están conectadas, similar a un switch Cisco donde el puerto podría ser algo así: G0/0/0, en este caso, vamos a identificar el puerto virtual al que mi VM está conectada.

En la línea de comandos del ESXi ejecutamos el siguiente comando:

esxcli network vm list

[root@esxi01:~] esxcli network vm list

World ID  Name            Num Ports  Networks

——–  ————–  ———  ————-

 2100172  Ubuntu-desktop          1  SS-Producción

El resulta del comando anterior, muestra mi VM, llamada Ubuntu-desktop, el 1 representa la cantidad de interfaces de red de está vm, el World ID es el idenficador que necesitamos para obtener el puerto lógico, SS-Producción es el nombre del PortGroup donde está VM está conectada.

Identificar el puerto donde está conectada la VM

Una vez tenemos el World ID de nuestra vm, podemos obtener el identificador de puerto lógico de mi VM.

Con el comando:

esxcli network vm port list -w VM-WORLD-ID

Se obtiene le identificador de la interface. Remplazar VM-WORLD-ID por el ID de su VM, en mi caso es 2100172. El ID de mi puerto es: 33554437

[root@esxi01:~]  esxcli network vm port list -w 2100172

   Port ID: 33554437

   vSwitch: vSwitch0

   Portgroup: SS-Producción

   DVPort ID:

   MAC Address: 00:0c:29:01:19:2e

   IP Address: 0.0.0.0

   Team Uplink: vmnic0

   Uplink Port ID: 33554434

   Active Filters:

[root@esxi01:~]

Captura de paquetes

Ahora si, con el Port ID: 33554437, vamos a hacer la captura.

Necesitamos darle estructura al comando de captura, como mínimo necesitamos pktcap-uw, el portID y en cual sentido queremos capturar el tráfico (entrante, saliente o ambos).

Comando:

[root@esxi01:~] pktcap-uw –switchport 33554437 –dir 2 -o /tmp/test.pcap

Pktecap-uw es la herramienta de captura, –dir 2 indica la dirección de captura, en este caso ambos sentidos, -o indica que debe capturar en un archivo llamado /tmp/test.pcap

Nota: Para realizar está captura estoy generando un ping desde mi VM IP 192.168.100.135 hacia 8.8.8.8 en internet.

¿Cómo leer la captura en el ESXi?

Podemos usar otra herramient del ESXi, tcpdump-uw.

Comando:

[root@esxi01:~] tcpdump-uw -enr /tmp/test.pcap

Resultado

[root@esxi01:~] tcpdump-uw -enr /tmp/test.pcap

reading from file /tmp/test.pcap, link-type EN10MB (Ethernet)

20:59:54.753190 3c:84:6a:95:b0:99 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Request who-has 192.168.100.10 tell 192.168.100.101, length 46

20:59:54.854658 00:0c:29:01:19:2e > e0:00:84:e6:1d:b8, ethertype IPv4 (0x0800), length 98: 192.168.100.135 > 8.8.8.8: ICMP echo request, id 13428, seq 143, length 64

20:59:54.908324 e0:00:84:e6:1d:b8 > 00:0c:29:01:19:2e, ethertype IPv4 (0x0800), length 98: 8.8.8.8 > 192.168.100.135: ICMP echo reply, id 13428, seq 143, length 64

20:59:55.856446 00:0c:29:01:19:2e > e0:00:84:e6:1d:b8, ethertype IPv4 (0x0800), length 98: 192.168.100.135 > 8.8.8.8: ICMP echo request, id 13428, seq 144, length 64

20:59:55.910097 e0:00:84:e6:1d:b8 > 00:0c:29:01:19:2e, ethertype IPv4 (0x0800), length 98: 8.8.8.8 > 192.168.100.135: ICMP echo reply, id 13428, seq 144, length 64

20:59:56.858210 00:0c:29:01:19:2e > e0:00:84:e6:1d:b8, ethertype IPv4 (0x0800), length 98: 192.168.100.135 > 8.8.8.8: ICMP echo request, id 13428, seq 145, length 64

20:59:56.912087 e0:00:84:e6:1d:b8 > 00:0c:29:01:19:2e, ethertype IPv4 (0x0800), length 98: 8.8.8.8 > 192.168.100.135: ICMP echo reply, id 13428, seq 145, length 64

20:59:57.763249 3c:84:6a:95:b0:99 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Request who-has 192.168.100.10 tell 192.168.100.101, length 46

20:59:57.859209 00:0c:29:01:19:2e > e0:00:84:e6:1d:b8, ethertype IPv4 (0x0800), length 98: 192.168.100.135 > 8.8.8.8: ICMP echo request, id 13428, seq 146, length 64

20:59:57.912407 e0:00:84:e6:1d:b8 > 00:0c:29:01:19:2e, ethertype IPv4 (0x0800), length 98: 8.8.8.8 > 192.168.100.135: ICMP echo reply, id 13428, seq 146, length 64

20:59:58.763134 3c:84:6a:95:b0:99 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Request who-has 192.168.100.10 tell 192.168.100.101, length 46

[root@esxi01:~]

Notese que hay otras IPs e inclusive información de capa 2 en la captura, para un mejor analisis, se recomienda filtrar la captura, para así capturar únicamente el tráfico deseado, por ejemplo IP de destino. –dstip IP_addess

Pueden encontrar filtros aquí:

pktcap-uw Options for Filtering Packets

Detener la captura

Es importa mencionar que dependiendo de la cantidad de tráfico a capturar, esto podría afectar el CPU, RAM e inclusive el almacenamiento de mi ESXi, no se recomiendo nunca dejar capturas corriendo sin monitereo. Regularmente la captura de detiene con Ctrl+C, sin embargo también se puede hacer con el siguiente comando:
kill $(lsof |grep pktcap-uw |awk '{print $1}'| sort -u)
Esto asegura que no quede ninguna captura corriendo en el ESXi.  

Comentarios finales

Realmente está es una herramienta muy útil y muy poderosa, lo mostrado acá es una manera muy básica de usarla, hay múltiples opciones, desde captura por protocolo de capa 2, capa 3, VLAN, Geneve, capturas en el uplinks entra otras muchas variantes.

Espero les ayude a resolver problemas de conectivad de su máquinas virtuales, saludos!


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Translate »