BGP: Conditional Advertisement using non-exist-map:
· If we see the BGP Best Path selection order, we have more control over the traffic leaving our Autonomous System than the traffic entering our AS.
· This is because the attributes used to affect the Outbound traffic (WEIGHT and LOCAL OREFERENCE) comes first in the order, than the attributes used to affect the inbound traffic (AS-PATH and MED)
· Sometimes this behavior may not be desirable.
· BGP conditional advertisement gives us an alternative way to affect how traffic enters our AS.
· If we don’t advertise a route to a specific neighbor, he is forced to come through another neighbor who has the route.
· This feature is typically used in Multihomed environment.
· By controlling which prefixes are advertised which neighbors, traffic is forced to route in the appropriate path or link.
Let me take a small topology to configure and verify this feature:
· R1: AS 100
· R2: AS 200
· R3: AS 300
· R1 is advertising its loopback 1.1.1.1/32 into BGP
· Under normal conditions, R2 would choose the Ser1/0 link directly connected between R2-R1 to reach R1’s loopback 1.1.1.1/32 (R2 has another route from R3 also)
· But, what if R1 doesn’t want any inbound traffic on the Ser1/0 link?
· R1 can use AS-PATH prepending or MED to affect the inbound-traffic from R2.
· But still R2 can use Weight or Local preference to override this (because these 2 attributes comes first in the BGP Best path selection order)
· Solution: R1 can use Conditional advertisement feature
· R1 advertises 1.1.1.1/32 prefix to R2, only if R1-R3 link fails.
· So, R2 would learn about 1.1.1.1/32 though R3, and R2 would route through R3 to reach 1.1.1.1/32.
· In case of R1-R3 link failure, R1 advertises the prefix directly to the neighbor R2.
· We will use of NON-EXIST-MAP and ADVERTISE-MAP to configure this.
· We need to match the following:
o R1-R3 link (100.1.31.0/24) in non-exist-map and
o Prefix to be advertised, 1.1.1.1/32 in advertise-map
· Once the prefix in non-exist-map (R1-R3) leaves the BGP table, then the prefix matched by Advertise-map gets advertised to the neighbor.
Configuration:
R1#show run | begin router bgp
router bgp 100
no synchronization
bgp router-id 1.1.1.1
bgp log-neighbor-changes
network 1.1.1.1 mask 255.255.255.255
neighbor 100.1.12.2 remote-as 200
neighbor 100.1.31.3 remote-as 300
no auto-summary
!
R2#show run | begin router bgp
router bgp 200
no synchronization
bgp router-id 2.2.2.2
bgp log-neighbor-changes
network 2.2.2.2 mask 255.255.255.255
neighbor 100.1.12.1 remote-as 100
neighbor 100.1.23.3 remote-as 300
no auto-summary
!
R3#show run | begin router bgp 300
router bgp 300
no synchronization
bgp router-id 3.3.3.3
bgp log-neighbor-changes
network 3.3.3.3 mask 255.255.255.255
neighbor 100.1.23.2 remote-as 200
neighbor 100.1.31.1 remote-as 100
no auto-summary
!
R1#show ip bgp summary
BGP router identifier 1.1.1.1, local AS number 100
BGP table version is 4, main routing table version 4
3 network entries using 351 bytes of memory
5 path entries using 260 bytes of memory
6/3 BGP path/bestpath attribute entries using 744 bytes of memory
4 BGP AS-PATH entries using 96 bytes of memory
0 BGP route-map cache entries using 0 bytes of memory
0 BGP filter-list cache entries using 0 bytes of memory
BGP using 1451 total bytes of memory
BGP activity 3/0 prefixes, 5/0 paths, scan interval 60 secs
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
100.1.12.2 4 200 8 8 4 0 0 00:02:35 2
100.1.31.3 4 300 8 8 4 0 0 00:02:01 2
R1#
R2#show ip bgp summary
BGP router identifier 2.2.2.2, local AS number 200
BGP table version is 4, main routing table version 4
3 network entries using 351 bytes of memory
5 path entries using 260 bytes of memory
6/3 BGP path/bestpath attribute entries using 744 bytes of memory
4 BGP AS-PATH entries using 96 bytes of memory
0 BGP route-map cache entries using 0 bytes of memory
0 BGP filter-list cache entries using 0 bytes of memory
BGP using 1451 total bytes of memory
BGP activity 3/0 prefixes, 5/0 paths, scan interval 60 secs
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
100.1.12.1 4 100 8 8 4 0 0 00:02:35 2
100.1.23.3 4 300 8 8 4 0 0 00:01:53 2
R2#
R3#show ip bgp summary
BGP router identifier 3.3.3.3, local AS number 300
BGP table version is 4, main routing table version 4
3 network entries using 351 bytes of memory
5 path entries using 260 bytes of memory
6/3 BGP path/bestpath attribute entries using 744 bytes of memory
4 BGP AS-PATH entries using 96 bytes of memory
0 BGP route-map cache entries using 0 bytes of memory
0 BGP filter-list cache entries using 0 bytes of memory
BGP using 1451 total bytes of memory
BGP activity 3/0 prefixes, 5/0 paths, scan interval 60 secs
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
100.1.23.2 4 200 8 8 4 0 0 00:01:54 2
100.1.31.1 4 100 8 8 4 0 0 00:02:02 2
R3#
Observations:
· All neighbors are up.
R1#show ip bgp
BGP table version is 4, local router ID is 1.1.1.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
*> 1.1.1.1/32 0.0.0.0 0 32768 i
* 2.2.2.2/32 100.1.31.3 0 300 200 i
*> 100.1.12.2 0 0 200 i
* 3.3.3.3/32 100.1.12.2 0 200 300 i
*> 100.1.31.3 0 0 300 i
R1#
R2#show ip bgp
BGP table version is 4, local router ID is 2.2.2.2
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
* 1.1.1.1/32 100.1.23.3 0 300 100 i
*> 100.1.12.1 0 0 100 i
*> 2.2.2.2/32 0.0.0.0 0 32768 i
* 3.3.3.3/32 100.1.12.1 0 100 300 i
*> 100.1.23.3 0 0 300 i
R2#
R3#show ip bgp
BGP table version is 4, 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
* 1.1.1.1/32 100.1.23.2 0 200 100 i
*> 100.1.31.1 0 0 100 i
* 2.2.2.2/32 100.1.31.1 0 100 200 i
*> 100.1.23.2 0 0 200 i
*> 3.3.3.3/32 0.0.0.0 0 32768 i
R3#
R2#traceroute 1.1.1.1
Type escape sequence to abort.
Tracing the route to 1.1.1.1
1 100.1.12.1 36 msec * 48 msec
R2#
Observation:
· R2 is choosing the directly connected Ser1/0 link to reach R1’a loopback 1.1.1.1/32
Now, let me configure non-exist-map and advertise-map:
R1(config-router)#do show run | begin router bgp 100
router bgp 100
no synchronization
bgp router-id 1.1.1.1
bgp log-neighbor-changes
network 1.1.1.1 mask 255.255.255.255
network 100.1.31.0 mask 255.255.255.0
neighbor 100.1.12.2 remote-as 200
neighbor 100.1.12.2 advertise-map R1-LOOPBACK non-exist-map R1-R3-LINK
neighbor 100.1.31.3 remote-as 300
no auto-summary
!
ip prefix-list R1-LOOPBACK seq 5 permit 1.1.1.1/32
ip prefix-list R1-R3-LINK seq 5 permit 100.1.31.0/24
!
route-map R1-R3-LINK permit 10
match ip address prefix-list R1-R3-LINK
!
route-map R1-LOOPBACK permit 10
match ip address prefix-list R1-LOOPBACK
!
R1#show ip bgp neighbors 100.1.12.2 | i Condition
Condition-map R1-R3-LINK, Advertise-map R1-LOOPBACK, status: Withdraw
R1#
R1#show ip bgp neighbors 100.1.12.2 advertised-routes
BGP table version is 6, local router ID is 1.1.1.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
*> 3.3.3.3/32 100.1.31.3 0 0 300 i
*> 100.1.31.0/24 0.0.0.0 0 32768 i
Total number of prefixes 2
R1#
R1#show ip bgp
BGP table version is 12, local router ID is 1.1.1.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
*> 1.1.1.1/32 0.0.0.0 0 32768 i
* 2.2.2.2/32 100.1.31.3 0 300 200 i
*> 100.1.12.2 0 0 200 i
*> 3.3.3.3/32 100.1.31.3 0 0 300 i
* 100.1.12.2 0 200 300 i
*> 100.1.31.0/24 0.0.0.0 0 32768 i
R1#
R2#show ip bgp
BGP table version is 13, local router ID is 2.2.2.2
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
*> 1.1.1.1/32 100.1.23.3 0 300 100 i
*> 2.2.2.2/32 0.0.0.0 0 32768 i
* 3.3.3.3/32 100.1.12.1 0 100 300 i
*> 100.1.23.3 0 0 300 i
* 100.1.31.0/24 100.1.23.3 0 300 100 i
*> 100.1.12.1 0 0 100 i
R2#
R2#traceroute 1.1.1.1 source 2.2.2.2
Type escape sequence to abort.
Tracing the route to 1.1.1.1
1 100.1.23.3 60 msec 52 msec 28 msec
2 100.1.31.1 [AS 100] 68 msec * 60 msec
R2#
Observations:
· R1-R3 link is present in the R1’s BGP table.
· That’s why R1 is not advertising 1.1.1.1/32 directly to R2
· R2 is learning about 1.1.1.1/32 through R3
Now, let me shut the R1-R3 link:
R1(config)#int serial 1/1
R1(config-if)#shut
R1(config-if)#
*Jul 2 14:45:33.627: %BGP-5-ADJCHANGE: neighbor 100.1.31.3 Down Interface flap
R1(config-if)#
*Jul 2 14:45:35.607: %LINK-5-CHANGED: Interface Serial1/1, changed state to administratively down
R1(config-if)#
R1#show ip bgp
BGP table version is 9, local router ID is 1.1.1.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
*> 1.1.1.1/32 0.0.0.0 0 32768 i
*> 2.2.2.2/32 100.1.12.2 0 0 200 i
*> 3.3.3.3/32 100.1.12.2 0 200 300 i
R1#
R1#show ip bgp neighbors 100.1.12.2 | i Condition
Condition-map R1-R3-LINK, Advertise-map R1-LOOPBACK, status: Advertise
R1#
R1#show ip bgp neighbors 100.1.12.2 advertised-routes
BGP table version is 9, local router ID is 1.1.1.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
*> 1.1.1.1/32 0.0.0.0 0 32768 i
Total number of prefixes 1
R1#
R2#show ip bgp
BGP table version is 22, local router ID is 2.2.2.2
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
*> 1.1.1.1/32 100.1.12.1 0 0 100 i
*> 2.2.2.2/32 0.0.0.0 0 32768 i
*> 3.3.3.3/32 100.1.23.3 0 0 300 i
R2#
R2#traceroute 1.1.1.1 source 2.2.2.2
Type escape sequence to abort.
Tracing the route to 1.1.1.1
1 100.1.12.1 44 msec * 48 msec
R2#
Observation:
· R1-R3 link 100.1.31.0/24 is not present in R1’s BGP table
· That’s why R1 has advertised 1.1.1.1/32 to R2
No comments:
Post a Comment