En este nuevo post vamos a ver como podríamos prevenir de que nos pase (de nuevo) el mismo problema.
Como siempre, Cisco tenía en su IOS un feature que no acepta updates que contengan un AS-PATH más largo que el valor configurado, pero evidentemente nadie lo usaba. Hoy vamos a aprender a usarlo:
Tengamos en cuenta el siguiente caso:
Obviamente estamos analizando un caso simplificado y no representa el backbone de internet de ninguna forma.
Resulta que BuenosAires tiene dos redes para publicar:
- 192.168.100.0/24
- 192.168.50.0/24
El administrador novato que trabaja en este sistema autónomo decide que quiere hacer más largo el AS-PATH de la red 192.168.50.0/24 para que el tráfico llegue por otro enlace (que no está dibujado) distinto del que lo vincula con el Router Rosario.
Veamos las configuraciones iniciales de los equipos:
BuenosAires:
! interface Loopback0 description Red para publicar ip address 192.168.100.1 255.255.255.0 ! interface Loopback1 description Red para publicar con AS-PATH largo ip address 192.168.50.1 255.255.255.0 ! interface Serial1/0 description Enlace a Rosario ip address 192.168.1.1 255.255.255.252 serial restart-delay 0 ! router bgp 100 no synchronization bgp log-neighbor-changes network 192.168.50.0 network 192.168.100.0 neighbor 192.168.1.2 remote-as 200 neighbor 192.168.1.2 description Rosario neighbor 192.168.1.2 password 100200 neighbor 192.168.1.2 version 4 neighbor 192.168.1.2 soft-reconfiguration inbound neighbor 192.168.1.2 route-map Cambiar-ASPATH-a-10 out no auto-summary ! access-list 10 permit 192.168.50.0 0.0.0.255 ! route-map Cambiar-ASPATH-a-10 permit 10 match ip address 10 set as-path prepend 100 100 100 100 100 100 100 100 100 100 ! route-map Cambiar-ASPATH-a-10 permit 20 !
Rosario:
! interface Serial1/0 description Enlace a BuenosAires ip address 192.168.1.2 255.255.255.252 serial restart-delay 0 ! interface Serial1/1 description Enlace a Cordoba ip address 192.168.1.5 255.255.255.252 serial restart-delay 0 ! router bgp 200 no synchronization bgp log-neighbor-changes neighbor 192.168.1.1 remote-as 100 neighbor 192.168.1.1 description Peering con BuenosAires neighbor 192.168.1.1 password 100200 neighbor 192.168.1.1 version 4 neighbor 192.168.1.1 soft-reconfiguration inbound neighbor 192.168.1.6 remote-as 300 neighbor 192.168.1.6 description Peering con Cordoba neighbor 192.168.1.6 password 200300 neighbor 192.168.1.6 version 4 neighbor 192.168.1.6 soft-reconfiguration inbound no auto-summary !
Cordoba
! interface Serial1/0 description Enlace a Rosario ip address 192.168.1.6 255.255.255.252 serial restart-delay 0 ! router bgp 300 no synchronization bgp log-neighbor-changes neighbor 192.168.1.5 remote-as 200 neighbor 192.168.1.5 description Rosario neighbor 192.168.1.5 password 200300 neighbor 192.168.1.5 version 4 neighbor 192.168.1.5 soft-reconfiguration inbound no auto-summary !
Como vemos no hay nada extraño, salvo las configuraciones básicasde BGP (sin filtrado de rutas) en cada equipo, salvo en BuenosAires donde aplicamos un Route-Map a las actualizaciones salientes para cambiar el AS-PATH de la red 192.168.50.0/24.
Ahora vamos a ver las tablas de enrutamiento y de BGP de todos los equipos.
BuenosAires:
BuenosAires#show ip route Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 E1 - OSPF external type 1, E2 - OSPF external type 2 i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2 ia - IS-IS inter area, * - candidate default, U - per-user static route o - ODR, P - periodic downloaded static route Gateway of last resort is not set C 192.168.50.0/24 is directly connected, Loopback1 192.168.1.0/30 is subnetted, 1 subnets C 192.168.1.0 is directly connected, Serial1/0 C 192.168.100.0/24 is directly connected, Loopback0 BuenosAires#show ip bgp BGP table version is 3, local router ID is 192.168.100.1 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 *> 192.168.50.0 0.0.0.0 0 32768 i *> 192.168.100.0 0.0.0.0 0 32768 i
Rosario:
Rosario#show ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route
Gateway of last resort is not set
B 192.168.50.0/24 [20/0] via 192.168.1.1, 00:02:00
192.168.1.0/30 is subnetted, 2 subnets
C 192.168.1.0 is directly connected, Serial1/0
C 192.168.1.4 is directly connected, Serial1/1
B 192.168.100.0/24 [20/0] via 192.168.1.1, 00:02:00
Rosario#show ip bgp
BGP table version is 3, local router ID is 192.168.1.5
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
*> 192.168.50.0 192.168.1.1 0 0 100 100 100 100 100 100 100 100 100 100 100 i
*> 192.168.100.0 192.168.1.1 0 0 100 i
Cordoba:
Cordoba#show ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route
Gateway of last resort is not set
B 192.168.50.0/24 [20/0] via 192.168.1.5, 00:02:43
192.168.1.0/30 is subnetted, 1 subnets
C 192.168.1.4 is directly connected, Serial1/0
B 192.168.100.0/24 [20/0] via 192.168.1.5, 00:02:43
Cordoba#
Cordoba#show ip bgp
BGP table version is 3, local router ID is 192.168.1.6
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
*> 192.168.50.0 192.168.1.5 0 200 100 100 100 100 100 100 100 100 100 100 100 i
*> 192.168.100.0 192.168.1.5 0 200 100 i
Vemos que en Cordoba el AS-PATH tiene un largo importante, y si BuenosAires llegase a publicar rutas con un AS-PATH extremadamente largo se produciría el bug que vimos en el post anterior.
Aquí el administrador podría resolver esto de dos formas:
- Configurar el comando global bgp maxas-limit.
- Configurar un AS-PATH Access-List por cada peer que tenga.
Es evidente que la segunda opción es la más granular, pero no puede ser utilizada siempre porque puede implicar que se cambie la forma de filtrar rutas y establecer políticas. Además debe hacerse en cada vecino de BGP que tengamos, lo que puede resultar engorroso.
Vamos a configurar el maxas-limit en Rosario para ver que es lo que pasa:
Rosario#conf t Enter configuration commands, one per line. End with CNTL/Z. Rosario(config)#router bgp 200 Rosario(config-router)#bgp maxas-limit 5 Rosario(config-router)#end Rosario# *Mar 11 15:24:36.003: %BGP-6-ASPATH: Long AS path 100 100 100 100 100 100 100 100 100 100 100 received from 192.168.1.1: More than configured MAXAS-LIMIT
El proceso ha recortado la ruta de la tabla de BGP por exceder el largo de AS-PATH permitido en la configuración. Podemos ver los resultados de este comando:
BuenosAires:
BuenosAires#show ip bgp
BGP table version is 3, local router ID is 192.168.100.1
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
*> 192.168.50.0 0.0.0.0 0 32768 i
*> 192.168.100.0 0.0.0.0 0 32768 i
Rosario:
Rosario#show ip bgp BGP table version is 4, local router ID is 192.168.1.5 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 *> 192.168.100.0 192.168.1.1 0 0 100 i
Cordoba:
Cordoba#show ip bgp BGP table version is 4, local router ID is 192.168.1.6 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 *> 192.168.100.0 192.168.1.50 200 100 iEn Rosario tuvimos un aviso de que se descartó de la ruta, y por ende no se la anunció a Cordoba.
Con este sencillo comando podemos proteger nuestros equipos del desastre, hasta que el parche para el mismo sea liberado.
Espero que este post les haya servido.
Saludos!
0 comentarios:
Publicar un comentario