Enrutamiento

La tabla de encaminamiento.

En los sistemas bajo Linux, la información sobre cómo han de dirigirse los datagramas se almacena en una estructura del kernel llamada tabla de encaminamiento. Es esta tabla de encaminamiento la que hay que manipular para configurar las decisiones de encaminamiento, basándose en la información fija que suministra el administrador (para el encaminamiento estático), o bien en la información de accesibilidad adquirida mediante BGP, (Border Gateway Protocol, Protocolo para pasarelas de frontera), para el encaminamiento dinámico.

Examen de la tabla de encaminamiento.

La ruta de encaminamiento puede examinarse con el comando netstat –r, tal y como se muestra a continuación.

En los sistemas Linux también se puede utilizar route en lugar de netstat –r, pero puesto que otros sistemas no lo permiten, probablemente es conveniente adquirir el hábito de usar netstat –r.
La opción –n de netstat o de route les impide intentar convertir en nombres las direcciones IP. Los campos de salida de netstat –r son los siguientes.

  • Destination (destino). Identifica las direcciones IP de destino para las que se tiene en cuenta esta ruta.
  • Gateway (pasarela). Proporciona la dirección IP de la interfaz (si la hay) que enviará paquetes para estos destinos. Si no se necesita pasarela de envío, aparece una dirección 0.0.0.0 o *, si se omite el argumento –n.
  • Genmask (máscara general). Es la máscara de red usada para las direcciones de destino.
  • Flags (indicadores). Indica varios detalles acerca de la ruta. Los indicadores más importantes son U (la ruta está en funcionamiento), G( se debería usar la pasarela especificada para esta ruta), y H (la ruta es para un host, no para una red). D (instalación dinámica), M (modificada) y R (rehabilitada) son indicadores que advierten que la ruta fue creada o manipulada por un demonio de encaminamiento o después de encontrarse con un mensaje ICMP de redirección. El indicador ¡ señala el rechazo de una ruta.
  • Metric (métrica). Es un índice de calidad para la ruta. Normalmente sólo útil para encaminamiento dinámico.
  • Ref (referencias). No usado por el Kernel de Linux, pero para otros sistemas representa el número de referencias a la ruta.
  • Use (uso). Informa del número de consultas para esa ruta.
  • MSS. Maximum Segment Size (tamaño máximo de segmento). El máximo tamaño de segmento predeterminado para las conexiones TCP en esa ruta.
  • Window (ventana). El tamaño predeterminado de ventana para las conexiones TCP en esa ruta.
  • Irtt. Initial Tound Trip Time ( tiempo para la ronda inicial). El kernel lo emplea para seleccionar valores para determinados parámetros TCP sin tener que esperar a las respuestas potencialmente lentas de los hosts remotos.
  • La salida de netstat –r mostrada anteriormente indica que el sistema tiene rutas para los siguientes destinos:
  • 127.0.0.0: Esta es la ruta para la red de bucle cerrado. Para los kernel Linux de la serie 2.2.x y superiores, esta ruta no es en realidad necesaria. El kernel ya sabe cómo encaminar hacia la red de bucle cerrado.
  • 192.168.1.2: Esta dirección IP está en realidad conectada con la propia interfaz eth0 del sistema. De nuevo, esta ruta no es necesaria, pero se crea durante la inicialización de RedHat.
  • 192.168.1.0. Ésta es una ruta para la red a la que está conectada la interfaz eth0. No se necesita pasarela.
  • 0.0.0.0: Ésta es la ruta predeterminada; se emplea para cualquier datagrama que no haya sido tratado por las otras rutas. Si se omite la opción –n, aparece la palabra default en lugar de los ceros. Esta ruta especifica que los datagramas se envíen al sistema de pasarela 192.168.1.1 para su reenvío a otras redes.

Adición y eliminación de rutas estáticas.

El método más fácil de añadir y eliminar rutas estáticas es emplear alguna herramienta de configuración que venga con nuestra distribución. Sin embargo, a veces es necesario intentar reparar redes en situaciones donde no están disponibles estas herramientas más complejas. Vamos a ver como se hace “manualmente” utilizando el comando route.
El primer argumento del comando route debería ser una de las palabras add o del para indicar que se está añadiendo o borrando, respectivamente, la ruta descrita por los otros argumentos.
La sintaxis de los otros argumentos depende del tipo de la ruta que se esté añadiendo. El caso más sencillo es añadir la ruta predeterminada.
route add defalult gw x.x.x.x
donde x.x.x.x es la dirección IP del hsot que va a reenviar los paquetes. Para que esta ruta sea utilizable debe haber ya otra ruta (normalmente estática) para x.x.x.x. La pasarela puede ser especificada mediante su nombre de host, pero normalmente se emplea una dirección IP numérica.
Para añadir rutas que no son las predeterminadas, el segundo argumento es nomalmente una de las palabras –net –host, para indicar si la ruta es para una red o para un host. Sin embargo, este argumento se puede omitir si la ruta es para un host. El argumento inmediatamente después de estas palabras es la dirección IP de destino. Esto debería ir seguido de la palabra netmasky, a continuación, la máscara de red real para emplear con esta ruta. La máscara de red puede omitirse si se ajusta a la máscara natural para la dirección de destino.
Por último, debe aparecer una indicación de la ruta que tomar para este destino. Si el destino está disponible directamente, se usa la palabra clave dev seguida del dispositivo que hay que emplear como (eth0). Si esta es la última parte de la línea del comando, se puede omitir la palabra dev. Si las rutas para este destino han de ser transmitidas por un sistema que haga las funciones de pasarela, hay que usar la palabra gw con la dirección IP (nombre o número) del sistema de pasarela. Al igual que como sucede para la ruta predeterminada, debe existir previamente una ruta para el sistema de pasarela.
También es posible añadir una ruta de rechazo. Al añadir la palabra reject al final del comando route, se instala una ruta de rechazo que fuerza a fallar la consulta de búsqueda de ruta. Se utiliza para prohibir el enrutamiento a ciertas redes antes de que se llegue a aplicar la ruta predeterminada.

Ejemplos de aplicación del comando route.

  1. route add –net 192.168.1.0 netmask 255.255.255.0 dev eth0

Añade una ruta para la rede 192.168.1.0/24 en el dispositivo eth0, que probablemente, tiene una dirección IP en esa red.

  1. route add default gw 192.168.1.1

Convierte a 192.168.1.1 en la pasarela para reenviar paquetes en la ruta predeterminada.

  1. route add –net 127.0.0.0 netmask 255.255.255.0 lo

Esta es la sintaxis correcta para añadir una ruta a la red de bucle cerrado. Incluso aunque esta ruta sea innecesaria en los nuevos kernels, se incluye este ejemplo porque en el manual de route está incorrecto.

  1. route add –net 10.0.0.0 netmask 255.0.0.0 gw 192.168.1.17

Añade una ruta a la red 1.0.0.0/8, usando como pasarela el sistema con la dirección IP 192.168.1.17. La máscara de red es innecesaria en este caso porque se ajusta a la máscara natural de la red de destino.

esquema