8.3.- Configurar Linux para una red local

¿Como se implementan las redes en Linux? Después de ver cómo funcionan las redes, esta es la pregunta que surge. La mayoría de distribuciones ofrecen medios para configurar la red durante la instalación del sistema. Lo más normal es que la red ya esté en funcionamiento en nuestro sistema, de no ser así, podemos hacer una configuración mediante DHCP o direcciones IP estáticas. Los mecanismos de configuración de red de Linux se basan en scripts de inicio y sus ficheros de configuración, también es posible utilizar herramientas GUI para configurar la red.

Configuración del hardware de red

Poner en funcionamiento el hardware de red, en la mayoría de los casos, es una tarea bastante automatizada. La mayoría de las distribuciones vienen con scripts de inicio del sistema que detectan automáticamente la tarjeta de red y cargan el módulo del driver correspondiente. Si recompilamos el kernel, tendremos que asegurarnos de compilar el driver correcto en el fichero principal del kernel para que se cargue al inicio del sistema.

Si el hardware no se detecta correctamente tendremos que cargar el driver del hardware de red utilizando el comando modprobe.

Configuración con DHCP

DHCP es la manera más fácil de configurar un ordenador en una red TCP/IP, pues permite a un ordenador gestionar los parámetros de muchos otros ordenadores. Cuando un ordenador que ejecuta un cliente DHCP arranca, envía una multidifusión en busca de un servidor DHCP. El servidor responde a la dirección del hardware del cliente con la información de configuración que el cliente necesita para unirse a la red, sobre todo, la dirección IP, la máscara de red, las direcciones de la puerta de acceso y el servidor DNS. El servidor DHCP también puede proporcionar un nombre de host. El cliente se configurará automáticamente con los parámetros recibidos. La IP asignada no es permanente, sino  temporal (DHCP lease). Si la IP no se renueva, el servidor podría asignársela a otro ordenador, por lo que el cliente consulta al servidor de vez en cuando para efectuar la renovación.

Los tres clientes DHCP más habituales en Linux son: pump, dhclient y dhcpcd (que no hay que confundir con el servidor dhcpd). Las distribuciones pueden incluir uno o incluso los tres, pero todas tienen un cliente DHCP por defecto que se instala cuando se le indica al sistema que se quiere utilizar DHCP durante la instalación. Si la distribución viene con varios clientes, podremos intercambiarlos sin ningún problema. Lo ideal es que el cliente DHCP se ejecute en el inicio del sistema, lo que se suele controlar desde su propio fichero de inicio SysV o como parte del fichero de inicio principal de configuración de la red. Frecuentemente, el sistema posee una línea en un fichero de configuración para determinar si debe ejecutar un cliente DHCP, en Red Hat y Fedora esta opción se define en el fichero /etc/sysconfig/network-scripts/ifcfg-eth0 (el nombre del fichero puede diferir según el número de interfaz ethernet). La línea en cuestión presenta el siguiente aspecto:

bootproto

Si BOOTPROTO esta configurado con algún otro valor y lo modificamos, como en el ejemplo anterior, el sistema utilizará DHCP, aunque suele ser más fácil utilizar una herramienta GUI para definir esta opción. Ubuntu utiliza el fichero /etc/network/interfaces para el mismo fin, aunque los detalles difieren. La línea en cuestión para este archivo es como la siguiente:

iface

Una vez configurado el cliente DHCP para ejecutarse durante el arranque del sistema, la tarea de configuración habrá finalizado, si todo funciona como esperamos. En muy raras ocasiones tendremos que modificar los parámetros de DHCP para resolver alguna incompatibilidad entre cliente y servidor o para que el cliente DHCP haga algo inusual. Para ello, probablemente, tendremos que modificar el script de inicio SysV o el fichero al que haga referencia para cambiar su funcionamiento.

Si necesitamos ejecutar un cliente DHCP a mano lo haremos escribiendo su nombre como root, seguido opcionalmente de un identificador de red, como por ejemplo, dhclient eth0, para hacer que el cliente DHCP  intente configurar eth0 con la ayuda del servidor DHCP que encuentre en la red.

Configuración con una dirección IP estática

Si la red no tiene un servidor DHCP, tendremos que configurar manualmente el ordenador. Estas opciones podemos configurarlas mediante comandos interactivos. Si queremos configurarlas a largo plazo, ajustaremos ficheros de configuración como /etc/sysconfig/network-scripts/ifcfg-ethx (donde X es el número de dispositivo) o  /etc/network/interfaces. El siguiente listado muestra un fichero típico ifcfg-eth0 configurado con una IP estática.

config_red

Ejemplo de fichero de configuración de red.

