Mi reto
Necesito hacer tcpdumping de una gran cantidad de datos, en realidad de 2 interfaces que quedan en modo promiscuo que pueden ver mucho tráfico.
Para resumirlo
- Registre todo el tráfico en modo promiscuo desde 2 interfaces
- A esas interfaces no se les asigna una dirección IP
- los archivos pcap deben rotarse por ~ 1G
- Cuando se almacenan 10 TB de archivos, comience a truncar el más antiguo
Lo que hago actualmente
En este momento uso tcpdump así:
ifconfig ethX promisc
ifconfig ethX promisc
tcpdump -n -C 1000 -z /data/compress.sh -i any -w /data/livedump/capture.pcap $FILTER
El $FILTER
contiene filtros src / DST para que pueda utilizar -i any
. La razón de esto es que tengo dos interfaces y me gustaría ejecutar el volcado en un solo subproceso en lugar de dos.
compress.sh
se encarga de asignar tar a otro núcleo de CPU, comprime los datos, le da un nombre de archivo razonable y lo mueve a una ubicación de archivo.
No puedo especificar dos interfaces, por lo tanto, he elegido usar filtros y volcar desde la any
interfaz.
En este momento, no hago ninguna tarea de limpieza, pero planeo monitorear el disco y cuando me quede 100G, comenzaré a borrar los archivos más antiguos, esto debería estar bien.
Y ahora; mi problema
Veo paquetes caídos. Esto es de un volcado que se ha estado ejecutando durante unas horas y ha recopilado aproximadamente 250 gigas de archivos pcap:
430083369 packets captured
430115470 packets received by filter
32057 packets dropped by kernel <-- This is my concern
¿Cómo puedo evitar que se caigan tantos paquetes?
Estas cosas que ya probé o miré
Cambió el valor de /proc/sys/net/core/rmem_max
y /proc/sys/net/core/rmem_default
lo que realmente ayudó: en realidad se hizo cargo de casi la mitad de los paquetes descartados.
También he visto gulp : el problema con gulp es que no admite múltiples interfaces en un solo proceso y se enoja si la interfaz no tiene una dirección IP. Desafortunadamente, eso es un factor decisivo en mi caso.
El siguiente problema es que cuando el tráfico fluye a través de una tubería, no puedo poner en marcha la rotación automática. Obtener un archivo enorme de 10 TB no es muy eficiente y no tengo una máquina con 10TB + RAM en la que pueda ejecutar wireshark, así que eso está fuera.
¿Tienes alguna sugerencia? Tal vez incluso una mejor manera de hacer mi volcado de tráfico por completo.