一、BGP 的路由优先问题
BGP同步问题:
通过IBGP学习路由必须通过IGP学习,否则路由不优;为了解决技术层面的路由黑洞问题,一般建立关闭,使用MPLS标签转换技术解决。
下一条问题:next-hop下一跳属性在路由传递时,是否改变规则:
1、将IBGP邻居学习到的路由传递给EBGP时,next-hop为建立EBGP邻居的更新源地址。
特例:若边界设备与EBGP邻居使用MA网络并直连建立邻居,并且边界设备学习到达该路由的路由下一跳(递归后的)接口也为该MA网络接口,则使用EBGP学习的下一跳为IBGP邻居的MA接口地址(ICMP重定向),注意该特性也使用与EBGP学习路由传递给其他EBGP邻居时。
2、将EBGP邻居学习的路由传递给IBGP邻居时,next-hop不发生改变;传递个其他EBGP邻居时下一跳为建立EGBP邻居的更新源地址。
二、BGP路由导入和导出
BGP 路由引入:
1、Network
2、重发布
3、聚合产生
1、network引入时,若为直连路由、静态出接口写法路由(包含出接口为null 0),next-hop为0.0.0.0;若为IGP路由,本路由器中IGP路由的下一跳地址为next-hop地址。
当接收到的next-hop为自己直连接口BGP路由条目,不学习,直接忽略,防止出环。
2、重发布引入时,与next-hop一致。(必须关闭自动汇总,若开启,则next-hop为0.0.0.0)
注意:将OSPF路由重发布引入BGP时,默认不会将OSPF中的5类和7类LSA引入, 若要引入,则重发布过程中增加match匹配5类和7类LSA.
3、聚合产生的路由条目,next-hop为0.0.0.0。
BGP路由导出:
将BGP重发布进入IGP中,默认仅将EBGP邻居学习到的路由和本路由network引入的路由重发布引入。若要将IBGP邻居学习到的路由重发布引入BGP,则使用命令:
R(config)#router bgp 1
R(config-router)#bgp redistribute-internal
三、BGP后门路由
1、Backdoor属性是使router优选从IGP学习到的路由,而不是优选从IBGP邻居学习到的路由,因为缺省情况下,EBGP邻居AD为20,会始终优先选择,而不会选择其他AD的IGP路由协议传递过来的路由。
2、后门路由用于一些特殊的情况,将IGP路由的优先级调高于EBGP。
四、BGP路由惩罚
目的:抑制路由摆动
被惩罚的路由不能参与选路,不能传递,惩罚是针对该路由的路径。
惩罚值:路由每翻滚一次,惩罚值增加1000,路由属性每改变一次,惩罚值增加500
惩罚门限:开始进行惩罚的惩罚值,默认2000
重用门限:当惩罚值降低到该值是,恢复路由,默认750
半衰期:每经过一个半衰期,惩罚值减半,默认15分钟
最大惩罚时间:最大惩罚路由时间,默认60分钟
最大惩罚值:重用门限*2^(最大惩罚时间/半衰期),默认12000
五、BGP的属性
一共10条,Cisco有11条,weight是Cisco私有属性
1、公认必遵:Origin,AS-path,Next-hop
2、公认可遵:local-pref,auto-aggregate
3、可选传递:aggregator,community
4、可选非传递:MED,Originator-ID,cluster-list,weight
(1)Origin属性:记录了路由是如何进入路由表的。
Origin code:i--IGP,e--EGP,?--incomplete
使用i标示——管理员使用network宣告引入
使用e标记——通过EGP协议学习后,重发布到BGP协议中的路由
使用?标记——通过IGP协议学习后,重发布进入BGP协议中的路由
优先级:i > e > ?
(2)AS-path属性:指出包含在update报文中的路由信息所经过的自治系统号。
1、路由条目在一个AS内部传递时,不会添加该AS的编号,而是在传递给其他EBGP邻居时,才添加该参数;并且优选经过的AS数量少的路径。
2、管理员可以通过添加AS来干涉选路,添加后即可干涉EBGP邻居关系选路,也可干涉IGBP邻居关系选路,但只能在EBGP邻居修改该参数。
(3)Next-hop属性:
1、将IBGP邻居学习到的路由传递给EBGP邻居时,next-hop为建立EBGP邻居的更新源地址。
2、将EBGP邻居学习到的路由传递给IBGP邻居时,next-hop不发生改变;传递个其他EBGP邻居时下一跳为建立EGBP邻居的更新源地址。
(4)Local-pref属性:
1、local-pref称为本地优先级,其中的(local)本地就是指AS,local-pref属性的传递范围只能在同一个AS内部有效,出了本AS就会被还原成默认值100.
2、local-pref属性在BGP邻居之间自动传递时,只有将路由发给IBGP时才会传递,而发给EBGP时,没有local-pref值。一条路由在AS内所有路由器上的默认local-pref值是100。
3、local-pref的值越高,路由的优先级就越高。
(5)auto-aggregate属性:
用来警告下游路由器路由聚合后产生的路由路径丢失。
BGP支持向BGP邻居传递重叠路由,可以选择多种方式:
1、明细和粗略的都公布
2、只公布明细
3、只公布没有重叠的
4、公布聚合后的路由
5、明细和粗略都不公布
(6)Aggregator属性:
用来通告汇总路由的汇聚路由器BGP_ID(Cisco)和聚合路由的路由器的AS号。
(7)community属性:
标准community (Standard community)做路由标示
扩展community(extended community)用于MPLS ×××
(8)MED多出口鉴别属性:
MED就是BGP中的metric,在不同AS间传递。在有多个下一跳EBGP邻居时,会优先选择MED值最小的路径;在同一个AS内部不传递该属性,同一AS内的MED的默认值为0,这是为了在同一个AS内的路由器拥有等同的选路结果。
(9)Originator-ID属性:
路由反射器使用该属性,不接收与自己相同的起源者ID的路由,防止环路。
(10)Cluster-list属性:
路由反射器使用该属性,不接收与自己相同的簇列表的路由,防止环路。
(11)Weight属性:
Weight属性是Cisco私有属性,只有Cisco的路由器才能识别weight。
1、路由的weight属性只在本地路由器起作用,BGP将路由传递给邻居时,并不保留weight。Weight值的范围0~65535,默认为0,如果是BGP本地发起路由,weight值32768。
2、当到达同一目的地存在多条路径时,优选weight值大的。在Cisco路由器中,比较最优路径的第一条规则就是比较weight值,所以只要改动weight值,就能控制Cisco路由器的BGP选路。
六、BGP的选路原则(13条)
BGP选路:a、无环(AS转发环路)
b、路由优化(IBGP同步已解决;下一跳可达)
c、路由不能是被惩罚状态
1、最高weight值 (选最高weight值的路由,Cisco私有,默认为0,如果是BGP本地发起路由,weight值32768)
2、最高Local-pref值(若weight值相同,则选择拥有最高local-pref值的路由,默认100)
3、本地发起(起源)路由(若local-pref值相同,则选择BGP本地发起的路由:也就是下一跳为0.0.0.0的路由。本地发起的路由有多种方式:network命令引入,重发布,汇总。)
4、最短AS-path(若本地发起路由无法比出最有路径,则选择拥有最短AS-path的路由。可以使用bgp bestpath as-path ignore 命令来忽略对AS-path的比较,而直接比较下一属性。)
5、最低origin类型(若AS-path无法比较出最优路径,则选择拥有最低origin类型的路由。origin记录了路由是如何进入路由表的,有三种方法:从IGP导入,从EGP导入,以及重发布。优先级:IGP > EGP > Incomplete)
6、最小MED值(若origin类型无法比较出最优路径,则选择拥有最小MED值的路由,并且只有当多个下一跳邻居在同一个AS时,才能比较MED值。如果在多个不同AS的下一跳中比较MED,可使用命令bgp always-compare-med,需注意此命令在整个AS的路由器上配置,否则可能产生环路。MED默认值为0,如果收到一条没有MED值的路由,也认为是0)
7、EBGP优于IBGP(若MED无法比较出最优路径,则选择下一跳为EBGP的邻居。EBGP的路由AD为20,而IBGP的路由AD为200,但BGP并不在EBGP与IBGP间比较AD值,比到此步时,是邻居类型影响了最优路径的选择,而不是AD值的影响。注意:BGP联邦内部没有改规则)
8、在下一跳地址中,选择拥有IGP metric最小的路由
9、如果配置了maximum-path,若存在多条等价路径,会同时进路由表,即负载均衡
10、若下一跳都为EBGP,则选择最早学习到的路由,即时间最长的路由。(前提必须是external路由,联邦内的EBGP路由当做IBGP处理)
11、选择拥有最低router-id的下一跳路由
12、选择拥有最短cluster-list的路由
13、选择下一跳邻居拥有最小IP地址的路由
七、BGP路由过滤
1、route-map
2、Prefix-list
3、Distribute-list
4、As-path ACL(基于正则表达式)
可以将ip as-path access-list 命令中的正则表达式用于BGP
关于正则表达式,下篇讲解
原文地址:http://blog.51cto.com/13596342/2143717