BGP en Cisco

En esta guía explicamos como configurar BGP, tanto para IPv4 como IPv6 en routers Cisco. En nuestro ejemplo usamos un ASR1001-X, que cuenta con 8GB de memoria RAM por lo que puede manejar la tabla de ruta completa o Default-Free Zone (DFZ), pero los pasos son muy similares para otros modelos de equipos, aunque si tienen poca memoria es posible que no pueda manejar la DFZ sino que mejor manejar solo la ruta por defecto entregada por BGP.

Te recomendamos revisar el tamaño máximo de rutas que puede gestionar tu equipo para definir si puedes usar la DFZ (tabla completa de rutas) o no.

  1. Introducción
  2. Definir las direcciones IP de tus interfaces para el IP transit, Perú IX (PIT Peru sac) (pitperu.net) y tu red interna,    habilitar IP versión 6 y configurar interfaces
  3. Definir el ASN de tu empresa (el ASN otorgado por LACNIC)
  4. Crear los IP Prefix List para el filtros OUT y filtros IN
  5. Crear el Peer BGP con tu Proveedor de IP transit
  6. Crear los Peers BGP con los Route Server del Perú IX (PIT Peru sac) (pitperu.net)
  7. Definir los prefijos que vas a anunciar
  8. Comprobar funcionamiento

1.   Introducción

En Perú IX promovemos el uso de IPv6, y nuestro primer consejo es perderle el miedo. Si bien al principio puede parecer algo difícil ya que las direcciones son largas y no sólo consideran números sino que también algunas letras y el uso de los dos puntos, una vez que uno lo entiende es muy sencillo ya que guardar grandes similitudes con IPv4. En caso que aún no tengan ningún tipo de contacto con IPv6 les recomiendo revisar este video explicativo sobre los conceptos básicos de IPv6 https://www.youtube.com/watch?v=43VBLzwWwxU

En este ejemplo vamos a configurar tanto las direcciones IPv4 como IPv6, así como las sesiones BGP para IPv4 e IPv6.

Con el fin de ejemplificar las configuraciones haremos uso de algunos supuestos, los cuales deberán ser reemplazados con las direcciones IP asignadas por el proveedor de tránsito IP, Perú IX (PIT Peru sac) y LACNIC.

Disclaimer: no soy experto en equipos Cisco pero le agradezco la ayuda a Manuel de WOW por la ayuda con los comandos para equipos Cisco.

2.   Definir las direcciones IPv4 e IPv6 de tus interfaces para IP transit, Perú IX (PIT Peru sac) (pitperu.net) y tu red interna, habilitar IP versión 6 y configurar interfaces

