martes, 8 de diciembre de 2009

ORF: Outbound Route Filtering

Posted by Nicolas | martes, 8 de diciembre de 2009 | Category: , , |

Es muy común que un cliente de un ISP no quiera recibir la tabla completa de prefijos a través de BGP, la cuál ya sobrepasó las 300.000 entradas (Active BGP entries), seguramente por que algunas compañías NO hacen muy bien su labor de agregación de rutas (Aggregation Summary).

En fin, una simple forma es que el proveedor anuncie todas las rutas y el cliente filtre en su CPE. Sin embargo esto implica se esté haciendo uso de recursos que no son necesarios. Para esto existe ORF (RFC 5291) que permite el CPE le indique a su uplink router qué prefijos quiere recibir y así se evite éste anuncie prefixos no deseados para que luego sean filtrados, ahorrando recursos en ambos equipos. Se mostrará esto en acción con los dos routers de la figura.

Se levanta una sesión BGP entre ambos y se injectan algunos prefijos (qué tal los del RFC 1918).

hostname R1
!
router bgp 64512
bgp log-neighbor-changes
neighbor 3.3.3.3 remote-as 64512
neighbor 3.3.3.3 update-source Loopback0
!
address-family ipv4
redistribute static route-map STATIC
neighbor 3.3.3.3 activate
no auto-summary
no synchronization
exit-address-family
!
ip route 10.0.0.0 255.0.0.0 10.0.0.6
ip route 172.16.0.0 255.240.0.0 10.0.0.6
ip route 192.168.0.0 255.255.0.0 10.0.0.6
!
ip prefix-list TODOS seq 5 permit 0.0.0.0/0 le 32
!
route-map STATIC permit 10
match ip address prefix-list TODOS
!

hostname R3
!
router bgp 64512
bgp log-neighbor-changes
neighbor 1.1.1.1 remote-as 64512
neighbor 1.1.1.1 update-source Loopback0
!
address-family ipv4
neighbor 1.1.1.1 activate
no auto-summary
no synchronization
exit-address-family
!

OK, ahora se verá el mensaje UPDATE en particular que recibirá R3 con debug ip bgp updates.

R3#
R3#debug ip bgp updates in
BGP updates debugging is on (inbound) for address family: IPv4 Unicast
R3#
R3#
R3#clear ip bgp 1.1.1.1
R3#
*Dec 7 18:37:26.675: %BGP-5-ADJCHANGE: neighbor 1.1.1.1 Down User reset
R3#
*Dec 7 18:37:30.255: %BGP-5-ADJCHANGE: neighbor 1.1.1.1 Up
R3#
*Dec 7 18:37:30.567: BGP(0): 1.1.1.1 rcvd UPDATE w/ attr: nexthop 10.0.0.6, origin ?, localpref 100, metric 0
*Dec 7 18:37:30.575: BGP(0): 1.1.1.1 rcvd 192.168.0.0/16
*Dec 7 18:37:30.575: BGP(0): 1.1.1.1 rcvd 172.16.0.0/12
*Dec 7 18:37:30.579: BGP(0): 1.1.1.1 rcvd 10.0.0.0/8

R3#sh ip bgp sum | b Nei
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
1.1.1.1 4 64512 29 29 12 0 0 00:00:15 3

Del mismo modo en R1 se puede ver cómo se generan los mensajes

