最近重新验证一下bgp协议在思科设备上选路原则问题,并且分析了每一条的属性在配置过程中的注意事项,顺便整理一下文章:

思科官方的定义:

http://www.cisco.com/c/en/us/support/docs/ip/border-gateway-protocol-bgp/13753-25.html

使用的网络拓扑如下:
http://nbma.info
基本配置:每个路由器上配置一个环回口loopback0:xx.1.1.1/32;R4是RR。
1. weight

只在本地有效。

a针对邻居修改:
原来的bgp路由情况
http://nbma.info

直接针对邻居修改权重:
R3(config-router)#nei 23.1.1.2 weight 1
从该邻居得到的条目权重被修改:
http://nbma.info

b.针对特定路由条目通过route-map修改
access-list 1 permit 5.5.5.5 //匹配需要修改的BGP路由
route-map WE permit 10 //使用route-map修改权重值
match ip address 1
set weight 2
route-map WE permit 20
router bgp 200
neighbor 13.1.1.1 route-map WE in //在bgp邻居下调用
修改后的结果:
http://nbma.info

2. 本地优先级local preference

通常用于离开本AS的选路 默认为100,
ibgp邻居之间会更新本地优先级属性,不会更新给real EBGP 邻居(联邦会更新本地优先级属性)

针对EBGP设置 in方向(常用,选择ASBR) IBGP 设置in 或者out都可以
a.全局配置 —-把EBGP 邻居学习到的路由都修改
bgp default local-preference 102
b. 匹配某条路由,针对邻居设置本地优先级。

修改前:
http://nbma.info

使用route-map修改本地优先级来影响R1选路:
R1(config)#access-list 1 permit 33.1.1.1 /32
R1(config)#route-map LO permit 10
R1(config-route-map)#match ip address 1
R1(config-route-map)#set local-preference 200
R1(config)#route-map LO permit 20
R1(config)#router bgp 100
R1(config-router)#nei 22.1.1.1 route-map LO in
http://nbma.info

3. origin 本地起源
一般看到 next-hop 为0.0.0.0 都是本地注入的
本地注入路由 三种方法: network 重分布 aggregate

在R2上新开启一个环回口122.1.1.1/32,宣告进BGP,设置weight为0;同时在R1上配置该环回口的静态路由,重分布进BGP。此时R2优选本地产生的路由。
R2(config)#access-list 1 per 122.1.1.1 /32
R2(config)#route-map OR permit 10
R2(config-route-map)#match ip address 1
R2(config-route-map)#set weight 0
R2(config)#router bgp 100
R2(config-router)#network 122.1.1.1 mask 255.255.255.255 route-map OR
R1(config)#ip route 122.1.1.1 255.255.255.255 10.1.1.2
R1(config)#router bgp 100
R1(config-router)#redistribute static
http://nbma.info

4. as-path 越短越优先

bgp bestpath as-path ignore//隐含命令,忽略as-path作为选路原则

宣告R3的环回口,R1分别从R2R3学习到该路由,由于ebgp优于ibgp,R1会优选从EBGP(R3)学到的路由
http://nbma.info

在R1上通过route-map增加从R3得到的路由的as-path,使其优选R2:
R1(config)#access-list 1 permit 33.1.1.1 /32
R1(config)#route-map AS per 10
R1(config-route-map)#matc ip add 1
R1(config-route-map)#set as-path prepend 200 200 200 200
R1(config)#router bgp 100
R1(config-router)#neighbor 13.1.1.3 route-map AS in
R1(config-router)#exit
http://nbma.info

5.起源代码origin code
i代表的是network、aggregate引入
?代表是重分布引入的路由
e代表ebgp引入(已经不用了)
IGP>egp>?

删掉上一个route-map,改回之前的状态
http://nbma.info

在R1通过route-map强制修改从R3得到的路由的起源代码
R1(config)#access-list 1 permit 33.1.1.1 /32
R1(config)#route-map OR permit 10
R1(config-route-map)#match ip address 1
R1(config-route-map)#set origin incomplete
R1(config-route-map)#router bgp 100
R1(config-router)#neighbor 13.1.1.3 route-map OR in
http://nbma.info

