5.7. Interfaz Configuración de la Interfaz para IP

Una vez ha configurado su hardware según se ha explicado en Capítulo 4, debe asegurarse de que el software de red del núcleo conoce esos dispositivos. Hay una serie de órdenes que se usan con objeto de configurar las interfaces de red e inicializar la tabla de encaminamiento. Esas tareas son ejecutadas generalmente por el script de inicialización de red cada vez que el sistema es arrancado. Las herramientas básicas son ifconfig (donde “if ” significa interfaz), y route.

ifconfig se usa para dar acceso al núcleo a una interfaz. Esto incluye la asignación de una dirección IP y otros parámetros, así como la activación de la interfaz. Por activación nos referimos a permitir que el núcleo envía y recibe datagramas IP a través de la interfaz. El modo más sencillo de invocar esta herramienta es:
    ifconfig interfaz dirección-ip

Esta orden asigna dirección-ip a interfaz y la activa. Los otros parámetros toman valores asignados por omisión. Por ejemplo, la máscara de subred por omisión toma el valor correspondiente al tipo de red al que pertenece la dirección IP. Así, tendríamos 255.255.0.0 para una dirección de clase B. ifconfig es descrito en detalle en Sección 5.8.”

route permite añadir o quitar rutas de la tabla de encaminamiento del núcleo. Se puede invocar como:
    route [add|del] [-net|-host] destino [if]

Los argumentos add y del determinan, respectivamente si se debe añadir o borrar la ruta hacia destino. Los argumentos -net y -host señalan al comando si el destino es una red o una máquina (que es lo que se supone si no se especifica). El argumento if es opcional también, y permite especificar a qué interfaz de red se dirige la ruta— el núcleo de GNU/Linux hará una conjetura si no se aporta este dato. Este tema se explicará más detalladamente en las siguientes secciones.

5.7.1. La interfaz de bucle local

La primera interfaz en ser activada es la interfaz de bucle local o loopback:
    # ifconfig lo 127.0.0.1

Ocasionalmente, también vera que el nombre comodín localhost es usado en vez de la dirección de IP. ifconfig buscará el nombre en el fichero hosts que debe contener un registro declarando localhost como nombre válido para la dirección 127.0.0.1:
    # Registro de ejemplo para localhost en /etc/hosts
    localhost     127.0.0.1

Para ver la configuración de una interfaz, use ifconfig, pasándole como argumento únicamente el nombre de la interfaz:
    $ ifconfig lo
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              UP LOOPBACK RUNNING  MTU:3924  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              Collisions:0 

Como podrá observar, la máscara asignada a la interfaz del bucle local es 255.0.0.0, debido a que 127.0.0.1 es una dirección de clase A.

Ahora, ya casi puede empezar a jugar con su "mini-red". Sólo queda añadir una entrada en la tabla de encaminamiento que comunique al IP que puede usar esa interfaz como ruta hacia 127.0.0.1. Para llevar esto a cabo, basta escribir:
    # route add 127.0.0.1

También aquí puede usar localhost en lugar de la dirección IP, suponiendo que lo haya introducido en su /etc/hosts.

Lo siguiente es comprobar que todo funciona como es debido, por ejemplo usando ping. ping es el equivalente a un sonar en una red.[1] Esta orden se usa para verificar que una dirección dada es accesible y para medir el retraso entre el envío de un datagrama y su recepción de vuelta. Este tiempo es conocido como tiempo de ida y vuelta.

    # ping localhost
    PING localhost (127.0.0.1): 56 data bytes
    64 bytes from 127.0.0.1: icmp_seq=0 ttl=255 time=0.4 ms
    64 bytes from 127.0.0.1: icmp_seq=1 ttl=255 time=0.4 ms
    64 bytes from 127.0.0.1: icmp_seq=2 ttl=255 time=0.4 ms
    ^C
    --- localhost ping statistics ---
    3 packets transmitted, 3 packets received, 0% packet loss
    round-trip min/avg/max = 0.4/0.4/0.4 ms
    #