La configuración de IP estáticas requiere varios elementos específicos necesarios o que resultan de utilidad:

  • Dirección IP: podemos definir la IP manualmente con el comando ifconfig o a través del elemento IPADDR del fichero de configuración.
  • Máscara de red: podemos definirla manualmente con el comando ifconfig o a través del elemento NETMASK del fichero de configuración.
  • Dirección de la puerta de acceso: se puede definir manualmente con el comando route. Para definirla permanentemente ajustaremos el fichero de configuración, que puede ser el mismo que contiene las demás opciones u otro fichero. En ambos casos, es probable que la opción se llame GATEWAY. La puerta de acceso no es necesaria en sistemas que sólo trabajan en una red local que no contiene routers.
  • Parámetros de las DNS: si queremos que Linux realice conversiones entre direcciones IP y nombres de host, tendremos que especificar al menos un servidor DNS en el fichero /etc/resolv.conf. La IP del servidor DNS se define precedida de la palabra clave nameserver. Podemos incluir hasta tres líneas nameserver en este fichero. Una vez realizada esta configuración, será permanente. También podemos definir el nombre de dominio local utilizando la opción domain.etc_resolv_conf

El script de configuración de red que vimos más arriba, puede contener opciones adicionales.

script_1_device

script_bootproto

script_broadcast

script_gateway

script_onboot

Los detalles de la configuración varían de una distribución a otra, por ejemplo en Ubuntu editaremos /etc/network/interfaces y en Fedora /etc/syconfig/network-scripts/ifcfg-ethx. La distribución y formato de la información difieren en ambos ficheros, puede que necesitemos consultar la documentación de la distribución para conocer los detalles. Otra alternativa son las herramientas GUI, cuyo uso es muy intuitivo. No debemos introducir valores aleatorios o inventados similares a los utilizados por otros sistemas de nuestra red, ya que es improbable que funcionen y pueden provocar daños enormes.

El programa ifconfig es de una importancia crítica para definir la IP y la máscara de red, también puede mostrar los parámetros actuales. Su uso básico para mostrar una interfaz de red presenta el siguiente aspecto:

script_1

Por ejemplo, si queremos configurar eth0 con la dirección IP 192.168.10.10 y la máscara de red 255.255.255.0 utilizaremos el siguiente comando:

script_2

De este modo definiremos la IP especificada para que el ordenador responda a ella y la utilice como origen para los datos que envía. Esto no configura la ruta para el tráfico exterior a la red actual, para ello tendremos que utilizar el comando route:

script_4

Tanto ifconfig como route pueden mostrar información de la configuración actual de la red. Para ifconfig introduciremos el comando seguido del nombre de la interfaz:

ifconfig_

ifconfig debería mostrar una dirección de hardware (HWaddr), una dirección IP (inet addr) y estadísticas de paquetes rechazados o desbordamientos por los paquetes recibidos (RX) y transmitidos (TX), lo ideal es que estas colisiones sean pocas, aunque son inevitables si utilizamos un HUB en lugar de un SWITCH. Podemos utilizar route para efectuar un diagnóstico escribiendo lo siguiente:

script_7

Esto muestra que los datos destinados a 192.168.1.1 pasan directamente por wlan0. 127.0.0.0 es un interfaz especial que crea un circuito cerrado con el ordenador de origen. Se utiliza para ciertos fines internos de la red. La línea default muestra la ruta por defecto, que describe lo que hacer con todo lo que no coincida con las demás entradas de la tabla de enrutamiento. Si no aparece o esta mal configurada, el tráfico destinado a redes externas no pasará del segmento de red local.

Es más fácil utilizar una herramienta GUI para definir direcciones IP para los nuevos administradores, ya que la ubicación exacta de los ficheros de configuración varía de una distribución a otra y los ejemplos listados anteriormente pueden no ser válidos para nuestro sistema actual.

Configuración del enrutamiento

internet-traficoLos routers pasan el tráfico de una red a otra. Cuando configuramos Linux le suministramos la dirección del router que utilizará como puerta de acceso a Internet. El tráfico que no esté destinado a la red local se dirigirá a este router, que a su vez se lo pasará al destinatario. En la práctica, es probable que haya una decena o más routers entre nuestro equipo y la mayoría de los sitios de Internet, cada router tiene al menos dos interfaces de red y mantiene una tabla que indica dónde enviar la información según la IP de destino. Nuestro propio ordenador tiene una tabla de este tipo, pero es muy simple comparada con las tablas de los principales routers de Internet.

Linux puede funcionar como un router, conectando dos o más redes entre sí y dirigiendo el tráfico entre ellas en base a su tabla de enrutamiento, lo que se controla, en parte, con route. Este comando se puede utilizar para mucho más que especificar un único sistema de puerta de acceso. La sintaxis simplificada de route sería la siguiente:

route_1

Veamos los comandos:

route_2

route_4

router_4

route_gw

route_reject

route_dev

Por ejemplo, una red en la que los paquetes dirigidos a la subred 172.20.0.0/16 deberían pasar a través del router 172.21.1.1 y no es el sistema de puerto de acceso por directo. Configuraremos esta ruta con el siguiente comando:

