Capturar tráfico de red con pktcap-uw en VMware ESXi

A partir de la versión 5.5 de VMware ESXi, VMware nos proporciona el paquete pktcap-uw para poder realizar capturas de tráfico para poder analizarlo y poder utilizarlo en la resolución de problemas, monitorización… Esta herramienta sustituye a otra más limitada (tcpdump-uw).

Con pktcap-uw podemos realizar capturas de tráfico de:

  • Puertos vmkernel (vmk0, vmk1…)
  • Interfaces físicos (vmnic0, vmnic1…)
  • Puertos de máquinas virtuales
  • Podemos capturar tanto el tráfico entrante como el saliente

Lo primer que vamos a hacer es obtener la ayuda del comando, para ello, en una sesión SSH (o en local en modo Tech Support) ejecutamos:

pktcap-uw --help

De esta forma vemos el detalle de todas las opciones disponibles.

Ahora vamos a ver con algunos ejemplos, como realizar las capturas de los distintos elementos.

Captura de tráfico vmkernel

Para realizar la captura del tráfico generado por un puerto vmkernel (administración, vMotion, FT, iSCSI…) utilizamos la opción –vmk con el nombre del interfaz

pktcap-uw --vmk vmkX

Por ejemplo:

[root@esxi03:~] pktcap-uw --vmk vmk0
The name of the vmk is vmk0
To capture 2 packets
No server port specifed, select 37191 as the port
Output the packet info to console.
Local CID 2
Listen on port 37191
Accept...Vsock connection from port 1029 cid 2
Receive thread exiting...
09:12:27.57468[1] Captured at PortInput point, TSO not enabled, Checksum offloaded and not verified, length 166.
        Segment[0] ---- 54 bytes:
        0x0000:  001d 6048 fd9d 1cc1 defa 5e1d 0800 4510
        0x0010:  0098 a8a8 4000 4006 79a4 0a00 0303 0a00
        0x0020:  0101 0016 ee00 7395 46ac 6633 85ca 5018
        0x0030:  0080 188e 0000
        Segment[1] ---- 112 bytes:
        0x0030:                 bb91 4749 4c77 fdcb 722f
        0x0040:  a0b4 ad80 53bb 8d93 33be 53cf c0e4 2ff0
        0x0050:  4e34 a2c5 3819 0248 f3c8 2a25 452e 469c
        0x0060:  cada 8234 7c88 719a 6177 4fdb caaa d02c
        0x0070:  abd1 56f8 2713 6b1d 6e60 a2bc 9989 214c
        0x0080:  8b05 22ea ead6 ae22 b0d8 6d3d 9b42 faef
        0x0090:  6067 8726 d568 b0a0 b0d2 8e0a 2f2c 6cbf
        0x00a0:  13ef ecd7 60d7
09:12:27.57703[2] Captured at PortInput point, TSO not enabled, Checksum offloaded and not verified, length 66.
        Segment[0] ---- 66 bytes:
        0x0000:  0011 3215 d85b 1cc1 defa 5e1d 0800 4500
        0x0010:  0034 a8a9 4000 4006 7b14 0a00 0303 0a00
        0x0020:  0004 032f 0801 a008 8e8e 21aa e3b0 8010
        0x0030:  0200 172d 0000 0101 080a 0003 2d77 0013
        0x0040:  e03d

 

Captura de interfaz físico

Para realizar la captura a nivel de interfaz físico utilizamos la opción –uplink y el nombre del interfaz

pktcap-uw --uplink vmnicX

Por ejemplo:

[root@esxi03:~] pktcap-uw --uplink vmnic0 -c 2
The name of the uplink is vmnic0
To capture 2 packets
No server port specifed, select 37367 as the port
Output the packet info to console.
Local CID 2
Listen on port 37367
Accept...Vsock connection from port 1032 cid 2
Receive thread exiting...
09:17:03.31273[1] Captured at EtherswitchDispath point, TSO not enabled, Checksum not offloaded and verified, length 60.
        Segment[0] ---- 60 bytes:
        0x0000:  1cc1 defa 5e1d 001d 6048 fd9d 0800 4500
        0x0010:  0028 64de 4000 8006 7dee 0a00 0101 0a00
        0x0020:  0303 ee00 0016 6633 9b8a 7395 fe7c 5010
        0x0030:  7f90 b659 0000 0000 0000 0000
09:17:03.205592[2] Captured at EtherswitchDispath point, TSO not enabled, Checksum not offloaded and not verified, length 60.
        Segment[0] ---- 60 bytes:
        0x0000:  ffff ffff ffff 0050 5694 15a6 0806 0001
        0x0010:  0800 0604 0001 0050 5694 15a6 0000 0000
        0x0020:  0000 0000 0000 0a00 0803 0000 0000 0000
        0x0030:  0000 0000 0000 0000 0000 0000

Captura de puerto de máquina virtual

Para poder capturar el tráfico a nivel del puerto de una máquina virtual en el vSwitch, utilizamos la opción –switchport y el identificador del puerto.

