BGP 十一条选路原则与BGP路由传递的注意事项介绍
Posted Hades_Ling
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BGP 十一条选路原则与BGP路由传递的注意事项介绍相关的知识,希望对你有一定的参考价值。
十一条选路规则
1.优选Preferred-Value 属性值最大的路由。
2.优选Local_Preference 属性值最大的路由。
3.本地始发的BGP路由优于从其他对等体学习到的路由,本地始发的路由优先级:优选手动聚合>自动聚合>network>import>从对等体学到的。
即本地产生的BGP路由更优先,而本地的路由又分为普通路由与聚合路由,其中聚合路由更优先。
4.优选AS_Path属性值最短的路由。
5.优选Origin属性最优的路由。Origin属性值按优先级从高到低的排列是:IGP、EGP及Incomplete。
6.优选MED属性值最小的路由。
7.优选从EBGP对等体学来的路由(EBGP路由优先级高于IBGP路由)。
指学习到两条相同目的路由时,一条为IBGP路由,一条为EBGP路由,将优先选择EBGP路由。
8.优选到Next_Hop的IGP度量值最小的路由。
9.优选Cluster_List最短的路由。
经过反射簇次数最少的路由条目。
10.优选Router ID(Originator_ID)最小的设备通告的路由。
指学习到两条相同目的路由,其它属性一致,但通告的router-id(或反射后的路由Originator ID)不一致时,优先选择地址最小的通告者路由。
11.优选具有最小IP地址的对等体通告的路由。
选路规则口诀
1、在BGP路由选择中,如果存在多条路由的前8条规则相同,那么这些路由将会进行负载分担。
前8条相同路由会负载分担,但默认负载分担的条目只有1条,故只看到一个下一跳。
需要存在多个下一跳,需要在BGP模式中输入:
[实现IBGP路由负载分担]
maximum load-balancing ibgp 2
[实现EBGP路由负载分担]
maximum load-balancing 2
虽然说前8条相同则在IBGP内负载,但对外EBGP不可能说存在两条相同的路由,故需要后3条进行选举出最优的路由传递给EBGP。
2、为了方便记忆这些规则可记忆该口诀:漂亮老男人(PL LAO MEN)
P= preferred-value协议首选值
L= Local_Preference本地优先级
L= Local,本地始发路由的更优先
A= AS_Path
O= Origin起源
M= Med值
E= EBGP对等体优先于IBGP
N= Next_Hop下一跳最小
BGP路由传递注意事项
1、建立邻居时,需要确保TCP可达
如何定义TCP可达?
两端都有对方的路由,中间设备无TCP过滤(TCP/179)
2、路由传递时,从IBGP邻居学习到的路由不会传递给IBGP邻居(水平分割机制,用来防止环路产生)
3、路由传递时,从EBGP邻居学习到的路由可以传递给其它EBGP邻居,也可以传递给IBGP邻居,但传递给IBGP邻居时,下一跳不变。
BGP在传递路由时,从EBGP邻居学习到的路由,发布给IBGP邻居时,下一跳不变。
【十大路径属性中Next_Hop缺省值定义提到】
为了解决EBGP下一跳不变,通过命令:
peer 邻居 next-hop-local
有下一跳改变,也有下一跳不改变:
peer 邻居 next-hop-invariable
4、在建立IBGP邻居时建议使用Loop环回口建立,保证网络的冗余性、可靠性。
避免使用物理接口建立邻居时,链路坏了还需要重新配置。
使用环回口建立邻居,如果一边不指定源环回口,一边指定源,结果还是会正常进行建立邻居的。
因为BGP只要建立起了一个TCP连接就能够建立起BGP邻居并传递路由。
在ENSP中,BGP建立双向邻居时,会产生两个TCP连接,但最终只会保留router-id大的一方发起的TCP连接。
但在实际环境中,BGP建立邻居产生的两个TCP连接,只会保留最后建立的TCP连接。
关于BGP的TCP连接数量个人见解
以IBGP使用环回口建立为例,如果双方路由器都相互指定环回口建立,那么在这个BGP对等关系中将会产生两条TCP连接。虽然最后会自动删除掉一条TCP连接,但这个过程还是消耗了设备与链路的一定资源。
当网络存在多个邻居,重复如此建立两条TCP连接,又删除一条连接的动作,对设备的负担和链路的负担是直线上升的。
为此,IBGP在使用环回口建立邻居时,进行单向的指定即可。
这样只会建立一条TCP连接,同时也能正常的进行传递路由。
5、在建立EBGP邻居时一般使用直连接口建立,因为EBGP邻居建立时考虑到安全问题,默认数据包的TTL为1,只有直连链路会接收并处理该数据包,非直连链路不会处理该数据包(TTL归0)。
如果通过环回口建立EBGP邻居,首先保证两台设备之间的环回口TCP可达,其次需要更改EBGP默认的TTL,才能让EBGP邻居之间通过环回口建立邻居关系。
1、EBGP邻居建立关系时,使用环回口建立:
peer 1.1.1.1 connect-interface loopback0
2、设置TTL最大跳数:
peer 1.1.1.1 ebgp-max-hop 100
6、运行BGP的设备,默认情况下同一条路由有多个下一跳时,只会将BGP路由表中最优且有效的路由,将进路由表中(即BGP路由条目左侧有*>)。
若该路由条目没有*也没有>,表示该路由条目并非最优的、非有有效的,自身不计算该路由同时也不会传递给其它邻居。(BGP只传递最优路由,只计算有效路由)
7、BGP的同步机制
同步机制,指路由器学习到一条IBGP路由时,默认不能将该路由通告给其它BGP对等体。
除非它又从IGP协议(例如OSPF等,此处也包含静态路由)学习到这条IBGP路由,也就是要求IBGP路由与IGP路由同步时才能将进行传递给其它BGP邻居。
同步规则主要用于规避BGP路由黑洞问题。
原因:我学习到该IBGP路由,我并不一定知道去往该路由的下一跳(学习到的IBGP路由并不一定有效)故不会使用且不会通告给其它IBGP邻居,如果我配置的IGP知道路由下一跳的话,我才就能使用和通告该路由。
扩展:华为设备默认禁止BGP路由同步机制,故学习到的IBGP路由可以传递给其它邻居。即使说该IBGP的下一跳不可达,也会进行传递出去。
关于BGP的一些疑惑记录
1、IBGP进行跨设备建立时,会产生BGP路由黑洞,那么如何解决BGP路由黑洞呢?
1、建立BGP全互联,BGP两两建立,但手动建立的命令数量过大。
2、配置BGP反射器,大减少命令配置。会打破原先的水平分割机制,但也引入其它防环机制(cluster-list、Originator ID)。
3、还有后面会介绍到的MPLS标签交换
2、跨设备配置BGP的好处?
减轻中间网络设备的负担
3、为什么说BGP一般传业务路由,不会传递邻居的链路信息?
假设两个EBGP邻居通过环回口建立建立邻居,必然需要提前配置去往对端环回口的静态路由(优先级60)。
那么EBGP中发布环回口的话,EBGP路由优先级为255,很明显没有静态路由的优先,故BGP一般传业务不传建立邻居路由信息。
IGBP建立发布也是一样的,底层的IGP路由肯定比IBGP的路由优先级高。
BGP的属性和选路原则
一、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
关于正则表达式,下篇讲解
以上是关于BGP 十一条选路原则与BGP路由传递的注意事项介绍的主要内容,如果未能解决你的问题,请参考以下文章