Cuando se ejecuta ping según se muestra aquí, la emisión de paquetes continúa a menos que sea interrumpida por el usuario. El ^C marca el momento en el que se apretó Ctrl-C.

Este ejemplo muestra que los paquetes dirigidos a la máquina 127.0.0.1 están siendo entregados correctamente y la respuesta a ping es recibida de forma casi instantánea. Esto significa que ha establecido con éxito su primera interfaz de red.

Si la salida de ping no se parece a la de más arriba, usted tiene problemas. Compruebe la posibilidad de que algún fichero no haya sido instalado correctamente. Compruebe que los ejecutables ifconfig y route son compatibles con la versión del núcleo que usa y sobre todo que éste ha sido compilado con la opción de red activada (esto se puede ver comprobando que existe el directorio /proc/net). Si el mensaje de error es “network unreachable”(red inaccesible), seguramente ejecutó la orden route incorrectamente. Asegúrese de que es la misma dirección que la que usó con ifconfig.

Los pasos descritos arriba son suficientes para poder ejecutar aplicaciones de red en una máquina aislada. Una vez esas líneas son añadidas al script de inicialización de red y después de asegurarse de que es ejecutado en tiempo de arranque, puede proceder a rearrancar su máquina y probar las diferentes aplicaciones de red. Por ejemplo telnet localhost debería establecer una conexión telnet con su máquina, pidiéndole el nombre de usuario y la contraseña.

Sin embargo, la interfaz de bucle local es útil, no sólo como ejemplo en libros de redes, o como método de pruebas durante el desarrollo: también la utilizan algunas aplicaciones como modo normal de operacion. [2] Por ello, debe usted configurarla siempre, independientemente de que su máquina esté conectada a una red o no.

5.7.2. Interfaces Ethernet

La configuración de una interfaz Ethernet es más o menos igual que la de la interfaz de bucle local. Sólo requiere algunos parámetros más cuando está usando varias subredes.

En la Cervecera Virtual, hemos dividido la red IP, originalmente de clase B, en subredes de clase C. Para que la interfaz reconozca esto, usamos la orden ifconfig
    # ifconfig eth0 vstout netmask 255.255.255.0

Esto asigna a la interfaz eth0 la dirección IP de la máquina vstout (191.72.1.2). Si hubiésemos omitido la máscara de red, ifconfig habría deducido la máscara de la clase de la red IP, tomando por tanto 255.255.0.0, que es incorrecto. Una comprobación rápida nos da:
    # ifconfig eth0
    eth0      Link encap 10Mps Ethernet HWaddr  00:00:C0:90:B3:42
              inet addr 172.16.1.2 Bcast 172.16.1.255 Mask 255.255.255.0
              UP BROADCAST RUNNING  MTU 1500  Metric 1
              RX packets 0 errors 0 dropped 0 overrun 0
              TX packets 0 errors 0 dropped 0 overrun 0

Puede ver que ifconfig ha fijado la dirección de difusión automáticamente (el campo Bcast de arriba) a su valor usual, que es el de la red con todos los bits de la máquina activados. Además se fija la unidad de transferencia de mensajes (tamaño máximo que el núcleo va a generar para esa interfaz) a un máximo de 1500 bytes. Todos estos valores pueden ser especificados mediante opciones especiales que se explican en Sección 5.8”.

De forma semejante al caso de la interfaz de bucle local, debe también establecer ahora una entrada en la tabla de encaminamiento que informe al núcleo de que la red es accesible mediante eth0. Para la Cervecera Virtual, ejecutaría:
    # route add -net 172.16.1.0

