Contenidos
Ruteo estático vs. ruteo dinámico
Rutas por defecto
Configurando los nodos
Caso 1: Redes sin segmentación interna
Caso 2: Redes segmentadas
Opciones al comando route
Ruteo estático vs. ruteo dinámico
Rutas por defecto
Configurando los nodos
Caso 1: Redes sin segmentación interna
Caso 2: Redes segmentadas
Opciones al comando route
Como se describió
previamente, la principal responsabilidad del protocolo IP es determinar qué
camino deben tomar los paquetes para llegar al punto de destino. La tarea de
determinar ese camino es lo que se conoce como ruteo (o encaminamiento).
IP asume que la
computadora está directamente conectada a una red local (por
ejemplo, una LAN Ethernet) y que puede enviar paquetes directamente a cualquier
otra computadora sobre esa misma red; si la dirección de destino es en la red
local, IP simplemente accede al medio físico de transmisión y envía el paquete.
En la figura siguiente, Antares y Rigel están
sobre la misma red, por lo que pueden comunicarse directamente:
El problema aparece
cuando la dirección de destino queda en otra red, en cuyo caso IP recurrirá a
un gateway para enviar indirectamente los paquetes. Como se
recordará, se denomina gateway19 a un dispositivo (ya sea otra
computadora o un dispositivo específicamente diseñado a tal efecto) que está
conectado a más de una red y tiene la capacidad para redirigir (forward)
paquetes entre esas redes. En la figura, Orión,Andrómeda, Cygni y Centauri son
los gateways de la red.
Para determinar a qué
gateway deberán enviarse los paquetes, IP extrae la dirección de red del nodo
de destino y consulta una tabla, denominada tabla de ruteo, en la
cual se listan las redes conocidas y los gateways que pueden utilizarse para
alcanzarlas. Por ejemplo, la tabla de ruteo de Aldebarán contiene
la siguiente información:
Red
|
Gateway
|
170.25.1.0
|
170.25.3.254
|
170.25.2.0
|
170.25.3.254
|
170.25.3.0
|
*
|
170.25.4.0
|
170.25.3.253
|
en donde el asterisco
indica que no es necesario ningún gateway para llegar a la red en cuestión dado
que la máquina tiene conexión directa a la misma. Obsérvese en primer lugar que
el ruteo hacia redes remotas se realiza en base a direcciones de red (esto es,
la parte de host de la dirección IP se ignora); además, la tabla de ruteo
especifica tanto la red local como las remotas, y que para el caso de éstas
últimas, indica la dirección IP de alguna máquina en la red local que puede ser
utilizada para alcanzarla.
Supongamos, por
ejemplo, que Altair requiere enviar datos a Canopus. El
módulo IP de Altair determina que la computadora de destino no
pertenece a su misma red; consultando su tabla de ruteo, determina que puede
llegarse a la red de Canopus a través de Orión,
por lo que le envía los paquetes a dicha computadora. El módulo IP residente en Orión,
por su parte, sabe que para llegar a Canopus hay dos vías
posibles: pasando por Andrómeda o por Cygni.
Aplicando algún criterio para evaluar ambas rutas y seleccionar la mejor de
ellas, Orión envía cada paquete a, por ejemplo, Andrómeda.
Esta última determina que la dirección de destino está en una de las redes a
las que se encuentra directamente conectada, por lo que los envía diretamente a Canopus.
Es importante
observar que la ruta que seguirán los paquetes desde el origen hasta su destino
se va decidiendo a medida que los mismos viajan por la red. Cada nodo es
responsable de determinar cual es el proximo "salto" en
dirección al nodo final, en función del contenido de su tabla de ruteo. Este
modelo de ruteo asume que si el nodo de destino no pertenece a la red local,
deberá haber una entrada en la tabla de ruteo que especifique el gateway a
utilizar. En otras palabras, asume que todos los nodos están al tanto de la
estructura de la red.
En consecuencia, cada
vez que la estructura de la red cambia (por ejemplo, cuando se agrega o elimina
una subred), el administrador debería actualizar las tablas de ruteo en todos
los nodos. Igualmente, si la red se interconectara a otra red, una nueva
entrada debería agregarse en las tablas de ruteo de cada máquina.
Siguiendo con este
razonamiento, a medida que la red crece y se interconecta a otras redes las
tablas de ruteo se hacen mas largas y complejas; inclusive sería posible que
fueran virtualmente imposibles de construir o mantener, en especial si la red
se conecta a Internet (formada por miles de redes independientes).
Por supuesto, existen
previsiones para enfrentar estos problemas: el ruteo dinámico o adaptativo y
las rutas por defecto.
La tabla de ruteo de
un host puede construirse de dos maneras. Una posibilidad consiste en que el
administrador (por medio de scripts que se ejecutan al inicializar el sistema,
o por medio de comandos ejecutados interactivamente) introduzca manualmente las
entradas de la tabla. Esta técnica se denomina ruteo estático,
debido a que la tabla de ruteo se construye cuando la computadora se prende y
no varia con el tiempo.
La otra posibilidad
es ejecutar en cada host un programa que actualice automática y periódicamente
la tabla de ruteo. Dichos programas se basan en el hecho de que una computadora
siempre tiene acceso a otras computadoras conectadas a la red local; esto se
traduce en que las tablas de ruteo contienen inicialmente al menos las
direcciones de las redes locales. Si tomamos por caso a Orión, su
tabla de ruteo inicialmente contendría la siguiente información:
Red
|
Gateway
|
170.25.1.0
|
*
|
170.25.2.0
|
*
|
170.25.3.0
|
*
|
De manera similar, la
tabla de Andrómeda contendrá lo siguiente:
Red
|
Gateway
|
170.25.3.0
|
*
|
170.25.4.0
|
*
|
Si Orión y Andrómeda intercambiaran
sus tablas de ruteo, cada una podría "aprender" de la otra qué
redes son alcanzables por esa vía. Así, Andrómeda podría
concluir lo siguiente:
Red
|
Gateway
|
170.25.1.0
|
170.25.3.254
|
170.25.2.0
|
170.25.3.254
|
170.25.3.0
|
*
|
170.25.4.0
|
*
|
Así, si todos los
nodos de la red ejecutan un programa de estas características (llamado demonio
de ruteo) al cabo de cierto tiempo habrán "descubierto"
por si mismas la estructura de la red y construido sus tablas automáticamente.
Mas aún, si se produjera algún cambio en la estructura de la red, bastaría con
que alguna de las computadoras lo detectara para que en pocos segundos esa
nueva información se propagara por toda la red.
Esta estrategia se
denomina ruteo dinámico o adaptativo y tiene
la ventaja de que, al ser automático, permite eliminar las tareas
administrativas relacionadas con el mantenimiento de las tablas de ruteo.
En ambientes Unix se
dispone de dos programas que implementan este tipo de protocolos de
ruteo: routed y gated.
El uso de ruteo
dinámico elimina la necesidad de modificar las tablas de ruteo cuando la red
cambia. Sin embargo, no resuelve el problema de las abultadas tablas de ruteo
resultantes de conectar una red a muchas otras.
Consideremos la tabla
de ruteo que construiría una máquina como Altair:
Red
|
Gateway
|
170.25.1.0
|
170.25.2.254
|
170.25.2.0
|
*
|
170.25.3.0
|
170.25.2.254
|
170.25.4.0
|
170.25.2.254
|
Como puede verse, Altair ha
aprendido las rutas a todas las subredes de la red, pero el único gateway que
puede utilizar es Orión. De manera similar, si fuera posible que
todas las computadoras de la red del ejemplo aprendieran las direcciones de
todas las redes que forman la Internet, Altair eventualmente
construiría una tabla de ruteo con miles de entradas, en donde todas tendrían a Orión como
gateway. En ambos casos, el resultado es una tabla de ruteo con información
altamente redundante.
Para eliminar este
problema, es que puede instalarse en la tabla de ruteo una ruta por
defecto (conocida también como default gateway). IP
utiliza la ruta por defecto (que se indica con el número 0.0.0.0) cada vez que
no se encuentra en la tabla de ruteo una ruta hacia una red específica.
Aplicando éste criterio, la tabla de Altair se reduciría a lo
siguiente:
Red
|
Gateway
|
170.25.2.0
|
*
|
0.0.0.0
|
170.25.2.254
|
que sencillamente
indica que si la dirección de destino está en la red local, es accesible
directamente, y que en caso contrario (independientemente de cual sea el
destino), los paquetes deberán enviarse a 170.25.2.254 (es decir, Orión).
En este caso, se
tiene una red pequeña, en la que todas las computadoras están ubicadas sobre el
mismo segmento físico y no hay ninguna conexión a otras redes TCP/IP:
Como se puede ver,
todas las computadoras tienen acceso directo a todas las demás. La tabla de
ruteo será mínima; solo contendrá una referencia a la red local y a la red de
loopback instaladas automáticamente por ifconfig al
inicializar las interfaces correspondientes.
Puede utilizarse el
comando route -n para examinar el contenido de la tabla
de ruteo (-n indica a route que
utilice formato numérico):
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
127.0.0.0 0.0.0.0 255.0.0.0 U 0 1 298 lo
205.12.9.0 0.0.0.0 255.255.255.0 U 0 40 1252 eth0
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
127.0.0.0 0.0.0.0 255.0.0.0 U 0 1 298 lo
205.12.9.0 0.0.0.0 255.255.255.0 U 0 40 1252 eth0
En el listado
anterior, la primera columna indica dirección de red (que debe interpretarse de
acuerdo a la mascara de la tercera columna) y la segunda columna indica el
gateway a utilizar (0.0.0.0 se utiliza para indicar que hay conexión directa a
la red en cuestión. Route también muestra información
adicional sobre cada ruta:
Flag: Se compone de
una serie de caracteres que indican las características de la ruta. Por
ejemplo, U indica que la ruta está operacional (por Up), G que es
una ruta a un gateway, H que es una ruta a un host, etc.
Metric: Valor utilizado
para cuantificar la ruta. IP utiliza este valor para seleccionar la mejor de
dos o más rutas alternativas a la misma red.
Ref: Cantidad de
veces que ésta ruta fue utilizada para establecer una conexión.
Use: Cantidad de
paquetes trasmitidos a través de esa ruta.
Si esta misma red se
conectara a otras redes (por ejemplo, la Internet), sería necesario indicar en
cada uno de los hosts de la red una ruta estática por defecto hacia el gateway
a las otras redes:
Las rutas por defecto
puede instalarse en las estaciones por medio del siguiente comando route:
# route add -net default 205.12.9.254
Si ahora se
reexaminara la tabla de ruteo en dichas estaciones, se obtendría el siguiente
resultado:
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
127.0.0.0 0.0.0.0 255.0.0.0 U 0 1 298 lo
205.12.9.0 0.0.0.0 255.255.255.0 U 0 40 1252 eth0
0.0.0.0 205.12.9.254 0.0.0.0 UG 0 0 0 eth0
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
127.0.0.0 0.0.0.0 255.0.0.0 U 0 1 298 lo
205.12.9.0 0.0.0.0 255.255.255.0 U 0 40 1252 eth0
0.0.0.0 205.12.9.254 0.0.0.0 UG 0 0 0 eth0
Obsérvese que Orión interconecta
nuestra red con el exterior, por lo que tiene una dirección en la red local
(170.25.9.254) y otra en la red del proveedor de acceso a la otra red (en este
caso, la Internet). A fin de lograr la conectividad, deberá instalarse en Orión una
ruta por defecto hacia el exterior, utilizando como gateway una dirección que
el proveedor especifique, por ejemplo:
# route add -net default 150.104.3.254
Por otra parte, el
proveedor deberá instalar en sus ruteadores alguna ruta que indique que nuestra
red es alcanzable a través de la dirección 150.104.3.21, cerrando así el ciclo
de entrada y salida a nuestra red.
En este caso, la red
está compuesta por varios segmentos unidos entre sí por gateways. Una primera
opción sería ejecutar un demonio de ruteo dinámico en todas las computadoras, y
dejar que las tablas se actualicen automáticamente. Sin embargo si tal programa
no estuviera disponible (o por alguna razón se decide no emplearlo) bastaría
con instalar en las computadoras de cada segmento una ruta estática por defecto
hacia el gateway Orión, tal como se muestra en la siguiente figura:
Para obtener esta
configuración, en Antares y Rigel habría que
ejecutar el siguiente comando:
# route add -net default gw 170.25.1.254
mientras que en Altair y Aldebarán el
comando sería:
# route add -net default gw 170.25.2.254
No es necesario
instalar manualmente ninguna ruta en Orión, debido a que todas las
necesarias serán instaladas automáticamente por ifconfig.
Sería diferente si la
red tuviera más subredes:
En éste caso, sería
necesario informar a Orión acerca de la existencia de la red
170.25.4.0, y a Andrómeda acerca de las redes 170.25.1.0 y
170.25.2.0. Una vez mas, puede utilizarse el comando route para
instalar las rutas, utilizando la siguiente sintaxis:
# route add -net red netmask máscara gw gateway
Por ejemplo, en Andrómeda habría
que ejecutar los siguientes comandos:
# route add -net 170.25.1.0
netmask 255.255.255.0 gw 170.25.3.254
# route add -net 170.25.2.0 netmask 255.255.255.0 gw 170.25.3.254
# route add -net 170.25.2.0 netmask 255.255.255.0 gw 170.25.3.254
con lo que la tabla
de ruteo quedaría conformada de la siguiente manera:
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
127.0.0.0 0.0.0.0 255.0.0.0 U 0 1 298 lo
170.25.3.0 0.0.0.0 255.255.255.0 U 0 105 11252 eth0
170.25.4.0 0.0.0.0 255.255.255.0 U 0 55 1976 eth1
170.25.1.0 170.25.3.254 255.255.255.0 UG 0 20 841 eth0
170.25.2.0 170.25.3.254 255.255.255.0 UG 0 33 976 eth0
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
127.0.0.0 0.0.0.0 255.0.0.0 U 0 1 298 lo
170.25.3.0 0.0.0.0 255.255.255.0 U 0 105 11252 eth0
170.25.4.0 0.0.0.0 255.255.255.0 U 0 55 1976 eth1
170.25.1.0 170.25.3.254 255.255.255.0 UG 0 20 841 eth0
170.25.2.0 170.25.3.254 255.255.255.0 UG 0 33 976 eth0
Finalmente, si la red
tuviera conexión a redes externas, sería necesario instalar en los gateways una
ruta por defecto que conduzca hacia el gateway al exterior:
En Orión:
# route add -net default gw 170.25.3.253
En Andrómeda:
# route add -net default gw 170.25.4.253
En todos los ejemplos
anteriores se utilizó el comando route para instalar
rutas manualmente en la tabla de ruteo. Sin embargo, al igual que ocurre con ifconfig,
usualmente el administrador no instala las rutas introduciendo comandos
manualmente (o modificando scripts de inicialización del sistema), sino que se
limita a modificar archivos de configuración o utilizar alguna herramienta
gráfica.
En el caso de Red Hat
Linux, la utilidad netcfg que se mencionó con anterioridad puede utilizarse para configurar
la ruta por defecto e instalar rutas estáticas. También pueden realizarse estas
tareas modificando manualmente archivos de configuración network y static-routes respectivamente,
ubicados ambos bajo /etc/sysconfig.
No hay comentarios:
Publicar un comentario