Guía de Administración de Redes con Linux | ||
---|---|---|
Anterior | Capítulo 5. Configuración del Protocolo TCP/IP | Siguiente |
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 comandos 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 interface), y route.
ifconfig se usa para dar acceso al núcleo a una interface. Esto incluye la asignación de una dirección IP y otros parámetros, así como la activación de la interface. Por activación nos referimos a permitir que el núcleo envía y recibe datagramas IP a través de la interface. El modo más sencillo de invocar esta herramienta es:
ifconfig interface dirección-ip |
Este comando asigna direccion-ip a interface y la activa. Los otros parámetros toman valores asignados por defecto. Por ejemplo, la mascara de subred por defecto 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é interface de red se dirige la ruta— el núcleo de Linux hará una conjetura si no se aporta este dato. Este tema se explicará más detalladamente en las siguientes secciones.
La primera interface en ser activada es la interface de lazo 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 buscara el nombre en el fichero hosts que debe contener un registro declarando localhost como nombre valido 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 mascara asignada a la interfaz de lazo 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". Solo queda añadir una entrada en la tabla de encaminamiento que comunique al IP que puede usar esa interface 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] Este comando 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 continua 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 interface de red.
Si la salida de ping no se parece a la de más arriba, tiene usted 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 ejecuto el comando route incorrectamente. Asegúrese de que es la misma dirección que la que uso 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 interface de lazo es útil, no solo 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 este conectada a una red o no.
La configuración de una interface Ethernet es mas o menos igual que la de la interface de lazo. Solo requiere algunos parámetros mas cuando esta usando varias subredes.
En la Cervecera Virtual, hemos dividido la red IP, originalmente de clase B, en subredes de clase C. Para que la interface reconozca esto, el comando usando ifconfig
# ifconfig eth0 vstout netmask 255.255.255.0 |
Esto asigna a la interface eth0 la dirección IP de la máquina vstout (191.72.1.2). Si hubiésemos omitido la mascara de red, ifconfig habría deducido la mascara 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 interface) 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 interface de lazo, debe también ahora establecer 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 cual es la interface 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 "Y" lógico de la dirección de la interface y la mascara de red). La única interface que cumple esto es eth0.
Veamos, ¿que 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 mas conveniente es usar los nombres definidos en /etc/networks como vimos mas arriba. Esto hace el comando mas 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 interface Ethernet esta 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 perdida 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 interface 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 interface. Si tiene acceso a una máquina remota, también debería dirigirse a esa máquina y comprobar las estadísticas de la interface. De este modo puede determinar exactamente en que 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 mas adelante en Sección 5.9. La columna Flags contiene una lista de los indicadores activos en cada interface. U indica que la interface esta 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.
En la sección anterior, cubrimos solo el caso en el que la máquina solo 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 mas 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, solo tenemos que añadir otro registro a la tabla de encaminamiento de la máquina vstout que le comunique al úcleo que puede acceder a todos las máquinas 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 host 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 solo 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 defecto 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 defecto. La ruta por defecto 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 perdida de paquetes usando ping hacia una máquina situada detrás de una o mas pasarelas, puede deberse a que la red esta 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.
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 necesitara 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 kernel 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.
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 interface plip1 mediante los siguientes comandos:[3]
# ifconfig plip1 vlite pointopoint vlager # route add default gw vlager |
El primer comando configura la interface, 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 defecto 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 interface 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, solo resta arbitrar un modo para que cualquier máquina en esa red pueda acceder a vlite. Un modo particularmente enrevesado seria 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 mas sencilla, sin embargo, consiste en usar proxy ARP. Con ARP sustituto, 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 ARP sustituto 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 de which allows you to set certain PLIP timing parameters. The IRQ to be used for the printer port can be set using the ifconfig command.
A pesar de que los enlaces SLIP y PPP son simples enlaces punto-a-punto igual que las conexiones PLIP, hay mucho mas 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.
La interface 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 lazo, al que generalmente se le asigna la dirección 127.0.0.1. En ocasiones, sin embargo, le resultara 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 intentara enviar los datos a esa dirección. Como la única interface activa en ese momento es la de lazo, 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 interface de lazo. 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 |
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 host como un alias de la interfaz de lazo, 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 kernel ha sido compilado con soporte para Alias de IP (compruebe que tiene un archivo /proc/net/ip_alias ; si no es así, debe recompilar el kernel). 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 |
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.
[1] | ¿Alguien recuerda“Echoes” de Pink Floyd? |
[2] | Por ejemplo, todas las aplicaciones basadas en RPC utilizan la interface de lazo para registrarse en el demonio portmapper(mapa de puertos) durante el arranque. Entre estas aplicaciones están NIS y NFS. |
[3] | Dese 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 mas 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. |