Pruebas de red en Linux

LinuxBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderá sobre pruebas de red en Linux utilizando el comando ping. Las pruebas de red son esenciales para diagnosticar problemas de conectividad, medir el rendimiento de la red y garantizar que los dispositivos puedan comunicarse correctamente entre sí.

El comando ping es una de las herramientas de prueba de red más fundamentales disponibles en los sistemas Linux. Funciona enviando paquetes de solicitud de eco ICMP (Protocolo de Mensajes de Control de Internet) a un host de destino y esperando paquetes de respuesta de eco ICMP. Este sencillo mecanismo le permite verificar si un host remoto es alcanzable y medir el tiempo de ida y vuelta de los paquetes hasta el destino y de regreso.

Al completar este laboratorio, adquirirá experiencia práctica con herramientas de prueba de red y desarrollará habilidades esenciales para la resolución de problemas de red.

Este es un Guided Lab, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y obtener experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel intermedio con una tasa de finalización del 79%. Ha recibido una tasa de reseñas positivas del 100% por parte de los estudiantes.

Uso del comando ping para pruebas básicas de red

En este paso, aprenderemos cómo utilizar el comando ping para probar la conectividad entre su computadora y otro host en la red. El comando ping envía solicitudes de eco a una dirección de destino y espera respuestas, lo que le permite verificar si el host es alcanzable.

Primero, abra su terminal y asegúrese de estar en el directorio del proyecto:

cd ~/project

Creemos un archivo de texto para almacenar las direcciones IP que queremos probar. Esto nos ayudará a organizar nuestras pruebas de red:

echo "8.8.8.8" > ~/project/ping_hosts.txt

Este comando crea un archivo llamado ping_hosts.txt que contiene la dirección IP 8.8.8.8, que es el servidor DNS público de Google.

Ahora, realicemos nuestra primera prueba de ping utilizando el siguiente comando:

ping -c 4 $(cat ~/project/ping_hosts.txt)

El comando anterior hace lo siguiente:

  • ping: Invoca la utilidad ping
  • -c 4: Limita el ping a 4 paquetes (por defecto, ping continúa hasta que lo detiene con Ctrl+C)
  • $(cat ~/project/ping_hosts.txt): Lee la dirección IP de nuestro archivo

Cuando ejecute este comando, debería ver una salida similar a esta:

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=116 time=14.5 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=116 time=13.9 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=116 time=13.8 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=116 time=13.7 ms

--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 13.676/13.963/14.513/0.329 ms

Esta salida indica que:

  • Su sistema envió con éxito 4 paquetes al host de destino
  • El host de destino respondió a los 4 paquetes
  • Hubo un 0% de pérdida de paquetes
  • El tiempo de ida y vuelta (rtt) promedió alrededor de 14 milisegundos

Si intentara hacer ping a un host inalcanzable, podría ver algo como esto:

PING 192.168.1.100 (192.168.1.100) 56(84) bytes of data.

--- 192.168.1.100 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3062ms

Esto indica que no se recibieron respuestas del host de destino, lo que sugiere que el host está fuera de línea, inalcanzable o bloqueando las solicitudes de eco ICMP.

Intentemos otro ejemplo con una dirección IP diferente. Esta vez, usaremos una dirección de gateway de red local común:

ping -c 4 192.168.1.1

La respuesta variará según la configuración de su red. Si esta IP es su gateway, debería ver respuestas de ping exitosas con una latencia muy baja (por lo general, menos de 1 ms). De lo contrario, podría ver tiempos de espera o mensajes de "Destination Host Unreachable".

Comprender y analizar la salida del comando ping

Ahora que has aprendido cómo usar el comando ping básico, exploremos cómo interpretar su salida en más detalle. Comprender los resultados del ping es esencial para diagnosticar problemas de red.

Primero, agreguemos otro host a nuestro archivo ping_hosts.txt:

echo "1.1.1.1" >> ~/project/ping_hosts.txt

Este comando agrega la dirección IP del servidor DNS de Cloudflare a nuestro archivo. El operador >> agrega contenido a un archivo en lugar de sobrescribirlo (lo que hace >).

Verifiquemos el contenido de nuestro archivo:

cat ~/project/ping_hosts.txt

Deberías ver:

8.8.8.8
1.1.1.1

Ahora, hagamos ping a la segunda dirección y analicemos la salida:

ping -c 4 $(tail -n 1 ~/project/ping_hosts.txt)

El comando tail -n 1 extrae la última línea del archivo, que es la dirección IP del servidor DNS de Cloudflare.

Deberías ver una salida similar a:

PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=57 time=9.32 ms
64 bytes from 1.1.1.1: icmp_seq=2 ttl=57 time=8.76 ms
64 bytes from 1.1.1.1: icmp_seq=3 ttl=57 time=8.92 ms
64 bytes from 1.1.1.1: icmp_seq=4 ttl=57 time=9.08 ms

--- 1.1.1.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 8.756/9.019/9.317/0.210 ms

Desglosemos esta salida en detalle:

  1. Encabezado: PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.

    • Esto muestra la dirección IP de destino y el tamaño del paquete de ping (56 bytes de datos, 84 bytes incluyendo encabezados)
  2. Respuestas de eco individuales:

    • 64 bytes from 1.1.1.1: icmp_seq=1 ttl=57 time=9.32 ms
    • bytes from: Indica el tamaño de la respuesta
    • icmp_seq: El número de secuencia del paquete
    • ttl: Time To Live (Tiempo de vida), un valor que evita que los paquetes circulen indefinidamente
    • time: El tiempo de ida y vuelta en milisegundos
  3. Estadísticas resumidas:

    • 4 packets transmitted, 4 received, 0% packet loss, time 3005ms
    • Esto muestra cuántos paquetes se enviaron, cuántos se recibieron, el porcentaje de pérdida de paquetes y el tiempo total
    • rtt min/avg/max/mdev = 8.756/9.019/9.317/0.210 ms
    • El mínimo, promedio, máximo y desviación media de los tiempos de ida y vuelta

Usemos algunas opciones adicionales con ping para obtener más información:

ping -c 4 -i 0.5 -s 100 1.1.1.1

Este comando:

  • -c 4: Envía 4 paquetes
  • -i 0.5: Establece el intervalo entre paquetes en 0.5 segundos (el valor predeterminado es 1 segundo)
  • -s 100: Cambia el tamaño del paquete a 100 bytes (el valor predeterminado es 56)

Deberías ver una salida con tamaños de paquete más grandes e intervalos más rápidos:

PING 1.1.1.1 (1.1.1.1) 100(128) bytes of data.
108 bytes from 1.1.1.1: icmp_seq=1 ttl=57 time=9.33 ms
108 bytes from 1.1.1.1: icmp_seq=2 ttl=57 time=9.19 ms
108 bytes from 1.1.1.1: icmp_seq=3 ttl=57 time=9.11 ms
108 bytes from 1.1.1.1: icmp_seq=4 ttl=57 time=9.20 ms

--- 1.1.1.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 1503ms
rtt min/avg/max/mdev = 9.108/9.205/9.326/0.079 ms

Al analizar los resultados del ping, presta atención a estas métricas clave:

  1. Pérdida de paquetes: Cualquier porcentaje por encima del 0% indica problemas de red
  2. Latencia: Tiempos altos (especialmente por encima de 100 ms) pueden indicar congestión de red
  3. Tiempos inconsistentes: Grandes variaciones entre los tiempos mínimo y máximo sugieren inestabilidad de red

Por ejemplo, una alta pérdida de paquetes podría indicar:

  • Congestión de red
  • Problemas de hardware
  • Restricciones de firewall
  • Problemas de enrutamiento

Una alta latencia podría indicar:

  • Distancia física al servidor
  • Congestión de red
  • Conexión de mala calidad
  • Ineficiencia en el enrutamiento

Opciones avanzadas de ping y aplicaciones prácticas

Ahora que comprendes los conceptos básicos del comando ping y cómo interpretar su salida, exploremos algunas opciones avanzadas y escenarios prácticos en los que el ping es útil para el diagnóstico de redes.

Primero, creemos un sencillo script de shell que nos ayudará a monitorear un host continuamente y registrar los resultados:

nano ~/project/monitor_host.sh

Escribe el siguiente script en el editor:

#!/bin/bash

## Simple network monitoring script
HOST=$1
INTERVAL=$2
LOG_FILE=~/project/ping_log.txt

echo "Starting monitoring of $HOST at $(date)" > $LOG_FILE

while true; do
  ping -c 1 $HOST | grep "time=" >> $LOG_FILE
  sleep $INTERVAL
  echo "---" >> $LOG_FILE
done

Guarda el archivo presionando Ctrl+O, luego Enter, y sal del editor con Ctrl+X.

Haz el script ejecutable:

chmod +x ~/project/monitor_host.sh

Ahora, ejecutemos el script durante unos segundos para monitorear el servidor DNS de Google:

~/project/monitor_host.sh 8.8.8.8 2 &
sleep 10
kill $!

Esto hará lo siguiente:

  1. Iniciará el script de monitoreo en segundo plano
  2. Esperará 10 segundos
  3. Detendrá el script

