目录

BGP协议的两个问题

1)BGP路由黑洞

2)BGP的防环机制

(1)EBGP水平分割

(2)IBGP水平分割

BGP的基本配置

1)BGP邻居建立过程

(1)EBGP对等体直连建立对等体

(2)IBGP对等体环回建立对等体

(3)EBGP对等体环回建邻

2)BGP的路由发布

(1)通过network命令进行发布

(2)通过重发布来发布BGP路由

3)BGP路由聚合

(1)自动聚合

(2)手工聚合

4)路由反射器

5)联邦

(1)AS间与联邦建立对等体关系

(2)联邦内建立对等体关系

(3)联邦间建立对等体关系


BGP协议的两个问题

1)BGP路由黑洞


由于BGP协议可以非直连建邻,故可能出现BGP协议跨越未运行BGP协议的路由器,导致BGP路由传递后,显示控制层面可达,但是数据层面,流量经过未运行BGP协议的路由器时,无法通过,形成路由黑洞。



解决方案:



1,让AS内所有设备都运行BGP协议



2,可以在AS内部运行BGP的设备上像AS内部使用的IGP协议中进行重发布。


3,使用MPLS技术解决路由黑洞问题 --- 是当前工程中主要使用的解决BGP路由黑洞方案。



BGP为了防止BGP路由黑洞的产生,提出了 BGP同步机制 --- 即当一台路由器从自己IBGP对等体学习到一条BGP路由时,他不能将这条路由 通告给自己的EBGP对等体,除非他又从IGP协议中(包含静态路由)学习到这条路由。也就是要求IBGP路由和IGP路由同步。华为设备默认关闭BGP的同步规则。



由于刚刚学习有关BGP的配置,所以我们使用最简单的解决方案1来解决此问题。




2)BGP的防环机制



BGP使用的防环机制 ---- 水平分割



在BGP中的水平分割分为两种:



1,EBGP水平分割 --- 专门解决EBGP对等体之间可能出现的环路问题。



2,IBGP水平分割 --- 专门解决IBGP对等体之间可能出现的环路问题。




(1)EBGP水平分割



BGP协议在路由条目中记录所经过的AS编号 --- AS_PATH属性(记载所有经过AS编号的属性,该属性除了可以用来进行EBGP对等体之间的防环外,还可以在特定情况下进行路由选路)。接收到的BGP路由条目中的AS_PATH中若包含本地的AS号,则将拒绝接受,避免环路产出。




(2)IBGP水平分割



因为BGP的AS-BY-AS的特性,导致AS内部被认为是一个整体,在默认情况下,路由的属性是不会发生变化的,所以,无法通过属性来进行防环。



所以,IBGP水平分割的做法 --- 当一个路由器从一个 IBGP对等体 出学习到某一条BGP路由时,他将不再把这条路由信息通告给其他的 IBGP对等体 。




IBGP水平分割引起的问题



IBGP水平分割可以有效的解决IBGP对等体之间路由回传造成的环路问题,但是,也会引发路由信息传递障碍问题。想要避免IBGP水平分割带来的问题,可以让所有AS内部运行BGP的路由器均建立IBGP对等体关 系。---- 这种建立全连的IBGP对等体的方案并不是最佳解决方案 --- 因为,当一个AS内运行BGP协议的路由器数量较多时,建立全连的邻居关系,将造成大量的资源浪费,并且降低网络的可扩展性。



所以BGP存在两个技术专门用于解决IBGP水平分割带来的问题:



1,路由反射器    2,联邦




BGP的基本配置

IBGP BGP路由黑洞 bgp路由黑洞是什么_IBGP BGP路由黑洞

通过此图进行BGP相关配置 

1)BGP邻居建立过程

(1)EBGP对等体直连建立对等体

1.启动BGP进程



[r1]bgp 1 --- 1 指的是该路由器所在的AS号,并不是进程。因为一个路由器只能属于一个AS中,所以,一个路由器只能启动一个BGP进程



[r1-bgp]




2,配置RID



[r1-bgp]router-id 1.1.1.1




3,指定建立邻居关系



[r1-bgp]peer 12.0.0.2 as-number 2 --- 指定建邻的IP地址和邻居所在的AS的编号(邻居关系指定是双向的)