Inicialmente podría parecer algo mágico, pues no esta claro como route detecta cuál es la interfaz que debe usar. Sin embargo el truco es sencillo: el núcleo comprueba todas las interfaces que han sido configuradas hasta el momento y compara la dirección de destino (191.72.1.0 en este caso) con la parte de red de las direcciones de las interfaces (o, lo que es lo mismo, ejecuta un "and" lógico de la dirección de la interfaz y la máscara de red). La única interfaz que cumple esto es eth0.

Veamos, ¿qué significa la opción –net? Esta opción es necesaria porque el programa route es capaz de trabajar con rutas a redes o a máquinas concretas (como vimos arriba en el caso de localhost). Cuando la dirección es dada en notación de cuaterna, intenta adivinar si se trata de una red o una máquina fijándose en los bits de máquina de la dirección. Si esa parte es nula, route asume que se trata de una red, y de otro modo lo toma como dirección de una máquina. Por tanto, route supondría que 191.72.1.0 es la dirección de una máquina en vez de una red, debido a que no sabe que hemos dividido el espacio de direcciones en subredes. Por tanto hemos de decírselo de forma explícita utilizando el indicador –net.

Por supuesto, escribir el comando route es tedioso y susceptible de muchos errores de escritura. Un método más conveniente es usar los nombres definidos en /etc/networks como vimos más arriba. Esto hace el comando más inteligible; de este modo incluso podemos evitar escribir el indicador –net, porque route sabe que 191.72.1.0 representa una red:
    # route add brew-net

Una vez finalizados los pasos básicos de configuración, debemos asegurarnos de que la interfaz Ethernet está funcionando correctamente. Elija una máquina de su red, por ejemplo vlager, y escriba:
    # ping vlager
    PING vlager: 64 byte packets
    64 bytes from 172.16.1.1: icmp_seq=0. time=11. ms
    64 bytes from 172.16.1.1: icmp_seq=1. time=7. ms
    64 bytes from 172.16.1.1: icmp_seq=2. time=12. ms
    64 bytes from 172.16.1.1: icmp_seq=3. time=3. ms
    ^C
    ----vstout.vbrew.com PING Statistics----
    4 packets transmitted, 4 packets received, 0
    round-trip (ms)  min/avg/max = 3/8/12

Si el resultado no es similar a éste, algo va mal, obviamente. Una tasa de pérdida de paquetes inusualmente alta, sugiere un problema de hardware, como terminaciones en mal estado o incluso la ausencia de las mismas, etc. Si no recibe ningún paquete, debe comprobar la configuración de la interfaz mediante netstat, que describiremos después en Sección 5.9”. Las estadísticas de paquetes producidas por ifconfig le indican si algún paquete ha sido enviado mediante esa interfaz. Si tiene acceso a una máquina remota, también debería dirigirse a esa máquina y comprobar las estadísticas de la interfaz. De este modo puede determinar exactamente en qué momento se han descartado los paquetes. Además, debe consultar la información de encaminamiento con route para ver si ambas máquinas han registrado ésta correctamente en sus tablas. route imprime la tabla de encaminamiento del núcleo completa si se ejecuta sin argumentos (la opción –n hace que utilice la notación de cuaternas en vez de los nombres de las máquinas):
    # route -n
    Kernel routing table
    Destination  Gateway  Genmask         Flags Metric Ref Use    Iface
    127.0.0.1    *        255.255.255.255 UH    1      0      112 lo
    172.16.1.0   *        255.255.255.0   U     1      0       10 eth0

El significado de cada uno de los campos se detalla más adelante en Sección 5.9. La columna Flags contiene una lista de los indicadores activos en cada interfaz. U indica que la interfaz está activa y H indica que la dirección de destino es una máquina. Si encuentra que el indicador H se ha activado para una ruta que pretendía usar para una red, entonces debe usar la opción –net con el comando route. Para comprobar si alguna ruta esta siendo usada o no, debe mirar si el campo Use en la penúltima columna se incrementa entre dos ejecuciones sucesivas de ping.

5.7.3. Encaminamiento a través de una pasarela

