lunes, 31 de agosto de 2015

BGP Communities en Mikrotik. Que son y para que (me) sirven.


Cuando publicas un rango con BGP bajo tu AS, hay un par de parámetros que te permitirán controlar por que proveedor te llega ese tráfico (siempre que tengas mas de uno, claro). Normalmente ajustando el AS-PATH (prepend) puedes controlar cuantas veces publicas tu propio AS sobre cada proveedor. Así, en teoría fuerzas la entrada de tráfico hacia tu rango por tu operador favorito (que puede ser con el que mas capacidad tengas contratada, o con el que menos dinero te cueste pasarle tráfico)
*Imagen 1. Captura del looking glass de Cogent donde se ve mi AS aumentado 4 veces



Es problema es que no siempre esto será suficiente para encaminar el tráfico por donde nosotros queremos. Existen casos en los que nuestros proveedores u otros proveedores de tránsito, modifican su "local-preference" para forzar su salida por otros de sus caminos posibles. Y en BGP,  el parámetro "local-preference" tiene preferencia sobre "as-path". Por lo tanto, por mucho que modifiquemos nuestro as-path, el tráfico se dirigirá hacia el peer que tenga mayor local-pref configurado en el router del operador de tránsito.
*Imagen 2. Captura con un ASPATH mas largo que el anterior (7 saltos) pero un mayor localpref (135)

En esta captura se puede apreciar como es elegido este camino (vía AS6739), aún no siendo el camino con el as-path mas corto (mi AS está aumentado 6 veces, y por el operador del ejemplo anterior 4).  Es así debido a que tiene un valor "localpref" de 135 y en la captura anterior era de 130.

¿Y como arreglo esto?, ¿como puedo influenciar el tráfico en los operadores de tránsito para que vaya por donde yo quiero?.  En este caso, las capturas son de Cogent, y yo NO tengo relación comercial con Cogent (y mucho de mi tráfico acaba pasando por el). Por lo tanto, necesito poder influir de alguna manera en la decisión que toma Cogent (o cualquier otro) con el tráfico dirigido hacia mi. Necesito cambiar su localpreference. ¿Como lo hago?. Con los Communitys de BGP.

Los community se utilizan para indicar algunas opciones predefinidas sobre como tratar tu tráfico en los AS de tránsito. Evidentemente, estas opciones las ha predefinido el AS de tránsito en cuestión. Normalmente tienen publicado algún documento donde detallan las opciones que les puedes mandar, e indican que acciones ejecutaran si le pasamos esas opciones. Los community se componen de dos partes. En la primera pondremos el AS sobre el cual queremos influir (174 el caso de Cogent), seguido de dos puntos " : " y a continuación el valor deseado. Este valor lo extraemos de la documentación que publica el operador de tránsito.  En el caso de Cogent, el documento es este (1).

Siguiendo con el ejemplo de Cogent, y tras lectura del manual, vemos que para aplicar un local-preference de 135 (mayor que el que toma por defecto si no se indica nada), debemos publicarle desde nuestro peer BGP el community 174:135.
*Imagen 3. Extracto del "Cogent Customer User Guide" donde se indican algunos valores de BGP community para este AS

Si nos fijamos en la imagen anterior (imagen 2), en el apartado communities, veremos que aparece en primer lugar el community 174:135. Por lo tanto, y como bién indica el manual del operador, el router aplica a este peer un "localpref" de 135, por lo tanto, este es el camino activo aún teniendo un as-path superior al ejemplo de la imagen 1. En Mikrotik, configuramos lo communities en el mismo sitio que los prepend. En los filtros de BGP. 

/routing filter
add action=accept chain=OUT_BGP_MI_PROVEEDOR prefix=xx.xxx.xx.xx/22 prefix-length=22-24 set-bgp-communities=174:135 set-bgp-prepend=6


*Imagen 4 . Pantalla del Winbox donde configuramos el as-path y el community.

Prácticamente todos los carriers grandes publican sus guias con los Communities que aceptan. Aunque algunos indican que solo los puedes utilizarlos si tu, o tu proveedor upstream es cliente de ellos.  En este enlace (2) puedes encontrar un buen listado de los "user guides" de los proveedores de tránsito. Además, también están publicados en la base de datos de RIPE (3), aunque a mi personalmente me cuesta bastante leerla.

Apoyándose en herramientas como el Torch de Mikrotik para descubrir la llegada de tráfico por un camino "no preferido", herramientas web BGP como la de Hurricane Electric (4)  para averiguar y trazar el AS de origen de ese tráfico, los distintos looking glass de los operadores de tránsito para ver como se trata el tráfico hacia ti en cada uno de esos saltos de AS, y las configuraciones de BGP con AS-PATH y BGP Communities en Mikrotik, podremos ajustar muchísimo el camino que usan los paquetes por todo Internet hasta llegar a nosotros.

Nota. Soy un simple usuario de Mikrotik, con poca experiencia en BGP, por lo que SEGURO que este documento es muy mejorable y está plagado de errores. A cualquiera de ellos que los encuentre le animo a corregirlos, ya que con ellos me ayuda a mi y a cualquiera que este pueda servirle de guía. Lo he redactado por simple placer personal y para contribuir a la documentación de BGP para Mikrotik, ya que claramente la documentación al respecto es escasa, y eso alimenta el mito que muchas veces he escuchado diciendo que "Con Mikrotik no puedes hacer BGP" o "Mikrotik no soporta Full Routing". Yo lo tengo hecho con 3 proveedores, cada uno de ellos en puntos distintos de mi red, y hasta el momento estoy mas que contento.



Enlaces:
1  http://cogentco.com/files/docs/customer_service/guide/global_cogent_customer_user_guide.pdf
2  http://onestep.net/communities/
3  https://www.ripe.net/
4  http://bgp.he.net/