2.7.4. Configuración de red

Los sistemas Linux permiten una configuración amplísima de las interfaces de red, y profundizar en ello requeriría un tratamiento muchísimo más amplio del que aquí se mostrará. Bajo este epígrafe nos limitaremos a indicar cómo hacer una configuración simple de las interfaces, tanto con herramientas comunes a todas las distribuciones de Linux como con las herramientas que provee Debian.

Tenga presente que los métodos de configuración son alternativos más que complementarios y, en consecuencia, no deben mezclarse (o al menos no deben mezclarse para configurar una misma interfaz). Por ese motivo, si una interfaz está activa porque se usó la herramienta ifup de Debian, sólo debemos manipularña usando las herramientas generales, si previamente la desactivamos usando ifdown.

Advertencia

El epígrafe está referido a interfaces de cable, que son las habituales en servidores. Las interfaces inalámbricas son más engorrosas ya que es común que cambien la red a la que están conectada con todo lo que ello supone (cambio del SSID, cambio de la contraseña de acceso, etc.). Aunque es posible configurar estas interfaces a través de la línea de órdenes y ficheros de configuración, lo más cómodo (y recomendable) es usar herramientas más amigables e inmediatas como las que se exponen en el epígrafe referente a otros modos de configuración.

2.7.4.1. Interfaces presentes

Antes de poner a configurar interfaces es indispensable saber qué interfaces hay presentes en nuestro sistema. Para que el sistema registre una interfaz es necesario que tal interfaz exista, pero también que haya un driver apropiado que nos permita usarla.

Tradicionalmente, las interfaces ethernet cableadas se han venido llamando ethN siendo N un número correlativo empezando en 0 (eth0, eth1, etc.) y las interfaces inalámbricas wlanN. Con el advenimiento de systemd, sin embargo, el nombre de las interfaces ha cambiado. Ahora se usa un sistema de nombres que intenta evitar el que el núcleo cambie el nombre de las interfaces al ser cambiar su número o hacerse sustituciones.

Para conocer cuáles son las interfaces presentes, basta con mirar dentro de /sys/class/net:

$ ls /sys/class/net
eth0  lo

También es posible obtener las interfaces a través del comando ip:

# ip link show

2.7.4.2. Configuración

Para la configuración básica de la interfaz de red cableada presentaremos (muy brevemente por ahora) tres alternativas:

  • ifupdown, que es el método tradicional para la configuración de interfaces de red en Debian y sigue siendo el oficial[1]

  • La configuración directa que sirve para manipular en caliente y circunstancialmente las interfaces. Es interesante conocerla, aunque no sirva como método permanente de configuración.

  • systemd-networkd que es la solución que facilita SystemD y puede utilizarse en aquellas distribuciones que lo usan como proceso init.

2.7.4.2.1. ifupdown

Debian gestiona sus interfaces preferentemente a través de los scripts que proporciona el paquete ifupdown, los cuales consultan el contenido del fichero /etc/network/interfaces[2]. Por tanto, configurar las interfaces de red mediante este método supone fundamentalmente:

  • Saber cómo expresar la configuración de las interfaces dentro de /etc/network/interfaces.

  • Utilizar las herramientas de activación (ifup) y desactivación (ifdown).

  • Saber cómo definir los servidores DNS para la resolución de nombres.

Herramientas

Las fundamentables son:

ifup

Permite activar la interfaz suministrada (puede pasarse varias) con la configuración indicada en /etc/network/interfaces:

# ifup eth0

Es interesante la opción -v que muestra información adicional sobre el proceso de activación.

ifdown

Permite desactivar una interfaz previamente activada con ifup:

# ifdown eth0

Para que esto funcione la interfaz debió ser activada con ifup. Si se activó de cualquier otro modo, la interfaz no estará registrada como activa, de modo que ifdown no hará nada.

Puede también incluirse la opción -v y otra de interés es --force que completa el proceso de desactivación incluso aunque se hayan producido errores. Por ejemplo, porque se desactivara la interfaz de forma manual y, cuando ifdown intente desactivarla, se encuentre con que la interfaz no tiene configuración.

