主要有三块:基本操作、配置邻居、调试排错。

1. 基本操作

首先需要启用BGP路由

Router(config)# router BGP autonomous-system

这里的AS不能任意指定(因为BGP的一边是您公司的网络,另一边是Internet)。

一台路由器只能有一个BGP实例,不会把一个路由器放到多个BGPAS)中。

通过AS号是否一样,来判断邻居是IBGP还是EBGP,如果是同一AS,则是IBGP

2. 配置邻居

Router(config-router)#neighbor {ip-address | peer-group-name} remote-asautonomous-system

这个命令是用于指定邻居的,BGP的邻居需要手动指定,这不像RIPOSPFEIGRP可以自动学习。

只有指定了邻居,才能激活BGP会话。可以用IP地址或对等组名来指定。

命令中的IP地址是邻居(对方)的IPEBGP情况下,这个IP地址应该是与你这个路由器直连的IP,而IBGP情况下,这个IP地址可以是对方路由器上任何一个IP地址,当然要求两个路由器通过通(Ping通)。IBGP的邻居IP一般情况下使用Loopback端口的IP地址进行邻居的指定。

同步和Shutdown命令

命令:Router(config-router)#neighbor {ip-address | peer-group-name} shutdown

这里使用Shutdown后,邻居关系并没有被删除,而是暂时不可用,一般用于维护和更改策略,它防止路由散动(Route Flapping)。

启用的命令是Router(config-router)# no neighbor {ip-address | peer-group-name} shutdown

 

思科路由器BGP基本配置_bgp同步 

AC的关系是EBGPAB的关系是IBGP,当流量从B发起到达D的时候,虽然A知道如何到达C网络,但D并不知道,解决的办法是在AB上做BGP的再分布,这样D就知道如何到达C网络了。

实现BC网络通的两个条件:一是IBGPEBGP连通,另一个是AS65101IGP同样也是连通的。

BGP邻居源地址:

邻居指定(Neighbor命令)的地址是目的地址,是邻居地址。默认情况下从哪个端口发送出数据库哪个端口就是源地址。BGP里要求,源地址必须匹配,如果不匹配,数据包将会被丢弃。

下面看看什么情况下会出现源地址不匹配的现象。

 

思科路由器BGP基本配置_bgp配置_02 

A上指定邻居B,那么A的源地址就是10.1.1.1,邻居指定的目的地址就是B上的10.1.1.2CD同理,在这样的一个网络状态都是连通的情况下没有什么问题,但在网络断路情况下问题就出来了。比如说,当AB之间的链路Down时,AB的源地址就不一致了,A的源地址是10.3.3.1B的源地址是10.2.2.2BGP只要能够建立连接也就是能连通并建立TCP 会话就可以通,AB通过A-C-D-B通)。

如何确保路由器的源地址是稳定、一致不变?一般情况下我们使用Loopback地址。

为此,在配置BGP邻居时我们需要更改路由器的源地址。

命令:Router(config-router)# neighbor {ip-address | peer-group-name} update-sourceinterface-type interface-number

命令里的参数update-source指定的是自己路由器的Loopback口。

在路由器上配置了Loopback地址后,当AB的链路Down掉了,AB的邻居关系依然保持,因为源地址没变。

一般要求路由器与邻居之间至少有一条路径是可用的。这样邻居关系就不会出现问题。

变更源地址一般常用于IBGP中,EBGP很少用,如果要在EBGP中使用,那么还需要额外的命令(因为EBGP要求邻居是直连的,使用Loopback端口,EBGP就不是直连的了)。

 

这是一个使用LoopbackIBGP网络的例子:

 

思科路由器BGP基本配置_思科路由器bgp_03 

这是一个使用LoopbackEBGP网络的例子:

 

思科路由器BGP基本配置_bgp配置_04

EBGP中使用Loopback端口,需要使用命令(前面提到过,需使用额外的命令,就是这个)Neighbor ip eBGP-multihop xX为跳数。这个命令只能使用在EBGP情况下。如图例。

BGPNext-hop(下一跳)不是指下一个路由器,而是指到达目标网络的下一个AS

 

思科路由器BGP基本配置_bgp同步_05 

ABEBGP邻居,CBIBGP邻居。B的下一跳是A,地址为10.10.10.3C的下一跳也是10.10.10.3(因为BGP的下一跳地址是下一个AS的地址),路由器C必须知道到达10.10.10.3怎么走,路径由B告诉C

BGP在多路访问网络中的例子,如图:

 

思科路由器BGP基本配置_bgp配置_06 

AB的关系是EBGPAC的关系也是EBGPBC的关系是IBGPCD的关系是EBGP。当B学习到到达A时,B也会告诉C到达A怎么走,C也会从A学习到到达A怎么走,显然C的下一跳地址是A要比通过B再到A的路径更好。而D的下一跳是C

路由器也可以指定下一跳为自己,命令如下:

Router(config-router)# neighbor {ip-address | peer-group-name} next-hop-self

强制所有更新从这个邻居宣告为下一跳地址。一个实例:

 

思科路由器BGP基本配置_bgp排错_07 

