思科Cisco BGP 专题 (二)BGP实战应用

回顾

回顾在BGP专题(一)中我们主要说明了:
    
    1、BGP的应用场景。BGP主要应用于大型的网络环境,如数据中心网络,Internet网络。
    2、BGP协议跟IGP协议相比主要的优势在于,BGP是基于TCP链接的,可以跨设备传输路由条目。减少中间设备的资源消耗。
    3、BGP中还分为IBGP(同一自治系统)和 EBGP(不同自治系统)
    4、通常一个设备只可以开启一个BGP进程。
    5、BGP的邻居状态机制 
    五种状态:idle(空闲) - connect(链接) - activce(行动) - open sent (open发送)- open confirm (open证实)- establish(已建立)
    6、BGP启用的方法:思科设备首先在全局模式下:router BGP XX (XX为as编号)
    第一步 建立邻居(neighbor xx.xx.xx.xx remot-as xx),第二部宣告网段(network xx.xx.xx.xx mask xx.xx.xx.xx)。

概述:

在这一章我们主要说明一下几个技术点:

1、用loopback环回口建立BGP邻居的方法。
2、BGP同步(会涉及部分mpls)
3、BGP的水平分割(防环路)
4、邻居状态停留在 Idle或active的原因
5、当IBGP与EBGP互联时,如果他的一个IBGP邻居收到一个条目,并且这个条目来自于他的EBGP邻居,那么这个条目在他的IBGP邻居那里显示下一跳地址时会保留EBGP的地址。
6、BGP选路规则第一条 weight (权重)

使用loopback环回口建立BGP邻居

一、 描述:R1、R2、R3上分别开启loopback0接口。地址分别为1.1.1.1-3.3.3.3。
R1和R2之间使用10.1.1.0/24网段,R2和R3之间使用20.1.1.0/24网段
AS编号为100

拓扑图:

启用bgp环路检测 bgp状态connect_cisco

二、使用loopback环回口 建立BGP邻居的原因:

因为在实际工作中,物理接口会存在很多不确定的因素会导致物理端口down掉,或发生闪断的情况。因此就会导致BGP邻居断开,产生数据传输中断的问题。BGP同时又承载了很多路由条目,重新建立链接耗时过多,对业务产生不良影响。

而loopback环回口有着更高的稳定性。所以在条件允许的情况下(环回口底层互通),尽量使用loop back接口建立邻居关系。

三、配置方法:
首先底层运行ospf协议保证环回口互通。ospf配置不再详细列出

R1上配置:

1、启BGP进程 AS号100

启用bgp环路检测 bgp状态connect_网络协议_02


2、指定R3上loopback接口 3.3.3.3 为邻居

启用bgp环路检测 bgp状态connect_启用bgp环路检测_03


3、指定更新源的接口为loopback0,注意这里的loopback0为R1的本地接口,接口调用只在本地有效。

启用bgp环路检测 bgp状态connect_启用bgp环路检测_04

R3配置:

配置思路参考R1。我们只show run一下配置信息。

启用bgp环路检测 bgp状态connect_网络_05


此时使用loopback环回口建立BGP邻居配置完成。

我们可以使用show ip bgp summar 或show ip bgp neighbors 来验证一下。

我们可以看到邻居状态为establish(建立连接),邻居为3.3.3.3

启用bgp环路检测 bgp状态connect_思科_06

BGP同步

1、BGP路由黑洞的形成

我们继续使用上面的拓扑

在R1上新增一个loopback口,IP地址为100.1.1.1/32,并宣告到BGP中。network 100.1.1.1 mask 255.255.255.255

启用bgp环路检测 bgp状态connect_cisco_07

此时我们在R3上查看BGP表,会显示如下:

启用bgp环路检测 bgp状态connect_启用bgp环路检测_08

其中*valid代表 有效的。> best代表最优的。i- internal 代表内部的

因此说明100.1.1.1/32这条路由是有效的。被放到路由表中。我们再看一下R3和R2的路由表。

R3路由表:

启用bgp环路检测 bgp状态connect_cisco_09

R2路由表

启用bgp环路检测 bgp状态connect_网络_10


虽然在R3上存在去往100.1.1.1的路由条目。但是我们此时在R3上去ping100.1.1.1,无法ping通。因为在R2上没有去往100.1.1.1的路由条目,当数据到达R2时,被丢弃。形成了路由黑洞。

2、如何解决路由黑洞?

1)我们在R3设备上BGP100进程下敲上命令:synchronization(开启同步功能)

启用bgp环路检测 bgp状态connect_启用bgp环路检测_11


此时我们查看R3的BGP表与上面的相比发现产生了一些变化,大于号>不见了

启用bgp环路检测 bgp状态connect_网络_12

再看路由表,100.1.1.1的路由条目消失了。

启用bgp环路检测 bgp状态connect_网络_13

2)那么当我开启了同步之后 - 什么时候会把100.1.1.1放到路由表呢?只有当从IGP的协议( OSPF, EIGRP ,RIP等)中也收到了这个条目时,才会把100.1.1.1也放入到路由表中。

所以我们同时要在R1上将100.1.1.1宣告进ospf中。

启用bgp环路检测 bgp状态connect_网络_14


此时黑洞问题结解决。

此时很多同学就会有疑问,BGP同步功能需要所有条目都宣告进IGP才能解决黑洞问题。那么BGP是不是就没有意义了?

答案是:BGP同步功能已经淘汰了。在设备中BGP同步功能都是默认关闭的。no synchronization
这里我们主要是想介绍一下BGP的发展历史。

