BGP en Quagga

Quagga

  • Quagga (www.quagga.net) es un software que gestiona la tabla de encaminamiento de una máquina Linux según el funcionamiento de varios protocolos de encaminamiento de la arquitectura TCP/IP.

  • La arquitectura de Quagga está formada por un conjunto de procesos:

    • Proceso zebra: actualiza la tabla de encaminamiento e intercambia rutas según diferentes protocolos de encaminamiento

    • Proceso de cada protocolo de encaminamiento: ripd, opsfd, bgpd

  • Utilizaremos Quagga para probar los siguientes protocolos: RIPv2, OSPFv2 y BGP-4.

Quagga

Configuración y monitorización de los procesos de Quagga

  • Configuración a través de los ficheros:

  • Monitorización a través de:

    • capturas de tráfico, utilizando tcpdump con la opción -s 0 que permite capturar los paquetes completos.

    • Shell VTY (Virtual Terminal Interface) :vtysh (págs. [vtysh-begin]–[vtysh-end]) La Shell VTY se comunica con cada uno de los procesos quagga de la máquina y permite configurar los protocolos de encaminamiento y monitorizar su comportamiento.

Ficheros de configuración

daemons

    # Entries are in the format:   <daemon>=(yes|no|priority)
    # ...
    # ...
    # /usr/doc/quagga/README.Debian for details.
    # Daemons are: bgpd quagga ospfd ospf6d ripd ripngd isisd
    zebra=yes
    bgpd=yes
    ospfd=no
    ospf6d=no
    ripd=no
    ripngd=no
    isisd=no

Las líneas que comienzan por # son comentarios.

bgpd.conf

Para que un router pueda establecer una sesión BGP deberá configurar su fichero bgpd.conf. A continuación se muestra la configuración de r2´:

Sesión BGP en r2

! -*- bgpf -*-
!
! BGPd sample configuration file
!
hostname bgpd
password zebra

router bgp 200
bgp router-id 20.1.0.20

neighbor 20.1.0.10 remote-as 100

redistribute connected

Las líneas que comienzan por ! son comentarios.

Es necesario indicar el número de sistema autónomo al que pertenece el router, en el ejemplo ASN=200 y su identificador (utilizaremos como convenido la dirección IP más alta del router):

router bgp 200
bgp router-id 20.1.0.20

El router tendrá que especificar quién son los routers BGP vecinos con los que establecerá la sesión BGP, en este caso sólo hay un vecino 20.1.0.10 que pertence al sistema autónomo número 100:

neighbor 20.1.0.10 remote-as 100

Se anunciarán por BGP las redes a las que el router está directamente conectado (en este caso: 20.1.0.0/16, 12.1.0.0/16, 12.5.0.0/16). Es equivalente a haber escrito:

network 20.1.0.0/16 
network 12.1.0.0/16 
network 12.5.0.0/16

bgpd.conf: Agregación de Rutas

Utilizando CIDR pueden agruparse varias redes bajo un solo prefijo para optimizar el número de entradas en las tablas de los routers.

En el fichero bgpd.conf se incluirá el comando:

aggregate-address a.b.c.d/prefix summary-only

si una red a anunciar se encuentra incluida en a.b.c.d/prefix, se anunciará a.b.c.d/prefix en vez de dicha red.

Ejemplo:

...
router bgp 200
...
    aggregate-address 12.0.0.0/14 summary-only
...

Agrega las redes 12.0.0.0/16, 12.1.0.0/16, 12.2.0.0/16, 12.3.0.0/16 bajo el prefijo 12.0.0.0/14.

Iniciar Quagga

  • Al iniciar un router en NetGUI normalmente el software de quagga no estará arrancado. Para realizar una configuración:

    1. Se editan los ficheros de configuración (págs [conf-begin]–[conf-end]).

    2. Se arranca quagga: /etc/init.d/quagga start

    3. Se realizar la monitorización.

    4. Si es necesario modificar la configuración, se interrumpe la ejecución de quagga (/etc/init.d/quagga stop), se modifican los ficheros, y se vuelve a arrancar quagga (/etc/init.d/quagga start)

  • En algunos escenarios puede que algunos routers estén preconfigurados para que arranquen con quagga ya lanzado.