route_ejemplo

Las tablas de enrutamiento incorrectas pueden causar serios problemas debido a que algunos o todos los ordenadores no respondan. Podemos examinar la tabla de enrutamiento escribiendo solo route. Una vez localizadas las entradas incorrectas, podremos borrarlas y añadir otras nuevas que las sustituyan a la larga. La mejor opción es cambiar los ficheros de configuración, aunque un par de comandos route solucionaran el problema a corto plazo.

script_7

Si queremos configurar un router en Linux que permita el reenvío de los paquetes entre redes, debemos activar la funcionalidad modificando un fichero clave del sistema de ficheros /proc:

route_echo

Este comando activa el reenvío de IP, pero, si queremos activar permanentemente esta opción, tendremos que modificar un fichero de configuración. En algunas distribuciones es /etc/sysctl.conf:

net_ipv4

Otras distribuciones utilizan otros ficheros de configuración y opciones, como /etc/sysconfig/sysctl y su línea IP_FORWARD. Podemos utilizar grep para buscar por ip_forward o IP_FORWARD si no podemos encontrar el archivo; también podemos modificar un script de inicio local para añadir el comando que aplique el cambio.

Uso de herramientas GUI de configuración

nm-network-wired_gnome3La mayoría de distribuciones tiene sus propias herramientas GUI para la configuración de interfaces de red. Por ejemplo, Fedora y RedHat tienen una herramienta GUI personalizada llamada network configuration (system-config-network) y Suse tiene una herramienta GUI de tipo texto llamada YaST. Las herramientas de configuración GUI son un medio para introducir la información descrita anteriormente. Son más fáciles de encontrar y utilizar que los ficheros de configuración en los que se guardan los parámetros, por lo que es recomendable localizar la herramienta de la distribución y aprender a utilizarla. Los detalles de configuración de un sistema Linux difieren de una distribución a otra en lo que a herramientas GUI se refiere, ya que, normalmente, las opciones no se distribuyen de la misma manera; los principios básicos son los mismos.

Uso de los comandos ifup y ifdown

ifupifdown se incluyen en la mayoría de distribuciones actuales. Estos comandos combinan las funciones de otros varios comandos de red como ifconfig o route. En su forma más sencilla abren interfaces o los cierran en función de la información de los ficheros que utilice la distribución para almacenar los datos de configuración de red:

 ifupDespués de ejecutar este comando, eth0 estará totalmente configurada, incluyendo toda la información de enrutamiento, suponiendo que hayamos configurado correctamente los parámetros de red con las herramientas GUI, o manualmente editando los ficheros de configuración. Podemos cerrar muy fácilmente la interfaz escribiendo ifdown eth0. ifdown e ifup son útiles para verificar que los parámetros de red están apropiadamente configurados de cara a la próxima vez que arranquemos el ordenador. También se utilizan cuando queremos tirar la red o levantarla de nuevo rápidamente. No obstante, si necesitamos experimentar o depurar un problema, es preferible utilizar ifconfig y route individualmente, puesto que proporcionan un control más preciso sobre el proceso.

Configuración de los nombres de host

Los nombres de host se configuran:

  • En las DNS: el administrador de la red puede añadir una entrada en el servidor DNS de la red que convierta el nombre de nuestro ordenador en un objetivo válido para los demás ordenadores de la red local. Otra alternativa es modificar los ficheros /etc/hosts de los sistemas remotos para incluir nuestro sistema.
  • En el ordenador local: hay varios programas locales que deben conocer el nombre de nuestro ordenador como, por ejemplo, cuándo queremos que se muestre nuestro nombre de host como parte del prompt. Para ello debemos definir localmente nuestro nombre de host, algo totalmente independiente del nombre de host DNS. Se pueden definir ambos nombres con valores diferentes, pero esto puede llevar a confusiones e incluso impedir a algunos programas funcionar correctamente.

La herramienta más básica para definir localmente nuestro nombre de host se llama hostname. Si escribimos el comando sin ningún parámetro se mostrara nuestro nombre de host actual;

hostname

… si lo escribimos seguido del nuevo nombre a definir como nombre del host, hostname sustituirá el antiguo por el que acabamos de escribir.

hosname_2

Hay dos comandos similares domainnamednsdomainname. domainname define el nombre de dominio utilizado por NIS (sistema de información de red) y dnsdomainname define el nombre de dominio utilizado por las DNS. Estos comandos no afectan a los servidores remotos, sólo al nombre dado a los programas que emplean llamadas concebidas para estos servidores. Linux suele buscar en el fichero /etc/hostname/etc/HOSTNAME un nombre de host para configurar durante el inicio. Si queremos configurar el nombre de host de manera permanente, deberíamos buscar y modificar estos ficheros. Fedora utiliza /etc/sysconfig/network para este fin, entre otros.