Iproute2: Usas ifconfig? Es hora de actualizarse!
Hoy veremos cómo usar herramientas del paquete iproute2 para reemplazar a los viejos comandos de net-tools como ifconfig.
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 más poderosas y actualizadas preinstaladas en la mayoría de las distros.
ifconfig
se «utilizaba» en conjunto con route
, iptunnel
, arp
, netstat
, entre otros, para gestionar la mayor parte de los parámetros del networking en sistemas Linux.
Hoy en día, net-tools ha sido reemplazado por el paquete iproute2 en sistemas GNU/Linux. 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 sería bueno 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 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, reemplazo del comando arp
.
diego@cryptos ~/ $ ip ne
192.168.1.1 dev eth0 lladdr 38:20:28:f8:38:31 REACHABLE
192.168.1.150 dev eth0 lladdr a8:1e:84:5b:de:1a REACHABLE
192.168.1.5 dev eth0 lladdr 92:c5:21:83:19:f2 STALE
192.168.1.7 dev eth0 lladdr a8:1e:84:5b:de:1a STALE
fe80::1 dev eth0 lladdr 38:20:28:f8:38:31 router STALE
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 arp
, 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!
10 comentarios
david · 21 abril, 2016 a las 02:56
De todas maneras
La presentación de ifconfig sigue siendo mucho más ordenada y clara, a simple vista
Diego Córdoba · 21 abril, 2016 a las 14:10
Yo creo que es una cuestión de costumbre.
Por un lado, la salida de «ip a» no incluye los datos de TX, RX, etc, que suelen no utilizarse salvo que necesites monitorear tráfico, para lo que utilizarás herramientas más completas como iftop o iptraf.
Por otro, algo que a mi me resulta muy cómodo, cuando tenés una interfaz de red con 10 alias (ip aliassing) me es más agradable ver todas las líneas «inet» o «inet6» ordenadas en la misma interfaz, y no verlo como interfaces distintas como hace ifconfig.
Igual, coincido en que «ip a» se ve desordenado si estás acostumbrado a ifconfig, pero con el tiempo, por lo menos a mi, me resultó más cómodo el nuevo formato.
Gracias por comentar! Slds!
Samuel Blázquez · 27 septiembre, 2016 a las 19:43
Tiene la misma utilidad que el netsh. El que sabe usar filtros, poco o nada necesita sintaxis complejas.
Por cierto ¿que documento tecnico oficial marca como obsoleto ifconfig?
Diego Córdoba · 27 septiembre, 2016 a las 23:28
Hola Samuel! Gracias por comentar.
Por lo que entiendo, el netsh que mencionas es una herramienta de Windows, no de Linux. El comando ifconfig pertenece al paquete net-tools (Unix) y se consideró obsoleto en Linux (no en Unix) desde que existe iproute2.
Te paso un link de la Linux Foundation donde recomiendan dejar de utilizar ifconfig y relacionados, en pro de ip (iproute2), puesto que el paquete net-tools que incluye a ifconfig, no está siendo mantenido en varias distribuciones de Linux.
https://www.linux.com/learn/replacing-ifconfig-ip
Espero te sirva!
Samuel Blázquez · 28 septiembre, 2016 a las 09:06
Vale. No es un CVE ni similar.
En el enlace no pone que sea «Unsupported» por lo que sigue soportado (confirmado con mi enlace de Red-Hat aquí en la oficina. Nos hemos reído un poco del tema).
En cuanto a su utilidad, pues no se, pero sigo prefiriendo ifconfig | grep addr a la salida de su supuesto reemplazo, o netstat | egrep ‘tcp|udp’ a su otro reemplazo (ah, que esto no lo puede hacer). O incluso un netstat -rn que es mas rápido que route o cualquier otro.
Vamos a ser realistas. Hasta que SystemV, Sco, BSD y demás (y trabajo bastante con HP/UX y AIX) suelten ifconfig, linux y GNU no van a arriesgarse a eliminar ifconfig, net-tools y otros en favor de algo que sinceramente, complica mucho la vida. Eso lo han aprendido de M$, donde desde W2000 se intentó reemplazar ipconfig por netsh sin exito, así que a mantener ambas, mal que le duela a ubuntu (y esto lo sabemos a ciencia cierta. A ubuntu le duele que exista el resto del mundo).
Diego Córdoba · 28 septiembre, 2016 a las 20:53
Si, en ningún momento se mencionó que dejó de ser soportado, solamente que está «deprecado» en pro de iproute2, y el post es referido a Linux únicamente, no a otros *nix.
Respecto de la utilidad, no hay dudas de que el comando ip realiza las mismas tareas que ifconfig, route, iptunnel, ipmaddr y arp… pero si te gusta usar los de net-tools, no te voy a decir que no 🙂 Y más, si trabajás en ambientes Unix seguramente net-tools te sea más cómodo y fácil de usar.
Por lo de netstat, netstat es una navaja suiza del networking en *nix y la suelo utilizar mucho, aunque, según leo en el manpage «oficial» de kernel.org [1], también parece que netstat resulta obsoleto, y da paso al comando «ss» … creo que tengo material para otro artículo 😛
Yo trabajo en Linux, principalmente con redes, llevo varios años con iproute2 y no me puedo quejar, lejos de complicarme la vida, me la simplificó mucho.
En cuanto a que Linux se arriesgue a eliminar el paquete aún cuando Unix lo mantenga… creo que hoy en día Linux y Unix son dos proyectos muy independientes, y la eliminación del paquete en Linux depende, me parece a mi, más de cada distribución. Que Linux Foundation recomiende iproute2 [2] o ss por considerar a net-tools obsoleto, no significa que todas las distros deban eliminarlo de sus repos… y tampoco creo que Linux dependa tanto de Unix como para que tenga alguna importancia.
Saludos cordiales!
Referencias:
[1] http://man7.org/linux/man-pages/man8/netstat.8.html
[2] https://wiki.linuxfoundation.org/networking/net-tools
Javi Felices · 29 septiembre, 2017 a las 13:31
Buenas Diego.
Antes de nada gracias por tu blog, vídeos y artículos, desde hace poco tiempo soy seguidor, un mero aprendiz y me gusta estar al día.
También comentarte que ojalá puedas publicar más artículos sobre «ip» y cosillas de red.
Una cuestión, a lo mejor antes era válido, no sé, pero me parece que para activar o desactivar una interfaz de red es:
ip link set eth0 down
ip link set eth0 up
En el código que has puesto aparece dev.
Un saludo y de nuevo gracias.
Diego Cordoba - @d1cor · 30 septiembre, 2017 a las 00:37
Hola Javi!
Antes que nada muchísimas gracias por tus palabras! Por supuesto que seguiremos publicando! Y más sobre networking 🙂
He estado muy complicado estos últimos meses con el trabajo, pero pronto volveré a la publicar más activamente!
Por tu consulta, el comando puede ejecutarse de las dos maneras, particularmente el operador «link / li» te permite omitir el «dev»… yo lo utilizo mas que nada por costumbre, como lo utilizo en casi todos los comandos «ip».
Así, todos estos comandos son equivalentes:
ip link set eth0 {down|up}
ip link set dev eth0 {down|up}
ip li set eth0 {down|up}
ip li set dev eth0 {down|up}
ip l set eth0 {down|up}
ip l set dev eth0 {down|up}
Cualquier consulta quedo a disposición.
Saludos y gracias nuevamente!!
Javi Felices · 30 septiembre, 2017 a las 07:37
Antes de nada muchas gracias por tu cordialidad y gran respuesta.
A lo que me refería, que set tiene que ponerse, y dev es opcional, pero en el ejemplo no pones set, está así.
ip link dev eth0 down
ip link dev eth0 up
Un saludo y de nuevo gracias.
Diego Cordoba - @d1cor · 30 septiembre, 2017 a las 22:30
Ahhh si si! tenés razón, no había entendido tu pregunta xD
Ahí corregí lo que me decís, sí, «set» es obligatorio en el comando.
Gracias!!
Los comentarios están cerrados.