Supuestos para el ejemplo:

  • El ASN otorgado por LACNIC a nuestra organización es el AS 123456
  • Bloque IPv4 asignado por LACNIC es el 100.100.100.0/22
  • Bloque IPv6 asignado por LACNIC es el 2803:cd10::/32
  • Dirección IPv4 para el punto a punto del proveedor de IP transit 198.51.100.2/30 (donde el el equipo en el lado del Proveedor de IP transit contra el cual haremos el BGP es el 198.51.100.1)
  • Dirección IPv6 para el punto a punto del proveedor de IP transit 2803:dd99:1111::2/126 (donde el el equipo en el lado del Proveedor de IP transit contra el cual haremos el BGP es el 2803:dd99:1111::1)
  • Dirección IPv4 asignada por Perú IX (PIT Peru sac) (pitperu.net) es la 45.183.47.254/24
  • Dirección IPv6 asignada por Perú IX (PIT Peru sac) (pitperu.net) es la 2803:cd60:6411:5::ff/64
  • Habilitar IPv6 en tu equipo

    Lo primero que haremos es habilitar IPv6 en nuestro Router

    Router> enable
    Router# configure terminal
    Router(config)# ipv6 unicast-routing

    Configurar la direcciones IPv4 e IPv6 en las interfaces

    Con el fin de simplificar la explicación asignaremos ambos prefijos IPv4 e IPv6 otorgados por LACNIC en la interfaz TenGigabitEthernet0/0/0. Sin embargo, también se puede asignar en una interfaz loopback y luego ir subasignando segmentos más pequeños como /24 para IPv4 o /48 para IPv6 a otras interfaces o a otros routers mediante rutas estáticas o dinámicas ya sea con OSPF o iBGP.

    #Configurar interfaz LAN de tu ISP/WISP#
    #Se puede configurar en una interfaz loopback también, y luego hacemos rutas estáticas o dinámicas a otras subredes#
    Router(config)# interface TenGigabitEthernet0/0/0
    Router(config-if)# ip address 100.100.100.1 255.255.252.0
    Router(config-if)# description LAN
    Router(config-if)# ipv6 enable
    Router(config-if)# ipv6 address 2803:cd10::1/32
    Router(config-if)# no shutdown

    Luego vamos a definir las direcciones IPv4 e IPv6 del Proveedor de IP transit, en caso que aún no estén ya definidas en el equipo. En nuestro ejemplo esta conexión está conectada en la interfazTenGigabitEthernet0/0/1. 

    #Configurar la interfaz de tu Proveedor de IP transit#
    Router(config)# interface TenGigabitEthernet0/0/1
    Router(config-if)# ip address 198.51.100.2 255.255.255.252
    Router(config-if)# description IP_transit_AS1200
    Router(config-if)# ipv6 enable
    Router(config-if)# ipv6 address 2803:dd99:1111::2/126
    Router(config-if)# no shutdown

    Finalmente, vamos a configurar las direcciones IP otorgadas por Perú IX (PIT Peru sac). En este ejemplo esta conexión está conectada en la interfaz TenGigabitEthernet0/0/2. 

    #Configurar interfaz a Perú IX (PIT Peru sac) (pitperu.net)#
    Router(config)# interface TenGigabitEthernet0/0/2
    Router(config-if)# ip address 45.183.47.254 255.255.255.0
    Router(config-if)# description PIT_Peru_sac
    Router(config-if)# ipv6 enable
    Router(config-if)# ipv6 address 2803:cd60:6411:5::ff/64
    Router(config-if)# no shutdown

    3.   Definir el ASN de tu empresa (el ASN otorgado por LACNIC)

    En nuestro ejemplo vamos a asumir que LACNIC nos otorgó el ASN 123456, en router-id vamos a poner la dirección IPv4 otorgada por Perú IX (PIT Peru sac) (pitperu.net).

    #Definir tu ASN público en el equipo#
    router bgp 123456
    bgp router-id 45.183.47.254
    bgp graceful-restart
    bgp graceful-restart restart-time 120
    bgp graceful-restart stalepath-time 360

    Nota: una buena práctica, aunque no obligatoria, es configurar una interfaz loopback con un rango IP privado para luego usarlo como router-id en la configuración BGP con el fin de evitar el route flapping que ocurre cuando la dirección IP de una interfa  z se cambia.

    4.   Crear los IP Prefix List para los filtros OUT y filtros IN

    Antes de levantar las sesiones BGP es MUY IMPORTANTE crear los filtros de seguridad tanto de entrada como de salida.

    Importante: en los filtros el orden de los factores si importa, es decir, las primeras líneas deben ser el index más bajo (esto en el caso que tengan múltiples líneas previas de ip-prefix en un mismo chain)

    Filtros de salida IPv4

    #En este caso el chain para el filtro de salida al proveedor de IP transit es IP_TRANSIT_AS1200_OUT, y lo que permite es enviar nuestro prefijo IPv4 como /22 y no enviar nada mas#
    Router(config)# ip prefix-list IP_TRANSIT_AS1200_OUT permit 100.100.100.0/22
    Router(config)# ip prefix-list IP_TRANSIT_AS1200_OUT deny 0.0.0.0/0 le 32
     
    #En este caso el chain para el filtro de salida al proveedor de PIT Peru sac es PIT_PERU_RS_OUT, y lo que permite es enviar nuestro prefijo IPv4 como /22 y como /24 y no enviar nada mas#
    Router(config)# ip prefix-list PIT_PERU_RS_OUT permit 100.100.100.0/22 le 24
    Router(config)# ip prefix-list PIT_PERU_RS_OUT deny 0.0.0.0/0 le 32

    Filtros de salida IPv6

    #En este caso usaremos el chain IP_TRANSIT_AS1200_IPv6_OUT para nuestro proveedor de IP transit en los prefijos IPv6#
    Router(config)# ipv6 prefix-list IP_TRANSIT_AS1200_IPv6_OUT permit 2803:cd10::/32 le 64
    Router(config)# ipv6 prefix-list IP_TRANSIT_AS1200_IPv6_OUT deny ::/0 le 128
     
    #En este caso usaremos el chain PIT_PERU_RS_IPv6_OUT para nuestro filtros al PIT Peru sac (pitperu.net) para los prefijos IPv6#
    Router(config)# ipv6 prefix-list PIT_PERU_RS_IPv6_OUT permit 2803:cd10::/32 le 64
    Router(config)# ipv6 prefix-list PIT_PERU_RS_IPv6_OUT deny ::/0 le 128

    Filtros de entrada IPv4

    Debido a las limitaciones del tamaño de rutas IPv4 que pueden manejar los routers  Cisco de gama media le permitiremos al Proveedor de IP transit sólo que nos anuncie la ruta por defecto. En el caso que tengamos un modelo de router (gama alta) que soporte mas de 1,000,000 de rutas IPv4 podremos aceptar la tabla completa de rutas

    #filtros que permite solo recibir ruta por defecto desde el proveedor de IP transit#
    Router(config)# ip prefix-list IP_TRANSIT_AS1200_IN permit 0.0.0.0/0
    Router(config)# ip prefix-list IP_TRANSIT_AS1200_IN deny 0.0.0.0/0 le 32
     
    #filtros que permiten filtrar ruta por defecto, bogons y martians y permitir todo el resto#
    Router(config)# ip prefix-list PIT_PERU_RS_IN deny 0.0.0.0/0             // es decir, no aceptamos la ruta por defecto
    Router(config)# ip prefix-list PIT_PERU_RS_IN deny 45.183.47.0/24 le 32  // es decir, no aceptamos la ruta LAN del PIT Peru sac, ya que esta debe ser solo alcanzable por la interfaz asignada y no por otro camino
    Router(config)# ip prefix-list PIT_PERU_RS_IN deny 0.0.0.0/8 le 32       // rfc1122
    Router(config)# ip prefix-list PIT_PERU_RS_IN deny 10.0.0.0/8 le 32      // rfc1918
    Router(config)# ip prefix-list PIT_PERU_RS_IN deny 100.64.0.0/10 le 32   // rfc6598
    Router(config)# ip prefix-list PIT_PERU_RS_IN deny 127.0.0.0/8 le 32     // rfc1122
    Router(config)# ip prefix-list PIT_PERU_RS_IN deny 169.254.0.0/16 le 32  // rfc3927
    Router(config)# ip prefix-list PIT_PERU_RS_IN deny 172.16.0.0/12 le 32   // rfc1918
    Router(config)# ip prefix-list PIT_PERU_RS_IN deny 192.0.8.0/24 le 32    // rfc5737
    Router(config)# ip prefix-list PIT_PERU_RS_IN deny 192.88.99.0/24 le 32  // rfc7526
    Router(config)# ip prefix-list PIT_PERU_RS_IN deny 192.168.0.0/16 le 32  // rfc1918
    Router(config)# ip prefix-list PIT_PERU_RS_IN deny 198.18.0.0/15 le 32   // rfc2544
    Router(config)# ip prefix-list PIT_PERU_RS_IN deny 198.51.0.0/24 le 32   // rfc5737
    Router(config)# ip prefix-list PIT_PERU_RS_IN deny 203.0.113.0/24 le 32  // rfc5737
    Router(config)# ip prefix-list PIT_PERU_RS_IN deny 224.0.0.0/4 le 32     // multicast
    Router(config)# ip prefix-list PIT_PERU_RS_IN deny 240.0.0.0/4 le 32     // reservadas
    Router(config)# ip prefix-list PIT_PERU_RS_IN deny 0.0.0.0/0 ge 25       // bogons filtra los prefijos mas pequeños que un /24
    Router(config)# ip prefix-list PIT_PERU_RS_IN permit 0.0.0.0/0 le 32     // permite todo el resto

    Filtros de entrada IPv6

    Aquí debemos aceptar todos los prefijos que nos envíe el Perú IX (PIT Peru sac) excepto aquellos que se recomiendan en el filtrado de buenas prácticas.

    #filtros que permite solo recibir ruta IPv6 por defecto desde el proveedor de IP transit#
    Router(config)# ipv6 prefix-list IP_TRANSIT_AS1200_IPv6_IN permit ::/0
    Router(config)# ipv6 prefix-list IP_TRANSIT_AS1200_IPv6_IN deny ::/0 le 128
     
     
    Router(config)# ipv6 prefix-list PIT_PERU_RS_IPv6_IN deny 0100::/64 le 128        // RFC6666
    Router(config)# ipv6 prefix-list PIT_PERU_RS_IPv6_IN deny 2001:2::/48 le 128      // RFC5180
    Router(config)# ipv6 prefix-list PIT_PERU_RS_IPv6_IN deny 2001:10::/28 le 128     // RFC4843
    Router(config)# ipv6 prefix-list PIT_PERU_RS_IPv6_IN deny 2001:db8::/32 le 128    // RFC3849
    Router(config)# ipv6 prefix-list PIT_PERU_RS_IPv6_IN deny 2002::/16 le 128        // RFC7526
    Router(config)# ipv6 prefix-list PIT_PERU_RS_IPv6_IN deny 3ffe::/16 le 128        // RFC3701
    Router(config)# ipv6 prefix-list PIT_PERU_RS_IPv6_IN deny fc00::/7 le 128         // RFC4193
    Router(config)# ipv6 prefix-list PIT_PERU_RS_IPv6_IN deny fe80::/10 le 128        // RFC4291
    Router(config)# ipv6 prefix-list PIT_PERU_RS_IPv6_IN deny fec0::/10 le 128        // RFC3879
    Router(config)# ipv6 prefix-list PIT_PERU_RS_IPv6_IN deny ff00::/8 le 128         // RFC4291
    Router(config)# ipv6 prefix-list PIT_PERU_RS_IPv6_IN deny ::/0 ge 65                // Elimina prefijos mas grandes que /64
    Router(config)# ipv6 prefix-list PIT_PERU_RS_IPv6_IN permit ::/0 le 128           // Permite todo el resto

    5.   Crear el Peer BGP con tu Proveedor de IP transit

    En nuestro ejemplo nuestro Proveedor de IP transit tiene el ASN 1200, quien en nuestro ejemplo usará la IP 198.51.100.1. Se deberá reemplazar el 1200 por el ASN de tu proveedor de Ip transit y el 198.51.100.1 por la IP para el BGP del gateway que te da tu proveedor de IP transit.

    #Definir la sesión IPv4 BGP al proveedor de IP transit#
    Router(config)# router bgp 123456
    Router(config-router)# bgp soft-reconfig-backup (No todos los equipos lo soportan)
    Router(config-router)# neighbor 198.51.100.1 remote-as 1200 
    Router(config-router)# neighbor 198.51.100.1 description BGP_IP_TRANSIT_IPv4_AS1200
    Router(config-router)# neighbor 198.51.100.1 update-source Te0/0/1
    Router(config-router)# neighbor 198.51.100.1 soft-reconfiguration inbound (No todos los equipos lo soportan)
    Router(config-router)# neighbor 198.51.100.1 prefix-list IP_TRANSIT_AS1200_OUT out
     
    #Definir la sesión IPv6 BGP al proveedor de IP transit#
    Router(config-router)# neighbor 2803:dd99:1111::1 remote-as 1200
    Router(config-router)# neighbor 2803:dd99:1111::1 description BGP_IP_TRANSIT_IPv6_AS1200
    Router(config-router)# neighbor 2803:dd99:1111::1 update-source Te0/0/1
    Router(config-router)# neighbor 2803:dd99:1111::1 ipv6-prefix IP_TRANSIT_AS1200_IPv6_OUT out
    Router(config-router)# neighbor 2803:dd99:1111::1 ipv6-prefix IP_TRANSIT_AS1200_IPv6_IN in

    Si las sesiones BGP tienen password usar además este comando, en nuestro ejemplo la contraseña es “my_IP_transit_password”.

    Router(config-router)# neighbor 198.51.100.1 password my_IP_transit_password
    Router(config-router)# neighbor 2803:dd99:1111::1 password my_IP_transit_password

    6.   Crear los Peers BGP con los Route Server del Perú IX (PIT Peru sac) (pitperu.net)

    En este ejemplo vamos a configurar ambos Route Server IPv4 de Perú IX (PIT Peru sac), es decir, el RS1 y el RS2, en nuestro ejemplo se nos asignó la contraseña BGP “peeringinperu”

    #Definir la sesión BGP a los dos Route Servers de PIT Peru sac#
    Router(config)# bgp 123456
    Router(config-router)# neighbor 45.183.47.1 remote-as 64115 
    Router(config-router)# neighbor 45.183.47.1 description PIT_PERU_RS1_IPv4
    Router(config-router)# neighbor 45.183.47.1 password peeringinperu
    Router(config-router)# neighbor 45.183.47.1 update-source Te 0/0/2
    Router(config-router)# neighbor 45.183.47.1 ip-prefix PIT_PERU_RS_OUT out
    Router(config-router)# neighbor 45.183.47.1 ip-prefix PIT_PERU_RS_IN in
     
    Router(config-router)# neighbor 45.183.47.2 remote-as 64115
    Router(config-router)# neighbor 45.183.47.2 description PIT_PERU_RS2_IPv4
    Router(config-router)# neighbor 45.183.47.2 password peeringinperu
    Router(config-router)# neighbor 45.183.47.2 update-source Te 0/0/2
    Router(config-router)# neighbor 45.183.47.2 ip-prefix PIT_PERU_RS_OUT out
    Router(config-router)# neighbor 45.183.47.2 ip-prefix PIT_PERU_RS_IN in 

    En forma análoga vamos a configurar las sesiones BGP a los RS1 y RS2 para IPv6

    Router(config-router)# neighbor 2803:cd60:6411:5::1 remote-as 64115
    Router(config-router)# neighbor 2803:cd60:6411:5::1 description PIT_PERU_RS1_IPv6
    Router(config-router)# neighbor 2803:cd60:6411:5::1 password peeringinperu
    Router(config-router)# neighbor 2803:cd60:6411:5::1 update-source Te 0/0/2
    Router(config-router)# neighbor 2803:cd60:6411:5::1 ipv6-prefix PIT_PERU_RS_IPv6_OUT out
    Router(config-router)# neighbor 2803:cd60:6411:5::1 ipv6-prefix PIT_PERU_RS_IPv6_IN in
     
    Router(config-router)# neighbor 2803:cd60:6411:5::2 remote-as 64115
    Router(config-router)# neighbor 2803:cd60:6411:5::2 description PIT_PERU_RS2_IPv6
    Router(config-router)# neighbor 2803:cd60:6411:5::2 password peeringinperu
    Router(config-router)# neighbor 2803:cd60:6411:5::2 update-source Te 0/0/2
    Router(config-router)# neighbor 2803:cd60:6411:5::2 ipv6-prefix PIT_PERU_RS_IPv6_OUT out
    Router(config-router)# neighbor 2803:cd60:6411:5::2 ipv6-prefix PIT_PERU_RS_IPv6_IN in  

    7.   Definir los prefijos que vas a anunciar

    Router(config)# bgp 123456
    Router(config-router)# address-family ipv4
    Router(config-router-af)# network 100.100.100.0 22
    Router(config-router-af)# network 100.100.100.0 24
    Router(config-router-af)# network 100.100.101.0 24
    Router(config-router-af)# network 100.100.102.0 24
    Router(config-router-af)# network 100.100.103.0 24
    Router(config-router-af)# exit
     
    Router(config-router)# address-family ipv6
    Router(config-router-af)# network 2803:cd10:: 32
    Router(config-router-af)# exit

    8.   Comprobar funcionamiento

    Comprobar el estado de los Peers BGP, si están operacionales deben decir status Established, si dice Connect o Idle quiere decir que algo no está bien configurado en tu lado o el del proveedor.

    sh ip bgp neighbors

    show ip bgp neighbors <IPv4-IPv6>/XX

    Mostrar los prefijos que estamos actualmente anunciando a nuestro proveedor aguas arriba

    show bgp address-family

    show ip bgp ? (seleccionar la opción que convenga)

    Mostrar la tabla de rutas recibida vía BGP

    show ip route bgp
    show ip route | inc B