Configuración de red en sistemas Linux - ifupdown
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:
-
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 unidadnetworking.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. -
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
ynmtui
). 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. -
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 utilizansystemd
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 IP192.168.122.1
. - Como la interfaz de red
enp1s0
está configurada con la dirección192.168.122.145
, tenemos una ruta de encaminamiento que nos permite comunicarnos con la red192.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 queenp7s0
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 programaresolvconf
, 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
ypost-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 *