Previous section   Next section

Recipe 9.7 Adjusting Local Preference Values

9.7.1 Problem

You want to change the Local Preference values to control which routes you use.

9.7.2 Solution

There are two ways to adjust Local Preference values on a router. The first method changes the Local Preference values for every route distributed into iBGP from this router:

Router1#configure terminal
Enter configuration commands, one per line.  End with CNTL/Z.
Router1(config)#router bgp 65500
Router1(config-router)#bgp default local-preference 200 
Router1(config-router)#end
Router1#

The second method uses route maps to give finer granularity control over which routes get what Local Preference values:

Router1#configure terminal
Enter configuration commands, one per line.  End with CNTL/Z.
Router1(config)#ip prefix-list LOW_LP_PREFIXES seq 10 permit 172.22.0.0/16
Router1(config)#route-map LOCALPREF permit 10
Router1(config-route-map)#match ip address prefix-list LOW_LP_PREFIXES
Router1(config-route-map)#set local-preference 50
Router1(config-route-map)#exit 
Router1(config)#route-map LOCALPREF permit 20
Router1(config-route-map)#exit               
Router1(config)#router bgp 65500
Router1(config-router)#neighbor 192.168.1.5 remote-as 65510
Router1(config-router)#neighbor 192.168.1.5 route-map LOCALPREF in
Router1(config-router)#end
Router1#

9.7.3 Discussion

When BGP routers within an AS exchange information about a particular route using iBGP, they include the Local Preference value. All of the routers in the AS are then able to use this value to decide how to weight this route versus other BGP routes to the same destination. BGP consults the Local Preference value early in the route selection process, before even the AS Path attribute. This provides an extremely useful and flexible way of forcing particular routes to use particular paths. Routers do not include Local Preference information when exchanging routes through eBGP connections.

A common example would be if you had two connections to an external network and you wanted to ensure that one was the primary path and the other was a backup. Suppose further that one of the routers in the AS handles the primary path and a second router handles the secondary path. The first example shows how to globally increase the Local Preference values of all routes received by one of these routers:

Router1(config)#router bgp 65500
Router1(config-router)#bgp default local-preference 200 

Now all of the external routes that this router handles will have a Local Preference value of 200. If you can reach a particular prefix through more than one path, the other routers in this AS will prefer to use the one with the highest Local Preference value. The default Local Preference is 100.

To see how this works in practice, we will once again use the network shown in Figure 9-2. The following output shows two paths to the network 10.0.0.0/8. This router learned the first route through iBGP from another router. You can see from the LocPrf column that this route has the default Local Preference value of 100:

Router2#show ip bgp
BGP table version is 4, local router ID is 172.18.5.3
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
* i10.0.0.0         172.18.5.2                    100      0 65510 65531 i
*>                  192.168.2.5                            0 65520 65531 i
Router2#

This router learned the second route through eBGP, so it doesn't have a Local Preference value. The router treats any missing Local Preference values the as if they had the default value of 100. So, all other things being equal, this router prefers to use the more direct route that it learned itself, which is indicated by the > character at the beginning of the line.

Now we will change the default Local Preference value on the other router to 200, using the bgp default local-preference command shown earlier:

Router2#show ip bgp   
BGP table version is 4, local router ID is 172.18.5.3
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
*>i10.0.0.0         172.18.5.2                    200      0 65510 65531 i
*                   192.168.2.5                            0 65520 65531 i
Router2#

The Local Preference value has changed to 200 for the iBGP route, so this router now prefers the iBGP route. You can see more detail by specifying the prefix with this command:

Router2#show ip bgp 10.0.0.0/8
BGP routing table entry for 10.0.0.0/8, version 4
Paths: (2 available, best #1, table Default-IP-Routing-Table)
  Advertised to non peer-group peers:
  192.168.2.5 
  65510 65531
    172.18.5.2 from 172.18.5.2 (172.18.5.2)
      Origin IGP, localpref 200, valid, internal, best
  65520 65531
    192.168.2.5 from 192.168.2.5 (172.21.1.1)
      Origin IGP, localpref 100, valid, external

Router2#

This clearly shows that the router interprets the missing Local Preference value as 100 on this router. If we now change the default value on this router to 75, it will use this new value instead when the value is missing:

Router2#configure terminal
Enter configuration commands, one per line.  End with CNTL/Z.
Router2(config)#router bgp 65500
Router2(config-router)#bgp default local-preference 75
Router2(config-router)#end
Router2#clear ip bgp *
<wait until the BGP peers reconnect>
Router2#show ip bgp 10.0.0.0/8
BGP routing table entry for 10.0.0.0/8, version 2
Paths: (2 available, best #2, table Default-IP-Routing-Table)
  Advertised to non peer-group peers:
  192.168.2.5 
  65520 65531
    192.168.2.5 from 192.168.2.5 (172.21.1.1)
      Origin IGP, localpref 75, valid, external

  65510 65531
    172.18.5.2 from 172.18.5.2 (172.18.5.2)
      Origin IGP, localpref 200, valid, internal, best
Router2#

Note that we had to clear the BGP peers and wait until they reconnected for this change to take effect. By chance, the router displays the routes in the opposite order. There is no particular significance to this ordering.

You can also use route maps to define different Local Preference values for different individual routes with route maps. This gives you a finer granularity, and even allows you to manually balance the load between these links by forcing some routes through one path and the rest through another path.

The second example shows how to use a route map to adjust Local Preference values:

Router1(config)#ip prefix-list LOW_LP_PREFIXES seq 10 permit 172.22.0.0/16
Router1(config)#route-map LOCALPREF permit 10
Router1(config-route-map)#match ip address prefix-list LOW_LP_PREFIXES
Router1(config-route-map)#set local-preference 50
Router1(config-route-map)#exit
Router1(config)#route-map LOCALPREF permit 20
Router1(config-route-map)#exit

Here we have defined a prefix list that just matches the prefix 172.22.0.0/16. Whenever the route map called LOCALPREF sees a route that matches this prefix list, it sets the Local Preference value for this route to 50.

We have included an empty clause at the end of the route map, which simply passes all other routes unchanged. Every route map ends with an implicit deny all. If we didn't include this explicit permit all clause, the router would simply drop any prefixes that didn't match the first clause.

We then invoke this rule using the standard route-map option to the neighbor command:

Router1(config)#router bgp 65500
Router1(config-router)#neighbor 192.168.1.5 remote-as 65510
Router1(config-router)#neighbor 192.168.1.5 route-map LOCALPREF in

Note that we are applying this route map to all incoming routes received from this specific eBGP peer. This particular route now has a Local Preference value of 50:

Router1#show ip bgp 172.22.0.0/16
BGP routing table entry for 172.22.0.0/16, version 5
Paths: (2 available, best #2, table Default-IP-Routing-Table)
Flag: 0x208
  Advertised to non peer-group peers:
  192.168.1.5 
  65510 65531
    192.168.1.5 from 192.168.1.5 (172.25.26.55)
      Origin IGP, localpref 50, valid, external

  65520 65531
    172.18.5.3 from 172.18.5.3 (172.18.5.3)
      Origin IGP, localpref 75, valid, internal, best
Router1#

Note that the other iBGP router (which we configured earlier) is still using the Local Preference value of 75.

Because this method used a route map, you can easily construct rules that would change the Local Preference values based on a large variety of different parameters. For example, you could match based on the AS Path, which is a technique that we discuss in more detail in Recipe 9.10. You could do this to give a higher or lower Local Preference value based on whether the route passes through a particular remote AS:

Router1(config)#ip as-path access-list 17 permit _65531_
Router1(config)#route-map LOCALPREF permit 30
Router1(config-route-map)#match as-path 17
Router1(config-route-map)#set local-preference 75
Router1(config-route-map)#exit

9.7.4 See Also

Recipe 9.10


  Previous section   Next section
Top