R1#debug ip bgp updates out  
BGP updates debugging is on (outbound) for address family: IPv4 Unicast
R1#
*Dec 7 18:37:27.175: %BGP-5-ADJCHANGE: neighbor 3.3.3.3 Down Peer closed the session
R1#
*Dec 7 18:37:30.683: %BGP-5-ADJCHANGE: neighbor 3.3.3.3 Up
*Dec 7 18:37:30.687: BGP(0): 3.3.3.3 NEXT_HOP is on same subnet as the bgp peer and set to 10.0.0.6 for net 192.168.0.0/16
*Dec 7 18:37:30.691: BGP(0): 3.3.3.3 send UPDATE (format) 192.168.0.0/16, next 10.0.0.6, metric 0, path Local
*Dec 7 18:37:30.695: BGP(0): 3.3.3.3 NEXT_HOP is on same subnet as the bgp peer and set to 10.0.0.6 for net 172.16.0.0/12
*Dec 7 18:37:30.699: BGP(0): 3.3.3.3 send UPDATE (prepend, chgflags: 0x0) 172.16.0.0/12, next 10.0.0.6, metric 0, path Local, extended community
*Dec 7 18:37:30.703: BGP(0): 3.3.3.3 NEXT_HOP is on same subnet as the bgp peer and set to 10.0.0.6 for net 10.0.0.0/8
*Dec 7 18:37:30.707: BGP(0): 3.3.3.3 send UPDATE (prepend, chgflags: 0x0) 10.0.0.0/8, next 10.0.0.6, metric 0, path Local, extended community

Ahora se revisarán las tablas de prefijos recibidos (show ip bgp neighbors received-routes), como a su vez la lista luego de filtrar (show ip bgp neighbors routes), que en este caso será igual a la anterior puesto que, por ahora, no se está aplicando ningún filtro.

R3#sh ip bgp nei 1.1.1.1 received-routes
% Inbound soft reconfiguration not enabled on 1.1.1.1

Ups!...el mensaje es lo suficientemente claro, así que:

R3#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R3(config)#router bgp 64512
R3(config-router)#nei 1.1.1.1 soft-reconfiguration inbound
R3(config-router)#^Z
R3#
R3#
R3#
R3#sh ip bgp nei 1.1.1.1 received-routes
BGP table version is 12, local router ID is 3.3.3.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path
*>i10.0.0.0 10.0.0.6 0 100 0 ?
*>i172.16.0.0/12 10.0.0.6 0 100 0 ?
*>i192.168.0.0/16 10.0.0.6 0 100 0 ?

Total number of prefixes 3
R3#

R3#sh ip bgp nei 1.1.1.1 routes
BGP table version is 12, local router ID is 3.3.3.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path
*>i10.0.0.0 10.0.0.6 0 100 0 ?
*>i172.16.0.0/12 10.0.0.6 0 100 0 ?
*>i192.168.0.0/16 10.0.0.6 0 100 0 ?

Total number of prefixes 3
R3#

A continuación se filtrará el prefijo 10.0.0.0/8 del lado de R3.

R3#
R3#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R3(config)#
R3(config)#ip prefix-list FILTER-10 deny 10.0.0.0/8
R3(config)#ip prefix-list FILTER-10 permit 0.0.0.0/0 le 32
R3(config)#
R3(config)#router bgp 64512
R3(config-router)#nei 1.1.1.1 prefix-list FILTER-10 in
R3(config-router)#^Z
R3#

Si bien el prefijo será correctamente filtrado, se ve que el mensaje de UPDATE es aún generado por R1 y procesado por R3.

R3#
*Dec 7 18:43:03.275: BGP(0): 1.1.1.1 rcvd UPDATE w/ attr: nexthop 10.0.0.6, origin ?, localpref 100, metric 0
*Dec 7 18:43:03.279: BGP(0): 1.1.1.1 rcvd 192.168.0.0/16
*Dec 7 18:43:03.283: BGP(0): 1.1.1.1 rcvd 172.16.0.0/12
*Dec 7 18:43:03.287: BGP(0): 1.1.1.1 rcvd 10.0.0.0/8 -- DENIED due to: distribute/prefix-list;

Las listas de prefijos recibidos son más aclaratorias. Si bien sólo dos prefijos (routes) se insertarán en la tabla BGP local, aún son tres (received-routes) los recibidos.