[r1-bgp]display bgp peer --- 可以查看BGP的邻居表




(2)IBGP对等体环回建立对等体



由于,IBGP邻居处于同一个AS中,正常一个AS中存在大量的备份路径,若使用物理接口建立邻居关系,将浪费这些备份或者负载均衡的路径;故建议使用环回接口来进行IBGP对等体关系的建立。



[r2-bgp]peer 3.3.3.3 as-number 2



[r2-bgp]peer 3.3.3.3 connect-interface LoopBack 0 --- 指定给邻居发送数据包的连接接口是环回接口



切记:一旦使用环回地址作为建邻地址,同时需要修改源IP地址未本地环回地址。




(3)EBGP对等体环回建邻



因为EBGP对等体之间一般采用直连建邻的方法,所以,我们将EBGP对等体之间的数据包中的TTL值设置为1, 同时,加入了直连检测(检测源目IP是否在同一个网段) ;因为华为设备并没有直接关闭直连检测的方法,但是可以 通过修改TTL值来让EBGP邻居间可以正常非直连建邻,直连检测将会自动失效。



[r4-bgp]peer 5.5.5.5 ebgp-max-hop 2



[r5-bgp]peer 4.4.4.4 ebgp-max-hop --- 修改的后面不加数字,相当于将TTL值改为最大值,255。




总结:再建立EBGP对等体关系时,建议使用第一种方法,EBGP对等体间直连建邻;IBGP对等体间建议使用环回接口进行建邻,即使用方法二。




2)BGP的路由发布

(1)通过network命令进行发布



BGP可以将所有路由表中存在的路由条目通过network命令进行发布。



[r1-bgp]network 1.1.1.0 24



[r1-bgp]display bgp routing-table --- 查看设备的BGP表



Network ---- 目标网段及掩码信息



NextHop ---- 下一跳 ---- 属于BGP的路由属性 ---- 谁通告的,谁就是下一跳;如果是自己发布的,则下一条属性0.0.0.0再network前面出现的符号称为这条路由的 状态码 。



1. *   ---- 代表可用 ---- BGP设备每收到一条路由信息,都会检查其下一跳属性的可达性(通过路由表查询。)如果下一跳的地址是可达的,则代表该路由可用。不可达则不可用,不可用则该路由信息将不被接纳,直接不参与选择。



2. >--- 代表优选 ---- 当收到多条到达相同网段的路由信息时,BGP将会在其中根据路由属性选择最好的最为优选路由,只有优选的路由才会被加载到路由表中,并且传递给其他BGP对等体。不优选的则不传递,不加表。



当一台路由器收到来自EBGP对等体发送的路由信息正常加表后,该路由的协议类型为:EBGP,优先级:255



3. I ---- 状态码为I ---- 则代表该路由信息是从IBGP对等体处学来的路由。



因为BGP存在AS-BY-AS的特性,所以,IBGP邻居之间传递路由时,默认不会修改下一跳属性,可能导致从EBGP邻居处传递的路由信息在IBGP邻居处不可达。所以,需要执行如下命令进行更改。



[r2-bgp]peer 3.3.3.3 next-hop-local



当一台路由器收到来自IBGP对等体发送的路由信息正常加表后,该路由的协议类型为:IBGP,优先级:255




(2)通过重发布来发布BGP路由



当通告的路由数量较大时,使用network逐条发布效率较低,则可以通过重发布的方法来批量发布路由。



[r2-bgp]import-route ospf 1 ---- 通过重发布将OSPF的路由发布到BGP中。



OGN(起源码)



1,I:通过Network发布的路由 ---- I ---- I代表该路由起源于IGP协议(包括静态路由和直连路由)。



2,e:通过EGP协议发布的路由 ---- e ---- 指的是BGP协议之前的外部网关协议 -- EGP协议,因为目前该协议基本上不用了,所以,e标记很少见。



3,?:通过除了以上两种方式发布的路由 ---- ? ---- 重发布路由的起源码标记就是?




3)BGP路由聚合



BGP的路由聚合 --- 自动聚合 --- 仅针对重发布的路由--- 手工聚合



