BGP(边界网关协议)是互联网上一个核心的去中心化自治路由协议,它的目的是去中心化,以达到各个网络自治。
BGP里面的核心概念包括:
1) AS(Autonomous system):自治系统,指在一个(有时是多个)组织管辖下的所有IP网络和路由器的全体,它们对互联网执行共同的路由策略。也就是说,对于互联网来说,一个AS是一个独立的整体网络。而BGP实现的网络自治也是指各个AS自治。每个AS有自己唯一的编号。
2) IGP(Interior Gateway Protocol):内部网关协议,在一个AS内部所使用的一种路由协议。一个AS内部也可以有多个路由器管理多个网络。各个路由器之间需要路由信息以知道子网络的可达信息。IGP就是用来管理这些路由。代表的实现有RIP和OSPF。
3) EGP(Exterior Gateway Protocol):外部网关协议,在多个AS之间使用的一种路由协议,现在已经淘汰,被BGP取而代之。
BGP分为IBGP(Interior BGP :同一个AS之间的连接)和EBGP(Exterior BGP:不同AS之间的BGP连接)。IGP的协议是针对同一个AS网络来设计的,一个自治网络的规模一般都不大,所以设计的时候就没有考虑大规模网络的情况。而当一个自治网络足够大时,OSPF存在性能瓶颈(后面会说明)。BGP本身就是为了在Internet工作,其设计就是为了满足大型网络的要求,所以大型私有IP网络内部可以使用IBGP。总的来说,这几类路由协议,小规模私有网络IGP,大规模私有网络IBGP,互联网EBGP。
IBGP应用在AS内部,作为IGP的一种。一般的IGP,例如OSPF,EIGRP,用来在邻接路由器之间传递路由。而IBGP可以用来在edge router之间同步路由,edge router并不需要邻接。Edge router是指在AS边缘,用来连接其他AS的router,那么edge router肯定是运行了EBGP。同时这个edge router也会有对端AS的路由。通过IBGP,edge router会将学习到的对端AS的路由,传递给其他的edge router。这样,可以实现跨AS的连通。
下面我们在HCL中搭建BGP的基本示例:
该组网图中,划分了3个AS域,现在需要设置BGP使得Router D和Router E之间相互互通。
1) 首先配置各个接口的ip地址,RouterA、RouterB、RouterC分别还需配置Loopback接口
1.1.1.1/32、2.2.2.2/32、3.3.3.3/32
2) 在as 200内部,配置ospf协议,使得各个节点之间可以互相通信:
RouterA的ospf配置如下
配置好ospf之后,查看ospf的路由表如下:
3) 配置RouterD与RouterA、RouterC与RouterE的EBGP连接
RouterD的bgp配置如下:
此时RouterD暂时还不能和RouterE通信,因为RouterD的BGP路由中没有10.5.1.0/24网段的路由。
4) 配置AS200内部的IBGP连接
RouterA和RouterC属于AS200内部的边界路由器,通过IBGP协议,RouterA可以将AS100的路由传递到RouterC,RouterC再传递到AS300内部,这样AS100和AS300之间就互通了。
与EBGP不同,IBGP对等体的两个路由器之间不要求物理直连,只要路由可达就行,因此可以直接配置RouterA与RouterC之间的IBGP连接,但为了防止路由环路,通过IBGP学习到的路由,不会传递到其它的IBGP,因此需要AS内部的Router两两相连,组成一个full-mesh的网络。Full-mesh的连接数与节点的关系是n*(n-1),连接数随着节点数的增加而迅速增加,这给配置和管理带来了问题。
为了优化full-mesh网络问题,可以通过路由反射器来解决。这是一个特殊的IBGP Router,它会将学习到的IBGP路由,传递给所有连接的RR-client。因此AS中的路由器只需要和路由反射器建立连接即可,减少了连接个数。
这里我们将RouterB作为路由反射器,配置如下:
其中的peer 1.1.1.1 reflect-client 即将RouterA作为路由反射器的客户端。
5) 在RouterA和RouterC的BGP中引入OSPF路由,这样使得对端的BGP Router可以访问到AS200内部:
RouterA的配置如下:
执行完成之后,查看RouterD的BGP路由表,发现已经学习到了10.3.1.0/24和10.4.1.0/24网段的路由:
此时RouterD还没有10.5.1.0/24网段的路由,因此不能和RouterE通信,需要在RouterC中引入10.5.1.0/24网络路由,这样在AS200内部通过IBGP可以将10.5.1.0/24通告到各个Router,最后通过EBGP,RouterD也可以学习到该路由。
如图所示,RouterD已经学习到了10.5.1.0/24网段的路由
同样,在RouterD中引入10.2.1.0/24网段的路由,则RouterE也可以学习到10.2.1.0/24网段的路由:
完成以上配置之后,RouterD和RouterE之间可以相互ping通: