Cómo usar tcpdump para capturar paquetes de red en Linux
Guía práctica para administradores de sistemas para diagnosticar tráfico de red e investigar fallos directamente desde la terminal con tcpdump.
Resumen
- La inspección directa de paquetes mediante la terminal revela fallos ocultos en aplicaciones que los registros habituales ignoran.
- El filtrado por puertos específicos e IPs evita el exceso de ruido visual durante las capturas en servidores de producción.
- El almacenamiento del tráfico capturado en archivos pcap permite análisis detallados posteriores en herramientas gráficas como Wireshark.
- La resolución de nombres de host desactivada acelera el procesamiento en tiempo real de grandes volúmenes de paquetes.
- El diagnóstico preciso de problemas de conexión exige comprender los estados del protocolo TCP directamente en la capa de enlace.
Por qué tcpdump es indispensable para administradores de sistemas
Cuando una aplicación falla al conectarse a una base de datos o una API externa, el primer instinto de muchos administradores es mirar los archivos de registro del servicio. Sin embargo, cuando los registros muestran únicamente un error genérico de tiempo de espera, el operador se queda a ciegas sin saber si el paquete de datos llegó a su destino. Es exactamente en ese escenario crítico donde entra tcpdump, una utilidad de línea de comandos nativa de Linux que intercepta y muestra los paquetes de red que circulan por las interfaces del servidor. En la práctica, funciona como un estetoscopio digital, permitiendo escuchar el tráfico bruto exactamente como entra y sale de la tarjeta de red. Si quieres dominar el diagnóstico de infraestructura, aprender a aislar problemas de conectividad complementa otras habilidades esenciales, tal como explicamos en la guía sobre cómo usar journalctl para investigar logs en Linux de forma centralizada.
Cómo listar las interfaces de red disponibles en el servidor
Antes de iniciar cualquier captura de paquetes, debes descubrir qué tarjeta de red del servidor está procesando realmente el tráfico que deseas analizar. En servidores modernos, los nombres tradicionales como eth0 se han sustituido por identificadores predecibles basados en el bus del sistema, como enp3s0 o wlan0. Para listar todas las interfaces activas y disponibles en el sistema operativo, ejecuta el comando tcpdump acompañado del parámetro de listado. Esta comprobación evita que grabes datos en la interfaz incorrecta y pierdas el evento que intentas solucionar. Si la red presenta lentitud generalizada entre diferentes entornos o contenedores, vale la pena cruzar esta información con pruebas de rendimiento usando estrategias similares a las descritas en cómo medir con iperf3.
Para listar las interfaces disponibles en tu Linux, abre la terminal con privilegios administrativos y ejecuta la instrucción a continuación:
tcpdump -DEl sistema mostrará una lista enumerada con cada interfaz de red física y virtual presente en la máquina. Anota el número o el nombre exacto de la interfaz que deseas monitorizar durante los próximos pasos.
Cómo capturar tráfico básico en tiempo real
Después de identificar la interfaz correcta, el siguiente paso es iniciar la captura del tráfico bruto para comprender el comportamiento de las conexiones. Por defecto, si ejecutas el comando sin restricciones, tcpdump intentará traducir direcciones IP y números de puerto en nombres legibles de servicios, lo que puede ralentizar la ejecución debido a consultas DNS. Para evitar este retraso indeseado y visualizar los datos de forma limpia, utilizamos el parámetro que desactiva la resolución de nombres. Durante una investigación de incidentes en entornos críticos, es común que los administradores necesiten también cómo monitorizar tráfico de red en puertos específicos con tcpdump para aislar ruido y centrarse únicamente en el servicio afectado.
Ejecuta el comando siguiente sustituyendo eth0 por la interfaz identificada en el paso anterior:
sudo tcpdump -i eth0 -nCada línea impresa en la pantalla representa un paquete individual capturado, mostrando las direcciones de origen y destino, los puertos involucrados y las banderas del protocolo. Para interrumpir la ejecución y volver al indicador de comandos, simplemente presiona las teclas Ctrl + C.
Cómo filtrar paquetes por IP, puerto y protocolo
En servidores de alta concurrencia, capturar todo el tráfico genera una avalancha de datos en la pantalla que hace que el análisis manual sea prácticamente imposible. Para resolver este problema, tcpdump acepta expresiones de filtro basadas en la sintaxis Berkeley Packet Filter (BPF), permitiendo aislar tráfico de una dirección IP específica, de un puerto de servicio o de un protocolo como TCP, UDP e ICMP. En la práctica, esto significa que puedes restringir la escucha únicamente a los paquetes destinados a la base de datos en el puerto 5432 o generados por la IP de un cliente con problemas de acceso.
Para capturar solo los paquetes TCP dirigidos al puerto 80 en la interfaz eth0, utiliza el siguiente comando:
sudo tcpdump -i eth0 -n tcp port 80También puedes combinar múltiples criterios usando operadores lógicos como and, por y not. Por ejemplo, para aislar tráfico de una IP específica comunicándose con un puerto dedicado, escribe:
sudo tcpdump -i eth0 -n host 192.168.1.50 and port 443Cómo guardar y analizar capturas de red en archivos pcap
A menudo, diagnosticar un problema complejo en tiempo real resulta inviable debido a la velocidad con la que los paquetes pasan por la pantalla. La mejor estrategia en estos casos es guardar el flujo bruto de datos directamente en un archivo con extensión .pcap para su posterior inspección minuciosa o intercambio con otros ingenieros. El archivo generado conserva todos los detalles binarios de los paquetes capturados, permitiéndote utilizar utilidades de línea de comandos o software de interfaz gráfica como Wireshark en tu propia estación de trabajo. Esto garantiza que la ventana de indisponibilidad en producción sea lo más corta posible.
Para grabar la captura directamente en un archivo, utiliza el parámetro de escritura:
sudo tcpdump -i eth0 -n -w diagnostico.pcap port 3306Para leer el contenido de ese archivo posteriormente sin necesidad de reejecutar la captura en la red del servidor, utiliza el parámetro de lectura:
tcpdump -r diagnostico.pcap -nConsideraciones finales sobre el uso de tcpdump
Dominar tcpdump transforma la forma en que los administradores de sistemas solucionan problemas de red, eliminando conjeturas y revelando exactamente qué ocurre a nivel de paquetes. Al combinar filtros precisos, almacenamiento en archivos pcap y conocimiento sobre los protocolos fundamentales, cualquier incidente de conectividad deja de ser un misterio insondable. Recuerda siempre finalizar las capturas tras terminar la investigación para evitar el consumo innecesario de espacio en disco y recursos de procesamiento en el servidor.