En la sección anterior, cubrimos sólo el caso en el que la máquina sólo tiene una única Ethernet. Frecuentemente, es posible encontrar redes conectadas unas a otras a través de pasarelas o máquinas de enlace. Estas pasarelas pueden simplemente unir dos o más Ethernets, pero pueden también servir de enlace con el exterior, con Internet. Para usar una pasarela, es necesario añadir información adicional a la capa de red.

Por ejemplo, las Ethernets de la Cervecera Virtual y de la Vinatera Virtual están unidas a través de una pasarela, vlager. Suponiendo que la máquina vlager ha sido configurada ya, sólo tenemos que añadir otro registro a la tabla de encaminamiento de la máquina vstout que le comunique al núcleo que puede acceder a todas los nodos de la red de la Vinatera a través de vlager. La orden apropiada usando route se muestra a continuación; la palabra clave gw indica que el argumento siguiente es una pasarela:

    # route add wine-net gw vlager

Por supuesto, cualquier nodo en la red de la Vinatera al que quiera dirigirse debe tener un registro análogo referido a la red de la Cervecera, o de otro modo sólo podría enviar datos a la red de la Vinatera desde la Cervecera, pero las máquinas de la Vinatera serían incapaces de responder.

Este ejemplo describe únicamente una pasarela que conmuta paquetes entre dos redes Ethernet aisladas. Supongamos ahora que vlager también tiene una conexión a la Internet (digamos que a través de un enlace SLIP). Nos gustaría que los datagramas destinados a cualquier dirección fuera de la red de la Cervecera fueran entregados a vlager. Esto se puede conseguir convirtiéndolo en la pasarela por omisión para vstout:
    # route add default gw vlager

El nombre de red default es una abreviatura que representa la red 0.0.0.0, o ruta por omisión. La ruta por omisión analiza cada destino, y es la que será usada si no se encuentra ninguna ruta más específica. No es necesario añadir este nombre a /etc/networks, porque esta información esta contenida en el código de route.

Una tasa alta de pérdida de paquetes usando ping hacia una máquina situada detrás de una o más pasarelas, puede deberse a que la red está muy congestionada. La pérdida de paquetes no se debe tanto a deficiencias técnicas como a exceso temporal de carga en las máquinas que actúan de enlace, provocando retrasos o incluso el descarte de datagramas entrantes.

5.7.4. Configuración de una Pasarela

Configurar una máquina para conmutar paquetes entre dos Ethernets es bastante sencillo. Suponga que nos encontramos en vlager, que contiene dos tarjetas Ethernet, respectivamente conectadas a cada una de las dos redes. Todo lo que necesitará hacer es configurar ambas interfaces de forma separada, dándole a cada una su dirección IP correspondiente, y eso es todo.

Es bastante útil incluir la información de ambas interfaces en el fichero hosts del modo indicado a continuación, de forma que tengamos nombres para referirnos a ellas también:
    172.16.1.1      vlager.vbrew.com    vlager vlager-if1
    172.16.2.1      vlager-if2

La secuencia de comandos para establecer las dos intefaces es por tanto:
    # ifconfig eth0 vlager-if1
    # route add brew-net
    # ifconfig eth1 vlager-if2
    # route add wine-net

Si esta secuencia no funciona, asegúrese de que el núcleo ha sido compilado con el soporte para transmisión IP (IP forwarding). Una buena forma de hacerlo es comprobar que el primer número de la segunda línea de /proc/net/snmp es un 1.

5.7.5. La interfaz PLIP

Si usa un enlace PLIP para conectar dos máquinas, las cosas son un poco diferentes de lo visto para una Ethernet. En caso de PLIP se trata de un enlace conocido como punto-a-punto, lo que significa que sólo hay una máquina a cada extremo del enlace. A las redes como Ethernet se les llama redes de difusión. La configuración de enlaces punto a punto es diferente porque a diferencia de las redes de difusión, los enlaces punto a punto no son una red por sí mismos.