6. MED多出口分离器,越小越优先
被称为BGP的Metric,如果BGP通告的从IGP得到的路由,则MED值将继承自IGP的metric
通常用于告知ebgp邻居如何进入到本AS

在R3上分别针对R1R2设置一个metric值,当路由更新到R1时,通过前5条无法选出最优路由,此时R1会比较两条bgp路由的MED值,得到最优
http://nbma.info

R3(config)#route-map R1
R3(config-route-map)#set metric 13
R3(config-route-map)#exit
R3(config)#route-map R2
R3(config-route-map)#set metric 12
R3(config)#router bgp 200
R3(config-router)#neighbor 13.1.1.1 route-map R1 out
R3(config-router)#neighbor 23.1.1.2 route-map R2 Out
http://nbma.info

7.EBGP优于ibgp
与管理距离无关。

默认情况下R1和R2从R3和对方同时得到33.1.1.1/32的路由,但都是优选从R3的得到的
http://nbma.info

8. metric,到达bgp下一跳的IGP的metric
默认情况,宣告R3环回口,在R4上看到,他应该是根据route-id选择R1作为最优吓一跳,因为此时在IGP路由表中,R4到达11.1.1.1和22.1.1.1的metric相同,通过前面的选路原则没有选出最优
http://nbma.info

此时,可以通过更改去往11.1.1.1的metric来干预选路,在R1的lo 0修改cost:
R1(config-if)# int lo 0
R1(config-if)#ip ospf cost 1000
此时R4的igp路由表:
http://nbma.info

R4的bgp选录已经被影响:
http://nbma.info

9. load balance负载均衡
开启ibgp多路径maximum-paths ibgp 4
对于ebgp,直接在bgp中开启maximum-paths 4或者maximun-paths eibgp 4
对于ibgp负载均衡:
还原上一步的操作,还是在r4上 ,bgp路由33.1.1.1下一跳11.1.1.1和22.1.1.1的metric相同,直接在bgp进程下开启:
R4(config)#router bgp 100
R4(config-router)#maximum-paths ibgp 2
结果如下:
http://nbma.info

对于ebgp负载均衡
默认情况下,R3上5.5.5.5的bgp路由优选ebgp邻居建立时间最久的下一跳,
http://nbma.info

在bgp开启负载均衡:
R3(config)#router bgp 200
R3(config-router)#maximum-paths 2
http://nbma.info

10.older 建立邻居更久的

使用bgp bestpath compare-routerid,可以跳过这条

http://nbma.info

对于R3,,分别与R1R2建立邻居关系:通过重新建立邻居来重置ebgp邻居
R3(config)#router bgp 200
R3(config-router)#nei 23.1.1.2 shut
R3(config-router)#nei 23.1.1.2 shut
*Oct 29 19:40:10.994: %BGP-5-NBR_RESET: Neighbor 23.1.1.2 reset (Admin. shutdown)
*Oct 29 19:40:10.999: %BGP-5-ADJCHANGE: neighbor 23.1.1.2 Down Admin. shutdown
*Oct 29 19:40:10.999: %BGP_SESSION-5-ADJCHANGE: neighbor 23.1.1.2 IPv4 Unicast topology base removed from session Admin. shutdown
R3(config-router)#no nei 23.1.1.2 shut
http://nbma.info

11.route-id
如果是从RR得到的路由,那么这条路由的router-id会被Originator-id替换,也就说会拿Originator-id和其他路由的router-id作比较。
前面说过,在默认情况下, R4上33.1.1.1的最优根据R1,R2的之中较小的route-id选择了11.1.1.1。通过修改R1的bgp router-id来影响选路:
修改前:
http://nbma.info

修改后:
http://nbma.info

12.cluster list 簇list长度
将R4设置为RR,R1、R5、R6为客户端;R6设置为RR,R5为客户端。这样R5分别从R4和R6学习到33.1.1.1的路由,并且前十条选录原则无法选出最优路由,第十一条router-id由于RR原因被originator id覆盖。此时会根据cluster list长度进行选路:
http://nbma.info

可以看到,从44.1.1.1得到的路由cluster长度为1,从66.1.1.1得到的路由cluster长度为2,优选44.1.1.1
13.最小的neighbor 地址