Capítulo 5
Configuración del Protocolo TCP/IP
En este capítulo recorreremos todos los pasos necesarios para configurar el protocolo TCP/IP en su máquina. Empezando en la asignación de direcciones IP, iremos describiendo la configuración de las interfaces TCP/IP e introduciremos unas cuantas herramientas que resultan bastante útiles a la hora de resolver problemas surgidos durante la instalación de la red.
La mayoría de las tareas descritas en este capítulo, generalmente, solo habrá de ejecutarlas una única vez. Una vez hecho esto, solo tendrá que tocar alguno de los ficheros de configuración cuando añada un nuevo sistema a su red, o si decide reconfigurar el sistema completamente. Algunos de los comandos usados para configurar el protocolo TCP/IP, sin embargo, deben ser ejecutados cada vez que se arranca el sistema. La forma usual de llevar esto a cabo es a través de los scripts /etc/rc.
Generalmente, las partes especificas de la red están contenidas en una macro llamada rc.net o rc.inet. A veces también son llamadas rc.inet1 o rc.inet2, siendo la primera la encargada de inicializar la parte del núcleo que se ocupa de las comunicaciones, mientras que la segunda es la que se encarga de arrancar los servicios básicos y las aplicaciones. En todo lo que sigue, asumiré que es ésta la estructura presente en el sistema.
Más abajo describiré las acciones llevadas a cabo por rc.inet1, mientras que las aplicaciones son cubiertas por los capítulos posteriores. Al finalizar este capítulo, debería usted haber establecido la secuencia de comandos que configuran correctamente el protocolo TCP/IP en su ordenador. Sustituya los comandos de ejemplo en rc.inet1 por los suyos propios; asegúrese de que rc.inet1 es ejecutada en el arranque y rearranque su máquina. Los scripts rc que acompañen a su distribución de Linux favorita deberían ser un buen ejemplo.
5.1 Configuración del Sistema de Ficheros proc
5.2 Instalación de los Ejecutables
5.3 Otro Ejemplo
5.4 Establecimiento del Nombre de la Máquina
5.5 Asignación de una dirección IP
5.6 Preparación de los ficheros hosts y networks
5.7 Configuración de la Interface para IP
5.7.1 La Interface de Bucle o Loopback
5.7.2 Interfaces Ethernet
5.7.3 Encaminamiento a través de una Pasarela
5.7.4 Configuración de una Pasarela
5.7.5 La Interface PLIP
5.7.6 Las Interfaces SLIP y PPP
5.7.7 La Interface Comodín
5.9.1 Consulta de la Tabla de Encaminamiento
5.9.2 Consulta de las Estadísticas de una Interface
5.9.3 Mostrar Conexiones
5.1 Configuración del Sistema de Ficheros proc
Algunas de las herramientas de configuración de Net-2 utilizan el sistema de ficheros proc para comunicarse con el núcleo. Se trata de una interface que permite el acceso a la información del kernel en funcionamiento a través de un sistema de ficheros. Una vez ha sido montado, se pueden listar los ficheros y ver su contenido como en cualquier otro sistema de ficheros. Normalmente aparecen ficheros como loadavg, que contiene la carga media del sistema, o meminfo, que contiene información sobre la memoria física y virtual.
El código de redes añade a esto el directorio net. Este directorio contiene una serie de ficheros con información sobre las tablas ARP del núcleo, el estado de las conexiones TCP y las tablas de encaminamiento. La mayoría de las herramientas de administración de redes utilizan estos ficheros para acceder a la información que precisan.
El sistema de ficheros proc (también llamado procfs) es montado generalmente en /proc durante el arranque. El mejor método consiste en añadir la siguiente línea al fichero /etc/fstab:
# Lugar de montaje de procfs:
none /proc proc defaults
y ejecutar "mount /proc" desde uno de los macros /etc/rc.
El procfs viene configurado actualmente en la mayoría de los núcleos por defecto. Si no tiene el procfs en su núcleo, al intentar montarlo obtendrá el mensaje "mount: fs type procfs not supported by kernel". De ser así tiene que recompilar el núcleo asegurándose de configurarlo incluyendo el soporte para procfs.
5.2 Instalación de los Ejecutables
Si está utilizando alguna de las distribuciones de Linux, probablemente incluirá las aplicaciones y utilidades de red fundamentales así como un conjunto coherente de ficheros de configuración de ejemplo. El único caso en el que tendría que conseguir e instalar las nuevas utilidades es en el caso de instalar una nueva versión del núcleo. De forma ocasional, esto supone cambios en la capa de comunicaciones del núcleo. Eso significaría tener que actualizar también las herramientas de configuración. Esto se traduce en, al menos, la necesidad de recompilar, aunque a veces es posible conseguir un conjunto de ejecutables actualizados en ficheros llamados net-XXX.tar.gz, donde XXX es la versión de que se trate. En el caso de Linux 1.0 es la número 0.32b, y la versión del núcleo en el momento en que se escribió este libro (1.1.12 y posterior) requiere 0.32d.
Si quiere compilar e instalar las aplicaciones estándar de comunicaciones TCP/IP, puede obtener los ficheros fuente de la mayoría de los servidores FTP de Linux. Se trata de versiones modificadas de las fuentes de Net-BSD y otros. Otras aplicaciones, como Xmosaic, xarchie, o Gopher y los clientes IRC deben obtenerse por separado. La mayoría compila sin necesidad de modificaciones si se siguen las instrucciones particulares.
El servidor FTP oficial de Net-3 es sunacm.swan.ac.uk, que es replicado en sunsite.unc.edu bajo system/Network/sunacm. El último parche y los ejecutables de Net-2e están disponibles en ftp.aris.com. El código derivado de BSD, de Matthias Urlichs, se encuentra en ftp.ira.uka.de, en el directorio /pub/system/linux/netbsd.
Para lo que queda de este libro, voy a utilizar un ejemplo menos complejo que el de la Universidad Groucho Marx, y que puede acercarse mas a las tareas que realmente tendrá que realizar. La Cervecera Virtual, es una pequeña compañía que produce, como su nombre indica, cerveza virtual. Para gestionar su negocio mas eficientemente, los cerveceros virtuales quieren conectar sus ordenadores, que casualmente son PCs bajo Linux 1.0, en red.
En el mismo piso, justo al otro lado del edificio se, encuentra la Vinatera Virtual, que trabaja de cerca con la cervecera. La vinatera tiene una red Ethernet propia. Naturalmente, ambas compañías quieren unir sus redes una vez que éstas se encuentren operacionales.
Como un primer paso, quieren establecer una pasarela que pase los datagramas de una subred a otra. Para mas tarde, tienen planeado establecer un enlace UUCP con el exterior, a través del cual intercambiaran noticias y correo electrónico. A largo plazo, quieren establecer una conexión ocasional usando SLIP con la Internet.
5.4 Establecimiento del Nombre de la Máquina
La mayoría de las aplicaciones de red, si no todas, asumen que el nombre dado a la máquina local tiene un valor razonable. Este proceso tiene lugar durante el arranque cuando se ejecuta el comando hostname. Para llamar nodo1 a un ordenador ejecutaría
# hostname nodo1
Es una práctica común usar el nombre sin cualificarlo con el dominio de red. Así pues, supongamos que las máquinas de la Cervecera Virtual se llamaran vale.vbrew.com, vlager.vbrew.com, etc. Estos son los nombres oficiales, los nombres completamente cualificados de dominio (FQDN1). Los nombres locales serían, por tanto, únicamente el primer componente del nombre, como por ejemplo vale. Sin embargo, dado que el nombre local se usa frecuentemente para buscar la dirección IP correspondiente, debe asegurarse de que la tabla que contiene esa información sea capaz de encontrarla. Esto generalmente equivale a añadir el nombre local al fichero /etc/hosts (ver más abajo).
Algunas personas sugieren la utilización del comando domainname para fijar el valor del dominio para el núcleo. Así, para obtener el FQDN combinaríamos la salida de hostname y domainname. Sin embargo, esto es, en el mejor de los casos, una verdad a medias. domainname se usa por lo general para establecer el domino NIS al que pertenece la máquina que puede ser completamente diferente al del servidor de nombres (DNS). Hablaremos de NIS en el capítulo 10.
5.5 Asignación de una dirección IP
Si configura su software de red para operar su máquina de forma aislada (por ejemplo con el objeto de utilizar el software de noticias de red INN) puede saltarse esta sección pues solo necesita la dirección de la interface de lazo.
Las cosas son algo mas complicadas en redes reales como las Ethernets. Si quiere conectar su ordenador a una red, tiene que pedir a los administradores de la misma que le asignen una dirección IP para esa red. Cuando es usted mismo el que esta estableciendo la red, tendrá que ser usted quien asigne las direcciones IP según se describe a continuación.
Las máquinas de una red local deben generalmente compartir direcciones de una subred lógica. Por ello lo primero es asignar una dirección IP para la red. Si tiene varias redes físicas, deberá asignar números de red completamente diferentes a cada una o dividir el rango de direcciones IP disponibles en varias subredes.
Si su red no esta conectada con Internet, es libre de elegir cualquier dirección (valida). Sólo tiene que asegurarse de elegir una de entre los tipos A, B, o C, o, de otro modo, no irán bien las cosas. Sin embargo, si planea conectarse a la Internet en un futuro cercano, tiene usted que obtener una dirección IP oficial ya. La mejor forma es pedir ayuda a su proveedor de servicios de Internet. Si quiere pedir una dirección oficial en previsión de que se conecte a la Internet algún día, pida un formulario de solicitud de dirección de red a hostmaster@internic.net.
Para operar varias redes Ethernet (o de otro tipo una vez que el controlador correspondiente este disponible), debe dividir su red en subredes. Es importante notar que esto es únicamente necesario si tiene mas de una dirección de "difusión" (broadcast) en la red; las conexiones punto-a-punto no cuentan. Así, por ejemplo, si tiene una red Ethernet y uno o mas enlaces SLIP con el exterior no hace falta que divida su red. La razón se explica en el capítulo 7.
_____________________________________________
1 N. del T.: Del inglés fully qualified domain name
Figura 5.1: Cervecera Virtual y Vinatera Virtual - las dos subredes.
A modo de ejemplo, el administrador de la red de la cervecera solicita al NIC una dirección de red de tipo B, siéndole asignada la número 191.72.0.0. Para acomodar dos redes ethernet, decide usar ocho bits de la parte de la dirección correspondiente a los ordenadores como dirección de subred. Eso deja otros ocho bits para las máquinas lo que equivale a 254 por cada subred. La red de la cervecera se convierte así en la subred 1 y la de la vinatera en la subred 2. Las direcciones de red serán por tanto 191.72.1.0 y 191.72.2.0. La máscara de red será 255.255.255.0.
A vlager, que actúa de pasarela entre las redes, se le asigna el número de máquina 1 en ambas redes, lo que significa que tiene las direcciones IP, 191.72.1.1 y 191.72.2.1, respectivamente. La figura 5.1 muestra las dos subredes y la máquina que actúa de enlace.
Es importante notar que en este ejemplo estamos usando una red de clase B para simplificar; una red de tipo C seria mas realista. Con el nuevo código de red, la división en subredes no esta limitada a nivel de byte, de forma que incluso una red de clase C puede dividirse en varias subredes. Por ejemplo, podría usar 2 bits del byte de los nodos para designar la subred lo que permite implementar cuatro subredes de 64 máquinas cada una.2
_____________________________________________
2 La ultima dirección en realidad se reserva como dirección de difusión, aquella a la que se envían mensajes destinados a todas las máquinas de la red correspondiente, lo cual en realidad deja solo 63 por subred.
5.6 Preparación de los ficheros hosts y networks
Una vez ha dividido su red en subredes, debe habilitar un mecanismo simple de resolución de nombres usando el fichero /etc/hosts. Si no va a usar los sistemas DNS o NIS para la resolución de nombres, debe poner todos los nombres de las diferentes máquinas en el fichero hosts.
Incluso si planea utilizar los servicios DNS y NIS en condiciones normales de operación, es conveniente tener un reducido número de máquinas en /etc/hosts. Por un lado, hay situaciones en las que es necesario resolver algunos nombres incluso cuando no hay servicios de red ejecutándose. Este es el caso del arranque. Se trata, no solo de una cuestión de conveniencia, sino que permite el uso de nombres simbólicos para las máquinas citadas en las macros rc.inet. De esta forma, para cambiar las direcciones IP, solo tiene que copiar el fichero hosts modificado a todas las máquinas y rearrancar, en vez de tener que modificar un gran número de macros rc por separado. Generalmente, también debe incluir los nombres y direcciones locales en hosts, añadiendo los de las máquinas que enlacen varias redes y los servidores NIS si existen.3
También, en la fase inicial de pruebas, debería asegurarse de que el subsistema de resolución utiliza la información del fichero hosts únicamente. Su software DNS o NIS puede incluir ficheros de configuración a modo de ejemplo que pueden producir resultados extraños si son usados. Para forzar a que todas las aplicaciones utilicen /etc/hosts de forma exclusiva cuando buscan una dirección IP, debe editar el fichero /etc/host.conf. Desactive con comentarios cualquier línea que comience por order añadiendo una almohadilla (#) e incluya la siguiente línea
order hosts
La configuración de la librería de resolución se describe en detalle en el capítulo 6.
El fichero hosts contiene un registro por línea, consistente en una dirección IP, un nombre de máquina y de forma opcional, una lista de alias para esa máquina. Los campos se separan por tabuladores o espacios y el campo con la dirección debe empezar en la primera columna. Cualquier cosa a continuación de una almohadilla (#) es interpretada como un comentario y es consecuentemente ignorado.
Los nombres de las máquinas pueden ser con cualificación completa, o relativos al dominio actual. Para la máquina vale, el registro generalmente incluiría el nombre con cualificación completa, vale.vbrew.com, y vale en el fichero hosts, de forma que pueda ser referido usando el nombre oficial y el nombre local que es mas corto.
_____________________________________________
3 Solo necesita incluir las direcciones de los servidores NIS si utiliza el servidor NYS de Peter Eriksonn. Otras implementaciones de servidores NIS son capaces de localizar los servidores cuando están siendo ejecutados, utilizando ypbind.
Este es un ejemplo del aspecto que el fichero hosts de la Cervecera Virtual podría tener. Hay dos nombres especiales vlager-if1 y vlager-if2, correspondientes a las direcciones de ambas interfaces de la máquina existentes en vlager.
#
# Fichero Hosts de la Cervecera Virtual/Vinatera Virtual
#
# IP local fully qualified domain name
#
127.0.0.1 localhost
#
191.72.1.1 vlager vlager.vbrew.com
191.72.1.1 vlager-if1
191.72.1.2 vstout vstout.vbrew.com
191.72.1.3 vale vale.vbrew.com
#
191.72.2.1 vlager-if2
191.72.2.2 vbeaujolais vbeaujolais.vbrew.com
191.72.2.3 vbardolino vbardolino.vbrew.com
191.72.2.4 vchianti vchianti.vbrew.com
Del mismo modo que con las direcciones IP, a veces también puede interesarle usar nombres simbólicos para los números de red. Con este objeto, el fichero hosts tiene un compañero llamado /etc/networks, que asocia nombres de red con los números correspondientes y viceversa. En la Cervecera Virtual, podríamos instalar un fichero networks como éste:4
# /etc/networks para la Cervecera Virtual
brew-net 191.72.1.0
wine-net 191.72.2.0
5.7 Configuración de la Interface para IP
Una vez ha configurado su hardware según se ha explicado en el capítulo anterior, 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 la macro rc.inet1 cada vez que el sistema es arrancado. Las herramientas básicas son ifconfig (donde "if" significa interface), y route.
_____________________________________________
4 Es importante notar que los nombres en networks no deben coincidir con nombres
de máquinas en hosts, o algunos programas pueden producir resultados
extraños.
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 mas sencillo de invocar esta herramienta es
ifconfig interface direccion-ip
que asigna direccion-ip a interface y la activa. Los otros parámetros toman valores asignados por defecto. Por ejemplo, la mascara de subred 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 al final del capítulo.
route permite añadir o quitar rutas de la tabla de encaminamiento del núcleo. Se puede invocar como
route [add|del] destino
donde los argumentos add y del determinan, respectivamente si se debe añadir o borrar la ruta hacia destino.
5.7.1 La Interface de Bucle o Loopback
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 ejemplo de localhost en /etc/hosts
localhost 127.0.0.1
Para ver la configuración de una interface, basta ejecutar el programa ifconfig usando el nombre de la interface como argumento:
$ ifconfig lo
lo Link encap Local Loopback
inet addr 127.0.0.1 Bcast [NONE SET] Mask 255.0.0.0
UP BROADCAST LOOPBACK RUNNING MTU 2000 Metric 1
RX packets 0 errors 0 dropped 0 overrun 0
TX packets 0 errors 0 dropped 0 overrun 0
Como podrá observar, la mascara asignada a la interface de lazo es 255.0.0.0, debido a que 127.0.0.1 es una dirección de clase A. La interface no tiene establecida ninguna dirección de difusión, ya que ésta no suele ser demasiado útil para lazos. Sin embargo, si va a ejecutar el demonio rwhod en su máquina, tendrá seguramente que fijar la dirección de difuon del dispositivo de lazo para que rwho funcione correctamente. El modo de fijar dicha dirección se explica en la sección "5.8", mas abajo.
Ahora, ya casi puede empezar a jugar con su "mini-red". Solo resta 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.
Lo siguiente es comprobar que todo funciona como es debido, por ejemplo usando ping.
ping es el equivalente a un sonar en una red5 y 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=32 time=1 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=32 time=0 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=32 time=0 ms
^C
--- localhost ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0/0/1 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.
_____________________________________________
5 ¿Alguno recuerda "Echoes" de Pink Floyd?
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 a rc.inet1 y después de asegurarse de que las dos macros rc.inet son ejecutadas desde /etc/rc, 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.6 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 seria:
# 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. Una comprobación rápida nos da:
# ifconfig eth0
eth0 Link encap 10Mps Ethernet HWaddr 00:00:C0:90:B3:42
inet addr 191.72.1.2 Bcast 191.72.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
_____________________________________________
6 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.
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 mas tarde.
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 191.72.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 191.72.1.1: icmp_seq=0. time=11. Ms
64 bytes from 191.72.1.1: icmp_seq=1. time=7. Ms
64 bytes from 191.72.1.1: icmp_seq=2. time=12. Ms
64 bytes from 191.72.1.1: icmp_seq=3. time=3. Ms
^C
----vstout.vbrew.com PING Statistics----
4 packets transmitted, 4 packets received, 0% packet loss
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 paquetes7 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. 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
191.72.1.0 * 255.255.255.0 U 1 0 10 eth0
El significado de cada uno de los campos se detalla mas adelante en la sección "Comprobación mediante netstat ". 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.
_____________________________________________
7 N. del T.: Del inglés packet loss rate
5.7.3 Encaminamiento a través de una Pasarela
En la sección anterior, cubrí 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 la 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 nú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 de vstout a vbardolino, pero la respuesta del segundo iría a parar al cubo de la basura.
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. 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.
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 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:
191.72.1.1 vlager vlager.vbrew.com
191.72.1.1 vlager-if1
191.72.2.1 vlager-if2
La secuencia de comandos necesaria para establecer ambas interfaces será por tanto:
# ifconfig eth0 vlager-if1
# ifconfig eth1 vlager-if2
# route add brew-net
# route add wine-net
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, porque solo requiere dos máquinas ("puntos"), en contraposición a las redes de difusión.
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:
# 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 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 191.72.1.1.8
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 ARP sustituto (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 "Comprobación de las Tablas ARP", mas adelante.
Las versiones futuras de Net-3 contendrán una herramienta llamada plipconfig capaz de fijar el número de IRQ del puerto de la impresora. Mas tarde se sustituirá por un comando ifconfig mas general.
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 mas que decir de ellas. Generalmente, el establecimiento de un enlace SLIP incluye una llamada a un lugar de conexión remoto 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 los capítulos 7 y 8.
La interface comodín (dummy) parece un tanto exótica y sin embargo es bastante útil. Resulta especialmente ventajosa para máquinas aisladas 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.
_____________________________________________
8 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.
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 que busque su dirección IP en el fichero /etc/hosts dará como resultado 191.72.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 interface 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 191.72.1.65 y añadir una ruta que apunte a ella. La forma correcta es pues:
# ifconfig dummy vlite
# route add vlite
El programa ifconfig tiene muchos mas parámetros que los descritos hasta ahora. Generalmente se ejecuta en la forma:
ifconfig interface [[-net|-host] dirección [parámetros ]]
interface es el nombre de la interface y dirección es la dirección IP que se asigna a dicha interface. La dirección puede estar en forma de cuaterna o usando un nombre que ifconfig buscara en /etc/hosts y /etc/networks. La opciones -net y -host fuerzan a ifconfig a tratar las direcciones dadas como direcciones de red o de máquina respectivamente.
Si ifconfig es ejecutado añadiendo únicamente el nombre de la interface, presentará la información de la configuración de dicha interface. Si se ejecuta sin parámetros, presenta todas las interfaces configuradas hasta el momento; usando la opción -a fuerza a ifconfig a incluir la información de las interfaces inactivas. A modo de ejemplo, la consulta de la configuración de la interface Ethernet eth0 seria:
# ifconfig eth0
eth0 Link encap 10Mbps Ethernet HWaddr 00:00:C0:90:B3:42
inet addr 191.72.1.2 Bcast 191.72.1.255 Mask 255.255.255.0
UP BROADCAST RUNNING MTU 1500 Metric 0
RX packets 3136 errors 217 dropped 7 overrun 26
TX packets 1752 errors 25 dropped 0 overrun 0
Los campos MTU y Metric informan sobre los valores actuales de la MTU (Unidad Máxima de Transferencia) y de la métrica para una interface dada. El valor de la métrica es usado tradicionalmente por algunos sistemas operativos para calcular el coste de una ruta. Linux no usa este valor por el momento, pero lo define por razones de compatibilidad.
Las líneas RX y TX dan idea de los paquetes recibidos o transmitidos sin errores, del número de errores ocurridos, de cuantos paquetes han sido descartados, seguramente por memoria insuficiente, y cuantos han sido perdidos por desbordamiento, condición que ocurre cuando la recepción de paquetes es demasiado rápida y el núcleo es incapaz de dar servicio al paquete anterior antes de la llegada del nuevo paquete. Los nombres de los campos que genera ifconfig coinciden mas o menos con los parámetros con los que se puede ejecutar; estos parámetros son explicados mas abajo.
A continuación tenemos una lista de los parámetros reconocidos por ifconfig. Los nombres de los indicadores correspondientes aparecen entre paréntesis. Las opciones que simplemente activan alguna característica pueden usarse para desactivarla precediéndolas de un guión (-).
up
Marca la interface como "up" o activa, es decir, disponible para que sea usada por la capa IP. Esta opción va implícita cuando lo que se da en la línea de comandos es una dirección . También permite reactivar una interface que se ha desactivado temporalmente mediante la opción "down". Esta opción corresponde a los indicadores UP RUNNING.
down
Marca la interface como "down" o inactiva, es decir, inaccesible a la capa IP. Esto inhabilita cualquier trafico IP a través de la interface. Es importante darse cuenta que esto no borra los registros de la tabla de encaminamiento correspondientes a esa interface de forma automática. Si pretende desactivar una interface de forma permanente, debería borrar estos registros de encaminamiento, aportando rutas alternativas si es posible.
netmask mascara
Esto asigna una mascara de subred a una interface. Se puede dar como un valor de 32 bits en hexadecimal precedido del prefijo 0x, o en notación de cuaterna usando números decimales separados por puntos.
pointopoint dirección
Esta opción se usa para enlaces IP punto-a-punto en los que intervienen únicamente dos máquinas. Esta opción es necesaria para, por ejemplo, configurar las interfaces SLIP o PLIP.
ifconfig
confirma el establecimiento de una dirección punto-a-punto incluyendo el indicador POINTOPOINT.
broadcast dirección
La dirección de difusión se obtiene, generalmente, usando la parte de red de la dirección y activando todos los bits de la parte correspondiente a la máquina. Algunas implementaciones de los protocolos IP utilizan un esquema diferente; esta opción proporciona un método para adaptarse a esos entornos mas raros. (ifconfig confirma el establecimiento de una dirección de difusión incluyendo el indicador BROADCAST.)
metric número
Esta opción puede ser usada para asignar un valor de métrica a la tabla de encaminamiento creada para la interface. Esta métrica es usada por el Protocolo de Información de Encaminamiento (RIP, como ya hemos visto en capítulos anteriores) para construir las tablas de encaminamiento para la red. El valor usado por defecto por ifconfig es cero. Si no esta ejecutando un demonio RIP, no necesita usar esta opción para nada; si por el contrario si lo usa, al menos solo tendrá que modificar este valor en contadas ocasiones.
mtu bytes
Esto fija la unidad máxima de transferencia, o lo que es lo mismo, el máximo número de octetos que la interface es capaz de manejar en una única transacción. Para Ethernets, la MTU toma el valor 1500 por defecto; para interfaces tipo SLIP, el valor por defecto es 296.
arp
Esta opción es especifica de redes de difusión como las Ethernets o las de radio-paquetes. Permite el uso de ARP, el Protocolo de Resolución de Direcciones, para detectar la dirección física de las máquinas conectadas a la red. Para redes de difusión, esta opción es habilitada por defecto.
ifconfig avisa que ARP ha sido inhabilitado mediante el indicador NOARP.
-arp Inhabilita el uso de ARP para esta interface.
promisc
Pone la interface en modo promiscuo. En una red de difusión, esto hace que la interface reciba todos los paquetes, independientemente de si eran para ella o no. Esto permite el análisis del trafico de red utilizando utilidades como filtros de paquetes, también llamado fisgar 9. Se trata de una buena técnica para localizar problemas de red que de otra forma resultan difíciles.
_____________________________________________
9 N. del T.: Del inglés snooping
Por otro lado, esto también posibilita ataques, permitiendo al atacante analizar el tráfico de la red en busca de claves u otras cosas peligrosas. Una protección posible contra este tipo de ataques es impedir que cualquiera pueda conectarse a la Ethernet. Otra es la utilización de protocolos de autentificación seguros como Kerberos, o los programas SRA de ingreso en el sistema.10
Esta opción corresponde al indicador PROMISC.
-promisc Desactiva el modo promiscuo.
allmulti
Las direcciones de envío múltiple son un tipo de difusión pero a un grupo de máquinas que no tienen necesariamente que pertenecer a la misma subred. El núcleo no soporta todavía direcciones de envío múltiple o de multidifusion11 .
Esta opción corresponde al indicador ALLMULTI.
-allmulti Desactiva las direcciones de envío múltiple.
5.9 Comprobación mediante netstat
A continuación describiré una herramienta útil para comprobar la configuración y actividad de su red. Se llama netstat, aunque se trata en realidad de una colección de herramientas combinadas. Describiremos cada una de las funciones en las secciones siguientes.
5.9.1 Consulta de la Tabla de Encaminamiento
Si ejecuta netstat usando el indicador -r, puede ver la información de la tabla de encaminamiento del núcleo igual que hemos venido haciendo hasta ahora con route. Para vstout, tendríamos:
# netstat -nr
Kernel routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
127.0.0.1 * 255.255.255.255 UH 1 0 50 lo
191.72.1.0 * 255.255.255.0 U 1 0 478 eth0
191.72.2.0 191.72.1.1 255.255.255.0 UGN 1 0 250 eth0
La opción -n hace que netstat imprima las direcciones IP en notación de cuaterna en vez de usar los nombres simbólicos de las máquinas o las redes. Esto es especialmente útil si pretende evitar consultas para esos nombres a través de la red (por ejemplo consultas a un servidor NFS o NIS).
_____________________________________________
10 SRA se puede obtener del servidor ftp.tamu.edu en el directorio /pub/sec/TAMU
11 N.T.: Las versiones actuales del núcleo (2.X) si permiten el uso de
direcciones de envío múltiple.
La segunda columna de la salida producida por netstat informa sobre las pasarelas a las que apunta la información de encaminamiento. Si una ruta no usa pasarela, el programa imprime un asterisco. La tercera columna imprime el nivel de generalización de una ruta.
Dada una dirección IP, el núcleo recorre la tabla registro a registro haciendo un "Y" lógico de la dirección y la mascara de nivel de generalización antes de compararla con el destino que muestra dicho registro.
La cuarta columna muestra varios indicadores que describen la ruta:
G La ruta utiliza una pasarela.
U La interface esta activa.
H Esta interface permite el acceso a una sola máquina. Este es el
caso de la interface de lazo 127.0.0.1 en nuestro ejemplo.
D Este indicador se activa cuando el registro es generado por un mensaje
de redirección ICMP (ver sección 2.5).
M Presente cuando este registro ha sido modificado por un mensaje de redirección
ICMP.
La columna Ref de la salida de netstat muestra el número de referencias a esta ruta, esto es, cuantas otras rutas dependen de ésta (por ejemplo a través de pasarelas). Las dos últimas columnas muestran el número de veces que cada ruta ha sido usada y la interface que procesa los datagramas para dicha ruta.
5.9.2 Consulta de las Estadísticas de una Interface
Cuando se ejecuta con el indicador -i, netstat presenta las estadísticas de cada una de las interfaces de red configuradas en ese momento. Si se usa también la opción -a, el resultado son todas las interfaces presentes en el núcleo, no solo aquellas que ya han sido configuradas. En vstout, netstat producirá:
$ netstat -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flags
lo 0 0 3185 0 0 0 3185 0 0 0 BLRU
eth0 1500 0 972633 17 20 120 628711 217 0 0 BRU
Los campos MTU y Met informan de los valores de MTU y métrica configurados en la interface. Las columnas RX y TX muestran el total de paquetes recibidos y enviados respectivamente sin errores (RX-OK/TX-OK), dañados (RX-ERR/TX-ERR), cuantos han sido descartados (RX-DRP/TX-DRP), y cuantos se han perdido por desbordamiento (RX-OVR/TX-OVR).
La última columna muestra los indicadores activos para cada interface. Se trata de abreviaturas de una sola letra correspondientes a los nombres de los indicadores usados para configurar la interface mediante ifconfig.
B Dirección de difusión activa.
L Interface correspondiente a un dispositivo de lazo.
M Recepción de todos los paquetes (modo promiscuo).
N No se usan pistas12
O ARP esta desactivado en esta interface.
P Se trata de una conexión punto-a-punto.
R Interface en uso.
U Interface activa.
netstat soporta una serie de opciones que permiten mostrar los sockets13 activos y pasivos. Las opciones -t, -u, -w, y -x muestran conexiones con sockets TCP, UDP, RAW, o UNIX.
Si, adicionalmente incluye el indicador -a, también se muestran sockets en espera de una conexión (a la escucha). Esto le permite listar todos los servidores que se ejecutan en su sistema.
La ejecución de netstat -ta en vlager produce lo siguiente:
$ netstat -ta
Active Internet connections
Proto Recv-Q Send-Q Local Address Foreign Address (State)
tcp 0 0 *:domain *:* LISTEN
tcp 0 0 *:time *:* LISTEN
tcp 0 0 *:smtp *:* LISTEN
tcp 0 0 vlager:smtp vstout:1040 ESTABLISHED
tcp 0 0 *:telnet *:* LISTEN
tcp 0 0 localhost:1046 vbardolino:telnet ESTABLISHED
tcp 0 0 *:chargen *:* LISTEN
tcp 0 0 *:daytime *:* LISTEN
tcp 0 0 *:discard *:* LISTEN
tcp 0 0 *:echo *:* LISTEN
tcp 0 0 *:shell *:* LISTEN
tcp 0 0 *:login *:* LISTEN
_____________________________________________
12 N.T.: Pistas aquí se refiere a un método de encapsulado de
los datagramas IP en los que la información de la cabecera se coloca
al final del paquete. Se usan en redes Ethernet para ayudar en el alineamiento
de datos en los bordes de página.
13 N. del T.: Literalmente significa enchufe en inglés, y se refiere
a los descriptores de fichero abiertos para comunicaciones.
Vemos que la mayoría de los servidores están simplemente esperando una conexión entrante. Sin embargo, la cuarta línea muestra una conexión entrante SMTP desde vstout, y la sexta informa que hay una conexión saliente tipo telnet hacia vbardolino.14
El uso del indicador -a únicamente genera información de los sockets de todas las clases.
5.10 Comprobación de las Tablas ARP
En ciertas ocasiones, resulta útil poder ver o incluso alterar parte de las tablas ARP del núcleo, por ejemplo cuando sospecha que una dirección IP duplicada causa problemas intermitentes en su red. La herramienta arp fue creada con este objeto. Sus opciones son:
arp [-v] [-t tipohw ] -a [máquina ]
arp [-v] [-t tipohw ] -s máquina direccionhw
arp [-v] -d máquina [máquina ...]
Todos los argumentos máquina pueden ser nombres simbólicos o direcciones IP en notación de cuaterna.
Si usamos el primer comando, obtendremos el registro de la tabla correspondiente a la dirección IP o máquina especificada o, en el caso de que no se especifique ninguna, se muestran todas. Así, si ejecutáramos arp en vlager obtendríamos:
# arp -a
IP address HW type HW address
191.72.1.3 10Mbps Ethernet 00:00:C0:5A:42:C1
191.72.1.2 10Mbps Ethernet 00:00:C0:90:B3:42
191.72.2.4 10Mbps Ethernet 00:00:C0:04:69:AA
que muestra las direcciones Ethernet de vlager, vstout y vale.
_____________________________________________
14 Para saber si la conexión es entrante o saliente basta mirar los puertos. El puerto correspondiente a la máquina que llama es siempre un entero simple, mientras que la máquina receptora utiliza el puerto correspondiente al servicio en uso y que además es representado por netstat usando el nombre simbólico contenido en /etc/services.
Se puede usar la opción -t para mostrar la información referente a un tipo especifico de hardware. Los valores posibles son ether, ax25, o pronet, y se refieren a Ethernet a 10Mbps, AMPR AX.25, y equipos token ring IEEE 802.5, respectivamente.
La opción -s se usa para añadir de forma permanente la dirección de hardware de máquina a las tablas ARP. direccionhw es la dirección de hardware y por defecto se supone que es Ethernet, especificada como una cadena de seis bytes en hexadecimal separados entre medias por dos puntos. Se puede también especificar la dirección de otro tipo de hardware usando la opción -t.
Un tipo de problema que puede requerir añadir una dirección IP manualmente a las tablas ARP es cuando, por alguna razón, una consulta ARP a una máquina remota falla, por ejemplo debido a que su controlador ARP no funciona correctamente o cuando alguna otra máquina en la red se identifica erróneamente como si ella misma tuviera esa dirección IP.
También es un modo, aunque algo drástico, de protegerse frente a máquinas que, conectadas a la misma Ethernet, tratan de hacerse pasar por otras.
El uso de arp con el modificador -d borra todos los registros ARP que se refieran a la máquina dada. De este modo se puede forzar a una interface a que intente obtener de nuevo la dirección Ethernet que corresponda a la dirección IP en cuestión. Esto resulta útil cuando un sistema mal configurado ha emitido una información ARP incorrecta (por supuesto, primero habrá de asegurarse de que el error de configuración ha sido subsanado).
La opción -s se puede usar también para implementar ARP sustituto o proxy ARP. Se trata de una técnica especial en la que una máquina, digamos gate, actúa como pasarela para otra diferente llamada fnord, haciendo como que ambas direcciones pertenecen a la misma máquina, en este caso gate. Esto se consigue haciendo publico un registro ARP para fnord que apunta a su propia interface Ethernet. De este modo, cuando cualquier máquina de la red realiza una consulta sobre fnord, gate responde con un registro que contiene su propia dirección Ethernet. La máquina que ha realizado la consulta enviara los datagramas a gate, quien se los pasa a fnord.
Este tipo de cosas puede ser necesario si, por ejemplo, pretende acceder a fnord mediante una máquina DOS que tiene una implementación de TCP incorrecta que no entiende el encaminamiento demasiado bien. Cuando usa ARP sustituto, a todos los efectos la máquina DOS ve a fnord en la subred local y, por tanto, no necesita preocuparse de como realizar el encaminamiento a través de una pasarela.
Otro aplicación muy útil del ARP sustituto es cuando una de sus máquinas actúa como pasarela para otra máquina aunque solo de forma temporal, por ejemplo, en el caso de un enlace telefónico. En un ejemplo anterior, ya nos encontramos con el portátil vlite que se conectaba a vlager mediante un enlace PLIP de vez en cuando. Por supuesto, esto sólo funcionará si la dirección de la máquina para la que quiere actuar de sustituto ARP se encuentra en la misma subred IP que su pasarela. Así, por ejemplo, vstout podría ser el sustituto ARP de cualquier máquina de la subred de la Cervecera (191.72.1.0), pero nunca para máquinas de la subred de la Vinatera (191.72.2.0).
Abajo vemos el comando correcto para activar un ARP sustituto para fnord; por supuesto, la dirección Ethernet dada debe ser la de gate.
# arp -s fnord 00:00:c0:a1:42:e0 pub
Para borrar el registro de ARP sustituto bastara:
# arp -d fnord
Las comunicaciones en red con Linux están en continua evolución. Cambios fundamentales en el núcleo permitirán un esquema de configuración muy flexible que permitirá que configure los dispositivos de red en tiempo de ejecución. Por ejemplo, ifconfig tendrá argumentos que permitan fijar la línea IRQ y el canal DMA.
Otro cambio que se espera pronto es el indicador adicional mtu en el comando route, que permita establecer la Unidad de Transferencia Máxima para una ruta en particular. Esta MTU especifica de una ruta invalida el valor especificado para la interface. El uso típico de esta opción es para rutas a través de pasarelas, en las que el enlace entre la pasarela y la máquina destinataria requiere un MTU muy bajo. Por ejemplo, supongamos que la máquina wanderer este conectada a vlager a través de un enlace SLIP. Entonces, al enviar datos de vstout a wanderer, la capa de red en wanderer enviaría paquetes de hasta 1500 bytes, porque los paquetes son transmitidos mediante una Ethernet. El enlace SLIP, sin embargo, opera con una MTU de 296, así que la capa de red en vlager tendría que dividir los paquetes IP en fragmentos mas pequeños que quepan en 296 bytes. Si en vez de eso, configura la interface en vstout para que use una MTU de 296 desde el principio, se puede evitar el proceso de división, que es relativamente costoso.:
# route add wanderer gw vlager mtu 296
Debe notar que la opción mtu también permite que, de forma selectiva, evite los efectos de la política las "Subredes son locales" (SNARL15). Se trata de una opción de configuración del núcleo descrita en el capítulo 3.
_____________________________________________
15 Del inglés Subnets Are Local Policy