(1)自动聚合



在R1上建立两条172.16.1.0/24和172.16.2.1/24直连路由,之后通过



重发布发布到BGP中



1.抓取流量



[r1]ip ip-prefix aa permit 172.16.0.0 16 greater-equal 24



less-equal 24



2.路由策略



[r1]route-policy aa permit node 10



Info: New Sequence of this List.



[r1-route-policy]if-match ip-prefix aa



3.重发布中调用



[r1-bgp]import-route direct route-policy aa



自动聚合的问题



1,只能聚合到主类,导致产生巨大的路由黑洞



2,只能对重发布的路由生效



[r1-bgp]summary automatic ---- 华为设备默认关闭自动聚合功能,开销自动聚合



S --- 状态码 --- SUPPRESSED --- 抑制 ---- 一旦路由前面的状态码中添加S标记,则代表该路由被抑制,将不再加标和传递。自动聚合完成后会自动生成一条指向汇总的空接口路由进行防环。因为我们自动汇总的问题,所以,当我们需要对路由汇总进行精准把控时,手工聚合将是更理想的解决方案。




(2)手工聚合



[r1-bgp]aggregate 172.16.0.0 22 --- 手动聚合的命令



手工聚合的问题



1,手工聚合时没有抑制明细路由,导致传递的路由条目没有减少,反而增加



2,手工聚合的路由条目存在路由属性缺失的问题,尤其是不懈怠明细路由中的AS_PATH属性,因为该属性是用来防环的,不携带可能会导致环路的产生。



[r4-bgp]aggregate 172.16.0.0 22 detail-suppressed ---- 在聚合路由的同时已知所有明细路由但是,因为BGP协议的特殊性,导致在一些环境下,往往不能将所有明细路由全部抑制。所以,我们在做BGP的聚合时,往往仅抑制一部分路由信息,而实现这个效果,需要用到 --- suppress - Policy --- 抑制策略



1.先抓取流量



[r4]ip ip-prefix aa permit 172.16.1.0 24



2.使用路由策略匹配流量



[r4]route-policy aa permit node 10



Info: New Sequence of this List.



[r4-route-policy]if-match ip-prefix aa



3.使用抑制策略进行调用



[r4-bgp]aggregate 172.16.0.0 22 suppress-policy aa



[r4-bgp]aggregate 172.16.0.0 22 suppress-policy aa as-set --- 通过激活AS_SET关键字,使汇总路由携带明细路由的AS_PATH属性。



*> 172.16.0.0/22 127.0.0.1 0 {1 4}? --- 当明细路由来自不同AS时的解决方案,在进行防环时,大括号中的AS号都需要考虑,但在进行选路时,大括号将被看作是一个整体,当作一个AS号。




正因为聚合后的路由存在属性丢失的情况,所以,这样的汇总路由需要格外关注。为此,BGP专门设计了两个聚合相关的属性 --- ATOMIC_AGGREGATE,AGGRGATOR



ATOMIC_AGGREGATE ---- 纯粹的预警属性,聚合路由将会携带(只有将所有明细路由全部抑制                                               的汇总路由才会携带),意图是提醒该路由为聚合路由,可能存在属                                               性丢失问题。



AGGRGATOR ---- 将会记录执行汇总路由器所在的AS号及RID。




[r4]display bgp routing-table 172.16.0.0 --- 可以查看一条路由的详情信息




4)路由反射器



IBGP水平分割 ---- 即当路由器从一个IBGP对等体处学习到一条路由信息,他将不再把这条路由通告给其他的IBGP对等体。



路由反射器 --- Router Reflector --- RR



我们可以将一台IBGP设备配置成为路由反射器(RR),被配置为路由反射器的设备在一定条件下将反射学习到的路由信息。



在我们指定一台设备成为路由反射器RR的同时,必须指定一个或者多个邻居成为他的客户,RR和客户之间构成的系统我们称为反射簇,每一个簇设定一个簇ID --- 这个反射簇中RR的RID。其他没定义为客户的邻居被称为非客户。



反射规则:



1,如果路由反射器从自己客户处学来一条IBGP路由,则他将反射给自己所有的客户和非客户。