PLIP ofrece conexión muy barata y portable entre ordenadores. A modo de ejemplo, consideremos un ordenador portátil de un empleado en la Cervecera Virtual que se conecta a vlager mediante PLIP. El portátil se llama vlite, y tiene un único puerto paralelo. Durante el arranque, este puerto será registrado como plip1. Para activar el enlace, ha de configurar la interfaz plip1 mediante las órdenes siguientes:[3]
    # ifconfig plip1 vlite pointopoint vlager
    # route add default gw vlager

La primera orden configura la interfaz, diciéndole al núcleo que se trata de un enlace punto-a-punto, donde la parte remota tiene la dirección de vlager. El segundo instala la ruta por omisión que usa a vlager como pasarela. En vlager se necesita ejecutar ifconfig con argumentos similares para activar el enlace (en este caso no es necesario usar route):
    # ifconfig plip1 vlager pointopoint vlite

Es interesante notar que la interfaz plip1 en vlager no necesita tener una dirección IP diferente, sino que puede usar la misma dirección 172.16.1.1. Las redes punto-a-punto no representan directamente una red, así que las interfaces no necesitan una dirección en ninguna red soportada. El núcleo usa la información de la interfaz que hay en la tabla de enrutamiento para prevenir cualquier posible equivocación. [4]

Una vez hemos configurado el encaminamiento desde el portátil a la red de la Cervecera, sólo resta arbitrar un modo para que cualquier máquina en esa red pueda acceder a vlite. Un modo particularmente enrevesado seríia añadir una ruta a las tablas de encaminamiento de cada una de las máquinas de la red para usar vlager como pasarela hacia vlite:
    # route add vlite gw vlager

Una opción mejor cuando tenemos que trabajar con rutas temporales es usar encaminamiento dinámico. Una forma de conseguirlo es usando gated, un demonio de encaminamiento, que deberá instalar en cada una de las máquinas de la red de modo que distribuya la información de encaminamiento de forma dinámica. La forma más sencilla, sin embargo, consiste en usar proxy ARP. Con la sustitución ARP, vlager responde a cualquier pregunta ARP dirigida a vlite enviando su propia dirección Ethernet. El efecto conseguido es que todos los paquetes dirigidos a vlite terminan yendo a vlager, que se encarga de reenviárselos al portátil. Volveremos a hablar de sustitución ARP en la sección Sección 5.10.”

Las actuales versiones de net-tools contienen una herramienta llamada plipconfig, que permite configurar algunos parámetros que permiten ajustar ciertos parámetros del la temporización de PLIP. La IRQ que va a usarse por el puerto de la impresora puese especificarse usando la orden ifconfig.

5.7.6. Las interfaces SLIP y PPP

A pesar de que los enlaces SLIP y PPP son simples enlaces punto-a-punto igual que las conexiones PLIP, hay mucho más que decir de ellas. Generalmente, el establecimiento de un enlace SLIP incluye una llamada a un lugar de conexión remoto a través de un módem y el establecimiento del modo SLIP en la línea de comunicaciones serie. El uso de PPP es similar. Las herramientas necesarias para establecer un enlace SLIP o PPP se describen en Capítulo 7 y Capítulo 8.

5.7.7. La Interfaz Comodín

La interfaz comodín (dummy) parece un tanto exótica y sin embargo es bastante útil. Resulta especialmente ventajosa para máquinas aisladas y para las que se conectan a una red IP mediante un enlace telefónico. Se trata en realidad de máquinas que trabajan de forma aislada la mayor parte del tiempo.

