8 minute read

redes

Voy a escribir una serie de artículos donde voy a introducir los distintos métodos que nos ofrece el sistema operativo Linux para configurar los parámetros de red. Actualmente según la distribución que utilicemos y la configuración del sistema que estemos utilizando, tendremos a nuestra disposición algunos de estos métodos:

  1. ifupdown: Es una herramienta tradicional para configurar redes en Linux basada en los archivos que encontramos en el directorio /etc/network. En sistemas modernos con systemd, su funcionamiento está vinculado a la unidad networking.service, que activa las configuraciones definidas en estos archivos durante el inicio del sistema o cuando se reinicia el servicio. Aunque es más antigua, sigue siendo usada en sistemas donde se prefieren configuraciones más simples o específicas.

  2. NetworkManager: Es una solución moderna y flexible diseñada para entornos de escritorio y servidores. Ofrece una interfaz gráfica (como nm-applet) y herramientas de línea de comandos (nmcli y nmtui). Está orientada a la gestión dinámica de redes y se integra bien con configuraciones más complejas, como Wi-Fi, VPNs y conexiones móviles.

  3. systemd-networkd: Es una alternativa más reciente que forma parte de systemd. Se utiliza principalmente en servidores y entornos que buscan configuraciones administradas de manera declarativa a través de archivos de configuración en /etc/systemd/network/. Es particularmente eficiente en sistemas modernos que ya utilizan systemd para otros servicios.

En este primer artículo voy a introducir la herramienta ifupdown, pero antes, vamos a estudiar como configurar una interfaz de red desde la línea de comandos.

Configuración de red desde la línea de comandos

El paquete iproute2 nos ofrece un conjunto de herramientas que ofrece comandos avanzados para la gestión de redes en Linux a nivel manual. Se utiliza para configurar y administrar interfaces de red, rutas, túneles,…

La configuración que hagamos con estas herramientas no son persistentes. En este apartado vamos a trabajar con la herramienta ip que nos permite manejar interfaces, direcciones IP y rutas.

El comando ip es una herramienta avanzada para gestionar redes en sistemas Linux. A continuación, se detalla cómo realizar tareas comunes, como asignar direcciones IP, consultar configuraciones, y trabajar con rutas.

Obtener información de la configuración de red

Lo primero que vamos a hacer es mostrar todas las interfaces de red (activas e inactivas) y su estado:

$ ip link show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 52:54:00:f6:e9:bc brd ff:ff:ff:ff:ff:ff
3: enp7s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000

Podemos ver las direcciones de red de las interfaces ejecutando:

$ ip addr show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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 noprefixroute 
       valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:f6:e9:bc brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.245/24 brd 192.168.122.255 scope global dynamic enp1s0
       valid_lft 3071sec preferred_lft 3071sec
    inet6 fe80::5054:ff:fef6:e9bc/64 scope link 
       valid_lft forever preferred_lft forever
3: enp7s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 52:54:00:c8:54:17 brd ff:ff:ff:ff:ff:ff

Esta instrucción se puede abreviar ejecutando: ip a.

Como podemos observar además la interfaz de loopback (lo), tenemos dos interfaces de red: enp1s0 que está activa (state UP) y enp7s0 que está desactivada (state DOWN), con esta última interfaz de red vamos a trabajar.

Además podemos ver las rutas de encaminamiento que tenemos definidas con la instrucción:

$ ip route show

default via 192.168.122.1 dev enp1s0 
192.168.122.0/24 dev enp1s0 proto kernel scope link src 192.168.122.245
  • La ruta por defecto (default) nos indica que todos los paquetes cuyo destino no esté definido en otras reglas de encaminamiento se enviarán a nuestra puerta de enlace, en este caso a la dirección IP 192.168.122.1.
  • Como la interfaz de red enp1s0 está configurada con la dirección 192.168.122.145, tenemos una ruta de encaminamiento que nos permite comunicarnos con la red 192.168.122.0.

Gestionar la configuración de una interfaz de red

Podemos asignar una dirección IP a una interfaz de red ejecutando el siguiente comando:

$ sudo ip addr add 192.168.1.2/24 dev enp7s0 

Esto asigna la dirección IP 192.168.1.2 con máscara de subred /24 (255.255.255.0) a la interfaz enp7s0. Podemos comprobar la asignación de la dirección ejecutando el comando: ip a show enp7s0.

Si queremos eliminar la dirección IP asignada ejecutamos:

sudo ip addr del 192.168.1.2/24 dev enp7s0

Aunque hayamos asignado una dirección IP a una interfaz puede que siga en estado desactivado (DOWN), si queremos activar la interfaz debemos ejecutar:

sudo ip link set enp7s0 up

Y para desactivarla:

sudo ip link set enp7s0 down

Configuración de rutas

Cuando hemos activado la interfaz de red enp7s0 con la dirección 192.168.1.2/24 se crea la ruta de encaminamiento que nos permite enviar paquetes a la red 192.168.1.0, lo podemos ver ejecutando:

$ ip route show
...
192.168.1.0/24 dev enp7s0 proto kernel scope link src 192.168.1.2 
...

Podemos añadir una nueva ruta de encaminamiento con la siguiente instrucción:

$ sudo ip route add 192.168.2.0/24 via 192.168.1.1 dev enp7s0

Esto agrega una ruta para la red 192.168.2.0/24, donde el tráfico pasará por el gateway 192.168.1.1 y usará la interfaz enp7s0.

Si queremos eliminar la ruta:

$ sudo ip route del 192.168.2.0/24 via 192.168.1.1 dev enp7s0

