lunes, febrero 26, 2007

Configuración avanzada de TCP/IP en Linux (VI): Tablas de rutas

La parte más interesante de la configuración de Linux es la tabla de rutas. Normalmente, la tabla de rutas se ha manipulado en los Unix tradicionales a través del comando route, y para obtener información de la misma se usaba netstat -rn.

Realmente, lo primero que cabe decir es que estas dos utilidades actúan sobre la tabla de rutas denominada main. Linux puede tener hasta 32762 tablas de rutas, cada una de ellas identificada por un número o por un nombre asociada al mismo (que se resuelve a través del fichero /etc/iproute2/rt_tables). Existen tres tablas de rutas predefinidas:

  • local. Tiene asignado el número de tabla 0.Esta tabla es mantenida por el kernel y no debe de tocarse por el usuario. Esta tabla se encarga de manejar las rutas hacía direcciones locales del sistema y las de broadcasting
  • main. Tiene asignado el número de tabla 32766. Esta es la tabla principal de rutado. Se maneja con la utilidad route o con ip route sino se especifica la tabla sobre la cual se trabaja.
  • default Tiene asignado el número de tabla 32767. Esta tabla se encarga de procesar todas aquellas rutas que no hayan sido tratadas anteriormente.
Como vemos, cada tabla tiene asignada un número que indica su prioridad. A la hora de decidir qué debe de hacerse con un paquete, estas estructuras se recorren de menor prioridad a mayor hasta dar con una entrada que sea capaz de mandar el paquete.

Una entrada en la tabla de rutas viene definida por una serie de parámetros. Los más básicos son un prefijo que define el destino (normalmente dado en forma de una red y máscara) y un parámetro que indica cual es el siguiente salto que debe de tener la ruta (el siguiente salto viene definido por el dispositivo, dirección ip y un parámetro de peso de la ruta, útil en caso que queramos usar un balanceo de carga). Aparte podemos establacer un campo ToS - type of service - para poder elegir una ruta determinada (por ejemplo, se pueden marcar los paquetes para posteriormente usar una ruta u otra en función de este valor), puede usarse una metríca para la ruta o una preferencia.

Aparte, una entrada puede modificar ciertos aspectos de una comunicación en caso de que un paquete use una entrada de la tabla de rutas determinada.

Las entradas de cada una de las tablas describen como debe de encaminarse los paquetes hacía un destino determinado. En Linux soporta las siguientes tipos de rutas:

  • Rutas unicast: Es una entrada normal de ruta. Indica hacía donde tiene que ir un paquete determinado
  • Rutas blackhole: Se se selecciona una entrada de este tipo para rutar el paquete, se descarta sin más
  • Rutas prohibit: En este caso se descarta el paquete y se manda a la dirección origen del mismo un paquete ICMP indicando que la ruta está prohibida
  • .
  • Rutas local: Rutas locales. Cualquier paquete que selecciones una ruta de este tipo, lo mandará de vuelta al host local y se entregará de manera local.
  • Rutas broadcast: En este caso el destino es una ruta de difusión. El paquete se enviará encapsulado en una trama de difusión en el nivel de enlace.
  • Rutas throw: Se utiliza para parar la búsqueda de entradas en la tabla de rutas. En caso de llegar a una entrada de este tipo, el paquete se descarta.
  • Rutas nat: Han sido eliminadas en el kernel 2.6.x, con lo cual no voy a hablar de ellas.
  • Rutas anycast: No están implementadas. Se debería comporta como rutas locales.
  • Rutas multicast: Se usa para rutar paquetes multicast.

Por otra parte en la tabla de rutas cada una de las mismas puede haber sido instalada por un protocolo determinado. Los protocolos están identificados por un valor numérico, y por otra parte existe una serie de valores definidos:

  • redirect: La ruta ha sido instalado por un ICMP redirect.
  • kernel: La ruta ha sido instalada por el núcleo durante el proceso de autoconfiguración.
  • boot: la ruta la ha instalado los scripts de inicio del sistema. En caso de que se arranque un daemon de rutado, las debe de borrar.
  • static: La ruta ha sido instalada por un administrador de sistemas. Estas rutas deben de ser respetada por los daemons de rutado. En función de la configuración de los mismos, podrá anunciarlo a otras máquinas que participen en el algoritmo de rutado.
  • ra: La ruta ha sido instalada por el algoritmo de descubrimiento de routers
Esta información se encuentra en el fichero /etc/iproute2/rt_protos

Technorati Tags: ,

No hay comentarios: