4.3 Configuración del TCP/IP en Linux

Todos los hosts deberían tener configurado el TCP/IP. Por tanto, vamos a explicar qué pasos serían los que daríamos en el caso de que esto no fuera así.

En primer lugar, saber que sólo el súper-usuario (root) puede modificar los parámetros del TCP/IP. Sin embargo, como en realidad no necesitamos modificar ningún fichero, todo el proceso que a continuación se expone debería poderse realizar como usuario sin privilegios de administración.

4.3.1 ¿Reconoce el kernel el hardware de red?

Para conocer si el núcleo (kernel) del sistema operativo reconoce el adaptador de red que estamos utilizando podemos realizar diferentes pruebas. La primera consiste en ver si el TCP/IP ya está configurado, con lo que sabremos que el kernel necesariamente lo reconoce. Esto se puede hacer escribiendo en un shell:

root# ifconfig

La salida es una lista de interfaces, junto con algunos parámetros de configuración. Lo importante es que veamos que aparece el interface eth0, esto es, el primer interface de red Ethernet.

Si esto no fuera así, hay dos opciones:

Cargar el módulo correspondiente:
Conociendo el modelo del adaptador de red tenemos que averiguar cómo se llama el módulo que lo manipula. Lo localizamos en el sistema de ficheros y lo cargamos usando insmod o modprobe. Los detalles de este proceso deberían ser consultados en un kernel-HOWTO o en un manual de referencia de la distribución de Linux que estamos utilizando.
Compilar un nuevo kernel y usarlo:
Para hacer esto necesitamos los fuentes de un kernel reciente (preferiblemente la última disponible). Activaremos el módulo correspondiente y compilaremos el kernel. Después lo copiaremos en un directorio accesible por el boot loader y reiniciaremos la máquina. Los detalles de este proceso deberían encontrarse también en la documentación anteriormente comentada.

4.3.2 Configuración temporal del TCP/IP

Como se ha indicado en la sección anterior, puede ocurrir que el kernel sí que reconozca el hardware de red, pero éste no ha sido activado. La forma estándar de configurar temporalmente un interfaz de red consiste en usar las utilidades /sbin/ifconfig y /sbin/route desde la línea de comandos. Ejemplo:

# Establecemos la dir IP  
root# ifconfig eth0 192.168.213.128  
 
# Establecemos la máscara de red  
root# ifconfig eth0 netmask 255.255.255.0  
 
# Levantamos el interfaz. Sustituir "up" por "down" para desactivarlo.  
root# ifconfig eth0 up  
 
# Establecemos el gateway (router de nuestra red)  
root# route --inet add -net 0.0.0.0/0 gw 192.168.213.2 eth0  
 
# Definimos el servidor de nombres  
root# echo "nameserver 150.214.156.2" > /etc/resolv.conf

__________________________________________________________________

Taller 4.3: Determine el rango de direcciones IP de la subred en la que está el PC virtual (utilice ifconfig sin argumentos) y cambie la dirección IP del PC virtual. Compruebe que la conexión con Internet sigue funcionando.

_________________________________________________________________________ _________________

Taller 4.4: Cambie el servidor de nombres del PC virtual por el de la Universidad de Almería (150.214.156.2).

_________________________________________

4.3.3 Configuración permanente del TCP/IP

La configuración permanente se consigue haciendo que los scripts de arranque de la computadora ejecuten en algún instante los comandos especificados durante la configuración temporal. El problema al que nos enfrentamos ahora es localizar los ficheros de configuración que estos scripts utilizan para realizar dicha tarea. Por desgracia, estos scrips suelen tener diferentes localizaciones y contenidos, dependiendo de la distribución de Linux utilizada. A continuación se explicará cómo localizar dichos ficheros.§

Bien. Antes de comenzar, un poco de nomenclatura; en adelante hablaremos de los programas ejecutables como procesos. En Unix (y por tanto en Linux) los procesos son tareas que pueden invocar a otros procesos y que el sistema operativo ejecuta durante un cierto intervalo de tiempo. Cuando los procesos resuelven tareas útiles para el sistema operativo de forma indefinida, se habla de demonios (daemons en inglés).

Para encontrar el o los ficheros que contienen la configuración del TCP/IP en una máquina con Linux los pasos a realizar deberían ser los siguientes:

  1. Localizar el fichero /etc/inittab. Este fichero es utilizado por el proceso /sbin/init que se encarga de configurar la computadora y de cargar el resto de procesos después de que el sistema operativo arranque y monte el sistema de ficheros raíz [3]. De hecho, /sbin/init es el proceso padre de todos los demás procesos que corren en su máquina. Esto último puede comprobarse escribiendo:
    usuario$ ps ax -H

    Observe el tabulado dentro de la columna “COMMAND”.

  2. En Debian, el fichero /etc/inittab debería tener una entrada semejante a:
    si::sysinit:/etc/init.d/rcS

    El primer campo (si) es un identificativo del runlevel (nivel de ejecución) en el que se lanza cada proceso y significa system initialization. El segundo campo es una lista de niveles de ejecución en los que se va a ejecutar el proceso especificado por el cuarto campo (/etc/init.d/rcS) y debe estar vacío si el tercer campo, que especifica la acción a llevar a cabo en ese runlevel vale sysinit. El script /etc/init.d/rcS se encarga de levantar el sistema y sería el equivalente al fichero AUTOEXEC.BAT en MS-DOS.

    Tras la inicialización especificada en /etc/init.d/rcS, /sbin/init lleva la computadora al estado normal de funcionamiento. Para ello debe lanzar un montón de demonios que hacen cosas como leer el teclado y el ratón, mandar los trabajos de impresión a las impresoras, recibir los correos electrónicos, etc. Todos estos procesos son especificados en las entradas:

    l0:0:wait:/etc/init.d/rc 0  
    l1:1:wait:/etc/init.d/rc 1  
    l2:2:wait:/etc/init.d/rc 2  
    l3:3:wait:/etc/init.d/rc 3  
    l4:4:wait:/etc/init.d/rc 4  
    l5:5:wait:/etc/init.d/rc 5  
    l6:6:wait:/etc/init.d/rc 6

    Escribir

    usuario$ man inittab

    para conocer la sintaxis exacta de /etc/inittab.

    Como podemos apreciar, estas entradas tienen un elemento extra que es un parámetro al script /etc/init.d/rc. Cuando ejecutamos:

    /etc/init.d/rc 0

    Todos los procesos que en el directorio /etc/rc0.d comiencen por una S van a ser lanzados en el runlevel 0, en orden alfabético. Los procesos que comienzan por K son killed (matados) cuando abandonamos ese runlevel. Como podemos ver, todos estos procesos son enlaces simbólicos a otros procesos localizados en el directorio:

     /etc/init.d/

  3. En /etc/rc0.d encontramos que el proceso S??networking (donde ?? son dos dígitos decimales) apunta al proceso:
    /etc/init.d/networking

    que es el encargado de configurar el TCP/IP. Este proceso debe invocarse escribiendo:

    root# /etc/init.d/networking start

    para configurar por primera vez la red** . Si lo editamos y buscamos en la sección start veremos que el proceso que configura el interface de red se llama /sbin/ifup†† .

  4. /sbin/ifup tiene una documentación asociada que puede consultarse escribiendo:
    usuario$ man ifup

    Revisando dicha documentación descubriremos que ifup y ifdown (el programa que se utiliza para deshabilitar los interfaces de red) leen los datos para configurar el TCP/IP del fichero:

    /etc/network/interfaces

Bien. Si hemos realizado correctamente el proceso de rastreo anterior llegaremos a que los ficheros de configuración del TCP/IP son, dependiendo de la distribución de Linux:

Debian Linux:
 

Como acabamos de ver, el fichero que contiene los parámetros son:

/etc/network/interfaces

Su sintaxis es:

root# cat /etc/network/interfaces  
### etherconf DEBCONF AREA. DO NOT EDIT THIS AREA OR INSERT TEXT BEFORE IT.  
auto lo eth0  
 
iface lo inet loopback  
 
iface eth0 inet static  
  address 193.147.118.57  
  netmask 255.255.255.0  
  gateway 193.147.118.1  
 
### END OF DEBCONF AREA.  PLACE YOUR EDITS BELOW; THEY WILL BE PRESERVED.

En él podemos leer que este fichero ha sido creado de forma automática por la utilidad debconf cuando instaló el paquete etherconf. Por tanto, si quisiéramos modificar este fichero deberíamos escribir:

root# dpkg-reconfigure etherconf

