Resumen.

En este artículo se explica cómo configurar un equipo con Linux para que, durante el proceso de arranque y de forma totalmente automatizada, se escoja una determinada configuración de red de entre varias disponibles. El caso más habitual es el de tener un portátil que se traslada a menudo de una red en el trabajo a otra, distinta, en casa.

Esta es la información técnica relevante del software y hardware que se ha utilizado para este artículo:

En este artículo se da por supuesto que el lector ha sido capaz de configurar su tarjeta de red para acceder a la red local y que tiene acceso a internet o a una red exterior a través de una puerta de enlace o gateway, si bien éste último punto es irrelevante. Asimismo, se le suponen ciertos conocimientos básicos de scripting en la shell bash de linux u otra alternativa.

/etc/network/interfaces. Éste es el fichero donde desarrollaremos el trabajo. Debería tener más o menos la siguiente apariencia antes de empezar:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.0.6
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.254

Lo que vamos a hacer a continuación es añadir diversas líneas a este mismo fichero, de modo que dispongamos de una configuración ethernet para casa eth0-home y otra para el trabajo eth0-work. Veamos primero el resultado y pasemos luego a explicar las diferencias sobre el ejemplo real:

auto lo
iface lo inet loopback

auto eth0
mapping eth0
script /usr/local/sbin/ping-places.sh
map 192.168.0.6/24 192.168.0.254 eth0-home
map 195.164.0.6/24 195.164.0.150 eth0-work

# Ethernet HOME
iface eth0-home inet static
address 192.168.0.6
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.254

# Ethernet WORK
iface eth0-work inet static
address 195.164.0.6
netmask 255.255.255.0
network 195.164.0.0
broadcast 195.164.0.255
gateway 195.164.0.150

El proceso que hemos seguido para llegar a esta múltiple configuración automática de nuestra ethernet se basa, principalmente, en lo que se conoce como mapeado lógico eth0-home y eth0-work del dispositivo físico de red eth0. Para ello deben seguirse los siguientes pasos:

  1. Crear las distintas configuraciones de red que nos interesen. En el ejemplo han sido dos, las cuales han sido etiquetadas como eth0-home y eth0-work. Por supuesto, podemos asignar distintas configuraciones a más de un dispositivo, por ejemplo eth0 y eth1, en el caso de que tuviésemos una tarjeta pcmcia.

  2. Realizar el mapeado lógico de los dispositivos físicos. En el ejemplo se lleva a cabo mediante las siguientes cuatro instrucciones:

mapping eth0
script /usr/local/sbin/ping-places.sh
map 192.168.0.6/24 192.168.0.254 eth0-home
map 195.164.0.6/24 195.164.0.150 eth0-work

- mapping eth0 indica el dispositivo físico a mapear. Si van a mapearse más de uno podemos usar mapping eth0 eth1 [..]

- script /usr/local/sbin/ping-places.sh hace referencia a un script que se encargará de determinar qué configuración lógica usar de entre las disponibles. Ésta es la parte más complicada de todo el proceso y se detalla a continuación:

Este script, que deberemos construir a nuestra medida, recibirá los siguientes parámetros:

- map 192.168.0.6/24 192.168.0.254 eth0-home y map 195.164.0.6/24 195.164.0.150 eth0-work. Puede observarse que el uso de la opción map es dependiente de los parámetros esperados por el script, es decir, no es algo genérico el que debamos pasarle una IP deseada, una máscara, una IP a hacer ping y un nombre de dispositivo lógico. Evidentemente, el número de parámetros variará dependiendo de la implementación del script que tiene por finalidad detectar en qué red nos encontramos y devolver un valor de salida que así lo indique. De hecho, el uso de la opción map no es obligatorio, a diferencia de la opción script, que sí lo es.

Para realizar este ejemplo se ha usado la documentación disponible en la página del manual interfaces (man interfaces) así como los ejemplos disponibles en /usr/share/doc/ifupdown/examples, especialmente el fichero /usr/share/doc/ifupdown/examples/network-interfaces.gz. Precisamente uno de los métodos sugeridos para un caso como el de quien escribe era el de hacer ping a una de las máquinas que se sepa con certeza que estará en la red. En el ejemplo,

Y eso es exactamente lo que hace el script /usr/local/sbin/ping-places.sh. Puede verse su contenido en /usr/share/doc/ifupdown/examples/ping-places.sh si se tiene instalado el paquete ifupdown. Asimismo, en dicho directorio hay otros ejemplos útiles, como la detección de tarjetas a partir de la dirección MAC.

A partir de aquí ya tenemos todo el trabajo hecho. Debido a que hemos puesto la opción auto eth0 en el fichero de configuración /etc/network/interfaces, de lo único de lo que deberemos asegurarnos es de tener el cable de red enchufado antes de encender el equipo, pues el resto se hará solo al arrancar. Además, si deseamos cambiar de red sin reiniciar el equipo, tan sólo debemos conectarnos físicamente a ella y hacer un ifdown eth0 seguido de un ifup eth0: nuestro querido Linux se encargará de todo.

Próximamente espero ampliar este artículo para poder ofrecer la posibilidad de tener una tarjeta inalámbrica (wireless) en un slot pcmcia y que, según la tengamos insertada o no, se configure como principal y se omita la ethernet de cable. Incluso, también combinaciones de ambos estados (tener la de cable y la inalámbrica a la vez según el lugar o tener sólo la inalámbrica o sólo la de cable).