Ir al contenido principal

Gestión de la red usando la línea de comandos (I)


Introducción

Hola, amigos. Hoy vamos a hablar algunas de las utilidades de red en línea de comandos que se pueden utilizar en Ubuntu. Los que llevamos tiempo en este negocio de la administración de sistemas estábamos acostumbrados a utilizar las net-tools, que nos proveen de comandos como ifconfig, route, hostname, netstat y otros. Toda una colección de programas para el trabajo de administración de la red en Linux / Ubuntu.

Debido a los avances en el desarrollo de los kernels de Linux, estas utilidades han ido quedando desfasadas y un nuevo conjunto de utilidades más completas han ido apareciendo para sustituirlas. Estas alternativas han estado ahí desde hace tiempo, pero muchos no nos hemos dado cuenta pues seguíamos usando las viejas net-tools. De hecho, en la propia distribución Ubuntu 22.04 ya no vienen instaladas las net-tools por defecto. Aunque siempre las puedes instalar desde los repositorios oficiales con el comando apt.

En esta serie de artículos intentaré mostrar cuales son las nuevas alternativas a algunos de los comandos clásicos de las net-tools. Aparte de mostrar otros más que también nos ayudan a resolver problemas en la gestión de la red.

Ifconfig vs IP

La alternativa a ifconfig es el comando ip, que es mucho más potente que él. En un principio, puede parecer más complejo utilizar ip en vez de ifconfig, pero hay que tener en cuenta que las funcionalidades que ofrece son mucho más amplias. Las funcionalidades ofrecidas se organizan para dar información de dos capas del modelo OSI: la capa de enlace o capa 2 y la capa IP o capa 3.

Además con este nuevo comando se pueden conseguir muchas de las funcionalidades incluidas dentro del paquete net-tools. Osea, no se trata sólo de un sustituto del comando ifconfig

A continuación mostraré algunos de los comandos ifconfig y su alternativa usando el comando ip:

Mostrar todas las interfaces de red

En este caso se empieza a notar la diferencia puesto que el comando ifconfig muestra las interfaces de red activas mientras que el comando ip muestra todas las interfaces estén habilitadas o no. 

$ifconfig

Cuya salida por pantalla es:


$ip a

En este caso la salida por pantalla se muestra de esta otra manera:


Activar o desactivar una interface de red

La equivalencia entre los dos comandos para activar o desactivar una interfaz de red sería, por ejemplo, para la interfaz Wifi (wlan0):
Para ifconfig:
#ifconfig wlan0 up       --> para activar la interface
#ifconfig wlan0 down     --> para desactivarla
Para el comando ip:
#ip link set wlan0 up    --> para activar la interface
#ip link set wlan0 down  --> para desactivarla

Establecer o eliminar la dirección IP

Para ifconfig:

#ifconfig eth0 add 192.168.1.10     --> para establecer la dirección IP
#ifconfig eth0 del 192.168.1.10     --> para eliminar la dirección IP

Para ip:

#ip a add 192.168.1.10 dev eth0    --> para establecer la dirección IP
#ip a del 192.168.1.10 dev eth0    --> para eliminar la dirección IP

Estos son sólo unos ejemplos de las equivalencias entre los dos comandos. Sin embargo, aunque parezca que hacen lo mismo, el comando ip va un poco más allá y, aparte de ipconfig también sustituye al comando route.

Route vs IP route

El comando route es una herramienta perfecta para crear rutas estáticas en su simplicidad. Por el contrario, ip route es mucho más completa, o sea, tiene más funcionalidades, por lo que se pueden crear rutas más especializadas. Basta con ver la ayuda de cada uno de los comandos para empezar a percibir esa diferencia.
#route help
#ip route help
Podemos observar la gran diferencia que hay entre estas dos órdenes. Sin embargo, a título educativo, vamos a poner un ejemplo de la creación de una rutas estáticas sencillas.

Crear rutas estáticas

Por ejemplo, si quisiéramos especificar que la red 192.168.122.128/25  usará como puerta de enlace la dirección 192.168.122.254 y que la puerta de enlace por defecto será asignada a la dirección 192.168.122.1, lo haríamos de la siguiente manera con cada comando.

Para route:

$ sudo route add -net 192.168.122.128 netmask 255.255.255.128 gw 192.168.122.254 metric 1000
$ sudo route add default gw 192.168.122.1 metric 100
Se nos crearía la siguiente tabla de rutas en nuestro sistema:

Para ip route:

$ sudo ip route add 192.168.122.128/25 via 192.168.122.254 dev enp1s0 metric 1000
$ sudo ip route add default via 192.168.122.1 dev enp1s0 metric 100
Con estos dos comandos obtenemos el mismo resultado que con route. Sin embargo, podemos observar que con el comando ip route tenemos más control a la hora de crear la ruta ya que podemos usar más parámetros. Podemos especificar sobre que interfaz de red, que protocolo será el enrutado, etc.