3)我们现在主要用MPLS(多协议标签交换)技术与BGP结合使用来解决路由黑洞的问题。也就是我们所说的MPLS VPN技术。

在此 show run 一下 mpls配置 ,具体技术详解 在后续专题中会说明。可关注我,私信交流。

show run R1:

全局下

启用bgp环路检测 bgp状态connect_cisco_15

接口下

启用bgp环路检测 bgp状态connect_cisco_16


R2 R3配置与R1同理。

show run R2:

全局下

启用bgp环路检测 bgp状态connect_思科_17


接口下

启用bgp环路检测 bgp状态connect_cisco_18

show run R3 :

全局下

启用bgp环路检测 bgp状态connect_网络协议_19


接口下

启用bgp环路检测 bgp状态connect_启用bgp环路检测_20


在R3上tracert 一下100.1.1.1 看一下数据的路径,可以看到数据是通过标签传递的。

启用bgp环路检测 bgp状态connect_思科_21

BGP的水平分割防环路机制

IBGP和EBGP的水平分割机制有所区别

IBGP水平分割:默认情况下,通过IBGP邻居学习到的路由不会再传给别的 IBGP邻居(也就是说IBGP路由信息只传一跳)

启用bgp环路检测 bgp状态connect_cisco_22


如图所示,R1、R2、R3之间两两互为邻居。当R2收到从R1传来的路由条目时。R2不会再传给R3。

如果要想通过R2收到R1的路由条目:我们要使用RR(Router Reflector)技术,中文译为路由反射器技术。该技术详解会在后续BGP专题中说明。如感兴趣可持续关注,交流。EBGP防环机制: EBGP传递的路由条目会携带AS编号,当设备收到一个路由条目时,如果发现这个条目携带自己的AS编号,那么该路由条目就会被拒收

启用bgp环路检测 bgp状态connect_启用bgp环路检测_23

如有一个路由条目来自Rx。当R5收到Rx的路由条目时,条目携带的AS为100 。当GW收到R5的条目时,条目携带的AS为100、200。当Rx再收到GW上的条目时,携带的AS为100、200、300。Rx发现条目中携带与自己相同的AS,该条目被拒收。

四、邻居状态停留在 Idle或active的原因

之前我们介绍了BGP彼此之间的六种状态
Idle
connect
active
open sent
open confirm
establish

往往在实际工作中,会常见两种故障。导致邻居无法建立。一个时停留在idle状态,一个是停留在active状态。

1、停留在idle状态:
停留在idle状态往往是因为多跳不可达。上一个专题中我们讲过,因为EBGP中默认的最大跳数为1跳。所当跨设备建立邻居时,需要修改最大跳数。
修改跳数的命令为(在BGP进程下修改):R(config-router)#neighbor xx.xx.xx.xx(邻居的地址) ebgp-multihop 255

2、停留在acitve状态:
停留在active状态往往是因为底层链路不通。我们需要检查底层链路的配置情况。如端口ip配置是否正确,IGP协议配置是否正确等。

五、IBGP与EBGP互联时,他的一个IBGP邻居收到一个条目,并且这个条目来自于他的EBGP 邻居,那么这个条目在他的IBGP邻居那里显示下一跳地址时会保留EBGP的地址(具体可看拓扑图进行理解)

1、拓扑图:

各链路之间分别使用10.1.1.0/24-30.1.1.0/24 网段

启用bgp环路检测 bgp状态connect_网络协议_24

2、描述要求:

R1、R2、R3之间底层运行ospf协议,保证底层互通。

R1、R2、R3、R4 分别建立环回口1.1.1.1-4.4.4.4/32

R1上再建立环回口100.1.1.1/32,R4上建立环回口200.1.1.1/32,并都宣告进BGP

R1、R2、R3属于as100,R4属于as200

R1和R3之间建立IBGP邻居。(使用环回口建立)

R3和R4之间建立EBGP邻居。

已使用mpls解决路由黑洞问题(具体方法后续专题中会详细说明)3、配置信息:直接show run 配置,具体配置思路不再详细列出。

R1:

启用bgp环路检测 bgp状态connect_cisco_25

R2:

启用bgp环路检测 bgp状态connect_思科_26

R3:

启用bgp环路检测 bgp状态connect_启用bgp环路检测_27

R4:

启用bgp环路检测 bgp状态connect_网络_28

4、查看

配置完成后我们在R1查看BGP路由表

启用bgp环路检测 bgp状态connect_cisco_29

会发现从EBGP设备传来的路由条目200.1.1.1/32,的下一条地址为30.1.1.2。30.1.1.2为EBGP上的地址。会导致R1的数据到200.1.1.1不可达。U.U.U

启用bgp环路检测 bgp状态connect_网络_30

5、解决问题:

此时我们需要在与EBGP设备链接的R3上 敲入命令:
neighbor 1.1.1.1 next-hop-self(BGP进程下配置)
再次查看R1上BGP路由表:

启用bgp环路检测 bgp状态connect_启用bgp环路检测_31

发现到达200.1.1.1的下一条地址变成了3.3.3.3。R1的数据就可以正常发给200.1.1.1。

六、BGP选路规则第一条 weight (权重)

prefer highest weight (local to router)。
优选weight属性高的,cisco私有属性

关于具体的选路规则,我们在下一个BGP专题(三)中会详细介绍。 感兴趣的可以关注我,会持续更新。也可以私信交流。