ifquery

Permite hacer consultas sobre las interfaces gestionadas. Lo más habitual es preguntar por cuál es la configuración de una interfaz:

$ ifquery eth0
address: 192.168.4.20/24
gateway: 192.168.4.253
up: iptables -t nat -A POSTROUTING -o $IFACE -j MASQUERADE
down: iptables -t nat -D POSTROUTING -o $IFACE -j MASQUERADE

Advertencia

La orden nos devuelve la configuración que se encuentra en /etc/network/interfaces, no la que realmente tenga la interfaz, que pueden diferir, si se deshabilitó la interfaz con ifdown y se volvió a configurar de modo diferente con las herramientas generales.

También puede usarse:

$ ifquery --state
lo=lo
eth0=eth0

que nos devolverá la interfaces activas a través de ifup.

Fichero de configuración

En realidad, el meollo de la configuración está en la escritura de /etc/network/interfaces. Mostremos un fichero con la interfaz de loopback, una interfaz eth0 configurada de forma dinámica y una interfaz eth1 configurada de forma estática:

auto lo
iface lo inet loopback

# Configuración dinámica (obsérvese dhcp)
allow-hotplug eth0
iface eth0 inet dhcp

# Configuración estática (obsérvese static)
allow-hotplug eth1
iface eth1 inet static
   address 192.168.1.4/24
   gateway 192.168.1.1

La configuración es bastante elocuente. La segunda interfaz, al tener una configuración estática, necesita algunos datos (ip y máscara, y puerta de enlace). Obsérvese que no se incluyen los servidores DNS[3], porque estos no se expresan en este fichero, sino en /etc/resolv.conf.

Sí es pertinente aclarar por qué algunas interfaces van acompañadas de la palabra auto y otras de la palabra allow-hotplug. Incluso podría haber otras sin ninguna de esas dos líneas. En este último caso, la interfaz no se activará durante el arranque y tendrá que ser el usuario quien manualmente lo haga mediante ifup. En cambio, una de esas dos dos líneas, activa automáticamente en el arranque la interfaz, pero con un matiz diferente: allow-hotplug activa la interfaz si se detecta que esta existe y, si no existe, no ocurrirá nada, mientras que auto intentará activar la interfaz siempre y, si no existe, provocará un error visible. La regla general es que allow-hotplug se usa con interfaces físicas, mientras que auto se usa con interfaces virtuales que no existen previamente, sino que se crear al ser activadas y que, por tanto, no pueden existir con anterioridad.

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 arbitrarios 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:

allow-hotplug eth0
iface eth0 inet dhcp
   pre-up    iptables -A POSTROUTING -o $IFACE -j MASQUERADE
   post-down iptables -D POSTROUTING -o $IFACE -j MASQUERADE

Advertencia

Si pretende cambiar la configuración de una interfaz, es muy importante que antes de editar el fichero, la desactive con ifdown. Esto es debido a que para desactivar una interfaz, este script no atiende a cómo se configuró la interfaz, sino a cual es la configuración escrita en el fichero en el momento de ejecutar ifdown. Por eso, si al activarse la interfaz, la configuración era estática, los scripta usarán internamente la orden ip. Si antes de desactivaer la interfaz, modifica el fichero y vuelve la configuración dinámica, al hacer ifdown. el script no desactivará la interfaz con ip, sino que intentará usar internamente dhclient y, obviamente, fallará.

DNS

Queda, por último, tratar la configuración de los servidores DNS en el fichero /etc/resolv.conf. Si la configuración es dinámica, el propio cliente DHCP se encarga de escribir este fichero y no hay que hacer ninguna configuración. En cambio, si la configuración es estática, sí habrá que escribirlo o al menos cerciorarse que es válido. Se explicará su contenido dentro del epígrafe siguiente.

Nota

