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

Zed: ahora un editor de código de código abierto

  Zed: ahora un editor de código de código abierto Introducción Como ya les comenté en un artículo anterior  Atom ha muerto, viva ZED , Microsoft dejó de dar soporte para el editor de código Atom en el año 2022 en beneficio del Visual Studio Code . En aquel artículo les comentaba que para mi el sucesor de Atom era Zed pues era un editor que se estaba creando por el mismo grupo de trabajo que creó el Atom . Además de que parecía que iba a seguir con la misma filosofía con la que nació  Atom . El editor Zed, una descripción de sus características Zed es un editor de código desarrollado en Rust que, como deberíamos saber, es un lenguaje de programación de sistemas que se enfoca en la seguridad, el rendimiento y la concurrencia. Pues, como decíamos, Zed acaba de dar el salto a ser de código abierto bajo la licencia GPL v3 . Este cambio no solo representa una nueva era para Zed , sino que también nos dirige a un nuevo mundo de colaboración y desarrollo en el ámbito de la programación.

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 desarrollo predeterm

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 servidor