El comando ip de Linux: guía práctica para diagnosticar problemas de red

Un servidor Linux puede tener CPU, memoria y almacenamiento disponibles y, aun así, parecer completamente caído por un problema de conectividad. Antes de capturar paquetes con tcpdump o revisar decenas de registros, el comando ip permite comprobar rápidamente interfaces, direcciones, rutas y vecinos de red, por lo que se ha convertido en una de las herramientas básicas para administrar y diagnosticar redes Linux.

Las claves del comando ip de Linux en 30 segundos

  • ip forma parte de iproute2 y cubre buena parte de las tareas que antiguamente se hacían con ifconfig, route y arp.
  • Sus objetos principales son link, addr, route y neigh; también permite trabajar con namespaces y reglas de enrutamiento.
  • ip route get resulta especialmente útil para saber qué ruta elegiría el kernel hacia un destino.
  • Los cambios realizados manualmente suelen ser inmediatos, pero no sustituyen la configuración persistente de la distribución.
  • Comandos como flush, link set down o la eliminación de la ruta por defecto requieren especial cuidado en servidores remotos.

ip fue incorporado a Linux en la época del kernel 2.2 y actualmente forma parte del conjunto de utilidades iproute2. Su ventaja frente a las herramientas tradicionales está en que utiliza una sintaxis común para trabajar con distintos objetos de red.

La estructura general es:

ip [OPCIONES] OBJETO { COMANDO | help }

Por ejemplo:

ip addr show

Aquí addr indica que se quiere trabajar con direcciones y show solicita mostrarlas.

Para una primera inspección resulta especialmente cómodo:

ip -br addr

La opción -br ofrece una salida resumida:

lo       UNKNOWN        127.0.0.1/8
eth0     UP             192.168.1.100/24

También existen -4 y -6 para limitar la información a IPv4 o IPv6, -c para añadir colores y -o para mostrar cada registro en una única línea, algo útil cuando la salida se procesa mediante scripts.

Interfaces, direcciones y rutas: los tres primeros sitios donde mirar

Cuando una máquina pierde conectividad, ip link permite responder a una de las preguntas más básicas: ¿existe la interfaz y está activa?

ip link show
ip -br link

Para consultar una interfaz concreta:

ip link show dev eth0

Y para activarla o desactivarla:

sudo ip link set dev eth0 up
sudo ip link set dev eth0 downLenguaje del código: JavaScript (javascript)

Esto modifica el estado del dispositivo, pero no equivale a configurar correctamente su dirección, puerta de enlace o DNS.

ip link también permite cambiar propiedades de la capa de enlace. Por ejemplo, la unidad máxima de transmisión (MTU):

sudo ip link set dev eth0 mtu 9000Lenguaje del código: JavaScript (javascript)

Un valor de 9.000 bytes se utiliza habitualmente como referencia para jumbo frames, pero no debe establecerse simplemente porque sea mayor. El resto del camino de red debe soportarlo; de lo contrario pueden aparecer problemas difíciles de diagnosticar.

También puede modificarse temporalmente una dirección MAC:

sudo ip link set dev eth0 down
sudo ip link set dev eth0 address aa:bb:cc:dd:ee:ff
sudo ip link set dev eth0 upLenguaje del código: CSS (css)

No todos los dispositivos admiten necesariamente esta operación.

El segundo objeto básico es addr:

ip addr show
ip -4 addr show dev eth0
ip -6 addr show dev eth0

Una misma interfaz puede tener varias direcciones IPv4 o IPv6. Para añadir una:

sudo ip addr add 192.168.1.50/24 dev eth0

En IPv6:

sudo ip addr add 2001:db8::50/64 dev eth0

Y para eliminarla:

sudo ip addr del 192.168.1.50/24 dev eth0

Hay un comando que merece bastante más precaución:

sudo ip addr flush dev eth0

flush elimina las direcciones que coinciden con los criterios indicados. Ejecutarlo sobre la interfaz por la que se administra remotamente un servidor puede dejar la máquina inaccesible.