Alternativamente se puede instalar y utilizar el programa resolvconf que se encarga de gestionar por nosotros el fichero /etc/resolv.conf. En este caso, no debe modificarse jamás a mano tal fichero y cuando la configuración de la interfaz sea estática incluir en la definición de la interfaz una línea que le indique a resolvconf cuáles son los servidores de nombres:

allow-hotplug eth0
iface eth0 inet static
   address        192.168.1.4/24
   gateway        192.168.1.1
   dns-nameserver 1.1.1.1
   dns-nameserver 1.0.0.1

2.7.4.2.2. Método universal

Advertencia

Recuerde que, para utilizar estas herramientas, debe cerciorarse primero de que la interfaz no se activó mediante ifup y, si lo está, utilice ifdown antes de empezar.

2.7.4.2.2.1. Configuración dinámica

El cliente más utilizado para la línea de órdenes es dhclient que se encarga de configurar la interfaz y modificar los servidores. Las acciones básicas son dos:

  1. Configurar la interfaz (p.e. eth0):

    # dhclient -v eth0
    
  2. Desconfigurar la interfaz:

    # dhclient -r eth0
    

Ver también

Para más información, consulte la sección dedicada a clientes DHCP.

2.7.4.2.2.2. Configuración manual

Si la configuración es manual, debemos realizar tres labores:

  1. Configurar los parámetros de red de la interfaz.

  2. Añadir una entrada a la tabla de encaminamiento para indicar cuál es la puerta de enlace.

  3. Configurar los servidores DNS

Así que supongamos que queremos fijar una dirección IP 192.168.1.10/24, la puerta de enlace es 192.168.1.1 y los servidores DNS 1.1.1.1 y 1.0.0.1.

Para las dos primeras tareas, el comando apropiado es:

ip

Permite la configuración de distintos aspectos relacionados con la red: políticas de encaminamiento, parámetros de configuración de la interfaz, etc. Tiene un modo de funcionamiento similar a los comandos disponibles en sistemas ios de cisco.

Para configurar la interfaz basta con:

# ip addr add 192.168.1.10/24 dev eth0

y para activarla con tal configuración:

# ip link set dev eth0 up

Esto habrá configurado la interfaz lo que puede comprobarse a través de:

$ ip addr show
[... Listado aquí ...]

que muestra la configuración asignada y:

$ ip link show
[... Listado aquí ...]

que muestra el estado de la interfaz. En este caso UP nos informa de que la interfaz está activa y LOWER_UP de que tiene el cable conectado. En el caso de estos últimos comandos es posible añadir dev eth0 para obtener información solamente de esta interfaz.

No obstante, aún es necesario añadir la entrada en la tabla de encaminamiento para configurar la puerta predeterminada:

# ip route add default via 192.168.1.1

Esta última orden provocará la adición de la entrada correspondiente:

$ ip route show
[... Listado aquí ...]

Advertencia

En tutoriales antiguos de Linux podrá ver que estas órdenes se hacen con ifconfig y route. Estas herramientas, sin embargo, hace tiempo que se marcaron como obsoletas y, de hecho, no están disponibles en Debian desde hace años. a menos que se instale expresamente el paquete net-tools.

DNS

En una configuración estática, es necesario definir los servidores DNS, para lo cual basta editar el fichero /etc/resolv.conf e incluir las siguientes líneas:

nameserver 1.0.0.1
nameserver 1.1.1.1

2.7.4.2.3. systemd-networkd

SystemD (también) permite la gestión de interfaces de red mediante el servicio systemd-networkd, al que habría que sumar systemd-resolved si queremos también un DNS caché. El método es común a cualquier distribución que use este init, aunque como en el caso de Debian, puede encontrarse desactivo.

Advertencia

Evite que ifupdown active las mismas interfaces que piense gestionar con systemd-networkd, para lo cual puede, simplemente , evitar que arranquen automáticamente comentando las líneas que contienen sus respectivas directivas auto o allow-hotplug. También se puede desinstalar el paquete ifupdown y prescindir por completo de su configuración.

La filosofía de este método es crear archivos de extensión .network dentro del directorio /etc/systemd/network cada uno de los cuales configurará la red de una interfaz distinta.

