Introducción a Comandos de Red
Los comandos de red en Linux son herramientas fundamentales para cualquier administrador de sistemas. Permiten diagnosticar problemas de conectividad, monitorear el tráfico de red, configurar interfaces y automatizar tareas de red mediante scripts de Bash.
En esta lección aprenderás los comandos más importantes para la administración de redes, desde herramientas básicas de diagnóstico hasta comandos avanzados para el análisis del tráfico de red.
¿Por qué son importantes?
Los comandos de red son esenciales para troubleshooting, monitoreo de rendimiento, seguridad y automatización en entornos de producción. Un sysadmin debe dominar estas herramientas para mantener sistemas críticos funcionando correctamente.
Comandos de Diagnóstico Básico
ping - Prueba de Conectividad
El comando más básico y útil para probar la conectividad de red.
# Ping básico (se ejecuta indefinidamente)
ping google.com
# Ping con número limitado de paquetes
ping -c 4 google.com
# Ping con intervalo personalizado (1 ping cada 2 segundos)
ping -i 2 google.com
# Ping silencioso (solo estadísticas finales)
ping -c 4 -q google.com
# Ping con timestamp
ping google.com | while read line; do echo "$(date): $line"; done
$ ping -c 4 google.com
PING google.com (172.217.168.46) 56(84) bytes of data.
64 bytes from lga25s57-in-f14.1e100.net (172.217.168.46): icmp_seq=1 ttl=117 time=12.3 ms
64 bytes from lga25s57-in-f14.1e100.net (172.217.168.46): icmp_seq=2 ttl=117 time=11.8 ms
64 bytes from lga25s57-in-f14.1e100.net (172.217.168.46): icmp_seq=3 ttl=117 time=12.1 ms
64 bytes from lga25s57-in-f14.1e100.net (172.217.168.46): icmp_seq=4 ttl=117 time=12.0 ms
--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 11.828/12.050/12.307/0.175 ms
traceroute - Rastreo de Ruta
Muestra la ruta que siguen los paquetes hasta su destino.
# Traceroute básico
traceroute google.com
# Traceroute con resolución de nombres deshabilitada (más rápido)
traceroute -n google.com
# Traceroute usando TCP en lugar de ICMP
traceroute -T -p 80 google.com
# Traceroute con máximo de saltos personalizado
traceroute -m 15 google.com
nslookup y dig - Consultas DNS
Herramientas para consultar y diagnosticar problemas de DNS.
# nslookup básico
nslookup google.com
# nslookup inverso (IP a nombre)
nslookup 8.8.8.8
# dig - más potente y flexible
dig google.com
# dig para registros específicos
dig google.com MX # Registros de mail
dig google.com AAAA # Registros IPv6
dig google.com NS # Nameservers
# dig con servidor DNS específico
dig @8.8.8.8 google.com
# dig traza completa
dig +trace google.com
Monitoreo de Conexiones
netstat - Estado de la Red
Muestra conexiones de red, tablas de enrutamiento, estadísticas de interfaz y más.
# Todas las conexiones activas
netstat -a
# Solo conexiones TCP
netstat -t
# Solo conexiones UDP
netstat -u
# Mostrar puertos en escucha
netstat -l
# Mostrar procesos (requiere privilegios)
netstat -p
# Combinación más útil: TCP, listening, con procesos
netstat -tlp
# Estadísticas de red
netstat -s
# Tabla de enrutamiento
netstat -r
$ netstat -tlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd: /usr/sbi
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 5678/cupsd
tcp6 0 0 :::80 :::* LISTEN 9012/apache2
tcp6 0 0 :::22 :::* LISTEN 1234/sshd: /usr/sbi
ss - Socket Statistics (sucesor de netstat)
Herramienta más moderna y eficiente que netstat.
# Equivalente a netstat -tlp
ss -tlp
# Solo conexiones establecidas
ss -t state established
# Filtrar por puerto específico
ss -tlp sport = :80
# Mostrar procesos usando un puerto específico
ss -tlp sport = :22
# Estadísticas resumidas
ss -s
Configuración de Interfaces
ifconfig - Configuración de Interfaces
Comando tradicional para configurar interfaces de red (en desuso en favor de ip).
# Ver todas las interfaces
ifconfig
# Ver una interfaz específica
ifconfig eth0
# Configurar IP estática
sudo ifconfig eth0 192.168.1.100 netmask 255.255.255.0
# Activar/desactivar interfaz
sudo ifconfig eth0 up
sudo ifconfig eth0 down
ip - Herramienta Moderna de Red
Sucesor moderno de ifconfig, route, y arp. Más potente y flexible.
# Ver todas las interfaces
ip addr show
# o simplemente
ip a
# Ver una interfaz específica
ip addr show eth0
# Agregar IP a una interfaz
sudo ip addr add 192.168.1.100/24 dev eth0
# Eliminar IP de una interfaz
sudo ip addr del 192.168.1.100/24 dev eth0
# Activar/desactivar interfaz
sudo ip link set eth0 up
sudo ip link set eth0 down
# Ver tabla de enrutamiento
ip route show
# o
ip r
# Agregar ruta
sudo ip route add 192.168.2.0/24 via 192.168.1.1
# Ver estadísticas de tráfico
ip -s link show eth0
Monitoreo de Tráfico
iftop - Monitor de Ancho de Banda
Herramienta interactiva para monitorear el uso de ancho de banda por conexión.
# Monitor básico (requiere privilegios root)
sudo iftop
# Monitor en interfaz específica
sudo iftop -i eth0
# Resolver nombres de host
sudo iftop -n
# Mostrar puertos
sudo iftop -P
nethogs - Uso de Red por Proceso
Muestra el uso de ancho de banda por proceso, ideal para identificar aplicaciones que consumen mucho ancho de banda.
# Monitor básico
sudo nethogs
# Monitor en interfaz específica
sudo nethogs eth0
# Actualizar cada 5 segundos
sudo nethogs -d 5
Scripts de Red Avanzados
Script de Diagnóstico de Red
Script completo para diagnosticar problemas de conectividad:
#!/bin/bash
# Script de Diagnóstico de Red Completo
# Uso: ./network_diagnostic.sh [host]
HOST=${1:-"google.com"}
LOG_FILE="/tmp/network_diagnostic_$(date +%Y%m%d_%H%M%S).log"
echo "=== DIAGNÓSTICO DE RED ===" | tee $LOG_FILE
echo "Fecha: $(date)" | tee -a $LOG_FILE
echo "Host objetivo: $HOST" | tee -a $LOG_FILE
echo "=========================" | tee -a $LOG_FILE
# Función para logging
log_section() {
echo -e "\n--- $1 ---" | tee -a $LOG_FILE
}
# 1. Información de interfaces
log_section "INTERFACES DE RED"
ip addr show | tee -a $LOG_FILE
# 2. Tabla de enrutamiento
log_section "TABLA DE ENRUTAMIENTO"
ip route show | tee -a $LOG_FILE
# 3. Servidores DNS
log_section "CONFIGURACIÓN DNS"
cat /etc/resolv.conf | tee -a $LOG_FILE
# 4. Test de conectividad
log_section "TEST DE CONECTIVIDAD"
echo "Ping a $HOST:" | tee -a $LOG_FILE
if ping -c 4 $HOST 2>&1 | tee -a $LOG_FILE; then
echo "✓ Conectividad OK" | tee -a $LOG_FILE
else
echo "✗ Falló la conectividad" | tee -a $LOG_FILE
fi
# 5. Resolución DNS
log_section "RESOLUCIÓN DNS"
echo "Resolviendo $HOST:" | tee -a $LOG_FILE
if nslookup $HOST 2>&1 | tee -a $LOG_FILE; then
echo "✓ DNS OK" | tee -a $LOG_FILE
else
echo "✗ Falló resolución DNS" | tee -a $LOG_FILE
fi
# 6. Traceroute
log_section "TRACEROUTE"
echo "Ruta a $HOST:" | tee -a $LOG_FILE
traceroute -n $HOST 2>&1 | tee -a $LOG_FILE
# 7. Puertos abiertos
log_section "PUERTOS EN ESCUCHA"
netstat -tlnp 2>/dev/null | grep LISTEN | tee -a $LOG_FILE
# 8. Estadísticas de red
log_section "ESTADÍSTICAS DE RED"
cat /proc/net/dev | tee -a $LOG_FILE
echo -e "\n=== FIN DEL DIAGNÓSTICO ===" | tee -a $LOG_FILE
echo "Log guardado en: $LOG_FILE" | tee -a $LOG_FILE
Monitor de Red en Tiempo Real
Script para monitorear el estado de múltiples hosts:
#!/bin/bash
# Monitor de Red Multi-Host
# Uso: ./network_monitor.sh
# Lista de hosts a monitorear
HOSTS=(
"google.com"
"github.com"
"stackoverflow.com"
"8.8.8.8"
)
INTERVAL=30 # Segundos entre chequeos
# Colores
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Función para obtener timestamp
timestamp() {
date '+%Y-%m-%d %H:%M:%S'
}
# Función para test de conectividad
test_host() {
local host=$1
if ping -c 1 -W 3 $host &>/dev/null; then
echo -e "${GREEN}✓${NC} $host - OK"
return 0
else
echo -e "${RED}✗${NC} $host - FALLO"
return 1
fi
}
# Función principal de monitoreo
monitor_network() {
while true; do
clear
echo "=== MONITOR DE RED ==="
echo "Timestamp: $(timestamp)"
echo "Intervalo: ${INTERVAL}s"
echo "======================"
local failed_hosts=0
for host in "${HOSTS[@]}"; do
if ! test_host "$host"; then
((failed_hosts++))
fi
done
echo "======================"
if [ $failed_hosts -eq 0 ]; then
echo -e "Estado general: ${GREEN}TODOS OK${NC}"
else
echo -e "Estado general: ${RED}$failed_hosts FALLOS${NC}"
fi
echo "Próxima verificación en ${INTERVAL}s..."
sleep $INTERVAL
done
}
# Verificar si se ejecuta como script principal
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
echo "Iniciando monitor de red..."
echo "Presiona Ctrl+C para salir"
sleep 2
monitor_network
fi
Ejercicios Prácticos
Ejercicio 1: Diagnóstico Completo
Ejecuta un diagnóstico completo de tu conexión de red:
- Verifica la configuración de todas tus interfaces de red
- Identifica tu gateway predeterminado
- Realiza un ping a tu gateway
- Realiza un traceroute a un sitio web
- Verifica qué puertos tienes abiertos
# 1. Configuración de interfaces
ip addr show
# 2. Gateway predeterminado
ip route | grep default
# 3. Ping al gateway (sustituye IP_DEL_GATEWAY)
ping -c 4 IP_DEL_GATEWAY
# 4. Traceroute a un sitio
traceroute -n google.com
# 5. Puertos abiertos
ss -tlnp
Ejercicio 2: Monitoreo de Uso
Implementa un script que monitore el uso de ancho de banda de tu interfaz principal durante 5 minutos, guardando estadísticas cada 30 segundos.