1、BGP的路由黑洞

ospf里面引入黑洞路由_ospf里面引入黑洞路由


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

解决方案:

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

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

但是1.2在实际生活中,不太实际,因为这会要求路由器要拥有巨大的承载能力。

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

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

2、BGP的防环机制
BGP使用的防环机制是水平分割
在BGP中的水平分割分为两种:
1)EBGP水平分割:专门解决EBGP对等体之间可能出现的环路问题
2)IBGP水平分割:专门解决IBGP对等体之间可能出现的环路问题。

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

IBGP水平分割:

ospf里面引入黑洞路由_华为_02


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

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

ospf里面引入黑洞路由_解决方案_03


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

所以BGP存在两个技术,专门用于解决IBGP水平分割带来的问题-------1)路由反射器 2)联邦

3、BGP的基本配置
BGP邻居建立的过程
1)EBGP对等体直连建邻
(1)启动BGP进程
[r1]bgp 1—1 指的是该路由器所在的AS号,并不是进程。因为一个路由器只能属于一个AS中,所以,一个路由器只能启动一个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的邻居表

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

2)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对等体间建议使用环回接口进行建邻,即使用方法二。

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

[r1-bgp]network 1.1.1.0 24

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

ospf里面引入黑洞路由_解决方案_04


network: 目标网段及掩码信息

nexthop: 下一跳----属于BGP的路由属性—谁通告的,谁就是下一跳;如果是自己发布的,则下一跳属性0.0.0.0

在network前面出现的符号称为这条路由的状态码。
*-----代表可用-----BGP设备每收到一条路由信息,都会检查其下一跳属性的可达性(通过路由表查询。)如果下一跳的地址是可达的,则代表该路由可用。不可达则不可用,不可用则该路由信息将不被接纳,直接不参与选择。

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

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

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

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

[r2-bgp]peer 3.3.3.3 next-hop-local
当一台路由器收到来自IBGP对等体发送的路由信息正常加表后,该路由的协议类型为:IBGP,优先级:255

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

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

OGN: 起源码
(1)通过network发布的路由起源码的标记都是I ,i代表该路由起源于IGP协议(包括静态路由和直连路由)。
(2)通过EGP协议发布的路由----e-----指的是BGP协议之前的外部网关协议----EGP协议,因为目前该协议很少有设备支持,基本上不用了,所以e标记位很少见。
(3)通过除了以上两种方式发布的路由----?-----重发布路由的起源码标记就是?

5、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 ----华为设备默认关闭自动聚合功能,开销自动聚合
Info: Automatic summarization is valid only for the routes imported through the import-route command.

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 asset—通过激活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—可以查看一条路由的详情信息。