Redes Avanzadas con iproute2: Guía Moderna de Configuración de Red en Linux
Introducción
iproute2 representa el estándar moderno para la configuración de redes en Linux, reemplazando las herramientas heredadas como ifconfig, route y arp con un conjunto de redes unificado, potente y rico en funciones. Desarrollado por Alexey Kuznetsov y mantenido por la comunidad de redes del kernel de Linux, iproute2 proporciona control integral sobre enrutamiento, control de tráfico, espacios de nombres de red, VRF (Virtual Routing and Forwarding), enrutamiento basado en políticas y características de redes avanzadas esenciales para infraestructura empresarial.
Mientras que las net-tools heredadas siguen siendo familiares para muchos administradores, carecen de soporte para capacidades modernas de redes del kernel introducidas en las últimas dos décadas. El comando ip de iproute2 proporciona acceso a túneles VxLAN, enrutamiento MPLS, enrutamiento de segmentos, espacios de nombres de red, enrutamiento multi-ruta, tablas de enrutamiento basadas en políticas y modelado de tráfico sofisticado, características imposibles de configurar con herramientas tradicionales.
Las organizaciones que construyen arquitecturas de red complejas—centros de datos multi-inquilino, redes definidas por software, plataformas de orquestación de contenedores y redes de trading de alto rendimiento—dependen de iproute2 para implementar topologías avanzadas, optimizar el flujo de tráfico y solucionar problemas de conectividad. Los principales proveedores de nube, incluidos AWS, Google Cloud y Azure, aprovechan iproute2 extensamente en su infraestructura subyacente para implementar redes VPC, redes superpuestas y políticas de enrutamiento sofisticadas.
Los administradores de sistemas que dominan iproute2 obtienen capacidades mucho más allá de la configuración básica de red: implementar políticas de calidad de servicio, construir redes superpuestas, crear escenarios de enrutamiento complejos, solucionar cuellos de botella de rendimiento y arquitecturar soluciones de redes definidas por software que serían imposibles con herramientas heredadas.
Esta guía integral explora implementaciones de iproute2 de nivel empresarial, cubriendo comandos fundamentales, escenarios de enrutamiento avanzados, control de tráfico, espacios de nombres de red, tecnologías de túneles, optimización del rendimiento, metodologías de solución de problemas y casos de uso prácticos esenciales para las redes modernas de Linux.
Teoría y Conceptos Fundamentales
Arquitectura de iproute2
iproute2 consta de varias utilidades integradas:
ip: Interfaz principal para la configuración de red que gestiona direcciones, rutas, enlaces, túneles y reglas. Reemplaza ifconfig, route y arp.
tc (Traffic Control): Implementa calidad de servicio, gestión de ancho de banda y programación de paquetes. Configura disciplinas de colas, filtros y policías.
ss (Socket Statistics): Muestra información de sockets reemplazando netstat. Más rápido y proporciona información más detallada sobre conexiones de red.
bridge: Gestiona dispositivos de puente Linux para reenvío de Capa 2. Esencial para virtualización y redes de contenedores.
rtmon: Monitorea cambios en la tabla de enrutamiento en tiempo real.
ip-netns: Gestiona espacios de nombres de red habilitando el aislamiento de red para contenedores y multi-tenencia.
Arquitectura de Enrutamiento de Linux
Comprender los fundamentos del enrutamiento es esencial:
Tablas de Enrutamiento: Linux soporta múltiples tablas de enrutamiento (0-255). Tablas comunes:
- Main (tabla 254): Tabla de enrutamiento predeterminada usada por la mayoría de las aplicaciones
- Local (tabla 255): Direcciones locales y de difusión (gestionadas automáticamente)
- Default (tabla 253): Reservada para valores predeterminados post-enrutamiento
Base de Datos de Política de Enrutamiento (RPDB): Reglas que determinan qué tabla de enrutamiento usar basándose en características del paquete (dirección de origen, TOS, fwmark, interfaz).
Caché de Enrutamiento: Eliminada en el kernel 3.6, las decisiones de enrutamiento ahora se toman directamente desde las tablas de enrutamiento con almacenamiento en caché en estructuras de datos por flujo de CPU.
Enrutamiento Multi-Ruta: Distribuye el tráfico a través de múltiples rutas basándose en varios algoritmos (aleatorio, round-robin, ponderado).
Marco de Control de Tráfico
El control de tráfico de Linux implementa QoS sofisticado:
Disciplinas de Colas (qdiscs): Controlan la cola y programación de paquetes:
- pfifo_fast: FIFO predeterminado con tres bandas de prioridad
- fq_codel: Fair Queue Controlled Delay (predeterminado recomendado)
- htb: Hierarchical Token Bucket para limitación de tasa
- sfq: Stochastic Fairness Queuing
Clases: Agrupaciones jerárquicas dentro de qdiscs con clases habilitando asignación compleja de ancho de banda.
Filtros: Clasifican paquetes en diferentes clases basándose en criterios (IP origen/destino, puerto, protocolo, TOS/DSCP).
Policers/Shapers: Controlan el uso del ancho de banda descartando o retrasando paquetes que exceden las tasas configuradas.
Espacios de Nombres de Red
Los espacios de nombres proporcionan aislamiento completo de la pila de red:
Cada espacio de nombres tiene independiente:
- Interfaces de red
- Tablas de enrutamiento
- Reglas de firewall (iptables/nftables)
- Enlaces de socket
- Estadísticas de red
Crítico para redes de contenedores, multi-tenencia y virtualización de funciones de red.
Prerrequisitos
Requisitos de Hardware
Especificaciones Mínimas del Sistema:
- 2 núcleos de CPU (4+ para pruebas de control de tráfico)
- 4GB RAM mínimo
- Múltiples interfaces de red (para escenarios de enrutamiento avanzados)
- NICs de 10Gbps recomendados para configuraciones de alto rendimiento
Prerrequisitos de Software
Instalación:
RHEL/Rocky/CentOS:
# iproute2 instalado por defecto, verificar/actualizar
dnf install -y iproute iproute-tc
# Verificar versión (4.0+ recomendado)
ip -V
Ubuntu/Debian:
# iproute2 instalado por defecto
apt update
apt install -y iproute2
ip -V
Herramientas Adicionales:
# Instalar utilidades útiles
dnf install -y tcpdump ethtool bridge-utils # RHEL/Rocky
apt install -y tcpdump ethtool bridge-utils # Ubuntu/Debian
Requisitos del Kernel
Verificar soporte de redes avanzadas:
# Verificar módulos del kernel
lsmod | grep -E "vxlan|gre|ipip|fou"
# Cargar módulos requeridos
modprobe vxlan
modprobe ip_gre
modprobe ip_tunnel
# Hacer persistente
cat > /etc/modules-load.d/networking.conf << EOF
vxlan
ip_gre
ip_tunnel
EOF
Configuración Avanzada
Gestión de Interfaces
Operaciones Básicas de Interfaz:
# Mostrar todas las interfaces
ip link show
# Mostrar interfaz específica
ip link show dev eth0
# Activar/desactivar interfaz
ip link set eth0 up
ip link set eth0 down
# Cambiar MTU
ip link set eth0 mtu 9000
# Cambiar dirección MAC
ip link set eth0 address 00:11:22:33:44:55
# Habilitar/deshabilitar modo promiscuo
ip link set eth0 promisc on
# Establecer alias de interfaz
ip link set eth0 alias "Management Interface"
Configuración de VLAN:
# Crear interfaz VLAN
ip link add link eth0 name eth0.100 type vlan id 100
# Asignar dirección IP
ip addr add 192.168.100.10/24 dev eth0.100
# Activar
ip link set eth0.100 up
# Eliminar VLAN
ip link delete eth0.100
Configuración de Bridge:
# Crear bridge
ip link add br0 type bridge
# Agregar interfaces al bridge
ip link set eth1 master br0
ip link set eth2 master br0
# Configurar bridge
ip link set br0 up
ip addr add 192.168.1.1/24 dev br0
# Mostrar detalles del bridge
bridge link show
# Eliminar interfaz del bridge
ip link set eth1 nomaster
# Configuración STP del bridge
ip link set br0 type bridge stp_state 1
Bonding/Teaming:
# Crear interfaz bond
ip link add bond0 type bond mode 802.3ad
# Agregar slaves al bond
ip link set eth0 master bond0
ip link set eth1 master bond0
# Configurar bond
ip link set bond0 up
ip addr add 192.168.1.10/24 dev bond0
# Ver estado del bond
cat /proc/net/bonding/bond0
# Cambiar modo de bond
ip link set bond0 type bond mode active-backup
# Modos disponibles: balance-rr, active-backup, balance-xor,
# broadcast, 802.3ad, balance-tlb, balance-alb
Gestión de Direcciones
Configuración de Direcciones IPv4:
# Agregar dirección IP
ip addr add 192.168.1.10/24 dev eth0
# Agregar múltiples direcciones
ip addr add 192.168.1.11/24 dev eth0
ip addr add 192.168.1.12/24 dev eth0
# Agregar dirección con etiqueta
ip addr add 192.168.1.20/24 dev eth0 label eth0:1
# Agregar dirección de broadcast explícitamente
ip addr add 192.168.1.30/24 broadcast 192.168.1.255 dev eth0
# Eliminar dirección
ip addr del 192.168.1.10/24 dev eth0
# Limpiar todas las direcciones de la interfaz
ip addr flush dev eth0
Configuración de Direcciones IPv6:
# Agregar dirección IPv6
ip -6 addr add 2001:db8::10/64 dev eth0
# Agregar dirección link-local
ip -6 addr add fe80::1/64 dev eth0
# Deshabilitar autoconfiguración IPv6
echo 0 > /proc/sys/net/ipv6/conf/eth0/autoconf
# Mostrar solo direcciones IPv6
ip -6 addr show
Configuración de Enrutamiento
Enrutamiento Básico:
# Mostrar tabla de enrutamiento
ip route show
# Agregar puerta de enlace predeterminada
ip route add default via 192.168.1.1
# Agregar ruta específica
ip route add 10.0.0.0/8 via 192.168.1.254
# Agregar ruta vía interfaz
ip route add 172.16.0.0/12 dev eth1
# Eliminar ruta
ip route del 10.0.0.0/8
# Reemplazar ruta
ip route replace 10.0.0.0/8 via 192.168.1.253
Múltiples Tablas de Enrutamiento:
# Crear tabla de enrutamiento personalizada (editar /etc/iproute2/rt_tables)
echo "100 custom" >> /etc/iproute2/rt_tables
# Agregar rutas a la tabla personalizada
ip route add default via 192.168.2.1 table custom
ip route add 10.0.0.0/8 via 192.168.2.254 table custom
# Mostrar tabla personalizada
ip route show table custom
# Mostrar todas las tablas
ip route show table all
Enrutamiento Basado en Políticas:
# Enrutar basado en dirección de origen
ip rule add from 192.168.1.0/24 table custom priority 100
# Enrutar basado en destino
ip rule add to 10.0.0.0/8 table custom priority 200
# Enrutar basado en interfaz
ip rule add iif eth1 table custom priority 300
# Enrutar basado en TOS
ip rule add tos 0x10 table custom priority 400
# Enrutar basado en fwmark (establecido por iptables)
ip rule add fwmark 1 table custom priority 500
# Mostrar reglas
ip rule show
# Eliminar regla
ip rule del from 192.168.1.0/24 table custom
Enrutamiento Multi-Ruta:
# Balancear carga a través de múltiples puertas de enlace
ip route add default scope global \
nexthop via 192.168.1.1 dev eth0 weight 1 \
nexthop via 192.168.2.1 dev eth1 weight 1
# Multi-ruta ponderada (favorecer una ruta)
ip route add 10.0.0.0/8 \
nexthop via 192.168.1.254 weight 3 \
nexthop via 192.168.2.254 weight 1
# Mostrar rutas multi-ruta
ip route show
Configuración de Túneles
Túnel GRE:
# Crear túnel GRE
ip tunnel add gre1 mode gre \
local 203.0.113.10 \
remote 203.0.113.20 \
ttl 255
# Configurar interfaz de túnel
ip addr add 10.10.10.1/30 dev gre1
ip link set gre1 up
# Agregar ruta a través del túnel
ip route add 172.16.0.0/16 dev gre1
# Eliminar túnel
ip link delete gre1
Túnel VxLAN:
# Crear interfaz VxLAN
ip link add vxlan100 type vxlan \
id 100 \
local 192.168.1.10 \
remote 192.168.1.20 \
dev eth0 \
dstport 4789
# Configurar interfaz VxLAN
ip addr add 10.100.0.1/24 dev vxlan100
ip link set vxlan100 up
# VxLAN multicast
ip link add vxlan200 type vxlan \
id 200 \
group 239.1.1.1 \
dev eth0 \
dstport 4789
Túnel IPIP:
# Crear túnel IPIP
ip tunnel add ipip1 mode ipip \
local 203.0.113.10 \
remote 203.0.113.20
ip addr add 10.20.20.1/30 dev ipip1
ip link set ipip1 up
# Agregar ruta
ip route add 192.168.0.0/16 dev ipip1
Interfaz WireGuard (VPN moderna):
# Crear interfaz WireGuard
ip link add dev wg0 type wireguard
# Configurar interfaz
ip addr add 10.0.0.1/24 dev wg0
ip link set wg0 up
# Configurar vía herramienta wg
wg set wg0 \
private-key /etc/wireguard/private.key \
listen-port 51820 \
peer <PUBLIC_KEY> \
allowed-ips 10.0.0.2/32 \
endpoint 203.0.113.20:51820
# Mostrar estado de WireGuard
wg show wg0
Control de Tráfico (tc)
Limitación Básica de Tasa:
# Limitar interfaz a 100Mbit
tc qdisc add dev eth0 root tbf rate 100mbit burst 32kbit latency 400ms
# Mostrar configuración qdisc
tc qdisc show dev eth0
# Eliminar qdisc
tc qdisc del dev eth0 root
Hierarchical Token Bucket (HTB):
# Crear qdisc raíz
tc qdisc add dev eth0 root handle 1: htb default 30
# Crear clase raíz (ancho de banda total)
tc class add dev eth0 parent 1: classid 1:1 htb rate 1gbit
# Crear clases hijas
# Tráfico de alta prioridad (50% garantizado, puede usar 80%)
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 500mbit ceil 800mbit prio 1
# Prioridad media (30% garantizado, puede usar 60%)
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 300mbit ceil 600mbit prio 2
# Prioridad baja (20% garantizado, puede usar 40%)
tc class add dev eth0 parent 1:1 classid 1:30 htb rate 200mbit ceil 400mbit prio 3
# Agregar filtros para clasificar tráfico
# Alta prioridad: SSH, DNS
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
match ip dport 22 0xffff flowid 1:10
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
match ip dport 53 0xffff flowid 1:10
# Prioridad media: HTTP/HTTPS
tc filter add dev eth0 protocol ip parent 1:0 prio 2 u32 \
match ip dport 80 0xffff flowid 1:20
tc filter add dev eth0 protocol ip parent 1:0 prio 2 u32 \
match ip dport 443 0xffff flowid 1:20
# Mostrar estadísticas
tc -s class show dev eth0
tc -s filter show dev eth0
Fair Queue Controlled Delay (fq_codel):
# Habilitar fq_codel (predeterminado recomendado)
tc qdisc add dev eth0 root fq_codel
# Configurar parámetros
tc qdisc add dev eth0 root fq_codel \
limit 10240 \
flows 1024 \
quantum 1514 \
target 5ms \
interval 100ms
# Mostrar estadísticas
tc -s qdisc show dev eth0
Ejemplo de Script de Modelado de Tráfico:
#!/bin/bash
# traffic_shaping.sh - Implementar QoS
IFACE="eth0"
TOTAL_BW="1000mbit"
# Limpiar reglas existentes
tc qdisc del dev $IFACE root 2>/dev/null
# Crear HTB raíz
tc qdisc add dev $IFACE root handle 1: htb default 999
# Clase raíz
tc class add dev $IFACE parent 1: classid 1:1 htb rate $TOTAL_BW
# Tráfico interactivo (40% garantizado, puede burst a 80%)
tc class add dev $IFACE parent 1:1 classid 1:10 htb \
rate 400mbit ceil 800mbit prio 0
# Tráfico masivo (40% garantizado, puede burst a 60%)
tc class add dev $IFACE parent 1:1 classid 1:20 htb \
rate 400mbit ceil 600mbit prio 1
# Predeterminado/otros (20% garantizado)
tc class add dev $IFACE parent 1:1 classid 1:999 htb \
rate 200mbit ceil 300mbit prio 2
# Agregar sfq a clases hoja para equidad
tc qdisc add dev $IFACE parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev $IFACE parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev $IFACE parent 1:999 handle 999: sfq perturb 10
# Clasificar tráfico interactivo
tc filter add dev $IFACE protocol ip parent 1:0 prio 1 u32 \
match ip protocol 6 0xff \
match ip dport 22 0xffff \
flowid 1:10
tc filter add dev $IFACE protocol ip parent 1:0 prio 1 u32 \
match ip protocol 17 0xff \
match ip dport 53 0xffff \
flowid 1:10
# Clasificar tráfico masivo
tc filter add dev $IFACE protocol ip parent 1:0 prio 2 u32 \
match ip protocol 6 0xff \
match ip sport 80 0xffff \
flowid 1:20
echo "Traffic shaping configured on $IFACE"
tc -s class show dev $IFACE
Espacios de Nombres de Red
Crear y Configurar Espacio de Nombres:
# Crear espacio de nombres
ip netns add red
# Listar espacios de nombres
ip netns list
# Ejecutar comando en espacio de nombres
ip netns exec red ip link show
# Crear par veth
ip link add veth-host type veth peer name veth-red
# Mover un extremo al espacio de nombres
ip link set veth-red netns red
# Configurar lado del host
ip addr add 192.168.1.1/24 dev veth-host
ip link set veth-host up
# Configurar lado del espacio de nombres
ip netns exec red ip addr add 192.168.1.2/24 dev veth-red
ip netns exec red ip link set veth-red up
ip netns exec red ip link set lo up
# Agregar ruta predeterminada en espacio de nombres
ip netns exec red ip route add default via 192.168.1.1
# Probar conectividad
ip netns exec red ping -c 3 192.168.1.1
# Eliminar espacio de nombres
ip netns del red
Conectar Múltiples Espacios de Nombres vía Bridge:
# Crear espacios de nombres
ip netns add ns1
ip netns add ns2
# Crear bridge
ip link add br0 type bridge
ip link set br0 up
ip addr add 192.168.100.1/24 dev br0
# Crear pares veth
ip link add veth1-host type veth peer name veth1-ns
ip link add veth2-host type veth peer name veth2-ns
# Conectar extremos del host al bridge
ip link set veth1-host master br0
ip link set veth2-host master br0
ip link set veth1-host up
ip link set veth2-host up
# Mover extremos de espacios de nombres
ip link set veth1-ns netns ns1
ip link set veth2-ns netns ns2
# Configurar espacio de nombres 1
ip netns exec ns1 ip addr add 192.168.100.10/24 dev veth1-ns
ip netns exec ns1 ip link set veth1-ns up
ip netns exec ns1 ip link set lo up
ip netns exec ns1 ip route add default via 192.168.100.1
# Configurar espacio de nombres 2
ip netns exec ns2 ip addr add 192.168.100.20/24 dev veth2-ns
ip netns exec ns2 ip link set veth2-ns up
ip netns exec ns2 ip link set lo up
ip netns exec ns2 ip route add default via 192.168.100.1
# Probar conectividad entre espacios de nombres
ip netns exec ns1 ping -c 3 192.168.100.20
Optimización del Rendimiento
Optimización de Interfaz
Funciones de Descarga de Hardware:
# Mostrar configuraciones actuales de descarga
ethtool -k eth0
# Habilitar descargas de hardware
ethtool -K eth0 tso on
ethtool -K eth0 gso on
ethtool -K eth0 gro on
ethtool -K eth0 sg on
ethtool -K eth0 rx on
ethtool -K eth0 tx on
# Deshabilitar descargas (para solución de problemas)
ethtool -K eth0 tso off gso off gro off
Ajuste de Buffer Ring:
# Mostrar tamaños actuales de buffer ring
ethtool -g eth0
# Aumentar buffers ring
ethtool -G eth0 rx 4096 tx 4096
Coalescencia de Interrupciones:
# Mostrar configuraciones actuales
ethtool -c eth0
# Reducir frecuencia de interrupción (aumentar rendimiento)
ethtool -C eth0 rx-usecs 50 tx-usecs 50
# Latencia mínima (más interrupciones)
ethtool -C eth0 rx-usecs 0 tx-usecs 0
Optimización de Enrutamiento
Consideraciones de Caché de Rutas:
# Los kernels modernos (3.6+) eliminaron la caché de rutas
# La optimización se centra en reducir la complejidad de búsqueda
# Usar rutas específicas en lugar de predeterminadas para destinos frecuentemente accedidos
ip route add 8.8.8.8/32 via 192.168.1.1
ip route add 1.1.1.1/32 via 192.168.1.1
# Optimizar orden de reglas (más específicas primero)
ip rule show # Las reglas se procesan en orden de prioridad
Optimización del Control de Tráfico
Selección de Qdisc para Carga de Trabajo:
# Baja latencia: pfifo_fast o fq
tc qdisc replace dev eth0 root fq
# Propósito general: fq_codel (recomendación predeterminada)
tc qdisc replace dev eth0 root fq_codel
# Rendimiento masivo alto: sfq o pfifo_fast
tc qdisc replace dev eth0 root sfq perturb 10
# QoS complejo: HTB con parámetros apropiados
Monitoreo y Observabilidad
Monitoreo de Enlaces en Tiempo Real:
# Ver estadísticas de enlaces
ip -s link show eth0
# Monitoreo continuo
watch -n 1 'ip -s link show eth0'
# Estadísticas detalladas
ip -s -s link show eth0
# Salida JSON para scripting
ip -j link show eth0 | jq
Monitoreo de Rutas:
# Monitorear cambios en tabla de enrutamiento
ip monitor route
# Monitorear todos los eventos
ip monitor all
# Monitorear tabla específica
ip monitor route table custom
Estadísticas de Sockets:
# Mostrar todos los sockets
ss -tunapl
# Mostrar estadísticas TCP
ss -ti
# Mostrar uso de memoria de sockets
ss -m
# Mostrar puerto específico
ss -tunapl | grep :80
Script de Monitoreo de Espacios de Nombres:
#!/bin/bash
# monitor_namespaces.sh
for ns in $(ip netns list | awk '{print $1}'); do
echo "=== Namespace: $ns ==="
echo "Interfaces:"
ip netns exec $ns ip link show
echo "Addresses:"
ip netns exec $ns ip addr show
echo "Routes:"
ip netns exec $ns ip route show
echo ""
done
Solución de Problemas
Problemas de Conectividad
Síntoma: No se puede alcanzar la red de destino.
Diagnóstico:
# Verificar estado de la interfaz
ip link show eth0
# Verificar configuración IP
ip addr show eth0
# Verificar enrutamiento
ip route get 8.8.8.8
# Verificar resolución ARP
ip neigh show
# Probar con ping
ping -c 3 8.8.8.8
# Rastrear ruta
ip route get 8.8.8.8
Resolución:
# Activar interfaz
ip link set eth0 up
# Agregar ruta faltante
ip route add default via 192.168.1.1
# Limpiar caché ARP
ip neigh flush dev eth0
# Agregar entrada ARP estática
ip neigh add 192.168.1.1 lladdr 00:11:22:33:44:55 dev eth0
Enrutamiento por Políticas No Funciona
Síntoma: El tráfico no sigue las reglas de políticas.
Diagnóstico:
# Mostrar orden de reglas
ip rule show
# Verificar contenido de tabla de enrutamiento
ip route show table custom
# Verificar marcado de paquetes (si usa fwmark)
iptables -t mangle -L -n -v
# Probar con ip route get
ip route get 10.0.0.1 from 192.168.1.10
Resolución:
# Verificar prioridad de reglas (número menor = mayor prioridad)
# Asegurar que las reglas específicas vengan antes de las generales
# Agregar rutas faltantes a la tabla personalizada
ip route add default via 192.168.2.1 table custom
# Limpiar caché de enrutamiento (si aplica)
ip route flush cache
Control de Tráfico No Limita el Ancho de Banda
Síntoma: Reglas tc configuradas pero el ancho de banda no está limitado.
Diagnóstico:
# Mostrar configuración qdisc
tc qdisc show dev eth0
# Mostrar estadísticas
tc -s qdisc show dev eth0
tc -s class show dev eth0
# Verificar reglas de filtro
tc filter show dev eth0
# Probar ancho de banda
iperf3 -c remote-host
Resolución:
# Verificar interfaz correcta
tc qdisc show dev eth0 # No eth1
# Verificar límites de tasa HTB
tc class show dev eth0 # Verificar valores rate/ceil
# Asegurar que los filtros coincidan con el tráfico
tcpdump -i eth0 -n | grep <dest-port>
# Eliminar y recrear configuración
tc qdisc del dev eth0 root
# ... recrear reglas
Problemas de Conectividad de Espacios de Nombres
Síntoma: No se puede comunicar entre espacios de nombres o con red externa.
Diagnóstico:
# Verificar estado del par veth
ip link show | grep veth
# Verificar configuración del espacio de nombres
ip netns exec ns1 ip addr show
ip netns exec ns1 ip route show
# Probar conectividad
ip netns exec ns1 ping 192.168.1.1
# Verificar reglas NAT
iptables -t nat -L -n -v
Resolución:
# Verificar que el par veth esté correctamente conectado
ip link | grep -A1 veth
# Asegurar que ambos extremos estén activos
ip netns exec ns1 ip link set veth-ns up
# Agregar ruta predeterminada
ip netns exec ns1 ip route add default via 192.168.1.1
# Habilitar reenvío IP
echo 1 > /proc/sys/net/ipv4/ip_forward
# Agregar regla NAT
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
Conclusión
iproute2 representa el estándar moderno para la configuración de redes en Linux, proporcionando control integral sobre enrutamiento, control de tráfico, espacios de nombres de red y características de redes avanzadas esenciales para infraestructura empresarial. El dominio de las utilidades iproute2, particularmente los comandos ip y tc, permite a los administradores implementar arquitecturas de red sofisticadas imposibles con herramientas heredadas.
Comprender el enrutamiento basado en políticas, el enrutamiento multi-ruta, las jerarquías de control de tráfico y la gestión de espacios de nombres de red distingue a los administradores de red básicos de los ingenieros de infraestructura capaces de arquitecturar soluciones de redes complejas y de alto rendimiento. Estas capacidades son fundamentales para la infraestructura moderna, incluyendo orquestación de contenedores, redes definidas por software y entornos de nube multi-inquilino.
Las organizaciones deben invertir en monitoreo integral del rendimiento de red, comportamiento de enrutamiento y efectividad del control de tráfico para validar la corrección de la configuración y solucionar problemas de manera eficiente. Las pruebas regulares de escenarios de conmutación por error, limitación de ancho de banda y políticas de enrutamiento aseguran la preparación para producción.
A medida que las redes continúan evolucionando hacia topologías cada vez más complejas—redes superpuestas, enrutamiento de segmentos, virtualización de funciones de red—iproute2 sigue siendo el conjunto de herramientas esencial para implementar estas tecnologías en sistemas Linux. Los ingenieros que dominan estos fundamentos se posicionan para construir infraestructura de red de próxima generación aprovechando las capacidades completas de la pila de redes de Linux.


