`ip` y `ss`: herramientas modernas de red en Linux

El paquete net-tools —que incluye ifconfig, netstat, route y arp— lleva años sin mantenimiento activo y no está instalado por defecto en Debian Bookworm. Su reemplazo es el subsistema iproute2, que agrupa en el comando ip todo lo que antes estaba disperso en cuatro herramientas distintas. Para estadísticas de sockets, ss hace el mismo trabajo que netstat pero leyendo directamente de /proc/net/ sin hacer resolución DNS por defecto, lo que lo hace significativamente más rápido en sistemas con muchas conexiones.

El diseño de ip sigue un modelo objeto-acción: primero dices sobre qué recurso hablas (addr, link, route, neigh) y luego qué quieres hacer (show, add, del, set). Esto es más coherente que el zoo de flags de ifconfig, donde -a significaba una cosa y la ausencia de argumentos significaba otra. Además, ip entiende el modelo de red de Linux tal como lo ve el kernel: interfaces con múltiples direcciones, namespaces, políticas de routing, túneles VXLAN, y todo lo que llegó después de que ifconfig quedó congelado en el tiempo.

Usa ip cuando necesites inspeccionar o modificar interfaces, rutas o la tabla ARP en caliente. Las modificaciones que hagas son volátiles: sobreviven hasta el próximo reinicio o hasta que NetworkManager o networkd reconverja. Si buscas configuración persistente, eso va en /etc/network/interfaces o en los archivos de NetworkManager, no aquí. Si cometes un error —como borrar la dirección IP de la interfaz activa en una sesión SSH remota— pierdes la conexión sin posibilidad de recuperarla desde esa misma sesión.

Para ss, el caso de uso más habitual es responder “¿qué proceso está escuchando en el puerto 8080?” o “¿hay conexiones establecidas hacia ese servidor externo?”. La ausencia de lookup DNS es la diferencia práctica clave: netstat -an en un servidor con miles de conexiones podía tardar decenas de segundos; ss devuelve el mismo resultado en milisegundos.

# ── Inspección de interfaces ──────────────────────────────────────────

# Ver todas las interfaces: IPs, estado operacional, MTU, flags
ip addr show

# Versión corta, misma salida
ip a

# Solo una interfaz concreta
ip addr show dev eth0

# ── Modificación temporal de interfaces ──────────────────────────────

# Agregar una IP secundaria a eth0 (útil para probar un servicio en otra IP)
sudo ip addr add 192.168.1.50/24 dev eth0

# Quitar esa misma IP después de la prueba
sudo ip addr del 192.168.1.50/24 dev eth0

# Levantar o apagar una interfaz
sudo ip link set eth0 down
sudo ip link set eth0 up

# Cambiar MTU (necesario al trabajar con túneles o VLANs)
sudo ip link set eth0 mtu 1450

# ── Tabla de routing ─────────────────────────────────────────────────

# Ver todas las rutas activas
ip route show

# Agregar gateway por defecto
sudo ip route add default via 192.168.1.1

# Ver qué interfaz y gateway se usaría para alcanzar una IP concreta
ip route get 8.8.8.8

# Agregar ruta estática a una red específica
sudo ip route add 10.10.0.0/16 via 192.168.1.254 dev eth0

# Borrar esa ruta
sudo ip route del 10.10.0.0/16

# ── Tabla ARP (vecinos) ───────────────────────────────────────────────

# Equivalente a `arp -n`
ip neigh show

# ── ss: estadísticas de sockets ──────────────────────────────────────

# Puertos en LISTEN: TCP y UDP, sin resolver nombres, con número de puerto
# -t: TCP  -u: UDP  -l: solo LISTEN  -n: sin resolución DNS/servicio
ss -tuln

# Lo mismo pero mostrando qué proceso tiene cada socket abierto
# Requiere ejecutarse como root para ver procesos de otros usuarios
sudo ss -tunp

# Todos los sockets TCP en cualquier estado (ESTABLISHED, TIME_WAIT, etc.)
ss -ta

# Filtrar por puerto: quién escucha en el 5432 (PostgreSQL)
ss -tlnp sport = :5432

# Ver conexiones establecidas hacia un host externo concreto
ss -tn dst 203.0.113.45

# Contar sockets en cada estado (útil para detectar TIME_WAIT acumulado)
ss -tan | awk 'NR>1 {print $1}' | sort | uniq -c | sort -rn

Lo que está pasando en cada bloque

ip addr show muestra la información tal como la tiene el kernel, incluyendo el flag LOWER_UP (el enlace físico está activo) separado del estado UP de la interfaz lógica. ifconfig colapsaba ambos en un solo campo, lo que hacía difícil distinguir un cable desconectado de una interfaz desactivada por software.

Cuando ejecutas ip addr add 192.168.1.50/24 dev eth0, el kernel añade esa dirección a la interfaz sin tocar las reglas de routing existentes. Si agregas una IP en una subred diferente a la que ya tiene la interfaz, puede que necesites también una ruta explícita; de ahí que ip route add y ip addr add sean operaciones separadas y no una sola como en ifconfig.

ip route get 8.8.8.8 es especialmente útil para depurar problemas de routing asimétrico: te muestra exactamente qué ruta elegiría el kernel para un destino concreto, incluyendo la interfaz de salida y el gateway, sin generar tráfico real.

En el bloque de ss, la combinación -tuln es la más usada en diagnóstico del día a día. La -n no es opcional si te importa la velocidad: sin ella, ss intenta resolver tanto las IPs como los números de puerto a nombres de servicio, lo que puede introducir latencia si el DNS o /etc/services tarda. Con -p añadido (y ejecutándolo como root), obtienes el PID y el nombre del proceso, que es lo que necesitas cuando un puerto está ocupado y no sabes por qué.

El filtro sport = :5432 usa la sintaxis de filtrado propia de ss, que es diferente a la de tcpdump o nftables. El espacio antes y después del = no es opcional: sin él, el parser de ss interpreta mal la expresión y devuelve resultados incorrectos o un error.

El último comando —el awk sobre ss -tan— es el atajo rápido para detectar un servidor con acumulación de sockets en TIME_WAIT, síntoma clásico de un servicio HTTP sin keep-alive o con SO_REUSEADDR mal configurado. No necesitas instalar nada; ss, awk, sort y uniq están en la instalación base de Debian.

79

Dejar un comentario

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

Scroll al inicio