21 de julio de 2007

5 puntos a considerar en la configuración de BGP sobre Cisco IOS

BGP v.4 es el protocolo de enrutamiento implementado en Internet.
Pero también es el protocolo implementado en muchos casos en el borde con la red del ISP en las redes corporativas. Esto ocurre, usualmente, cuando la empresa tiene múltiples conexiones a Internet y requiere publicar un conjunto de direcciones públicas.
Ya consideré en un artículo anterior una breve introducción a BGP 4, y también he publicado un libro en el que reviso en detalle la implementación a nivel corporativo de este protocolo. En este artículo quiero sencillamente repasar, de modo sintético algunos puntos básicos.

Si en un router que corre BGP ejecutamos el comando show running-config begin bgp, podemos obtener un resultado semejante a este:

Router_1#show running-config begin bgp

router bgp 12345
no synchronization
bgp log-neighbor-changes
bgp dampening
network 200.113.134.0
neighbor 201.15.15.1 remote-as 6789

neighbor 201.15.15.1 description Provider1
neighbor 201.15.15.1 password 7 09823490822093482F
neighbor 201.15.15.1 update-source Loopback1
neighbor 201.15.15.1 version 4
neighbor 201.15.15.1 route-map Provider1 out
neighbor 195.16.16.2 remote-as 5678
neighbor 195.16.16.2 description Provider2
neighbor 195.16.16.2 password 7 09823490822093482F
neighbor 195.16.16.2 update-source Loopback1
neighbor 195.16.16.2 version 4
neighbor 195.16.16.2 weight 50

Como se puede apreciar, se trata de un router conectado a dos service providers diferentes (los neighbor pertenecen a dos sistemas autónomos diferentes). Cada una de las conexiones está asegurada con autenticación de las actualizaciones del protocolo, y están identificadas utilizando el comando description para identificar claramente cada conexión.
A partir de esto, hay 5 puntos a tener en cuenta:
¿Qué es el número de sistema autónomo?
En BGP cada número de sistema autónomo identifica un dominio de enrutamiento diferente, lo que es equivalente a un dominio que controla un conjunto de routers y redes.
En este caso tenemos 3 sistemas autónomos. El de la empresa: 12345; y los de los 2 ISPs: 5678 y 6789. El número de sistema autónomo identifica unívocamente a una red enla nube de Internet.
En BGP los sistemas autónomos son además los que definen la ruta que ha de seguir un paquete, ya que BGP es un protocolo de "ruta-vector" o "vector ruta". BGP selecciona como mejor ruta la ruta que atraviesa menor cantidad de sistemas autónomos.
Los números de sistemas autónomos son asignados por el ARIN.
¿Qué es lo mínimo necesario para que comience a operar BGP?
Lo mínimo que se requiere para que comience a operar BGP en un router, es la declaración del vecino o neighbor con el que este router debe establecer una relación de adyacencia para comenzar el intercambio de información. Junto con la declaración del vecino, debe indicarse la ruta (sistema autónomo) en el que ese vecino se encuentra. De este modo la configuracion mínima podría ser:

router bgp 12345
neighbor 201.15.15.1 remote-as 6789


Adicionalmente, cuando se requiere, además de aprender rutas, publicar una red en la Internet, el comando a agregar es

network 200.113.134.0

Este último comando, en el caso de BGP, indica cuál es la red que se desea publicar.
Hay una serie de comandos adicionales, entre ellos, el que permite asegurar el intercambio de información BGP utilizando encriptación MD5.
¿Cuáles son los comandos show más utilizados?
Hay 2 comandos show que son habitualmente utilizados en redes BGP:
  • show ip bgp summary
    Muestra el estado de cada una de las adyacencias BGP establecida con los routers vecinos.
  • show ip bgp
    Muestra todas las rutas recibidas desde los routers BGP peers.