Después de comprobar interfaz y dirección llega la tercera pregunta: ¿sabe Linux por dónde enviar los paquetes?

ip route show

Una tabla sencilla puede contener algo parecido a:

default via 192.168.1.1 dev eth0
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100Lenguaje del código: JavaScript (javascript)

La primera línea establece la puerta de enlace utilizada cuando no existe una ruta más específica. La segunda indica que la red 192.168.1.0/24 está directamente conectada a eth0.

Para diagnóstico, uno de los comandos más útiles de todo iproute2 es:

ip route get 8.8.8.8Lenguaje del código: CSS (css)

A diferencia de ping o traceroute, no necesita enviar un paquete al destino para mostrar la decisión de encaminamiento. Consulta qué ruta resolvería el kernel y puede mostrar interfaz de salida, siguiente salto y dirección de origen seleccionada.

Esto permite detectar rápidamente casos en los que el servidor tiene conectividad pero intenta utilizar una interfaz, gateway o IP de origen incorrectos.

Las rutas también pueden modificarse manualmente:

sudo ip route add default via 192.168.1.1 dev eth0
sudo ip route add 10.10.0.0/16 via 192.168.1.254 dev eth0
sudo ip route del 10.10.0.0/16 via 192.168.1.254Lenguaje del código: JavaScript (javascript)

Eliminar la ruta por defecto en una máquina remota puede provocar inmediatamente la pérdida de acceso.

ip neigh, policy routing y namespaces: cuando la red se complica

Si la interfaz está activa, la dirección parece correcta y existe una ruta, el siguiente lugar donde mirar puede ser la tabla de vecinos:

ip neigh show

ip neigh administra las asociaciones entre direcciones de protocolo y direcciones de capa de enlace. En IPv4 incluye la información tradicionalmente asociada a ARP (Address Resolution Protocol) y también funciona con el descubrimiento de vecinos de IPv6.

Una salida puede mostrar estados como REACHABLE, STALE, DELAY, PROBE, INCOMPLETE o FAILED.

Por ejemplo:

192.168.1.1 dev eth0 lladdr 00:11:22:33:44:55 REACHABLELenguaje del código: CSS (css)

Si la puerta de enlace aparece repetidamente como FAILED o INCOMPLETE, el problema puede encontrarse en la conectividad del enlace local y no en Internet.

La tabla puede consultarse por dispositivo:

ip neigh show dev eth0

Y vaciarse:

sudo ip neigh flush dev eth0

También pueden crearse entradas manuales:

sudo ip neigh add 192.168.1.100 \
  lladdr 00:11:22:33:44:55 dev eth0Lenguaje del código: CSS (css)

Para escenarios con varias conexiones, ip permite además trabajar con policy routing. Linux puede decidir una ruta utilizando criterios adicionales al destino.

Por ejemplo:

sudo ip rule add from 192.168.2.0/24 table 100
sudo ip route add default via 192.168.2.1 table 100
ip rule showLenguaje del código: JavaScript (javascript)

Así es posible mantener distintas tablas de rutas y seleccionar una dependiendo, entre otros criterios, del origen del tráfico.

Otra capacidad importante aparece con los network namespaces:

sudo ip netns add ns1
ip netns listLenguaje del código: PHP (php)

Un namespace de red proporciona un entorno aislado con sus propias interfaces, direcciones, rutas y tablas de vecinos. Es una de las tecnologías de Linux sobre las que se construyen numerosos escenarios de virtualización y contenedores.

Puede ejecutarse un comando dentro del namespace:

sudo ip netns exec ns1 ip addr
sudo ip netns exec ns1 ip route

Dos espacios de red pueden conectarse mediante un par veth, que funciona conceptualmente como dos extremos de un enlace virtual:

sudo ip link add veth0 type veth peer name veth1
sudo ip link set veth1 netns ns1

sudo ip addr add 10.0.0.1/24 dev veth0
sudo ip link set veth0 up

sudo ip netns exec ns1 ip addr add 10.0.0.2/24 dev veth1
sudo ip netns exec ns1 ip link set veth1 up
sudo ip netns exec ns1 ip link set lo upLenguaje del código: JavaScript (javascript)