pktcap-uw --switchport XXXXXXXX

Para obtener primero el identificador del puerto utilizado por cada máquina podemos utilizar esxtop, siguiendo estos pasos:

  • Ejecutamos exstop
esxtop
  • Se nos abre el interfaz de esxtop
 9:20:33am up 42 min, 499 worlds, 2 VMs, 4 vCPUs; CPU load average: 0.09, 0.07, 0.08
PCPU USED(%): 1.7 2.1 4.4 7.5 AVG: 3.9
PCPU UTIL(%): 2.7 3.3 4.6 7.5 AVG: 4.5

      ID      GID NAME             NWLD   %USED    %RUN    %SYS   %WAIT %VMWAIT    %RDY   %IDLE  %OVRLP   %CSTP  %MLMTD  %SWPWT
   18165    18165 VCENTER01          10   11.01   12.86    0.09  987.15    0.29    0.26  187.00    0.03    0.00    0.00    0.00
   32978    32978 esxtop.37531        1    3.12    2.10    0.02   97.91       -    0.01    0.00    0.01    0.00    0.00    0.00
   17634    17634 DC01                7    0.51    0.70    0.01  699.37    0.06    0.11  199.36    0.01    0.00    0.00    0.00
       2        2 system            112    0.33    0.57    0.00 11199.53       -    0.59    0.00    0.08    0.00    0.00    0.00
    7572     7572 hostd.34077        22    0.18    0.17    0.00 2200.00       -    0.13    0.00    0.00    0.00    0.00    0.00
   12435    12435 vpxa.34719         13    0.13    0.11    0.02 1300.00       -    0.01    0.00    0.00    0.00    0.00    0.00
     811      811 vmsyslogd.33010     3    0.05    0.07    0.00  299.95       -    0.05    0.00    0.00    0.00    0.00    0.00
   28815    28815 sshd.36958          1    0.02    0.02    0.00  100.00       -    0.00    0.00    0.00    0.00    0.00    0.00
    1760     1760 net-lacp.33197      3    0.01    0.01    0.00  300.00       -    0.03    0.00    0.00    0.00    0.00    0.00
    2096     2096 nfsgssd.33329       1    0.01    0.01    0.00  100.00       -    0.00    0.00    0.00    0.00    0.00    0.00
       9        9 helper            156    0.01    0.01    0.00 15600.00       -    0.04    0.00    0.00    0.00    0.00    0.00
      10       10 drivers            12    0.00    0.01    0.00 1200.00       -    0.01    0.00    0.00    0.00    0.00    0.00
  • Pulsamos n para acceder a la sección de Network
   PORT-ID              USED-BY  TEAM-PNIC DNAME              PKTTX/s  MbTX/s   PSZTX    PKTRX/s  MbRX/s   PSZRX %DRPTX %DRPRX
  33554433           Management        n/a vSwitch0              0.00    0.00    0.00       0.00    0.00    0.00   0.00   0.00
  33554434               vmnic0          - vSwitch0             29.72    0.61 2676.00      56.41    0.08  184.00   0.00   0.00
  33554435     Shadow of vmnic0        n/a vSwitch0              0.00    0.00    0.00       0.00    0.00    0.00   0.00   0.00
  33554436                 vmk0     vmnic0 vSwitch0             22.83    0.59 3377.00      44.99    0.04  110.00   0.00   0.00
  33554437                 vmk1     vmnic0 vSwitch0              0.00    0.00    0.00       0.84    0.00   60.00   0.00   0.00
  33554438           35400:DC01     vmnic0 vSwitch0              2.01    0.00  214.00       3.86    0.01  180.00   0.00   0.00
  33554439      35534:VCENTER01     vmnic0 vSwitch0              5.20    0.02  384.00       6.04    0.04  771.00   0.00   0.00
  • Apuntamos el número de la columna PORT-ID de la máquina virtual que queremos monitorizar
PORT-ID              USED-BY  TEAM-PNIC DNAME              PKTTX/s  MbTX/s   PSZTX    PKTRX/s  MbRX/s   PSZRX %DRPTX %DRPRX
  33554438           35400:DC01     vmnic0 vSwitch0              2.01    0.00  214.00       3.86    0.01  180.00   0.00   0.00

Una vez obtenido el puerto lo utilizamos para realizar la captura del tráfico

[root@esxi03:~] pktcap-uw --switchport 33554438
The switch port id is 0x02000006
No server port specifed, select 37670 as the port
Output the packet info to console.
Local CID 2
Listen on port 37670
Accept...Vsock connection from port 1033 cid 2
09:24:06.188778[1] Captured at PortInput point, TSO not enabled, Checksum offloaded and not verified, length 100.
        Segment[0] ---- 100 bytes:
        0x0000:  000c 2971 e31c 0050 5685 732b 0800 4500
        0x0010:  0056 2caf 4000 8011 b282 0a00 0401 0a00
        0x0020:  0365 0035 d472 0042 1bb9 0976 8580 0001
        0x0030:  0001 0000 0000 0665 7378 6930 310b 6c6f
        0x0040:  6361 6c64 6f6d 6169 6e05 6c6f 6361 6c00
        0x0050:  0001 0001 c00c 0001 0001 0000 0e10 0004
        0x0060:  0a00 0301