Ver también

En ese mismo directorio también puede haber archivos de extensión .link que permiten configurar las características de una interfaz (nombre, velocidad, autonegociación, etc). Hay explicaciones adicionales en el epígrafe dedicado a las interfaces de red.

Los archivos se estructuran en una sección [Match] que permite definir a cuál interfaz afecta la configuración y una o varias sección que definen tal configuración.

Lo primero que debemos hacer es habilitar el servicio:

# systemctl enable systemd-networkd
# systemctl start systemd-networkd

y también el de resolución de nombres:

# systemctl enable systemd-resolved
# systemctl start systemd-resolved
# ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

Nota

La edición de /etc/systemd/resolved.conf permite definir unos servidores DNS genéricos que se usarán en caso de que no se definan servidores particulares para las interfaces de red.

2.7.4.2.3.1. Configuración dinámica

Basta con crear un archivo /etc/systemd/network/10-eth0.network:

[Match]
Name=eth0

[Network]
# yes, para ipv4 e ipv6
DHCP=ipv4

Nota

La expresión de la interfaz a la que afecta la configuración puede ser mucho más rica. Por ejemplo, podríamos haber escrito:

[Match]
Name=eth*

que provocaría que todas las interfaces ethernet (supuesto que se llamen así) estén configuradas por DHCP. También podríamos haber utilizado alguna otra característica de la interfaz en vez del nombre, lo cual permitiría cambiar el nombre de la interfaz, sin necesidad de redefinir este archivo:

[Match]
Path=pci-0000:03:00.0

Véase interfaces para más información.

Una vez creado o modificado el archivo, deberemos recargar la configuración:

# networkctl reload

No es necesario especificar interfaz alguna, porque se recargarán las configuraciones de todas las interfaces que hayan sufrido algún cambio. Si se quiere activar o desactivar una interfaz individual, puede hacerse:

# networkctl down eth0
# networkctl up eth0

Advertencia

Pero si no ha recargado antes, se aplicará la configuración antigua.

Para comprobar podemos consultar la configuración de la interfaz y de sus servidores DNS:

$ networkctl status eth0
$ resolvectl status eth0

2.7.4.2.3.2. Configuración estática

Similar a la anterior, aunque habrá que ofrecer más información de configuración:

[Match]
Name=eth0

[Network]
Address=192.168.255.10/24
Gateway=192.168.255.1
DNS=1.1.1.1 1.0.0.1
DNSOverTLS=opportunistic

Nota

La dos últimas líneas sobre DNS no son necesarias si llegamos a definir una configuración global en /etc/systemd/resolved.conf. Añadir esta configuración en la interfaz, provocará que se use tal configuración para el tráfico propio de ella. La segunda línea permite hacer consultas cifradas, si el servidor DNS las admite.

2.7.4.2.4. Otros métodos

Existen otras aplicaciones para gestionar las interfaces de red:

  • NetworkManager, usado principalmente en equipos de escritorio. Dispone de buenos frontends gráficos (de hecho, su origen está en el proyecto GNOME <>).

  • netplan, que no es un gestor independiente, sino un frontend para la configuración de systemd-networkd o NetworkManager, según lo que se quiera usar por debajo. Lo utiliza Ubuntu desde su versión 18.04.

2.7.4.2.5. Ejercicios sobre redes

  1. Desactivar la interfaz de red y configurar a través de /etc/network/interfaces una dirección estática (use la que recibió dinámicamente antes para no generar conflictos en la red).

  2. Compruebe las interfaces activas y cuáles son las direcciones IP asociadas.

  3. Sin usar /etc/network/interfaces:

    1. Activar de forma dinámica la red y, tras recibir la configuración, desconfigurar la interfaz.

    2. Activar la interfaz dándole una configuración estática (utilice la misma dirección IP que recibió dinámicamente antes)

  4. Instala una Lubuntu 18.04 en una máquina virtual

  5. Configure la red dinámica y estáticamente usando la aplicación gráfica.

Notas al pie