Monitorización de la configuración: vtysh

r1:~# vtysh
Copyright 1996-2005 Kunihiro Ishiguro, et al.

r1# ?
clear        Reset functions
configure    Configuration from vty interface
copy         Copy from one file to another
debug        Debugging functions (see also 'undebug')
disable      Turn off privileged mode command
end          End current mode and change to enable mode
exit         Exit current mde an down to previous mode
list         Print command list
no           Negate a command or set its defaults
ping         Send echo messages
quit         Exit current mode and down to previous mode
show         Show running system information
ssh          Open an ssh connection 
start-shell  Start UNIX shell
telnet       Open a telnet connection
terminal     Set terminal line parameters
traceroute   Trace route to destination
undebug      Disable debugging functions (see also 'debug')
write        Write running configuration to memory, network, or terminal
r1#

Tabla de encaminamiento BGP

El comando show ip bgp muestra la información sobre la tabla de encaminamiento BGP del router (el ejemplo muestra la configuración del router r2 de la figura):

image

r2# show ip bgp
BGP table version is 0, local router ID is 10.1.0.20
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
Origin codes: i - IGP, e - EGP, ? - incomplete

  Network       Next Hop        Metric  LocPrf  Weight  Path
*>11.1.0.0/16   20.1.0.10        0                         100   i
*>20.1.0.0/16    0.0.0.0         0               32768           i 
*>12.1.0.0/16    0.0.0.0         0               32768           i
*>12.5.0.0/16    0.0.0.0         0               32768           i

Donde * indica que la ruta es válida y > indica que la ruta ha sido elegida como ruta preferida.

Observando la primera fila de la tabla:

    Network       Next Hop        Metric  LocPrf  Weight  Path
*>11.1.0.0/16   20.1.0.10        0                         100   i

Desde r2 se alcanza la subred 11.1.0.0/16 a través de 20.1.0.10, utilizando un atributo AS_PATH=100 ya que sólo se atravisa dicho sistema autónomo para llegar a esa subred. El último parámetro es el atributo ORIGIN, en este caso i que indica si la subred ha sido aprendida mediante:

  • i: líneas network, agregación de direcciones rutas por defecto en bgpd.conf
  • e: otro protocolo externo
  • ?: líneas redistribute en bgpd.conf

En la tabla BGP se muestra el valor AS_PATH asociado a cada ruta.

Cada AS añade su número de sistema autónomo al atributo AS_PATH antes de anunciar una ruta. Para las subredes de AS400, 16.0.0.0/16:

  • AS300 añade el identificador 300 antes de exportar dichas subredes a AS200. Por tanto, AS200 recibe de AS300: AS_PATH=300 400.

  • AS100 añade el identificador 100 antes de exportar dichas subredes a AS200. Por tanto, AS200 recibe de AS100: AS_PATH=100 400.

    image

r2# show ip bgp
BGP table version is 0, local router ID is 10.1.0.20
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
Origin codes: i - IGP, e - EGP, ? - incomplete

    Network       Next Hop        Metric  LocPrf  Weight  Path
*>16.0.0.0/16    20.2.0.30                         0    300 400 i   
*                20.1.0.10                         0    100 400 i

El AS_PATH puede observarse en la columna Path.

Redistribución de rutas entre BGP y OSPF

Un router puede ejecutar varios protocolos de encaminamiento diferentes. Así, por ejemplo, un router frontera de un AS ejecutará tanto BGP como un protolo interior (RIP u OSPF).

Para que las rutas aprendidas por OSPF se propaguen hacia el exterior anunciándose a través de BGP es necesario configurarlo explícitamente en el fichero bgpd.conf.

Para que las rutas aprendidas por BGP se propaguen internamente utilizando OSPF es necesario configurarlo explícitamente en el fichero ospfd.conf.

Rutas aprendidas por OSPF en anuncios BGP

Si AS200 está ejecutando OSPF entre todos sus routers internos, el router frontera r2 debe estar ejecutando tanto BGP como OSPF. El fichero daemons tendrá activado: zebra, ospf y bgpd.

En el siguiente ejemplo se muestra la configuración de r2:

image

  • Los ficheros ospfd.conf de cada uno de los routers de AS200 estarán configurados adecuadamente para que se anuncien por OSPF las rutas interiores de AS200.

  • Para que las rutas aprendidas por r2 a través de OSPF se anuncien por BGP es necesario añadir la siguiente línea en el fichero bgpd.conf:

...
router bgp 200
...
   redistribute ospf
...

Rutas aprendidas por BGP en anuncios OSPF

En el siguiente ejemplo se muestra la configuración de r2:

image

  • Para que los routers internos de AS200 puedan alcanzar los destinos de AS100, r2 puede redistribuir la información que ha aprendido por BGP utilizando OSPF. Para ello, el fichero ospfd.conf de r2 debe incluir la siguiente línea:
...
router ospf
...
   redistribute bgp
...

r2 NO tiene en su fichero de configuración ospfd.conf la línea network 20.1.0.0/16, ya que en esa subred no hay otros routers OSPF.

Para que se anuncie la subred 20.1.0.0/16 dentro del AS es necesario añadir en ospfd.conf la línea:

redistribute connected

Así, en r2 el fichero ospfd.conf quedaría:

...
router ospf
   network 12.1.0.0/16 area 0
   network 12.5.0.0/16 area 0
   redistribute connected
   redistribute bgp
...

Políticas de exportación de rutas

  • Las relaciones entre ASs dictan unas reglas de exportación de rutas.

  • Para especificar estas políticas, hay que incluir la relación de rutas que se exportan en el fichero bgpd.conf.

  • Para cada vecino es necesario decidir si se exporta o no una determinada información:

    • Para un vecino BGP <vecino-BGP> se define un filtro out (de exportación) al cuál le asignamos un nombre <nombreLista>:

    neighbor <vecino-BGP> filter-list <nombreLista> out

    • El filtro se define como una lista de reglas expresadas como sentencias deny/permit de patrones de AS_PATH.
        ip as-path access-list <nombreLista> [deny/permit] <patrónAS_PATH>
        ...
        ip as-path access-list <nombreLista> [deny/permit] <patrónAS_PATH>

Las reglas de un filtro se aplicarán en el orden en el que las hemos escrito.

  • Para cada subred a exportar (ruta preferida) a dicho vecino BGP, se tomará su atributo AS_PATH que aparece en la tabla BGP del router, si se cumple el patrón de la regla del filtro <patrónAS_PATH>, se aplicará la acción (deny/permit) y por tanto se enviará o no el anuncio.

  • Si no se cumple ninguno de los patrones AS_PATH de las sentencias del filtro, la acción por defecto es deny. No se anuncia.

Patrón para AS_PATH en las políticas de exportación

  • Algunos ejemplos de <patrónAS_PATH> para utilizar en las políticas de exportación:
Patrón Significado
^100 cualquier AS_PATH que comience con AS100. Cualquier ruta que me haya anunciado AS100.
100$ cualquier AS_PATH que termine con AS100. Cualquier ruta que haya sido generada en AS100.
^$ AS_PATH vacío. Cualquier ruta originada en mi propio AS.
^100_200$ el AS_PATH dado por 100,200.
.* Cualquier AS_PATH.

Ejemplo de políticas de exportación de rutas

Configuración de bgpd.conf en r2:

image

router bgp 200
  neighbor 20.3.0.30 remote-as 300

  neighbor 20.3.0.30 filter-list listaHaciaAS300 out

  redistribute ...
  redistribute ...

  aggregate-address ...
  aggregate-address ...

  ip as-path access-list listaHaciaAS300 deny ^100
  ip as-path access-list listaHaciaAS300 permit .*
  • Desde r2 no se envía ningún anuncio a r3 que contenga subredes con AS_PATH cuyo primer AS sea AS100. Por tanto, no se envían las subredes que me haya anunciado AS100. Sí se permite el envío del resto de las subredes.