EBGPIBGP的下一跳的地址是不会改变的。A的下一跳是B

IBGPIBGP的下一跳可以改变。

IBGP中也可以不改变下一跳地址,如:在B上不做下一跳是自己的命令,C的下一跳必须是可达的,也就是说C必须知道到达A怎么走,B必须宣告AC到达AB走。

对等体组的概念:

如果有一些路由器,它们都有一致的策略,就可以指定一个邻居组(对等组)

创建组的命令:Router(config-router)# neighbor [peer-group-name] peer-group

添加成员的命令:Router(config-router)# neighbor [ip-address] peer-group [peer-group-name]

这样的好处是简化配置。

 

思科路由器BGP基本配置_bgp排错_08 

一个对等体组配置的实例。当有多个邻居时可以使用该命令。

从图中的配置我们可以看到右边使用对等体组的配置简单多了。

Network命令:Router(config-router)#network network-number [mask network-mask]

EIGRP路由协议的Network命令有所不同。

这个是注入BGP网络路由的命令。

Mask的宣告将是有类网络(ABC),有Mask的则是无类网络。

进行配置之前必须保证所宣告的网络是可用(可达)的。

下面讲讲同步

使用同步的目的是避免出现黑洞(接收到数据包后不知道给谁,而只能丢弃)。同步默认是打开的,全互连时(用于IBGP)需要关闭同步,命令是:Router(config-router)#no synchronization

同步主要是用于IBGP之间进行,EBGP不需要同步。

 

思科路由器BGP基本配置_思科路由器bgp_09 

只有两个IBGP,所以BC是全互连状态,所以关闭同步。

3. 调试排错

BGP邻居建立会话的5种状态:

1. Idle:查找路由表

2. Connect:找到路由表后进行TCP三次握手

3. Open Sent:握上手后发送Open message消息

4. Open Confirm:收到对方发来的Open消息

5. Established:会话建立,交换信息。

查看建立过程的命令:Router(config-router)# debug ip BGP events

 

思科路由器BGP基本配置_bgp同步_10 

 

思科路由器BGP基本配置_bgp配置_11 

当找不到路由表时,状态为Idle,一般情况下问题出在IGP

邻居关系建立了,状态为Established,可以用Router# Show IP BGP Summary来查看汇总的情况。

Active状态:当路由器发送出OPEN包给邻居等待回应,如果长时间未接收到回应则超时,超时后状态更改为Idle,这是由于TCP链路上出现了问题所致。

产生问题的原因主要有:

1. 邻居的IP配置有误;

2. 没有指定邻居语句(两边都要指定)

3. 源地址不是指定邻居的地址,或者不可达。

Router# show ip BGP summary

 

思科路由器BGP基本配置_bgp配置_12 

 

邻居 BGP AS 信息包 数据库 状态 经过

版本 接收 发送 版本 路由器数量

Router# show ip BGP

BGP表的内容

 

思科路由器BGP基本配置_bgp排错_13 

BGP Table Version is 23,版本(序)号是23,本地的RID192.168.1.49

*是有效的,>是最好的,i是通过IBGP学习来的,Network是网络,Next Hop是下一跳(AS)的地址,Metric是度,Locprf是本地优先级(默认为100),Weight是权重(加权),Path是的i是起点是IGPeEGP,?为不完整),Path中的数字部分为AS号。关于这里所提到的属性(metricLocprfWeight…)在下面BGP属性部分会进行讲解。

清除BGP的会话,下面三种情况下需要:

1. 策略更改时(ACLTimeattributes

2. 策略需要立即生效。

3. 策略需要立即执行(其实和第2点一样)。

清除全部会话的命令:Router# clear ip BGP *

复位所有BGP连接,全部BGP路由表将被丢弃,BGP会话状态更改为Idle

清除单个会话的命令:Router# clear ip BGP [ip-address]

仅复位单个BGP连接,BGP路由表将被丢弃,BGP会话状态更改为Idle。只需在一边执行此命令即可。

如果想不复位连接,也就是会话不丢失(邻居关系不重建)来使变更策略生效的话,使用下面的命令:

Router# clear ip BGP {*|address} [soft out]

这个命令是应用于Outbound的策略。

Inbound的策略的应用:

首先要指定邻居关系在建立时要先保存Update信息(会保存在内存中),

命令:Router(config-router)# neighbor [ip-address] soft-reconfiguration inbound

这样才能在Inbound策略变更时使用下面的命令:

Router# clear ip BGP {*|address} [soft in]

使用Soft out/in这样命令的好处是邻居(会话)关系不用重新建立,节省了带宽,增加了收敛时间。

邻居查看命令:

Router# show ip BGP neighbors

 

思科路由器BGP基本配置_bgp排错_14 

红色部分为BGP当前的状态。

查看BGP update更新过程的命令:

Router# debug ip BGP updates

在一个稳定的网络,使用这条命令可能不能立即看到包,立即看到可以使用Clear ip BGP *,使之生效。

Debug update是增量更新。一个Update包只包括一条路由(可以是多条路径)和一个(类)BGP属性,一个Update包可以删除多条路由(因为删除用不到属性)。