Conceptos básicos del rastreador de paquetes para la resolución de problemas de red

La realización de capturas de paquetes con un rastreador puede ser un método extremadamente poderoso para diagnosticar problemas complejos. Cuando todo lo demás falla, a menudo es útil ver los datos sin procesar que se envían a través del cable. Los paquetes no mienten y analizar el tráfico de su aplicación en un nivel bajo puede revelar síntomas más profundos de un problema (o revelar un problema que ni siquiera sabía que existía).

En este artículo, Cubriremos algunos fundamentos del uso de la herramienta tcpdump basada en CLI.

Conceptos básicos de Sniffer

Así que primero lo primero: ¿Qué queremos decir cuando decimos «rastreador de paquetes»? Un rastreador de paquetes es simplemente un software que le permite capturar paquetes en su red. Tcpdump y Wireshark son ejemplos de rastreadores de paquetes. Tcpdump proporciona un rastreador de paquetes CLI y Wireshark proporciona una GUI rica en funciones para rastrear y analizar paquetes.

De forma predeterminada, tcpdump funciona en modo promiscuo. Esto simplemente significa que todos los paquetes que lleguen a un host se enviarán a tcpdump para su inspección. Esta configuración incluye incluso el tráfico que no estaba destinado al host específico en el que está capturando, como el tráfico de difusión y multidifusión. Por supuesto, tcpdump no es una pieza mágica de software: solo puede capturar aquellos paquetes que de alguna manera llegan a una de las interfaces físicas de su máquina.

Instalación tcpdump es simple. Está disponible en los repositorios de paquetes estándar de su sistema Red Hat y puede instalarlo por su nombre:

Escenarios comunes de rastreo de paquetes

Capturar todo el tráfico que ingresa a su máquina puede sonar conceptualmente genial, pero también suena a un nivel bastante bajo para muchas de las actividades que realizamos en nuestro trabajo diario como administradores de sistemas. Entonces, ¿cuándo usaría una herramienta de captura de paquetes? Por lo general, recurro a un rastreador de paquetes cuando estoy solucionando un problema de una aplicación de red y he agotado todas las demás opciones. A menudo, ya realicé la resolución de problemas básicos de la red y revisé los archivos de registro de la aplicación, pero todavía no puedo llegar al fondo de un problema. En este punto, utilizar un rastreador de paquetes para observar los datos reales que se envían por cable puede ser instructivo.

Otro gran caso de uso para un rastreador de paquetes es pedagógico. Observar los paquetes involucrados en un intercambio de aplicaciones puede ser de gran ayuda para mejorar su comprensión de los protocolos subyacentes. Por ejemplo, puede ser invaluable observar el flujo de paquetes completo de una consulta DNS recursiva cuando se trata de comprender cómo funciona el DNS.

Realización de capturas de paquetes básicas

La mejor manera de aprender es simplemente sumergiéndonos, así que comencemos con algunas capturas de paquetes básicas. Primero, probemos tcpdump sin opciones especiales. Tenga en cuenta que deberá ser el superusuario para realizar capturas de paquetes (técnicamente, puede ejecutarlo desde una cuenta normal con capacidades especiales, pero generalmente es más fácil ejecutarlo como root). Use Ctrl + C o envíe un SIGTERM al tcpdump ID de proceso (PID) para detener la captura.

Tcpdump predeterminado

Para ver la salida predeterminada de tcpdump, simplemente escriba el comando:

Nota: En lugar de tener una gran cantidad de resultados volando antes de presionar Ctrl + C, puede especificar cuántos paquetes desea ver con el indicador -c. En su lugar, el comando anterior podría ser tcpdump -c 6 para obtener los mismos resultados (seis paquetes capturados).

La salida de tcpdump puede ser un poco abrumador al principio, pero te acostumbrarás a mirarlo después de haber usado esta herramienta varias veces. Analicemos los campos, de izquierda a derecha:

Olfatear una interfaz específica

Observe que la parte superior de la salida del ejemplo anterior le muestra la interfaz que tcpdump comienza a capturar en (eth0), y la parte inferior de la captura incluye estadísticas resumidas sobre los paquetes capturados.