Eliminar rutas estáticas

La sintaxis para eliminar rutas estáticas de la tabla es similar a la de añadirlas. Así usaríamos:

Para route:

sudo route del -net 192.168.122.128 netmask 255.255.255.128 gw 192.168.122.254

Para ip route:

sudo ip route del 192.168.122.128/25 via 192.168.122.254 dev enp1s0
Aparte de añadir y eliminar rutas estáticas, con el comando ip route también se puede modificar una existente. Cosa que con route no se puede hacer.

Conclusión

Una aclaración antes de terminar. Tanto las rutas establecidas con el comando route como con el comando ip route son temporales mientras la red o la propia máquina no se reinicien. Para poner las rutas de forma permanente o persistente hay que obrar de otra manera. Existen varias propuestas para hacerlo, desde hacer un script que se ejecute al arrancar a crear un servicio pasando por usar los ficheros de configuración de netplan. En todo caso, esto no forma parte del objetivo de este artículo. Esta operación la añadiré más tarde en un artículo exclusivamente para esto de la serie que ahora estoy empezando.

En esta primera entrega hemos visto como dos comandos de las net-tools han sido sustituidos por sólo un comando de la nueva generación de herramientas de red. En principio parece que son totalmente equivalentes, pero a medida que profundizamos en su uso vamos viendo la potencia del nuevo comando ip con respecto a los antiguos comandos. 

En el próximo artículo seguiré mostrando más comandos para la gestión de la red


Comentarios

Entradas populares de este blog

Atom ha muerto, viva Zed

El día 8 de junio de 2022, Microsoft anunció que a partir del día 31 de diciembre de este mismo año dejaría de dar soporte para el editor de código Atom .  ¿En qué nos afecta esto a nosotros? Bueno, pues si me han seguido en artículos anteriores saben que tras una comparativa de varios IDEs había decidido utilizar Atom para los ejemplos que tuviera que hacer en este blog. Sobre todo los artículos que prepararé para ilustrar el uso de Laravel . Amén de los miles de programadores que actualmente usan Atom  en sus proyectos, claro. Pero, ¿qué editor de código abierto podremos utilizar para sustituir a Atom ? En el mismo comunicado, Microsoft explicaba que el abandono del proyecto Atom  se debía a que querían volcar todos sus esfuerzos en el Visual Studio Code y, por supuesto, recomendó a los usuarios de Atom la utilización del mismo como alternativa natural. No quiero entrar en las bondades o defectos del Visual Studio Code  si quieres elegirlo como tu IDE para d...

Gestión de la red usando la línea de comandos (III): gestión DNS

  Introducción En este nuevo artículo de la serie vamos a hablar de la gestión del DNS, Domain Name System. El sistema de resolución de nombres nos permite traducir los nombres de los dominios de Internet en direcciones IP númericas. Más difíciles de recordar para los humanos.  El DNS fue concebido a mediados de los años 80. Hasta esa época, los ordenadores conectados a una red disponían de una dirección numérica, la dirección IP. Pero con el tiempo, cada vez había más ordenadores conectados a las redes. Esto hacía que cada vez fuera más difícil recordar las direcciones IP. Sobre el año 1983, Paul Mockapetris , un informático estadounidense, desarrolló un sistema jerárquico de nombres para identificar a los ordenadores conectados a una red. Y, a mediados de la década, ya se convirtió en un estándar. Pueden consultar más información sobre el sistema DNS consultando el artículo de la Wikipedia: Sistema de nombres de dominio . En este artículo, no vamos a explicar como montar un ...

Gestión de la red usando la línea de comandos (IV): monitorización de conexiones

  Introducción En este artículo de la serie de gestión de la red usando la línea de comandos nos vamos a centrar en la monitorización de las conexiones. Para ello vamos a utilizar el comando netstat , que es el decano de los comandos de monitorización de la red. También mostraremos el comando ss , que viene a sustituir a netstat  en las funciones de monitorización de conexiones de red. Asimismo mostraré una breve explicación de los conceptos que se van a trabajar en el artículo. S ockets, puertos, protocolos y procesos En primer lugar vamos a empezar con un poco de teoría para alumbrar lo que luego se explicará en el artículo. Si ya sabes de lo que estamos hablando, sáltate esta sección y ve al meollo del asunto [1] . Nos referiremos al contexto de la conexiones TCP/IP. Dentro de este contexto, cada conexión queda definida por dos endpoints , puntos finales, uno en el host , equipo, que establece la conexión y otro en el host con el que se comunica. Generalmente este último es...