09:24:09.37997[2] Captured at PortInput point, TSO not enabled, Checksum offloaded and not verified, length 99.
        Segment[0] ---- 99 bytes:
        0x0000:  0050 5694 153d 0050 5685 732b 0800 4500
        0x0010:  0055 40b0 4000 8011 99e2 0a00 0401 0a00
        0x0020:  0805 0035 ca08 0041 2058 98be 8580 0001
        0x0030:  0001 0000 0000 0573 7276 3034 0b6c 6f63
        0x0040:  616c 646f 6d61 696e 056c 6f63 616c 0000
        0x0050:  0100 01c0 0c00 0100 0100 0004 b000 040a
        0x0060:  0008 04

 

Guardar la captura en un archivo

Hasta ahora, todas las capturas que hemos visto se nos muestran por pantalla y la verdad es que no es fácil de analizar los resultados. Para ello podemos guardar en un archivo los resultados, utilizando la opción -o

pktcap-uw --uplink vmnicX -o ARCHIVO

Por ejemplo:

[root@esxi03:~] pktcap-uw --switchport 33554438 -o  /vmfs/volumes/STORAGE01-VMWARE-CONF-01/pktcap-uw/Capturas/DC01-20160116.pcap
The switch port id is 0x02000006
The output file is /vmfs/volumes/STORAGE01-VMWARE-CONF-01/pktcap-uw/Capturas/DC01-20160116.pcap
No server port specifed, select 37819 as the port
Local CID 2
Listen on port 37819
Accept...Vsock connection from port 1034 cid 2
Dump: 13, broken : 0, drop: 0, file err: 0

Para finalizar la captura utilizamos CTRL + C

Una vez que tenemos el archivo, lo podemos utilizar con herramientas como Wireshark que nos permitan analizarlo con más detalle:

VMware-ESXi-pktcap-uw-001

 

Realizar varias capturas simultáneas

Podemos necesitar realizar capturas simultáneas en los distintos componentes, por ejemplo, en el interfaz físico y en el puerto de la máquina virtual. Para ello podemos ejecutar pktcap-uw de la siguiente forma:

pktcap-uw pktcap-uw –uplink vmnic0 -o ARCHIVO1 &  –switchport XXXXX -o ARCHIVO2 &

Por ejemplo:

[root@esxi03:~] pktcap-uw --uplink vmnic0 -o/vmfs/volumes/STORAGE01-VMWARE-CONF-01/pktcap-uw/Capturas/vmnic0-20160116.pcap & pktcap-uw
--switchport 33554438 -o /vmfs/volumes/STORAGE01-VMWARE-CONF-01/pktcap-uw/Capturas/DC01-20160116.pcap &
[root@esxi03:~] The name of the uplink is vmnic0
The switch port id is 0x02000006
The output file is /vmfs/volumes/STORAGE01-VMWARE-CONF-01/pktcap-uw/Capturas/DC01-20160116.pcap
No server port specifed, select 38259 as the port
The output file is /vmfs/volumes/STORAGE01-VMWARE-CONF-01/pktcap-uw/Capturas/vmnic0-20160116.pcap
No server port specifed, select 38258 as the port
Local CID 2
Local CID 2
Listen on port 38259
Listen on port 38258
Accept...Accept...Vsock connection from port 1038 cid 2
Vsock connection from port 1037 cid 2
Dump: 115, broken : 0, drop: 0, file err: 0
Dump: 142, broken : 0, drop: 0, file err: 0

 

Para finalizar la captura, obtenemos los ID de los procesos y los paramos, ejecutando:

kill $(lsof |grep pktcap-uw |awk '{print $1}'| sort -u)

Como ejemplo:

[root@esxi03:~] kill $(lsof |grep pktcap-uw |awk '{print $1}'| sort -u)
Join with dump thread failedDestroying session 12
Join with dump thread failedDestroying session 11

Dumped 2682 packet to file /vmfs/volumes/STORAGE01-VMWARE-CONF-01/pktcap-uw/Capturas/vmnic0-20160116, dropped 0 packets.
Dumped 81 packet to file /vmfs/volumes/STORAGE01-VMWARE-CONF-01/pktcap-uw/Capturas/DC01-20160116.pcap, dropped 0 packets.
Done.
Done.

[3]+  Done                       pktcap-uw --switchport 33554438 -o /vmfs/volumes/STORAGE01-VMWARE-CONF-01/pktcap-uw/Capturas/DC01-20160116.pcap
[2]+  Done                       pktcap-uw --uplink vmnic0 -o/vmfs/volumes/STORAGE01-VMWARE-CONF-01/pktcap-uw/Capturas/vmnic0-20160116

Deja un comentario

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.