Lo primero que probablemente querrá hacer al usar tcpdump es para especificar una interfaz particular para realizar capturas. De forma predeterminada, tcpdump seleccionará la interfaz con el número más bajo que esté «activa». Muchos servidores tienen múltiples interfaces y querrá ser explícito sobre la interfaz que usa para capturar. Además, algunos tipos de interfaz «especiales», como una interfaz netfilter, pueden flotar en la parte superior de la lista. Este comportamiento puede causar confusión, por lo que es mejor especificar la interfaz que le interesa.

Comencemos por ver las interfaces que están disponibles para capturar:

Con una lista de interfaces a nuestra disposición, ahora podemos especificar la interfaz a escuchar con el indicador -i.Tenga en cuenta que se puede utilizar el nombre de la interfaz o el número del comando --list-interfaces:

Observar las capturas anteriores nos proporciona información básica sobre los paquetes que atraviesan nuestro la red. Parece que estos paquetes contienen salida del Protocolo de árbol de expansión (STP), quizás de un conmutador ascendente. Técnicamente, estos no son paquetes, son capas de dos marcos. Sin embargo, escuchará que los términos se usan indistintamente cuando se habla de capturas de paquetes.

Obtener más información

El resultado de resolución de problemas simple del ejemplo anterior puede ser excelente para identificar problemas obvios, pero a veces necesitamos más información para profundizar realmente en un problema complejo. Saber cómo ajustar la verbosidad de su captura es importante, ya que le permite profundizar en los datos reales contenidos en los paquetes.

El nivel de verbosidad de tcpdump se controla agregando entre uno y tres -v indicadores al comando:

Tenga en cuenta que al especificar el nivel máximo de verbosidad, puedo ver mucha más información sobre el cuerpo del paquete. Arriba, podemos ver información adicional sobre los datos en el paquete STP, como el ID del puente raíz y el costo de la ruta raíz. Si no está familiarizado con STP, no se preocupe. Lo importante a notar aquí es que al aumentar la verbosidad, podemos obtener información adicional sobre el tráfico de nuestra red.

Ver los bytes exactos de un paquete

Aumentar la verbosidad es útil, pero Todavía no veo la carne del contenido de los paquetes. Si realmente desea ver los bytes exactos que están en los paquetes, puede usar los indicadores -x y -X. El indicador -x imprime los datos de cada paquete en hexadecimal, mientras que el indicador -X también imprime los datos en ASCII. Aquí está la salida usando -x:

Y aquí está la salida usando -X:

Observe los datos hexadecimales y ASCII en los ejemplos anteriores. En este caso, estaba realizando una consulta de registro DNS A para . Además, tenga en cuenta que utilicé el indicador -c para especificar el número de paquetes a capturar, y proporcioné un filtro de captura de port 53. Analizaremos los filtros en el próximo artículo.

Cumplir con los números

Mientras trabaja con tcpdump, es posible que observe que su comportamiento predeterminado es resolver automáticamente las direcciones IP en nombres de dominio completos (FQDN). Tcpdump también traducirá los números de puerto (como 22) a nombres descriptivos (como SSH). Si bien este comportamiento es bueno, a menudo queremos ver los datos numéricos para no ocultar nuestra solución de problemas de ninguna manera. Este comportamiento predeterminado se puede cambiar pasando -n para deshabilitar las búsquedas de direcciones IP, o -nn para deshabilitar las búsquedas de direcciones IP y puertos.

Este es el resultado cuando usa -nn:

Guardando su volcado

En algún momento, es posible que desee para guardar sus capturas de paquetes para un análisis posterior, o para un análisis más profundo con una herramienta gráfica como Wireshark. Esta tarea se puede realizar fácilmente con el indicador -w, que le permite escribir un archivo de captura de paquetes:

Nota: Puede leer su archivo guardado usando tcpdump con el indicador -r, o con una aplicación diferente que admita el formato de archivo pcap.

Como podemos ver arriba , el indicador -w produjo un archivo pcap útil que podemos llevar con nosotros.

Conclusión

Realizar capturas de paquetes es una técnica poderosa en su inventario de habilidades de resolución de problemas de red, especialmente cuando está atascado en un problema y el resto de la red parece estar bien. Comprender cómo usar tcpdump en la línea de comandos puede ahorrarle horas de frustración al intentar resolver problemas de aplicaciones de red, y la sintaxis es bastante intuitiva una vez que se acostumbra.

Deja una respuesta

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