Examinemos el registro:

cat ~/project/ping_log.txt

Deberías ver varios resultados de ping con marcas de tiempo.

Ahora, exploremos algunas opciones más avanzadas de ping:

  1. Establecer el TTL (Time To Live - Tiempo de vida):
ping -c 4 -t 64 8.8.8.8

La opción -t establece el valor de TTL, que define cuántos saltos de red puede atravesar un paquete antes de ser descartado.

  1. Ping de inundación (requiere sudo):
sudo ping -c 10 -f 8.8.8.8

La opción -f envía paquetes tan rápido como sea posible. Esto es útil para pruebas de estrés, pero debe usarse con precaución.

  1. Ping audible:
ping -c 4 -a 8.8.8.8

La opción -a produce un sonido audible cuando un host responde, lo cual es útil cuando estás solucionando problemas y no estás mirando la pantalla.

  1. Temporización con límite de tiempo:
ping -c 4 -w 2 8.8.8.8

La opción -w establece un límite de tiempo en segundos después del cual el ping se detendrá, independientemente de cuántos paquetes se hayan enviado.

Exploremos un escenario práctico de solución de problemas. Crearemos una simple visualización de la ruta de red hacia un destino utilizando traceroute (que funciona de manera similar al ping, pero muestra la ruta que siguen los paquetes):

traceroute 8.8.8.8

Este comando muestra cada salto (enrutador) que los paquetes atraviesan para llegar al destino. Verás algo como:

traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  _gateway (10.0.2.2)  0.113 ms  0.087 ms  0.083 ms
 2  * * *
 3  * * *
 4  8.8.8.8  14.080 ms  13.849 ms  14.399 ms

Los asteriscos (*) representan tiempos de espera agotados o enrutadores que no responden a las solicitudes de traceroute.

Ahora, creemos una simple tabla para documentar nuestros resultados de ping para diferentes hosts:

echo -e "Host\tMin Time\tAvg Time\tMax Time\tPacket Loss" > ~/project/ping_results.txt

Agreguemos el DNS de Google a nuestra tabla:

result=$(ping -c 5 8.8.8.8 | tail -1)
min=$(echo $result | awk -F/ '{print $4}')
avg=$(echo $result | awk -F/ '{print $5}')
max=$(echo $result | awk -F/ '{print $6}')
loss=$(ping -c 5 8.8.8.8 | grep -o "[0-9]*%" | head -1)
echo -e "8.8.8.8\t$min ms\t\t$avg ms\t\t$max ms\t\t$loss" >> ~/project/ping_results.txt

Y agreguemos el DNS de Cloudflare:

result=$(ping -c 5 1.1.1.1 | tail -1)
min=$(echo $result | awk -F/ '{print $4}')
avg=$(echo $result | awk -F/ '{print $5}')
max=$(echo $result | awk -F/ '{print $6}')
loss=$(ping -c 5 1.1.1.1 | grep -o "[0-9]*%" | head -1)
echo -e "1.1.1.1\t$min ms\t\t$avg ms\t\t$max ms\t\t$loss" >> ~/project/ping_results.txt

Veamos nuestra tabla de resultados:

cat ~/project/ping_results.txt

Deberías ver una tabla formateada con estadísticas de ping para ambos servidores DNS, que puedes utilizar para comparar su rendimiento.

Resumen

En este laboratorio, has aprendido cómo usar el comando ping para pruebas de red en Linux. Has adquirido experiencia práctica en:

  • Utilizar el comando ping básico para verificar la conectividad a un host remoto
  • Interpretar la salida del ping para diagnosticar problemas de red
  • Utilizar diversas opciones de ping para personalizar tus pruebas de red
  • Crear scripts para monitorear la conectividad de red
  • Analizar las estadísticas del ping para evaluar el rendimiento de la red
  • Utilizar herramientas relacionadas como traceroute para visualizar las rutas de red

Estas habilidades son esenciales para la resolución de problemas de red y pueden ayudarte a diagnosticar una amplia gama de problemas de conectividad, desde fallos simples hasta problemas de rendimiento complejos.

A medida que continúes trabajando con sistemas Linux, recuerda que ping es solo una de las muchas herramientas de diagnóstico de red disponibles. Otras herramientas útiles incluyen traceroute, netstat, nmap, tcpdump y wireshark, que juntas forman un completo kit de herramientas para la resolución de problemas de red.

Al entender cómo probar la conectividad de red de manera efectiva, ahora estás mejor preparado para mantener y solucionar problemas en sistemas de red en diversos entornos.