Selección de la mejor ruta

  • Por defecto, todas las subredes recibidas en anuncios BGP se incorporan a la tabla BGP (BGP RIB). Por tanto, en esta tabla se muestran todas las posibilidades que conoce un router para alcanzar cada una de las subredes.

  • Si existe más de una posibilidad de ruta para alcanzar una determinada subred, BGP seleccionará cuál será la ruta preferida atendiendo a los siguientes criterios (sólo los criterios resaltados en negrita son los que tendremos en cuenta al realizar las prácticas):

    1. Si el siguiente salto que debe utilizarse para alcanzar una subred es inaccesible, se descarta la ruta.
    2. Se prefiere ruta con mayor valor de Weight (parámetro configurable en Cisco y quagga).
    3. Se prefiere ruta con mayor valor de atributo LOCAL_PREF.
    4. Se prefiere ruta generada localmente en el fichero de configuración de BGP.
    5. Se prefiere ruta con el atributo AS_PATH más corto.
    6. Se prefiere ruta en función de atributo ORIGIN: IGP mejor que EGP y mejor que INCOMPLETE.
    7. Se prefiere ruta con menor atributo Multi-Exit Discriminator (MED).
    8. ...
  • Una vez seleccionadas las rutas preferidas:

    • Las rutas preferidas se incorporan a la tabla de encaminamiento de la máquina.

    • Las rutas preferidas se anuncian (si es conveniente) a los ASs vecinos.

Configuración del atributo LOCAL PREF

  • Cuando un router recibe diferentes rutas para alcanzar un mismo destino, incluye todas ellas en su tabla BGP y decide cuál es la mejor ruta en función de un LOCAL PREF mayor. En caso de empate, se elegirá por el ASPATH más corto (existen más criterios para la selección pero no los estudiaremos).

  • LOCAL PREF es un atributo que sólo tiene sentido dentro de un AS y no se propaga fuera del mismo.

  • En la figura, r2 debería elegir la ruta hacia AS400 a través de AS300 (su cliente). Sin embargo en la configuración BGP de r2 no se puede expresar si un vecino BGP es proveedor, cliente o mantiene con él una relación entre iguales.

image

  • Para que r2 seleccione la ruta hacia AS400 a través de AS300, en r2 el atributo LOCAL PREF del vecino de AS300 debe ser mayor que el LOCAL PREF del vecino de AS100.

image

router bgp 200
   neighbor 20.1.0.10 remote-as 100
   neighbor 20.2.0.30 remote-as 300

   neighbor 20.1.0.10 route-map confLocalPrefAS100 in
   neighbor 20.2.0.30 route-map confLocalPrefAS300 in

   redistribute ...
   redistribute ...

   aggregate-address ...
   aggregate-address ...

   route-map confLocalPrefAS100 permit 10
      set local-preference 500

   route-map confLocalPrefAS300 permit 10
      set local-preference 600
  • En la tabla BGP de r2 se muestra el valor LOCAL PREF asociado a cada ruta.

  • En r2 se puede consultar la tabla BGP para ver los atributos LOCAL PREF asignados a las rutas aprendidas.

r2# show ip bgp
BGP table version is 0, local router ID is 10.1.0.20
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network       Next Hop        Metric  LocPrf  Weight  Path
*>16.0.0.0/16    20.2.0.30               600       0    300 400 i   
*                20.1.0.10               500       0    100 400 i
  • Si en la tabla BGP no aparece valor LOCAL PREF para una ruta, éste parámetro tomará su valor por defecto que es 100.

Configuración de una ruta por defecto

  • Si un AS tiene un solo proveedor, su proveedor podría anunciarle simplemente una ruta por defecto, en vez de todas las subredes que conoce.

  • Así, por ejemplo, r2 podría anunciar a r3 todas las subredes que conoce con una ruta por defecto

    image

  • Para configurarlo, en el fichero de configuración bgpd.conf de r2:

        router bgp 200

          ...

          neighbor 20.2.0.30 remote-as 300
          neighbor 20.2.0.30 default-originate

          ...
  • La línea default-originate por sí sola no evita los anuncios de las redes originales, sino que simplemente anuncia una ruta por defecto.

  • Para eliminar los anuncios de las redes originales hay que crear adicionalmente para ese vecino una filter-list que evite esos anuncios:

router bgp 200

...

  neighbor 20.2.0.30 remote-as 300
  neighbor 20.2.0.30 default-originate
  neighbor 20.2.0.30 filter-list listaHaciaAS300 out
  ...
  redistribute ...
  ...
  aggregate-address ...
  ...
  ip as-path access-list listaHaciaAS300 deny .*
  ...

results matching ""

    No results matching ""