¿Qué métrica utiliza BGP?
BGP considera como mejor ruta la ruta de sistemas autónomos más corta.
Para comprender esto hay que tener en cuenta que una ruta BGP, no está compuesta por una serie de saltos IP, sino por una sucesión de sistemas autónomos que se deben atravesar para llegar a la red destino.
Adicionalmente, BGP complementa esta selección considerando una serie de parámetros más complicados que es preciso tener en cuenta. Para tener una visión completa de este proceso, sugiero revisar este documento de Cisco.
¿Qué significa el comando no synchronization?
Este es uno de los comandos BGP que genera más confusión.
Por defecto, BGP publica solamente redes que se corresponden con una ruta interna presente en la tabla de enrutamiento del ruter.
Aún cuando declare una red con el comando network, si en la tabla de enrutamiento no hay una una ruta hacia esa red, la misma no se publicará.
A eso apunta el comando synchronization. A publicar exclusivamente redes con las cuales está en condiciones de comunicarse uitlizando una ruta aprendida por un protocolo de enrutamiento interior. Es por esto que en muchos casos se deshabilita, pues es posible que no se esté utilizando un protocolo de enrutamiento interior.
Bibliografía sugerida:
Enrutamiento BGP Básico - Oscar Gerometta
¿Tenés alguna información u opinión para aportar en este tema....?
Perfecto!!!! agregá un comentario con el detalle.
Muchas gracias.
Oscar Gerometta