También podemos trabajar con las rutas por defecto. Imaginemos que queremos cambiar la puerta de enlace de nuestra máquina: en este caso, vamos a configurar la ruta por defecto para salir por la interfaz enp7s0, siendo la puerta de enlace la dirección 192.168.1.1, para ello lo primero que vamos a hacer es eliminar la ruta por defecto actual:

sudo ip route del default

A continuación añadimos la nueva ruta de encaminamiento por defecto:

sudo ip route add default via 192.168.1.1 dev enp7s0

Configuración de red con ifupdown

Este sistema nos proporciona la gestión de las interfaces de red a través de los scripts que proporciona el paquete ifupdown, los cuales consultan el contenido del directorio /etc/network, normalmente el fichero interfaces. Este método nos proporciona persistencia en nuestra configuración después de un reinicio de la máquina. En el siguiente ejemplo, vamos a realizar una configuración dinámica para la interfaz enp1s0, que tomará la configuración mediante un servidor DHCP, y una configuración manual para la interfaz enp7s0. La siguiente configuración la encontramos en el fichero /etc/network/interfaces:

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug enp1s0
iface enp1s0 inet dhcp


auto enp7s0
iface enp7s0 inet static
    address 192.168.1.2/24
    gateway 192.168.1.1
    dns-nameserver 1.1.1.1
    dns-nameserver 9.9.9.9
    up iptables -t nat -A POSTROUTING -o $IFACE -j MASQUERADE
    down iptables -t nat -D POSTROUTING -o $IFACE -j MASQUERADE

Algunos aspectos a tener en cuenta:

  • Como vemos pueden existir otros ficheros de configuración de red en el directorio /etc/network/interfaces.d.
  • Al definir la interfaz podemos indicar dos parámetros:
    • auto: Se intentará activar la interfaz siempre y, si no existe, provocará un error visible.
    • allow-hotplug: Se intentará activar la interfaz si se detecta que esta existe y, si no existe, no ocurrirá nada. Se suele usar con interfaces de red físicas.
  • La interfaz enp1s0 está configurada de forma dinámica (iface enp1s0 inet dhcp), mientras que enp7s0 se configura de forma estática (iface enp7s0 inet static).
  • En al configuración estática vamos indicando los parámetros necesarios:
    • address: Indicamos la dirección IP que vamos a configurar. En el ejemplo se ha indicado la mascara de red con la notación /24, pero también podríamos añadir otro parámetro para indicar la máscara: netmark 255.255.255.0.
    • gateway: Indicamos la dirección IP de la puerta de enlace. Es una parámetro optativo, lo ponemos si es necesario que se cree la ruta de encaminamiento por defecto.
    • dns-nameserver: Si nuestro sistema tiene instalado el programa resolvconf, el fichero de configuración de los servidores DNS (/etc/resolv.conf) se genera de forma automática a partir de la configuración de red. En ese caso es necesario indicar los servidores DNS con esa directiva.
    • Es posible añadir también en la configuración de cada interfaz, líneas que comiencen con pre-up, up, down y post-down. Estas líneas permiten ejecutar comandos justamente antes de activar la interfaz, tras haberlo hecho, justamente antes de desactivarla o después de haberlo hecho. Es bastante común el caso en que queremos añadir alguna regla en el cortafuegos al levantar la interfaz y borrarla al desactivarla.

Una vez que tenemos creada la configuración, vamos a usar las utilidades ifup y ifdown para activar o desactivar las interfaces. Pero antes de usarlas vamos a asegurarnos que las interfaces no están configurada por otro método y que están desactivadas, para ello ejecutamos:

$ sudo ip addr flush dev enp1s0
$ sudo ip link set enp1s0 down
$ sudo ifdown enp1s0

$ sudo ip addr flush dev enp7s0
$ sudo ip link set enp7s0 down

Si la interfaz de red estaba previamente configurada de forma dinámica la desactivamos con ifdown enp1s0 para matar el cliente DHCP y liberar el direccionamiento. Ahora podemos activar la primera interfaz ejecutando:

$ sudo ifup ens1s0

Y podemos comprobar como la interfaz se configura de forma automática por medio de un servidor DHCP. Para activar la segunda interfaz ejecutaríamos un comando similar, pero teniendo en cuenta que debemos desactivar la primera interfaz para eliminar la regla de enrutamiento y que no cause un conflicto al activar la segunda:

$ sudo ifdown ens1s0
$ sudo ifup ens7s0

Y comprobamos la configuración:

$ ip a show enp7s0 
3: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:c8:54:17 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.2/24 brd 192.168.1.255 scope global enp7s0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fec8:5417/64 scope link 
       valid_lft forever preferred_lft forever

$ ip r
default via 192.168.1.1 dev enp7s0 
192.168.1.0/24 dev enp7s0 proto kernel scope link src 192.168.1.2 

Normalmente no usamos directamente las utilidades ifup y ifdown, sino que gestionamos la configuración de todas las interfaces de red con el servicio networking de systemd. Este servicio utiliza internmanete ifup y ifdown y podemos iniciarlo (start), pararlo (stop), reinciarlo (restart), comprobar el estado (status),… Por ejmplo:

sudo systemctl restart networking.service

Conclusiones

En este primer artículo hemos introducido el uso del paquete ifupdown para gestionar la configuración de red en sistemas Linux. En los siguientes artículos introduciremos otros métodos de configuración como son: NetworkManager y systemd-networkd.

Leave a Comment

Your email address will not be published. Required fields are marked *

Loading...