ip link va bastante más allá. Puede crear bridges, VLAN, pares veth y diferentes tipos de interfaces virtuales. Por ejemplo:

sudo ip link add name br0 type bridge
sudo ip link add link eth0 name eth0.10 type vlan id 10Lenguaje del código: CSS (css)

Esto explica por qué ip no es simplemente una versión moderna de ifconfig: iproute2 expone capacidades del networking actual de Linux que van mucho más allá de consultar una dirección IP.

Una secuencia práctica para diagnosticar un servidor sin red

En lugar de ejecutar comandos sin un orden claro, puede seguirse una secuencia sencilla.

PreguntaComando inicial
¿Existe la interfaz?ip -br link
¿Está UP?ip link show dev eth0
¿Tiene dirección?ip -br addr
¿Tiene IPv4?ip -4 addr show dev eth0
¿Tiene IPv6?ip -6 addr show dev eth0
¿Existe gateway?ip route
¿Por dónde saldría hacia un destino?ip route get 8.8.8.8
¿Resuelve al vecino/gateway?ip neigh show
¿Hay reglas especiales?ip rule show

Este orden ayuda además a separar problemas distintos. Si eth0 está DOWN, todavía no tiene demasiado sentido investigar una ruta hacia Internet. Si la interfaz está UP pero no tiene la dirección esperada, el problema probablemente se encuentra antes del enrutamiento.

Si dirección y rutas son correctas pero el gateway aparece como FAILED en ip neigh, conviene investigar el enlace local, la VLAN, el switch o la configuración de la máquina virtual.

Y si todo lo anterior parece correcto, entonces sí puede ser el momento de continuar con otras herramientas:

ping
ss
traceroute
tracepath
ethtool
resolvectl
tcpdump

Cada una responde a preguntas diferentes. ip no diagnostica DNS, no sustituye una captura de paquetes y tampoco muestra por sí solo todos los sockets abiertos. Su fortaleza está en ofrecer la visión que mantiene el kernel sobre buena parte de la configuración de red.

Como referencia rápida, estos son algunos de los comandos que merece la pena tener a mano:

# Interfaces
ip -br link
ip link show dev eth0
ip link set dev eth0 up
ip link set dev eth0 down

# Direcciones
ip -br addr
ip -4 addr
ip -6 addr
ip addr show dev eth0

# Rutas
ip route
ip route get 8.8.8.8

# Vecinos
ip neigh
ip neigh show dev eth0

# Policy routing
ip rule show
ip route show table all

# Namespaces
ip netns list
sudo ip netns exec ns1 ip addrLenguaje del código: PHP (php)

Hay una última diferencia importante entre probar una configuración y hacerla persistente. Los cambios introducidos directamente mediante ip modifican el estado de red del kernel en ese momento, pero la configuración puede volver a ser aplicada por el gestor de red o desaparecer después de reiniciar.

Para una configuración permanente hay que utilizar el sistema correspondiente a la distribución y al servidor: NetworkManager, systemd-networkd, Netplan u otras herramientas de gestión de red.

Por eso ip resulta especialmente valioso para diagnóstico y pruebas. Dominar link, addr, route y neigh permite contestar en pocos minutos a cuatro preguntas esenciales: qué interfaces ve Linux, qué direcciones tienen, por dónde pretende enviar el tráfico y qué dispositivos conoce en el enlace local. A partir de ahí, netns, rule y el resto de iproute2 permiten entrar en redes bastante más complejas.

Suscríbete al boletín SysAdmin

Este es tu recurso para las últimas noticias y consejos sobre administración de sistemas, Linux, Windows, cloud computing, seguridad de la nube, etc. Lo enviamos 2 días a la semana. Recuerda revisar tu email para confirmar la suscripción.

¡Apúntate a nuestro newsletter!


– patrocinadores –

Noticias destacadas

– patrocinadores –

¡SUSCRÍBETE AL BOLETÍN
DE LOS SYSADMINS!

Scroll al inicio
×