2,如果路由反射器从自己非客户处学来一条IBGP路由,则他将反射给自己所有的客户,但是不         反射给非客户。 ----- 非非不传



3,当路由器在进行路由反射时,只反射自己BGP路由中最优的路由。 --- 和BGP路由的传递规则       相同。




因为IBGP水平分割主要时为了防止路由环路产生,而路由反射器反射后相当于打破了IBGP水平分割的规则,则将有可能出现路由环路。所以, 为了避免路由环路从产生,路由反射器在设计的时候,专门引入了两个属性,来避免环路从产生。 ----- Originator_ID(起源者ID), Cluster_list(簇列表)




起源者ID --- 放射这条路由信息始发者的RID ---- 当这条路由经过RR反射之后,反射出来的路由信息中将增加这个属性。如果RR收到一条路由信息中已经存在起源者ID属性,则不去修改这个属性。当一台设备收到一条路由信息后,发现里面的起源者ID是自己本地的RID,则将不去接



受这条路由信息,避免路由回传。



如果,一个AS内部存在多次反射的话,那么,一定存在多个反射簇,则每个RR在放射路由信息的时候,会在路由信息中的 簇列表属性 中加入本地的簇ID。



簇ID:每个路由反射器自身的ID



注意:这两个属性,只是用来在IBGP内部进行防环的,所以,当这些路由被传递到EBGP对等体时,将不携带这两属性。RR在进行路由反射时,除了会在路由信息中添加以上两个属性外,其



他属性不变。




RR的配置



[r3-bgp]peer 2.2.2.2 reflect-client ---- 指定R2作为反射器客户,同时R3自己成为RR。





5)联邦

IBGP BGP路由黑洞 bgp路由黑洞是什么_解决方案_02

注:联邦的建立通过上图进行配置 



联邦EBGP关系之间仅继承EBGP之间路由传递的规则,但是不能像EBGP对等体一样修改路由属性,还需要遵守AS-BY-AS规则,是一种特殊的存在。



联邦EBGP之间防环可以直接采用EBGP水平分割的机制来进行防环,直接在AS_PATH属性中增加成员AS号来进行防环,只不过,联邦的AS号会使用括号括起来,来进行区分。 ---- 这个属性主要是用来进行AS内部防环使用,所以,也不会传递给EBGP对等体。



(1)AS间与联邦建立对等体关系



[r2]bgp 64512 ---- 联邦成员启动BGP进程时需要使用小号(联邦成员的AS号)启动



[r2-bgp]router-id 2.2.2.2



[r2-bgp]confederation id 2 ---- 联邦成员进程中一定要声明自己的大号(真实所在的AS号)



[r2-bgp]peer 12.0.0.1 as-number 1



[r2-bgp]peer 3.3.3.3 as-number 64512 --- 和联邦成员建立IBGP邻居关系时使用小号



[r2-bgp]peer 3.3.3.3 connect-interface LoopBack 0



(2)联邦内建立对等体关系



[r3]bgp 64512



[r3-bgp]router-id 3.3.3.3



[r3-bgp]confederation id 2



[r3-bgp]peer 2.2.2.2 as-number 64512



[r3-bgp]peer 2.2.2.2 connect-interface LoopBack 0



(3)联邦间建立对等体关系



[r3]bgp 64512



[r3-bgp]router-id 3.3.3.3



[r3-bgp]confederation id 2



[r3-bgp]confederation peer-as 64513 ---- 需要建立联邦的EBGP对等体关系时,需要先声明对方的小号



[r3-bgp]peer 4.4.4.4 as-number 64513



[r3-bgp]peer 4.4.4.4 connect-interface LoopBack 0



[r3-bgp]peer 4.4.4.4 ebgp-max-hop 2 --- 因为联邦EBGP之间是按照EBGP对等体的传输规则来完成的,所以,默认的TTL值1,并且存在直连检测,所以,需要通过修改TTL值的方式,让其关闭直连检测。



联邦解决IBGP水平分割的缺陷是一个联邦内部只能存在一对IBGP对等体关系,因为IBGP之间路由只能传递一次,所以,实际工程中,往往可以将联邦和路由反射器结合来使用。