32 comentarios:

  1. EXCELENTEE ME HAS DADO UNA IDEA EN 10 MINUTOS DE ESTE MARAVILLOSO PROTOCOLO

    ResponderBorrar
  2. Entonces si desactivo la sincronización para que el router publique al resto del mundo las redes que desea que se conozcan ¿que criterio se debe cumplir? ¿Podría publicar cualquier red que yo quiera? ó ¿tiene que conocerla por iBgp?

    ResponderBorrar
  3. Si, puedes publicar cualquier red con la única condición de definir la network y contar con una entrada en la tabla de enrutamiento que coincida, y que puede ser definida como una ruta estática a la Null0, por ejemplo.

    ResponderBorrar
    Respuestas
    1. Pero si desactivo la sincronización ¿también debe estar en la tabla de enrutamiento? entonces no veo la diferencia entre desactivar la sincronización y no hacerlo. Gracias.

      Borrar
    2. Siempre la ruta debe estar en la tabla de enrutamiento. Si no tengo ruta en la tabla de enrutamiento la red no se publica.
      La sincronización hace que la publicación dependa de tener una ruta aprendida por el IGP. Al deshabilitar la sincronización se tiene control exclusivamente manual de la publicación.

      Borrar
    3. Gracias por tu respuesta Oscar, pero sigo sin ver la diferencia.

      Borrar
    4. Sugerencia: un laboratorio para ver la diferencia.

      Borrar
  4. ¿Que función realiza el router id? Porque aunque no se configure al menos en Cisco le asigna uno. Pero si yo establezco la vecindad con una ip distinta a la del router id, ¿que información aporta el router id?

    ResponderBorrar
    Respuestas
    1. El router ID es solamente un identificador del dispositivo que genera información de actualización, y no tiene ninguna relación con la identificación del "neighbor" que es la IP sobre la cuál se levanta el circuito de TCP sobre el que se realizará el intercambio de información.

      Borrar
    2. No es suficiente identificación con la ip del neighbor no identifica al dispositivo con la ip con la que establece la vecindad que es necesario in router id que puede ser incluso la misma ip, ¿no?

      Borrar
    3. Pues... operativamente no es necesario configurar un router ID, sino que podemos dejar que IOS asuma uno por defecto.
      Pero el protocolo establece la necesidad de un ID que identifique al dispositivo en sí, más allá de las direcciones IP de las interfaces que podrían cambiar.

      Borrar
  5. Me gustaría saber si ¿cuando se hace un cambio en la configuración de BGP, por ejemplo, añadir un filtro para permitir recibir nuevos anuncios o bien cuando se cambia o añade algún atributo, por ejemplo, para elegir otro camino es necesario hacer un clear ip bgp * in o out para que lo actualice o se actualizará sólo según los timers?

    ResponderBorrar
    Respuestas
    1. BGP no realiza actualizaciones periódicas, por lo que al aplicar filtros a la publicación o aprendizaje de rutas hay que forzar la publicación o aprendizaje nuevamente ya que de lo contrario los filtros agregados no se aplican a la información existente.
      Para esto hay algunos mecanismos menos agresivos que el clear ip bgp, con un efecto semejante.

      Borrar
    2. Gracias, se que el clear ip bgp simplemente "rompería" la sesión tcp pero con el in y el out no es así (por mi experiencia), tampoco con el soft in o out. Pero no se si hay otras distintas además de las que indico. Por otra parte he leído que si actualiza cuando hay un cambio en la tabla de routing pero supongo que esto no afectara a los filtros o la modificación de los atributos para elegir el camino, por ejemplo.

      Borrar
    3. Efectivamente, BGP realiza notificaciones cuando hay cambios en la tabla de BGP. Pero esas notificaciones son incrementales, es decir, solamente comunican el cambio. Por lo tanto no se puede descansar en este tipo de actualizaciones en cambios en atributos o en la aplicación de filtros

      Borrar
    4. Suponiendo que se haya realizado un cambio en un filtro y que no se haya pasado aplicado el filtro en ese momento a posteriori ¿Hay algunas de las tablas de bgp que te pueda indicar que ese filtro esta pendiente? Es decir que no aparezca en la tabla de routing porque no se ha aplicado el filtro pero si lo haga en otra. He visto algún caso en el que no se ha aplicado en el instante y después se ha tardado en tiempo en detectar que había que "refrescar" el bgp.

      Borrar
    5. Si no se forzó a que el proceso de BGP "aprenda" o "publique" según sea el caso del filtro aplicado, que yo conozca, ninguna de las tablas de BGP muestra el filtro ya que ese filtro se aplica antes o después del proceso de BGP, no es parte del proceso mismo.

      Borrar
  6. Estimado Oscar, no logro comprender del todo el comando network en BGP, siempre tenemos que publicar las redes que tenemos conectadas? en el ejemplo que pusiste no estarias publicando la red 201.15.15.1?

    ResponderBorrar
    Respuestas
    1. Carlos
      BGP como protocolo de enrutamiento exterior opera de modo diferente que los protocolos de enrutamiento interior como OSPF o RIP.
      En este caso el comando network tiene un significado completamente diferente.
      En primer lugar, en una red BGP no todos los dispositivos publican rutas. Consecuentemente la activación del protocolo en un dispositivo no supone que se estén publicando las redes directamente conectadas al mismo. Todo lo contrario, un dispositivo BGP aprende rutas, participa del intercambio de información y por defecto no publica ninguna ruta.
      Para publicar rutas es necesario utilizar el comando network (que en este contecto tiene una función diferente que en los protocolos de enrutamiento interior). Ahora bien, la publicación de rutas tiene un conjunto de reglas específicas que no es este el lugar, pero para responder a tu pregunta, ante todo no es necesario que se trate de una red directamente conectada (se puede publicar cualquier red), pero es condición que exista una ruta hacia ese destino en la tabla de enrutamiento del dispositivo.

      Borrar
  7. Cuando se publica un prefijo mediante el comando network ¿el prefijo se publica inmediatamente o sería necesario forzar su publicación con un soft reset por ejemplo?

    ResponderBorrar
    Respuestas
    1. Al agregar una nueva "network" a la configuración de BGP, si hay una ruta que la respalde en la tabla de enrutamiento, se publicará automáticamente a todos los BGP peers sin necesidad de un reset.

      Borrar
  8. Consulta, existe alguna manera en BGP de "monitorear" un vinculo en base a la cantidad de rutas aprendidas? Esto es porque si el vinculo esta vivo pero no se reciben rutas no conozco forma de alarmar dicho evento. Gracias.

    ResponderBorrar
    Respuestas
    1. En primer lugar, BGP como protocolo de enrutamiento lo que monitorea son vecinos (peers BGP), no enlaces. Como la sesión de BGP utiliza un circuito TCP ese circuito puede haber sido levantado a cualquier enlace.
      En otras palabras, el protocolo de enrutamiento no es la mejor manera de monitorear un vínculo.
      Con esa salvedad, el monitoreo de la cantidad de prefijos IP intercambiados con cada peer BGP se puede verificar utilizando el comando show ip bgp neighbor.

      Borrar
    2. Ok, y tendría alguna forma de por ejemplo que automáticamente la interface de mi equipo haga shutdown si no se aprenden prefijos, o se aprenden menos de x cantidad de prefijos. Gracias.

      Borrar
    3. Como dije antes, el protocolo de enrutamiento no monitorea estado de interfaces.
      En segundo lugar, estamos hablando de BGP que opera sobre TCP y por lo tanto las sesiones BGP pueden operar contra dispositivos que no están directamente conectados. Por otra parte BGP puede pasar períodos muy largos sin enviar prefijos ya que no tiene actualizaciones periódicas. No recibir prefijos solamente indica que no ha habido cambios en la red.
      ¿Cuál sería el objeto de bajar una interfaz porque no registra tráfico de actualizaciones BGP?
      En algunos casos se utiliza BGP solamente para aprender rutas por defecto hacia el ISP.

      Borrar
    4. Entiendo. El problema que se me presenta es que nosotros monitoreamos peers bgp para identificar si el vinculo esta o no arriba.
      Ahora bien, si el peer esta arriba pero se dejan de aprender prefijos no tengo manera de enterarme dicho suceso automaticamente. Me explico?

      Borrar
    5. Quizás no me expresé con claridad antes.
      Monitoreando peers BGP no vas a tener referencia del estado de las interfaces.
      Además, en la operación de BGP es completamente normal que no aprendan prefijos por largos períodos de tiempo, con lo que si no recibes prefijos por BGP no se puede inferir por lo mismo que el peer está caído o la interfaz no está operativa. Simplemente significa que no hay actualizaciones.
      BGP no opera como otros protocolos (EIGRP, OSPF), que actualizan periódicamente. En el caso de BGP se intercambian prefijos en el momento de establecer la adyacencia y a partir de allí no hay intercambio de información de enrutamiento salvo que se verifique algún cambio. Si "se dejan de aprender prefijos" de un peer, esto no significa que el vínculo está caído y es una situación completamente normal en BGP.
      Por eso no tienes modo de enterarte automáticamente.

      Borrar
    6. Ok. Gracias como siempre..

      Borrar
  9. buen dia Oscar, consulta, según tu ejemplo

    router bgp 12345
    neighbor 201.15.15.1 remote-as 6789

    la ip 201.15.15.1 es la del router vecino? o es una de las ip de mi rango con la cual voy a establecer esa vecindad?

    Gracias

    ResponderBorrar
    Respuestas
    1. La IP que se indica en el comando neighbor es la dirección IP de destino a las que se envían los diferentes paquetes BGP. Consiguientemente es la que se utiliza para establecer la relación de adyacencia con cada vecino BGP con el que intercambiará información.
      Normalmente es la dirección IP de una interfaz física o loopback del vecino BGP.

      Borrar
    2. ahhh ok GRACIAS, te consulto porque donde trabajo tenemos tls capa 3 con routing bgp
      y en el router A declaran como neighbor
      una ip perteneciente al /30 de una interface de ese mismo router A
      y en el router B el neighbor tambien es una ip de otro /3o de
      una interface del router B

      Saludos

      Borrar
    3. No he visto implementaciones de ese tipo.
      El uso regular del comando network es el que describí en el post.

      Borrar

Gracias por tu comentario.
En este blog los comentarios están moderados, por lo que su publicación está pendiente hasta la revisión del mismo.