Selección de enrutamiento: especificidad vs métrica

17

Entiendo que Linux elige la ruta más específica hacia el destino cuando selecciona la ruta . Pero, ¿qué pasa con la métrica de una ruta? ¿Tiene una prioridad más alta que la especificidad de la ruta?

También se agradecería una referencia a los detalles del algoritmo de selección de enrutamiento utilizado por Linux.

Eugene Yarmash
fuente

Respuestas:

26

La métrica de rutas es establecer preferencias entre rutas con igual especificidad. Eso es cierto para el enrutamiento en general (es decir, Cisco, Windows, etc.). Entonces el modelo funciona como:

  1. Encuentra la ruta más específica (también conocida como la coincidencia de prefijo más larga * )
  2. Si hay varias rutas con la misma especificidad, elija la que tenga la distancia administrativa más baja (Esto distingue entre cosas como rutas conectadas directamente, rutas estáticas y varios protocolos de enrutamiento).
  3. Dentro de ese protocolo de enrutamiento y ruta específica (si la especificidad de la ruta y la distancia administrativa son las mismas), elija la ruta con la métrica más baja

Tenga en cuenta que hay otras cosas que podrían estar sucediendo en un enrutamiento basado en políticas que le permite hacer cosas como la ruta basada en la dirección IP de origen. Pero la especificidad de la ruta, la distancia administrativa y luego la métrica son las tres cosas principales que consideraría.

* Se llama la coincidencia de prefijo más larga porque se ve una subred en binario (/ 24, por ejemplo) 11111111.11111111.11111111.00000000. Por lo tanto, un enrutador puede escanear el prefijo en busca de 1 binario y detenerse una vez que llegue a cero, y luego ha coincidido con el prefijo.

Kyle Brandt
fuente
1
Eso no es del todo cierto en Linux, donde no hay distinción entre distancia métrica y administrativa.
jch
1
@jch ¿Quagga y compañía? imitar AD estableciendo la métrica en consecuencia? (No es que su punto no sea vital, solo curioso)
Kyle Brandt
1
No, Quagga implementa AD internamente en el zebrademonio y solo envía las rutas seleccionadas al kernel, por lo que el kernel nunca necesita lidiar con AD. Necesitaría verificarlo, pero creo que Quagga establece la métrica del kernel en un valor constante.
jch
Solo quiero mencionar que esto no es cierto en los puentes de ethernet, por ejemplo, dos rutas idénticas a través de diferentes dispositivos con la misma métrica todavía dieron como resultado que el tráfico se desviara a través del enlace más largo e incorrecto.
Areeb Soo Yasir
9

Linux proporciona una serie de herramientas para la selección de enrutamiento flexible.

Tabla de enrutamiento individual

En el caso más simple, solo hay una tabla de enrutamiento del núcleo y ninguna ruta con el atributo SRC. Esta tabla contiene varias rutas, que fueron colocadas allí manualmente ( ip route add), por el demonio DHCP, o por demonios de enrutamiento. En este caso, el núcleo elige:

  • la ruta más específica;
  • si hay varias rutas igualmente específicas, la que tiene la métrica de kernel más pequeña.

Tenga en cuenta que el ip route showdaemon de enrutamiento elige la métrica del núcleo (mostrada por ) y no está necesariamente relacionada con la métrica de ningún protocolo de enrutamiento en particular. Por ejemplo, Quagga usa la misma métrica para todas las rutas que instala en el núcleo, independientemente de la métrica del protocolo.

Rutas específicas de origen

Linux también admite rutas con un atributo SRC que solo coincide con paquetes con una dirección de origen determinada. SRC solo funciona para IPv6, y estuvo defectuoso hasta hace muy poco (3.11, si la memoria sirve); No recomiendo usarlo a menos que sepa lo que está haciendo.

Múltiples tablas de enrutamiento

Si necesita más flexibilidad que la anterior, deberá jugar con varias tablas de enrutamiento y escribir reglas para elegir una tabla de enrutamiento particular para cada paquete. Una técnica común es despachar en la dirección de origen para simular rutas específicas de origen. Otra técnica es ejecutar cada daemon de enrutamiento en su propia tabla de enrutamiento y simular la "distancia administrativa" de Cisco. Todo esto se describe en detalle en el Capítulo 4 de LARTC .

jch
fuente
Eso no es lo que hace el srcatributo. Querrás leer man ip-routeu otros documentos. Y funciona con IPv4. Lo uso para obtener todo el tráfico, incluido el tráfico del enrutador, a través de un único túnel IPSec de red a red.
Zan Lynx
1
El RTA_SRCatributo hace exactamente lo que dije; Se puede acceder con la fromopción del ipcomando. La opción ipdel comando srcestablece el RTA_PREFSRCatributo, que es lo que usted describe.
jch