BGP中的环路分析与规避措施
一、BGP路由协议
BGP(Border Gateway Protocol,边界网关协议)是一种既可以用于不同AS(Autonomous System,自治系统)之间,又可以用于同一AS内部的动态路由协议。当BGP运行于同一AS内部时,被称为IBGP(Internal BGP);当BGP运行于不同AS之间时,称为EBGP(External BGP)。AS是拥有同一选路策略,属于同一技术管理部门的一组路由器的集合。
当前使用的BGP版本是BGP-V4。BGP-V4作为Internet外部路由协议标准,被ISP(Internet Service Provider,互联网服务提供商)广泛应用。
本案例设计出一个存在环路的BGP场景,对BGP的相关属性和防环错施进行分析,从而加深对BGP属性的理解。
二、拓扑描述
1、拓扑详图
2、组网说明
每台路由器的router id 为loopback0接口的IP地址,即路由器编号,如R1的router id 为1.1.1.1,并发布在OSPF中。路由器间的互联地址为两台路由器的编号,如R2和R3间的地址为23.1.1.X/24,X为接口所在路由器编号。R5直连了一个网段100.1.1.0/24,并发布到BGP中。
R1、R2、R3、R4四台路由器运行OSPF协议,R1与R4间的链路发布在区域2,R3与R4间的链路发布在骨干区域,R2与R3间的链路发布在区域1。
R1与R2在AS 1,R3与R4在AS 2,R5在AS5,AS间使用物理链路建立EBGP邻居,AS内使用loopback0建立IBGP邻居。
三、环路分析
1、路由发布分析
R5有一条BGP 100.1.1.0/24的路由发布进BGP AS3中,R1与R5是EBGP邻居,所以R1会收到这条EBGP100.1.1.0/24路由,R1有一个IBGP邻居,并配置向R2传递路由时将下一跳变为自己的接口,所以R2有访问100.1.1.1/24的路由。
同理R1和R2都会将自己学到的BGP路由传递给自己的EBGP邻居R4和R3,这样全网都学到了100.1.1.0/24的路由。
2、环路的产生
假设R2上某个网段想访问100.1.1.1/24,那我们来分析R2,R2从R1学到的IBGP路由,其访问100.1.1.1/24的下一跳是1.1.1.1,所以查IGP路由,发现R2 访问R1的Loopback0 1.1.1.1 下一跳指向R3,所以将数据包给了R3。
对于R3,会同时从R2和R4学到100.1.1.1/24的路由,那么R3会优选哪条路由呢?根据选路规则,在不改变相关属性默认值的情况下,会优选从EBGP邻居过来的路由,所以R3会优选从R2学到的路由,即R3将从R2收到的数据包回送给R2,环路产生。
四、解决方法
在解决此环路之前,我们先分析BGP的选路规则,再从相关属性作为突破口,来解决此问题。
1、BGP选路规则
⑴优选协议首选值(PrefVal)最高的路由。
⑵优选本地优先级(Local_Pref)最高的路由。
⑶优选本地生成的路由(依次优选手动聚合路由、自动聚合路由、network命令引入的路由、import-route命令引入的路由、从对等体学习的路由)。
⑷优选AS路径(AS_Path)最短的路由。
⑸比较Origin属性,依次优选Origin类型为IGP、EGP、Incomplete的路由。
⑹优选MED值最低的路由。
⑺优选从EBGP邻居学来的路由(EBGP路由优先级高于IBGP路由)。
⑻优选到BGP下一跳IGP Metric较小的路由。
⑼优选Cluster_List最短的路由。
⑽优选Router ID最小的路由器发布的路由。
⑾比较对等体的IP Address,优选从具有较小IP Address的对等体学来的路由。
2、相关解决方法
① 调整prefval值
Prefval值是本路由器有效,所以在R3设置从邻居学过来的prefval值,此值默认是0,值越大越优先,现用命令将从R4过来路由的prefval值改成1,而R2学过来的路由默认是0,则R3在选路时会选择下一跳为R4。
命令如下:
bgp 2
peer 4.4.4.4 route-policy abc import
route-policy abc permit node 10
apply preferred-value 1
② 调整本地优先级
分析:local-pre值默认是100,在整个AS内有效。可以影响出AS的流量。
方法一:在R3的入方向,从R4过来的 LP改成200
bgp 2
route-policy abc permit node 10
#
route-policy abc permit node 10
apply local-preference 200
#
③ 调整AS-PATH值
AS-PATH值越短越优先。从R2发过来的路由加上AS-PATH 号,不建议在R4上面overwrite 或减少其AS号,这样造成路由条目所经过的AS号丢失,AS-PATH的作用是在AS间防环路的作用,其丢失,则会存在环路的风险。如下操作,将从R2学到的路由加上AS100,这样R2就优选从R4学过来的路由。
bgp 2
peer 23.1.1.2 route-policy abc2 import
#
route-policy abc2 permit node 10
apply as-path 100 additive
④ 调整origin属性值
由于100.1.1.0/24是在R5上面network进来的路由,所以在所有路由器上看到其origin属性值为i,根据选路规则第5条,只需要将R2过来的改成incomplete即可影响R2的选路。如下配置:
bgp 2
peer 23.1.1.2 route-policy abc2 import
#
route-policy abc2 permit node 10
apply origin incomplete
⑤ 调整MED值
MED值默认是0,其值越小越优先。在此将从R2学到的路由的MED值改大即可影响R2的选路。
bgp 2
peer 23.1.1.2 route-policy abc2 import
route-policy abc2 permit node 10
apply cost 1
#
⑥ 还有其他方法改变其下一跳,如策略路由,但是未用BGP的属性,这里不再阐述。
五、总结
此案例非实际的工程案例,只是让我们从这个实验中去理解如何用BGP的属性去影响路由器的选路,同时也加深对BGP选路规则的理解。
2016年06月
本期文章
-
刊首语
-
公司动态
-
行业聚焦
-
产品推荐
-
案例介绍
-
经验共享
-
服务明星
-
培训天地