Iproute2: Usas ifconfig? Es hora de actualizarse!

Publicado por Diego Córdoba en

Sí, como lo dice el título del artículo, ifconfig, el súper conocido comando de gestión de interfaces de red en sistemas Linux, está desactualizado, «deprecated» en terminología técnica, y sería interesante dejar de usarlo, en favor de la nueva suite de comandos y herramientas iproute2.

Fundamentos de ifconfig e iproute2

ifconfig es un comando correspondiente a un paquete de software denominado net-tools, heredado de sistemas Unix. Si bien el software funciona perfecto, hoy en día los sistemas Linux poseen herramientas mucho más poderosas y actualizadas

ifconfig se «utilizaba» en conjunción con route, iptunnel, y algún otro que no recuerdo, para gestionar la mayor parte de los parámetros del networking en sistemas Linux.ipa

Hoy en día, net-tools es reemplazado por el paquete iproute2. iproute incluye al comando «ip», que posee subcomandos para gestionar todos los parámetros de red que antes requerían varios comandos, y algunas cosas más 🙂

Es decir, ip viene a ser el reemplazo de ifconfig, route, iptunnel, etc, y deberíamos mantenernos actualizados, utilizando herramientas nuevas.

De hecho, las certificaciones internacionales más reconocidas, como LPI, ya incluyen en sus planes de estudio a iproute2, y la tendencia es que a corto plazo, no consideren herramientas desactualizadas como ifconfig.

Algunos comandos interesantes de iproute2

No vamos a ahondar demasiado en comandos en este artículo, en otra oportunidad aprenderemos a configurar interfaces de red, tablas de enrutamiento, o tablas ARP, ahora, una pequeña comparativa de funcionalidades.

Viendo el detalle de las interfaces de red

El conocido comando ifconfig nos permitía listar nuestras interfaces de red de nuestro equipo. Veamos una salida de ejemplo:

diego@cryptos:~$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.10  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::be5f:f4ff:fed9:aa5e  prefixlen 64  scopeid 0x20<link>
        ether bc:5f:f4:d9:aa:5e  txqueuelen 1000  (Ethernet)
        RX packets 5166535  bytes 4159083054 (3.8 GiB)
        RX errors 0  dropped 153  overruns 0  frame 0
        TX packets 5653552  bytes 1263680962 (1.1 GiB)
        TX errors 0  dropped 2 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 120453  bytes 15815827 (15.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 120453  bytes 15815827 (15.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Ifconfig solo nos muestra las interfaces activas, si quisiéramos ver todas las interfaces, deberíamos utilizar el modificador «-a» en ifconfig.

Veamos la salida de «ip a», o «ip addr», o «ip address», son todos alias de subcomando:

diego@cryptos:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether bc:5f:f4:d9:aa:5e brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.10/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 10.0.0.1/24 brd 10.0.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::be5f:f4ff:fed9:aa5e/64 scope link
       valid_lft forever preferred_lft forever

Ahora vemos, en otro formato, todas las interfaces de red, y la salida es un poco más compacta, y, para quienes nos acostumbramos, hasta más cómoda.

Información de una interfaz en particular

Cabe aclarar que para ver la información de una interfaz en particular, también ambos comandos lo permiten:

diego@cryptos:~$ ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.10  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::be5f:f4ff:fed9:aa5e  prefixlen 64  scopeid 0x20<link>
        ether bc:5f:f4:d9:aa:5e  txqueuelen 1000  (Ethernet)
        RX packets 5167206  bytes 4159316272 (3.8 GiB)
        RX errors 0  dropped 153  overruns 0  frame 0
        TX packets 5654234  bytes 1263788547 (1.1 GiB)
        TX errors 0  dropped 2 overruns 0  carrier 0  collisions 0

O, más actualizado:

diego@cryptos:~$ ip a show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether bc:5f:f4:d9:aa:5e brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.10/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 10.0.0.1/24 brd 10.0.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::be5f:f4ff:fed9:aa5e/64 scope link
       valid_lft forever preferred_lft forever

Activando o desactivando una interfaz de red con iproute2

El recordado comando ifconfig nos permitía activar o desactivar las interfaces de red de la siguiente manera:

ifconfig eth0 down

ifconfig eth0 up

Ahora, esas tareas se pueden realizar utilizando el subcomando «link» del comando ip… y como se acostumbra, «ip link», o «ip li» son alias:

ip link set dev eth0 down

ip link set dev eth0 up

Y la frutilla del postre

Para finalizar este breve artículo, veamos el comando «ip ne», o «ip neigh» o «ip neighbor», para ver los vecinos en la cache ARP de nuestro sistema:

diego@cryptos:~$ sudo ip neighbor
192.168.1.1 dev eth0 lladdr c8:3a:35:54:2d:38 REACHABLE

Si usas ifconfig, sabrás que esta información no te la puede dar el comando, y debes utilizar otros comandos relacionados a ARP, o herramientas como ethtool o lldpctl 🙂

En otra oportunidad analizaremos más en detalle las sintaxis de los comandos de «ip», y aprenderemos muchas de sus ventajas!


Aquí un vídeo donde explico estos contenidos y se pueden ver algunos ejemplos prácticos.

Espero les sea de utilidad!

¡Por cualquier consulta no duden en escribir! Y ya saben, quedan invitados a sumarse al canal de youtube de JuncoTIC y a nuestras redes sociales!


Diego Córdoba

- Ingeniero en Informática - Mg. Teleinformática - Tesis pendiente - Docente universitario - Investigador