El dilema con las máquinas aisladas es que el único dispositivo activo es el de bucle local, al que generalmente se le asigna la dirección 127.0.0.1. En ocasiones, sin embargo, le resultará necesario enviar datos a la dirección IP “oficial“ de la máquina. Supongamos, por ejemplo, el caso del portátil vlite cuando no esta conectado a ninguna red. Una aplicación en vlite puede querer enviar datos a otra aplicación en la misma máquina. Buscar vlite en /etc/hosts dará como resultado 172.16.1.65, y por tanto intentará enviar los datos a esa dirección. Como la única interfaz activa en ese momento es la de bucle local, el núcleo no sabe que la dirección se refiere a la misma máquina. En consecuencia el núcleo descarta el datagrama y genera un error en la aplicación.

En esta situación es cuando la interfaz comodín es útil, resolviendo el dilema actuando como alter ego de la interfaz de bucle local. En el caso de vlite, simplemente debe asignarle la dirección 172.16.1.65 y añadir una ruta que apunte a ella. Cada datagrama para 172.16.1.65 es enviado entonces localmente. La forma correcta es pues:[5]
    # ifconfig dummy vlite
    # route add vlite

5.7.8. Alias de IP

Los nuevos núcleos llevan una funcionalidad que puede sustituir por completo a la interfaz comodín, y que tiene otras útiles funciones. IP Alias permite configurar múltiples direcciones IP en un sólo dispositivo físico. En el caso más simple, usted puede reproducir la función de la interfaz comodín configurando la dirección del nodo como un alias de la interfaz de bucle local, y evitar por completo usar la intefaz comodín. Para usos más complejos, usted puede configurar su máquina para simular ser varias máquinas, cada una con su propia dirección IP. Esta configuración es llamaba a veces “Hosting Virtual,” aunque técnicamente se usa también para otras muchas técnicas.[6]

Para configurar un alias para una interfaz, primero debe asegurarse de que su núcleo ha sido compilado con soporte para Alias de IP (compruebe que tiene un fichero /proc/net/ip_alias ; si no es así, debe recompilar el núcleo). La configuración de un alias de IP es virtualmente idéntica a la configuración de un dispositivo de red real; se usa un nombre especial para indicar que lo que usted quiere es un alias. Por ejemplo:
    # ifconfig lo:0 172.16.1.1
Esta orden creará un alias para la interfaz de bucle local con la dirección 172.16.1.1. Los alias de IP se señalan anteponiendo :n al dispositivo actual de red, donde “n” es un entero. En nuestro ejemplo, el dispositivo de red donde estamos creando el alias es lo, y estamos creando un alias numerado como cero para él. De esta forma, un único dispositivo físico puede soportar varios alias.

Cada alias debe ser tratado como si fuera un dispositivo diferente, y en lo referente al software de IP del núcleo, así es; por más que esté compartiendo su hardware con otro interfaz.

Notas

[1]

¿Alguien recuerda“Echoes” de Pink Floyd?

[2]

Por ejemplo, todas las aplicaciones basadas en RPC utilizan la interfaz de bucle local para registrarse en el demonio portmapper(mapa de puertos) durante el arranque. Entre estas aplicaciones están NIS y NFS.

[3]

Dése cuenta de que pointopoint no es una errata, es así como se escribe.

[4]

Simplemente por precaución, debería configurar de todos modos sus enlaces PLIP o SLIP una vez que ha completado la configuración de la tabla de encaminamiento de las Ethernets. Con algunos núcleos más antiguos, la tabla de encaminamiento para la red puede acabar apuntando a su enlace punto-a-punto.

[5]

La interfaz comodín se llama dummy0 si usted lo tiene cargado como un módulo en lugar de una opción integrada en el núcleo. Esto se debe a que es posible cargar varios módulos y tener más de una interfaz comodín.

[6]

Más correctamente, el uso de alias de IP se conoce como hosting virtual de capa de red. En los mundos del WWW y STMP es más común usar hosting virtual de capa de aplicación, en el que la misma dirección IP es usada por cada máquina virtual, pero en cada petición de la capa de aplicación se pasa un nombre de máquina diferente. Servicios como el FTP no son capaces de operar de esta forma, y necesitan hosting virtual de capa de red.