En el intercambio de información entre vecinos IBGP no se envía el número de AS, por lo que el mecanismo para prevenir bucles no se hace efectivo y, por eso una de las reglas de IBGP: no se reenvía una ruta de IBGP si esta viene de otro IBGP. Por eso se necesita lo que se llama "Full-Mesh", es decir, sesiones de todos con todos.
Pero claro, imaginemos que tenemos una red de 100 routers. ¡Tendríamos que configurar 99 sesiones en cada uno de ellos!
Tenemos dos opciones para resolver esto: Route Reflection y Confederations.
Para el JNCIP-ENT, solo se nos exige saber acerca del Route Reflection.
¿Cómo funciona?
- Configuramos un router al que le damos el rol de Router Reflector. A partir de ahora llamamos a estos equipos RR.
- Nos permite reenviar rutas aprendidas de un IBGP a otros IBGP. Sí, sí, se salta la famosa norma de BGP.
- Solo reenvía las rutas activas a sus clientes. Por "clientes" entendemos a los routers que pertenecen al mismo "cluster" de nuestro RR. Los demás routers del cluster ven a nuestro RR como un vecino IBGP más.
- No se cambian ninguno de los atributos, aunque se introducen nuevos para facilitar la prevención de bucles que se envían en los updates. Estos 2 atributos los añade el RR en sus envíos tanto a clientes como a no clientes.
- Cluster List: funciona igual que el AS PATH pero con Clusters. Obviamente se usa en la selección del camino también, es decir, la ruta con menos Clusters ID en el camino es la elegida. Y al igual que en el BGP normal, si un RR recibe una ruta donde aparece su propio Cluster ID,la descarta.
- Originator ID: identifica al primer router que inyecta una ruta en la red del RR y que tiene que ser un cliente de este.
Ejemplo de cómo funciona
- Imaginemos que a un cliente de RR-C, por ejemplo PE-C2, recibe una nueva red desde CE-C2. Entonces PE-C2 le envía el update a RR-C.
- RR-C enviará un update con al nueva ruta tanto a PE-C1 como a RR-A y RR-B
- RR-A y RR-B enviarán un update a sus respectivos clientes
Configuraciones básicas
Solo muestro las configuraciones de una parte de un cluster. En los demás seríalo mismo pero cambiando direcciones.
RR-A
set interfaces ge-0/0/0 unit 0 family inet address 10.0.12.1/30
set interfaces ge-0/0/1 unit 0 family inet address 10.0.13.1/30
set interfaces ge-0/0/5 unit 0 family inet address 10.0.14.1/30
set interfaces ge-0/0/6 unit 0 family inet address 10.0.15.1/30
set interfaces lo0 unit 0 family inet address 172.31.1.1/32
set routing-options router-id 172.31.1.1
set routing-options autonomous-system 1000
set protocols bgp group IBGP-CLUSTER type internal
set protocols bgp group IBGP-CLUSTER local-address 172.31.1.1
set protocols bgp group IBGP-CLUSTER cluster 172.16.1.1
set protocols bgp group IBGP-CLUSTER peer-as 1000
set protocols bgp group IBGP-CLUSTER neighbor 172.31.1.12
set protocols bgp group IBGP-CLUSTER neighbor 172.31.1.11
set protocols bgp group IBGP-RRS type internal
set protocols bgp group IBGP-RRS local-address 172.31.1.1
set protocols bgp group IBGP-RRS peer-as 1000
set protocols bgp group IBGP-RRS neighbor 172.31.1.2
set protocols bgp group IBGP-RRS neighbor 172.31.1.3
set protocols ospf area 0.0.0.0 interface lo0.0 passive
set protocols ospf area 0.0.0.0 interface ge-0/0/0.0
set protocols ospf area 0.0.0.0 interface ge-0/0/1.0
set protocols ospf area 0.0.0.0 interface ge-0/0/5.0
set protocols ospf area 0.0.0.0 interface ge-0/0/6.0
PE-A1
set interfaces ge-0/0/0 unit 0 family inet address 1.1.1.1/30
set interfaces ge-0/0/5 unit 0 family inet address 10.0.14.2/30
set interfaces lo0 unit 0 family inet address 172.31.1.11/32
set routing-options router-id 172.31.1.11
set routing-options autonomous-system 1000
set protocols bgp group CLUSTER type internal
set protocols bgp group CLUSTER local-address 172.31.1.11
set protocols bgp group CLUSTER export CAMBIAR-NEXT-HOP
set protocols bgp group CLUSTER neighbor 172.31.1.1
set protocols bgp group EBGP type external
set protocols bgp group EBGP peer-as 100
set protocols bgp group EBGP neighbor 1.1.1.2
set protocols ospf area 0.0.0.0 interface lo0.0 passive
set protocols ospf area 0.0.0.0 interface ge-0/0/5.0
set policy-options policy-statement CAMBIAR-NEXT-HOP term 1 from route-filter 192.168.0.0/24 exact
set policy-options policy-statement CAMBIAR-NEXT-HOP term 1 then next-hop self
set policy-options policy-statement CAMBIAR-NEXT-HOP term 1 then accept
CE-A1
set interfaces ge-0/0/0 unit 0 family inet address 1.1.1.2/30
set interfaces ge-0/0/1 unit 0 family inet address 192.168.0.1/24
set routing-options autonomous-system 100
set protocols bgp group EBGP type external
set protocols bgp group EBGP export EXPORT-LAN
set protocols bgp group EBGP peer-as 1000
set protocols bgp group EBGP neighbor 1.1.1.1
set policy-options policy-statement EXPORT-LAN term 1 from protocol direct
set policy-options policy-statement EXPORT-LAN term 1 from route-filter 192.168.0.0/24 exact
set policy-options policy-statement EXPORT-LAN term 1 then accept
set policy-options policy-statement EXPORT-LAN then reject
Nota: si tuviéramos más de un Router Reflector en un mismo Cluster, es conveniente configurar el mismo Cluster-ID para todos ellos. Así reducimos el número de rutas.
---------------------------------------------------------------------------------------------------------
A medida que va creciendo la red es posible que se necesite añadir más equipos e incluso ampliar la arquitectura. Puede que la complejidad de nuestra red nos lleve a tener Clusters de RR que sean a la vez clientes de un Cluster más principal:
------------------------------------------------------------------------------------------------------
Dentro de un Cluster, los clientes de este pueden montar sesiones entre sí. Esto no cambia la necesidad que tienen los clientes de montar la sesión o con su RR. Es decir, podemos establecer dentro del propio Cluster una topología de "Full Mesh". Sin embargo, esto haría que los clientes recibieran dos veces las rutas que se generan dentro del propio CLuster, es decir, una copia del cliente y otra del RR. Para evitar esta redundancia podemos configurar en el RR el siguiente comando que haría que no se enviasen a los clientes del RR las rutas generadas dentro del Cluster:
- set protocols bgp group IBGP-CLUSTER no-client-reflect (en RR-A)
Nota: Un RR puede modificar atributos de BGP usando políticas de enrutamiento. Normalmente esto no se hace pero hay que tener cuidado cuando modifiquemos los "next-hops" para las rutas porque podríamos crear enrutamiento ineficiente.
---------------------------------------------------------------------------------------------------------
RFC 3345 - OSCILACIÓN DE PREFIJOS
Esto es un caso que ha sucedido varias veces y ha afectado a los grandes ISP de Internet. Juniper nos describe el caso porque quiere que entendamos la situación para poder evitarla y a la vez aprender bien los fundamentos de BGP.
Nota: recordad que la métrica de MED es mejor cuánto más baja, al igual que la del IGP.
Configuraciones básicas
RR-1
set interfaces ge-0/0/0 unit 0 family inet address 10.0.12.1/30
set interfaces ge-0/0/3 unit 0 family inet address 10.0.13.1/30
set interfaces ge-0/0/4 unit 0 family inet address 10.0.14.1/30
set interfaces lo0 unit 0 family inet address 172.31.1.1/32
set routing-options router-id 172.31.1.1
set routing-options autonomous-system 100
set protocols bgp group RRS type internal
set protocols bgp group RRS local-address 172.31.1.1
set protocols bgp group RRS peer-as 100
set protocols bgp group RRS neighbor 172.31.1.2
set protocols bgp group CLUSTER-1 type internal
set protocols bgp group CLUSTER-1 local-address 172.31.1.1
set protocols bgp group CLUSTER-1 cluster 172.31.1.1
set protocols bgp group CLUSTER-1 peer-as 100
set protocols bgp group CLUSTER-1 neighbor 172.31.1.3
set protocols bgp group CLUSTER-1 neighbor 172.31.1.4
set protocols ospf area 0.0.0.0 interface lo0.0 passive
set protocols ospf area 0.0.0.0 interface ge-0/0/3.0 metric 50
set protocols ospf area 0.0.0.0 interface ge-0/0/4.0 metric 40
set protocols ospf area 0.0.0.0 interface ge-0/0/0.0 metric 10
Nota: he tenido muchos problemas con las sesiones BGP y el envío de rutas. No sé si es por la propia virtualización, por el GNS3, por el procesador que no puede con ello, etc. Pero reinciando equipos, al final se consigue que todos manden la ruta 13.13.13.0/24 como tienen configurado y se puede emular el laboratorio.
-----------------------------------------------------------------------------------------------------------
Nota: recordad que la métrica de MED es mejor cuánto más baja, al igual que la del IGP.
Configuraciones básicas
RR-1
set interfaces ge-0/0/0 unit 0 family inet address 10.0.12.1/30
set interfaces ge-0/0/3 unit 0 family inet address 10.0.13.1/30
set interfaces ge-0/0/4 unit 0 family inet address 10.0.14.1/30
set interfaces lo0 unit 0 family inet address 172.31.1.1/32
set routing-options router-id 172.31.1.1
set routing-options autonomous-system 100
set protocols bgp group RRS type internal
set protocols bgp group RRS local-address 172.31.1.1
set protocols bgp group RRS peer-as 100
set protocols bgp group RRS neighbor 172.31.1.2
set protocols bgp group CLUSTER-1 type internal
set protocols bgp group CLUSTER-1 local-address 172.31.1.1
set protocols bgp group CLUSTER-1 cluster 172.31.1.1
set protocols bgp group CLUSTER-1 peer-as 100
set protocols bgp group CLUSTER-1 neighbor 172.31.1.3
set protocols bgp group CLUSTER-1 neighbor 172.31.1.4
set protocols ospf area 0.0.0.0 interface lo0.0 passive
set protocols ospf area 0.0.0.0 interface ge-0/0/3.0 metric 50
set protocols ospf area 0.0.0.0 interface ge-0/0/4.0 metric 40
set protocols ospf area 0.0.0.0 interface ge-0/0/0.0 metric 10
RR-2
set interfaces ge-0/0/0 unit 0 family inet address 10.0.12.2/30
set interfaces ge-0/0/5 unit 0 family inet address 10.0.25.1/30
set interfaces lo0 unit 0 family inet address 172.31.1.2/32
set routing-options router-id 172.31.1.2
set routing-options autonomous-system 100
set protocols bgp group CLUSTER-2 type internal
set protocols bgp group CLUSTER-2 local-address 172.31.1.2
set protocols bgp group CLUSTER-2 cluster 172.31.1.2
set protocols bgp group CLUSTER-2 peer-as 100
set protocols bgp group CLUSTER-2 neighbor 172.31.1.5
set protocols bgp group RRS type internal
set protocols bgp group RRS local-address 172.31.1.2
set protocols bgp group RRS peer-as 100
set protocols bgp group RRS neighbor 172.31.1.1
set protocols ospf area 0.0.0.0 interface lo0.0 passive
set protocols ospf area 0.0.0.0 interface ge-0/0/5.0 metric 120
set protocols ospf area 0.0.0.0 interface ge-0/0/0.0 metric 10
vMX-3
set interfaces ge-0/0/3 unit 0 family inet address 10.0.13.2/30
set interfaces ge-0/0/5 unit 0 family inet
set interfaces ge-0/0/6 unit 0 family inet address 10.0.36.1/30
set interfaces lo0 unit 0 family inet address 172.31.1.3/32
set routing-options router-id 172.31.1.3
set routing-options autonomous-system 100
set protocols bgp group CLUSTER-1 type internal
set protocols bgp group CLUSTER-1 local-address 172.31.1.3
set protocols bgp group CLUSTER-1 export CAMBIAR-NEXT-HOP
set protocols bgp group CLUSTER-1 peer-as 100
set protocols bgp group CLUSTER-1 neighbor 172.31.1.1
set protocols bgp group EBGP type external
set protocols bgp group EBGP peer-as 25
set protocols bgp group EBGP neighbor 10.0.36.2
set protocols ospf area 0.0.0.0 interface lo0.0 passive
set protocols ospf area 0.0.0.0 interface ge-0/0/3.0 metric 50
set policy-options policy-statement CAMBIAR-NEXT-HOP term 1 from protocol bgp
set policy-options policy-statement CAMBIAR-NEXT-HOP term 1 from route-filter 13.13.13.0/24 exact
set policy-options policy-statement CAMBIAR-NEXT-HOP term 1 then next-hop self
vMX-4
set interfaces ge-0/0/4 unit 0 family inet address 10.0.14.2/30
set interfaces ge-0/0/5 unit 0 family inet address 10.0.46.1/30
set interfaces ge-0/0/7 unit 0 family inet address 10.0.47.1/30
set interfaces lo0 unit 0 family inet address 172.31.1.4/32
set routing-options router-id 172.31.1.4
set routing-options autonomous-system 100
set protocols bgp group CLUSTER-1 type internal
set protocols bgp group CLUSTER-1 local-address 172.31.1.4
set protocols bgp group CLUSTER-1 export CAMBIAR-NEXT-HOP
set protocols bgp group CLUSTER-1 peer-as 100
set protocols bgp group CLUSTER-1 neighbor 172.31.1.1
set protocols bgp group EBGP-25 type external
set protocols bgp group EBGP-25 peer-as 25
set protocols bgp group EBGP-25 neighbor 10.0.46.2
set protocols bgp group EBGP-50 type external
set protocols bgp group EBGP-50 peer-as 50
set protocols bgp group EBGP-50 neighbor 10.0.47.2
set protocols ospf area 0.0.0.0 interface lo0.0 passive
set protocols ospf area 0.0.0.0 interface ge-0/0/4.0 metric 40
set policy-options policy-statement CAMBIAR-NEXT-HOP term 1 from protocol bgp
set policy-options policy-statement CAMBIAR-NEXT-HOP term 1 from route-filter 13.13.13.0/24 exact
set policy-options policy-statement CAMBIAR-NEXT-HOP term 1 then next-hop self
vMX-5
set interfaces ge-0/0/5 unit 0 family inet address 10.0.25.2/30
set interfaces ge-0/0/6 unit 0 family inet address 10.0.57.1/30
set interfaces lo0 unit 0 family inet address 172.31.1.5/32
set routing-options router-id 172.31.1.5
set routing-options autonomous-system 100
set protocols bgp group CLUSTER-2 type internal
set protocols bgp group CLUSTER-2 local-address 172.31.1.5
set protocols bgp group CLUSTER-2 export CAMBIAR-NEXT-HOP
set protocols bgp group CLUSTER-2 peer-as 100
set protocols bgp group CLUSTER-2 neighbor 172.31.1.2
set protocols bgp group EBGP-50 type external
set protocols bgp group EBGP-50 peer-as 50
set protocols bgp group EBGP-50 neighbor 10.0.57.2
set protocols ospf area 0.0.0.0 interface lo0.0 passive
set protocols ospf area 0.0.0.0 interface ge-0/0/5.0 metric 120
set policy-options policy-statement CAMBIAR-NEXT-HOP term 1 from protocol bgp
set policy-options policy-statement CAMBIAR-NEXT-HOP term 1 from route-filter 13.13.13.0/24 exact
set policy-options policy-statement CAMBIAR-NEXT-HOP term 1 then next-hop self
vMX-6
set interfaces ge-0/0/5 unit 0 family inet address 10.0.46.2/30
set interfaces ge-0/0/6 unit 0 family inet address 10.0.36.2/30
set interfaces ge-0/0/8 unit 0 family inet address 10.0.68.1/30
set interfaces lo0 unit 0 family inet address 172.31.1.6/32
set routing-options autonomous-system 25
set protocols bgp group EBGP-100 type external
set protocols bgp group EBGP-100 export EXPORT-LAN-MED
set protocols bgp group EBGP-100 peer-as 100
set protocols bgp group EBGP-100 neighbor 10.0.36.1
set protocols bgp group EBGP-100 neighbor 10.0.46.1
set protocols bgp group EBGP-200 type external
set protocols bgp group EBGP-200 peer-as 200
set protocols bgp group EBGP-200 neighbor 10.0.68.2
set policy-options policy-statement EXPORT-LAN-MED term 1 from protocol bgp
set policy-options policy-statement EXPORT-LAN-MED term 1 from route-filter 13.13.13.0/24 exact
set policy-options policy-statement EXPORT-LAN-MED term 1 then metric 100
set policy-options policy-statement EXPORT-LAN-MED term 1 then accept
vMX-7
set interfaces ge-0/0/6 unit 0 family inet address 10.0.57.2/30
set interfaces ge-0/0/7 unit 0 family inet address 10.0.47.2/30
set interfaces ge-0/0/9 unit 0 family inet address 10.0.78.1/30
set interfaces lo0 unit 0 family inet address 172.31.1.7/32
set routing-options autonomous-system 50
set protocols bgp group EBGP-100 type external
set protocols bgp group EBGP-100 peer-as 100
set protocols bgp group EBGP-100 neighbor 10.0.47.1 export EXPORT-LAN-MED-50
set protocols bgp group EBGP-100 neighbor 10.0.57.1 export EXPORT-LAN-MED-1
set protocols bgp group EBGP-200 type external
set protocols bgp group EBGP-200 peer-as 200
set protocols bgp group EBGP-200 neighbor 10.0.78.2
set policy-options policy-statement EXPORT-LAN-MED-1 term 1 from protocol bgp
set policy-options policy-statement EXPORT-LAN-MED-1 term 1 from route-filter 13.13.13.0/24 exact
set policy-options policy-statement EXPORT-LAN-MED-1 term 1 then metric 1
set policy-options policy-statement EXPORT-LAN-MED-1 term 1 then accept
set policy-options policy-statement EXPORT-LAN-MED-50 term 1 from protocol bgp
set policy-options policy-statement EXPORT-LAN-MED-50 term 1 from route-filter 13.13.13.0/24 exact
set policy-options policy-statement EXPORT-LAN-MED-50 term 1 then metric 50
set policy-options policy-statement EXPORT-LAN-MED-50 term 1 then accept
vMX-8
set interfaces ge-0/0/3 unit 0 family inet address 13.13.13.1/24
set interfaces ge-0/0/8 unit 0 family inet address 10.0.68.2/30
set interfaces ge-0/0/9 unit 0 family inet address 10.0.78.2/30
set interfaces lo0 unit 0 family inet address 172.31.1.8/32
set routing-options autonomous-system 200
set protocols bgp export EXPORT-LAN
set protocols bgp group EBGP-25 type external
set protocols bgp group EBGP-25 peer-as 25
set protocols bgp group EBGP-25 neighbor 10.0.68.1
set protocols bgp group EBGP-50 type external
set protocols bgp group EBGP-50 peer-as 50
set protocols bgp group EBGP-50 neighbor 10.0.78.1
set policy-options policy-statement EXPORT-LAN term 1 from protocol direct
set policy-options policy-statement EXPORT-LAN term 1 from route-filter 13.13.13.0/24 exact
set policy-options policy-statement EXPORT-LAN term 1 then accept
set policy-options policy-statement EXPORT-LAN then reject
Nota: he tenido muchos problemas con las sesiones BGP y el envío de rutas. No sé si es por la propia virtualización, por el GNS3, por el procesador que no puede con ello, etc. Pero reinciando equipos, al final se consigue que todos manden la ruta 13.13.13.0/24 como tienen configurado y se puede emular el laboratorio.
- El router vMX-8 propaga la ruta 13.13.13.0/24 hacia los equipos vMX-6 y vMX-7
- Estos aplican métricas (MED) diferentes para esa ruta:
- vMX-6 aplica un MED de 100 hacia vMX-3 y vMX-4
- vMX-7 aplica un MED de 50 hacia vMX-4 y una MED de 1 hacia vMX-5
- Los clientes de los RR propagan esta ruta a los RR.
- Ahora RR-1 ve la red 13.13.13.0/24 que le envían tanto vMX-3 como vMX-4. De entre las dos, elige la que le llega desde vMX-4 porque tiene mejor coste del IGP. También vemos que se la propaga a RR-2.
- RR-2 también recibe la red 13.13.13.0/24 desde vMX-5 con un MED de 1 y, por eso es el camino elegido para llegar ella , aunque también la recibe desde RR-1 con un MED de 50 que ha recibido de vMX-4. Además, RR-2 le envía la ruta a RR-1 con el MED de 1.
- Ahora RR-1 tiene que comparar 3 caminos para llegar a la red 13.13.13.0/24. Según el algoritmo de selección del camino de BGP, RR-1 elegirá el camino que va a través de RR-2 y vMX-5 debido a que tiene una métrica MED más baja (1). Sin embargo, la ruta elegida es la que viene a través de vMX-3 debido a la mejor métrica total del IGP (50 comparada con 130). Hay que tener en cuenta que cuando una misma ruta viene de 2 AS diferentes la MED no se considera a la hora de elegir el camino.
- Por lo tanto RR-1 le enviará a RR-2 la ruta 13.13.13.0/24.
- En este punto, RR-2 compara los camino y prefiere antes, debido a la métrica IGP, el que va a través de RR-1 y vMX-3 que el que va a través de vMX-5 (60 contra 120)
- Entonces, esto hace que RR-2 deje de propagar el camino para llegar a la 13.13.13.0/24 a través del equipo vMX-5, por lo que RR-1 entonces elegirá el camino a través de vMX-4 gracias a la métrica de IGP que es mejor que la de vMX-3 volviendo otra vez a la situación original y repitiéndose el ciclo otra vez.
Tarda unos segundos en cambiar las rutas. Fijaos en los tiempos |
Algunas recomendaciones que se dan es usar el "always-compare-med", "add-path" o asegurarse que la métrica entre routers que están en diferentes clusters es más alta que la métrica entre routers del mismo cluster.
Vamos a aplicar el comando "always-compare-med" en RR-1:
- set protocols bgp path-selection always-compare-med
Después de meter el comando vemos que al usar el MED, el camino elegido es el que va a través de RR-2
Bien, ahora vamos a probar la solución "add-path". Eliminamos la línea de configuración de "always-compare-med".
Cuando usamos "add-path", podemos decirle a un equipos si queremos que reciba, envíe o ambas cosas a la vez. Esta opción nos permite configurar un número de caminos que queremos propagar que va de enrte 2 y 6 (en nuestro escenario sabemos que son 3 caminos posibles). Además, podemos usar un "prefix-policy" (política de prefijos) para controlar exactamente las redes que queremos distribuir con esta opción.
Configuramos "add-path" con política para recibir todo y para enviar 3 caminos posibles de la red 13.13.13.0/24 tanto en RR-1 como en RR-2.
root@RR-X# show | compare
[edit protocols bgp]
family inet {
unicast {
add-path {
receive;
send {
prefix-policy REDES-ADD-PATH;
path-count 3;
}
}
}
}
[edit]
policy-options {
policy-statement REDES-ADD-PATH {
term 1 {
from {
route-filter 13.13.13.0/24 exact;
}
then accept;
}
}
}
Y vemos como ahora ambos equipos tienen las 3 rutas y ya no hay oscilación de la red 13.13.13.0/24
No hay comentarios:
Publicar un comentario