十、对BGP一些情况的总结:
1、路由条目不优特殊情况:
在BGP协议中,存在一种无法优秀的路由条目;假设R4路由表中存在一条非BGP产生的到达5.5.5.5的路由条目,且该条目用于R4与R5建立BGP邻居关系;那么之后R5再将5.5.5.5的路由在BGP协议进行宣告,该条目到达R4后将无法优,不可用;通过BGP学习到的路由,和本地与对端建立BGP邻居的路由条目一致,条目将不优,不能传递不能加表;
2、BGP的宣告问题:
在一个真实的AS中将存在大量的未运行BGP协议的路由器,他们的直连路由无法在BGP协议中进行宣告;只能经由该AS中其他运行BGP协议的路由来进行宣告,传递给其他的AS;这些运行BGP协议的设备,是通过该AS中的IGP协议来获取这些路由的;BGP设备可以宣告本地路由表中任何来源的路由条目;
在BGP协议中,宣告本地路由表中路由条目时,将携带自己路由表中的度量值到BGP的属性中;这些携带度量属性的路由,在传递给本地EBGP邻居时,将继续携带,用于AS判断进入对端AS的最佳入口; 但是若本地宣告一条路由,携带度量值后,该路由通过IBGP邻居关系传递到BGP邻居处,邻居再将该路由传递到它的EBGP邻居时,将去除该属性,将有可能导致选路不佳;
注:故建议一个AS中所有运行BGP协议的路由,均宣告本AS的路由;
3、BGP的summary automatic 问题
自动汇总问题:在BGP协议中自动汇总功能默认关闭;开启后,对BGP正常宣告的路由没有影响;
针对从IGP协议重发布到BGP协议的路由,将产生影响;
[r2]bgp 2
[r2-bgp]import-route ospf 1
在BGP协议中对宣告和重发布的理解:
宣告就是逐条的将本地路由表中IGP协议产生的路由重发布到BGP中;
重发布就是批量的将本地路由表中IGP协议产地的路由宣告到BGP协议中;
两种方式产生的路由,其属性中仅起源属性不同,逐条宣告的路由起源属性更优;
从IGP重发布BGP的路由条目,ASBR设备若开启了自动汇总,这种路由将不携带原有掩码,按主类掩码传递,不携带ASBR到达这些路由的度量值;关闭自动汇总后,将携带掩码和度量;故建议不要开启自动汇总,默认为关闭;同理,在关闭自动汇总的前提下,重发布IGP到BGP时,ASBR将携带这些路由掩码和ASBR到达它们的IGP路由度量;故在一个AS中,和宣告问题一样;所有运行BGP的均需进行重发布,或宣告;
4、BGP的手工汇总 --- 聚合
(1)不是BGP协议自带的汇总方案,而是利用了BGP的宣告的特点,即本地路由表中任何来源的路由,均可宣告到bgp协议中(只要本地路由表中拥有的,且本机上运行了BGP协议的路由均可宣告)
宣告空接口:不逐条宣告明细,而是在汇总路由器上先配置到达汇总网段的静态空接口路由;然后由于BGP可以宣告本地路由表中任意来源的路由条目,故汇总设备可以直接将本地路由表中的空接口路由网段进行宣告;
BGP工作环境中,AS间大多存在多个EBGP邻居关系,仅仅使用聚合条目来共享路由,将无法达到最佳的选路;故需要在发送聚合条目的同时,再由各台BGP设备将本地为最佳路径的明细路由继续传递;
若使用第一种聚合配置方案,需要在EBGP邻居间发送聚合条目的同时,再发送明细条目的话,直接宣告即可;因为宣告明细设备将携带到达目标的cost值,导致其他AS,选路错误,故需要管理员判断清楚后再行宣告;
(2)BGP自带的聚合配置方案:
先逐条宣告本地明细路由,然后再进行聚合配置;本地将由BGP协议自动生成空接口防环路由;
[r1]bgp 1
[r1-bgp]aggregate 100.1.0.0 22
# 此时明细及聚合条目均同时共享到邻居
[r1-bgp]aggregate 100.1.0.0 22 detail-suppressed
# 仅发送聚合条目,所有明细均被抑制传输
(3)基于第二种聚合方案后,路由传递的干涉方法,为发送聚合条目的同时,再发送部分的明细路由
①抑制列表:使用抑制列表,标记被抑制路由,被标记后,该路由将不能传递
[r1]ip ip-prefix s permit 100.1.1.0 24
# 先允许该网段流量通过(抓取流量)
# 编写抑制列表,匹配流量
[r1]route-policy ss permit node 10
[r1-route-policy]if-match ip-prefix s
[r1-route-policy]q
# 在路由协议上调用该抑制列表
[r1]bgp 1
[r1-bgp]aggregate 100.1.0.0 22 suppress-policy ss
以上配置完成后,100.1.1.0/24将被抑制传输,在bgp表中使用s标注
②路由策略
[r1]ip ip-prefix q permit 100.1.1.0 24
# 先允许该网段流量通过(抓取流量)
# 编写路由策略,决定流量拒绝还是允许
[r1]route-policy q deny node 10
[r1-route-policy]if-match ip-prefix q
[r1-route-policy]q
[r1]route-policy q permit node 20
[r1-route-policy]q
# 然后再路由协议里调用路由策略
[r1]bgp 1
[r1-bgp]peer 12.1.1.2 route-policy q export
(3)前缀列表:当分发列表和路由策略用
[r1]ip ip-prefix ww deny 100.1.0.0 24
# 匹配流量,拒绝(允许)该流量
[r1]ip ip-prefix ww permit 0.0.0.0 0 less-equal 32
# 匹配流量,允许(拒绝)该流量,但后边表示的是掩码小于32位
# 在路由协议上调用该前缀列表
[r1]bgp 1
[r1-bgp]peer 12.1.1.2 ip-prefix ww export
5、有条件的打破IBGP水平分割;
为了避免IBGP环境下的环路,故使用IBGP水平分割;从一个IBGP邻居处学习到的路由不能传递给本地其他的IBGP邻居;导致在一个AS中为了实现路由的正常传递,需要所有运行BGP协议的设备均两两建立IBGP邻居关系;IBGP建邻配置量随BGP设备的增加成指数上升,打破后可以大大的减少建邻配置;
所谓有条件的打破是指,管理员在确定无环的情况下,且邻居关系存在备份的前提,来打破IBGP水平分割;
打破所用到的技术:
(1)路由反射器:
RR(反射器)可以将通过IBGP邻居传递过来的路由反射给本地其他的IBGP邻居; 被反射路由其属性不变;RR(反射器)收到的不优路由,失去了传递性,自然也不能被反射;在反射器协议中,存在三种角色 RR(反射器)、 客户端、非客户端
如果要设置反射器,就要要求RR(反射器)与本地的客户端或非客户端间为IBGP邻居关系; 一台RR(反射器)和它所有客户、非客户共同构建一个簇(组) 在一个簇中,至少存在一台RR(反射器)和一台客户端;
反射规则:
「1」RR从本地的EBGP邻居处学习到的路由,可以共享给本地的客户端、非客户端、其他EBGP邻居
「2」RR从本地的客户端学习到的路由,可以共享给本地其他的客户端、非客户端、EBGP邻居
「3」RR从本地的非客户端学习到的路由,可以共享给本地客户端、EBGP邻居,不能共享给本地的其他非客户端;
[r3]bgp 2
[r3-bgp]peer 2.2.2.2 reflect-client
2.2.2.2成为本地的客户端,同时本地成为RR;
若在一个AS中,仅使用反射器技术,那么需要定义反射器数据较为庞大,所以需要有新的技术,即建立联邦
(2)联邦
通过在一个真实的AS中,构建小as(联邦内AS) ;小AS的编号仅在联邦内有效;传不出该大AS; 小AS间为联邦内的EBGP邻居关系,这种关系可以像真实ebgp关系一样传递路由,但不能修改属性;联邦中所有设备均基于小AS号进行配置和管理
[r2]bgp 64512
[r2-bgp]router-id 2.2.2.2
[r2-bgp]confederation id 2 协议启动后,声明自己所在的大AS号
对端路由器:
[r3]bgp 64512
[r3-bgp]confederation id 2
[r3-bgp]confederation peer-as 64513 若本地连接了联邦内ebgp邻居,需要提前告知对端的小AS号
[r3-bgp]peer 2.2.2.2 as-number 64512
[r3-bgp]peer 2.2.2.2 connect-interface LoopBack 0
[r3-bgp]peer 4.4.4.4 as-number 64513
[r3-bgp]peer 4.4.4.4 connect-interface LoopBack 0
# 联邦之间建立EBGP邻居时,用环回建邻要修改最大跳数,否则无法建邻
[r3-bgp]peer 4.4.4.4 ebgp-max-hop 2
总结:反射器与联邦单独使用时,均配置量较大;故在实际工程使用,两种方案是协同后同时配置的;
注:在相同EBGP邻居之间只有一条线路时,使用真实接口地址建立邻居;在相同EBGP邻居之间有多条线路时,使用环回地址建邻(前提为双方环回可以通信)这是为了负载均衡,合理利用资源,但是注意:因为有EBGP对等体之间一般使用直连建邻,所以,EBGP对等体之间发送的数据包中的TTL值我们将其设置为1,但是到达对端的环回要经历两跳,所以不修改最大跳数时,双方路由器无法使用环回建立邻居关系,需要修改最大跳数(默认为1,修改值(2,255))。