Para aprender más acerca de la utilidad dpkg acceder a la Guía de Referencia Debian ( http://www.debian.org/doc/user-manuals\#quick-reference).

Fedora Core Linux:
 

El fichero que configura el interfaz eth0 es /etc/sysconfig/network-scripts/ifcfg-eth0 cuya sintaxis es:

# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]  
DEVICE=eth0  
ONBOOT=yes  
BOOTPROTO=none  
NETMASK=255.255.255.0  
IPADDR=193.147.118.57  
GATEWAY=193.147.118.1  
TYPE=Ethernet  
USERCTL=no  
IPV6INIT=no  
PEERDNS=no

Este fichero sólo debería modificarse utilizando un programa que lo edite. Por ejemplo, en X-window podemos utilizar system-config-network.

Gentoo Linux:
 

El fichero que configura a todos los interfaces de red es:

/etc/conf.d/net

Su sintaxis es:

root# cat /etc/conf.d/net  
# This blank configuration will automatically use DHCP for any net.*  
# scripts in /etc/init.d.  To create a more complete configuration,  
# please review /etc/conf.d/net.example and save your configuration  
# in /etc/conf.d/net (this file :]!).  
 
config_eth0=( "193.147.118.57 netmask 255.255.255.0 brd 193.147.118.255" )  
routes_eth0=( "default gw 193.147.118.1" )

En Gentoo este fichero se modifica usando un editor de ficheros ASCII.

4.3.4 Usando las modificaciones permanentes

La modificación de los ficheros de configuración del TCP/IP no basta para que probemos los cambios. Hay que inicializar los scripts que utilizan dichos ficheros. Esto se hace así:

Debian Linux:
 
root# /etc/init.d/networking restart

Fedora Core Linux:
 
root# /etc/init.d/network restart

Gentoo Linux:
 
root# /etc/init.d/net.eth0 restart

4.3.5 Configuración del nombre y el dominio del host

Debian Linux:
 

El nombre y dominio del host se encuentran en el fichero /etc/hostname:

gogh.ace.ual.es

Fedora Core Linux:
 

El nombre y dominio del host se encuentran en el fichero /etc/sysconfig/network:

NETWORKING=yes  
NETWORKING_IPV6=yes  
HOSTNAME=gogh.ace.ual.es

Gentoo Linux:
 

El nombre del host aparece en el fichero /etc/conf.d/hostname:

root# cat /etc/conf.d/hostname  
# /etc/conf.d/hostname  
 
# Set to the hostname of this machine  
HOSTNAME="gogh"

El dominio del host aparece en el fichero /etc/conf.d/domainname:

# /etc/conf.d/domainname  
 
# When setting up resolv.conf, what should take precedence?  
#  0 = let dhcp/whatever override DNSDOMAIN  
#  1 = override dhcp/whatever with DNSDOMAIN  
 
OVERRIDE=1  
 
# To have a proper FQDN, you need to setup /etc/hosts and /etc/resolv.conf  
# (domain entry in /etc/resolv.conf and FQDN in /etc/hosts).  
#  
# DNSDOMAIN merely sets the domain entry in /etc/resolv.conf, see  
# the resolv.conf(5) manpage for more info.  
 
DNSDOMAIN="ace.ual.es"  
 
# For information on setting up NIS, please see:  
#   http://www.linux-nis.org/nis-howto/HOWTO/  
 
NISDOMAIN=""

4.3.6 Configuración del DNS

Aunque parezca mentira, la configuración del servidor de nombres es independiente de la distribución de Linux. El fichero que contiene la dirección IP del servidor DNS es siempre /etc/resolv.conf que, para todos los hosts de la Universidad de Almería, debería tener al menos la entrada‡‡ :

nameserver 150.214.156.2

Si existen servidores alternativos, aparecen más entradas pero con otra dirección IP claro.

Otro aspecto importante a considerar es el papel del fichero /etc/hosts. Este fichero se utiliza siempre (aunque el servidor DNS haya sido especificado,) y contiene una lista de resoluciones estáticas de nombres. En este fichero se incluyen las resoluciones más frecuentes (por ejemplo, para hosts a los que nos conectamos todos los días) y descargamos así al DNS. Por otra parte, si este servicio cae, la resolución para estos hosts sigue funcionando. El contenido típico de este fichero es:

root# cat /etc/hosts  
# /etc/hosts  
#  
# This file describes a number of hostname-to-address  
# mappings for the TCP/IP subsystem.  It is mostly  
# used at boot time, when no name servers are running.  
# On small systems, this file can be used instead of a  
# "named" name server.  Just add the names, addresses  
# and any aliases to this file...  
#  
 
127.0.0.1             localhost  
193.147.118.57        gogh.ace.ual.es   gogh  
150.214.156.2         filabres.ual.es   filabres alias_filabres  
 
# IPV6 versions of localhost and co  
::1 ip6-localhost ip6-loopback  
fe00::0 ip6-localnet  
ff00::0 ip6-mcastprefix  
ff02::1 ip6-allnodes  
ff02::2 ip6-allrouters  
ff02::3 ip6-allhosts

__________________________________________________________________

Taller 4.5: Usando el fichero /etc/hosts, defina un alias para filabres.ual.es. Pruebe a hacer un ping a filabres usando su alias.

________________________________________________________________________________________________