R3#sh ip bgp nei 1.1.1.1 routes 
BGP table version is 13, local router ID is 3.3.3.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path
*>i172.16.0.0/12 10.0.0.6 0 100 0 ?
*>i192.168.0.0/16 10.0.0.6 0 100 0 ?

Total number of prefixes 2
R3#

R3#
R3#sh ip bgp nei 1.1.1.1 received-routes
BGP table version is 13, local router ID is 3.3.3.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path
* i10.0.0.0 10.0.0.6 0 100 0 ?
*>i172.16.0.0/12 10.0.0.6 0 100 0 ?
*>i192.168.0.0/16 10.0.0.6 0 100 0 ?

Total number of prefixes 3
R3#

Hora de que se configure ORF.

R3#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R3(config)#router bgp 64512
R3(config-router)#
R3(config-router)#nei 1.1.1.1 capability orf prefix-list send

R1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)#router bgp 64512
R1(config-router)#
R1(config-router)#nei 3.3.3.3 capability orf prefix-list receive
R1(config-router)#
R1(config-router)#
*Dec 7 18:44:26.083: %BGP-5-ADJCHANGE: neighbor 3.3.3.3 Down Capability changed
*Dec 7 18:44:26.891: %BGP-5-ADJCHANGE: neighbor 3.3.3.3 Up
R1(config-router)#
*Dec 7 18:44:28.567: BGP(0): 3.3.3.3 NEXT_HOP is on same subnet as the bgp peer and set to 10.0.0.6 for net 192.168.0.0/16
*Dec 7 18:44:28.571: BGP(0): 3.3.3.3 send UPDATE (format) 192.168.0.0/16, next 10.0.0.6, metric 0, path Local
*Dec 7 18:44:28.575: BGP(0): 3.3.3.3 NEXT_HOP is on same subnet as the bgp peer and set to 10.0.0.6 for net 172.16.0.0/12
*Dec 7 18:44:28.579: BGP(0): 3.3.3.3 send UPDATE (prepend, chgflags: 0x0) 172.16.0.0/12, next 10.0.0.6, metric 0, path Local, extended community
R1(config-router)#

De inmediato se puede notar un cambio y es que sólo se envían dos prefijos desde R1. Se comprueba con los show ip bgp neighbors que se mostraron anteriormente, ambos ahora muestran sólo dos prefijos.

R3#
R3#sh ip bgp nei 1.1.1.1 received-routes
BGP table version is 25, local router ID is 3.3.3.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path
*>i172.16.0.0/12 10.0.0.6 0 100 0 ?
*>i192.168.0.0/16 10.0.0.6 0 100 0 ?

Total number of prefixes 2
R3#

R3#sh ip bgp nei 1.1.1.1 routes      
BGP table version is 25, local router ID is 3.3.3.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path
*>i172.16.0.0/12 10.0.0.6 0 100 0 ?
*>i192.168.0.0/16 10.0.0.6 0 100 0 ?

Total number of prefixes 2
R3#

Cisco habla al respecto en BGP Prefix-Based Outbound Route Filtering y los RFC asociados son:
  • RFC 5291: Outbound Route Filtering Capability for BGP-4
  • RFC 5292: Address-Prefix-Based Outbound Route Filter for BGP-4

En total 2 comentarios:

  1. Estimado, buenas tarde desde Bs As Arg. Consulta la configuracion de ORF si No se realiza en el PCE del cliente funciona???, pregunto esto porque en ocaciones la administracion del RT CPE lo realiza el Cliente y si NO pone ese comando capability orf prefix-list receive,EJ R1 no se aplica el filtro de ORF
    Saludos

  2. No funcionaría hombre, no se establecería la adyacencia:
    Dec 7 18:44:26.083: %BGP-5-ADJCHANGE: neighbor 3.3.3.3 Down Capability changed
    *Dec 7 18:44:26.891: %BGP-5-ADJCHANGE: neighbor 3.3.3.3 Up


Leave a Reply