实验目的
通过对外部BGP邻居的建立的两种情况的实验,从而学习到BGP外部邻居建立所需要关注的知识点。同时还将对如何将路由插入到BGP表中对BGP表和对BGP表的查看进行实验验证。
实验拓扑
本次实验拓扑由两台路由器搭建,R1和R2之间连接有两条以太网线缆。其中e0/0口采用12.0/24网段,而e0/1接口采用21.0/24网段。并且R1和R2上都存在地址为X.X.X.X/24的环回口。
实验步骤
- 首先配置好R1和R2各个接口的IP地址,保证直连接口可达。
- 开启R1和R2之间的E0/0接口,然后R1和R2之间通过该接口建立外部BGP邻居关系,并且R1的AS号为1,R2的AS号为2。
R1#conf t R1(config)#int e0/0 R1(config-if)#ip add 10.10.12.1 255.255.255.0 R1(config-if)#no sh R1(config-if)#int e0/1 R1(config-if)#ip add 10.10.21.1 255.255.255.0 R1(config-if)#no sh R1(config-if)#int loo0 R1(config-if)#ip add 1.1.1.1 255.255.255.0 R1(config-if)#no sh R1(config-if)#router bgp 1 //指明自己所属的AS号 R1(config-router)#neighbor 10.10.12.2 remote-as 2 //对端邻居路由器的IP地址和AS号 R1(config-router)#exit R2#conf t R2(config)#int e0/0 R2(config-if)#ip add 10.10.12.2 255.255.255.0 R2(config-if)#no sh R2(config-if)#int e0/1 R2(config-if)#ip add 10.10.21.2 255.255.255.0 R2(config-if)#no sh R2(config-if)#int loo0 R2(config-if)#ip add 2.2.2.2 255.255.255.0 R2(config-if)#no sh R2(config-if)#router bgp 2 R2(config-router)#neighbor 10.10.12.1 remote-as 1 R2(config-router)#exit
注意上述配置命令中,R1和R2之间的AS号码必须相互对照。则R1所指定的邻居的AS号码和R2本地配置的BGP的AS号码一致,反之亦然。等待一段时间,则发现路由器产生BGP日志,则表示邻居建立成功。
*Mar 1 00:26:37.175: %BGP-5-ADJCHANGE: neighbor 10.10.12.1 Up
此处总结一下建立外部BGP邻居所需要注意的:
- 两端路由器的AS号码必须相互对照一致
- BGP路由器的RID必须唯一
- 如果配置了认证,那么MD5认证必须一致
- BGP所需要建立的TCP连接必须能够正常建立
由于上面的配置并没有对BGP路由器的RID进行手工配置,所以按照选取RID的顺序,两台路由器的RID分别为环回口地址 1.1.1.1 和 2.2.2.2。
R1# R1#show ip bgp summary BGP router identifier 1.1.1.1, local AS number 1 BGP table version is 1, main routing table version 1 Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 10.10.12.2 4 2 28 28 1 0 0 00:25:02 0 R2#show ip bgp summary BGP router identifier 2.2.2.2, local AS number 2 BGP table version is 1, main routing table version 1 Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 10.10.12.1 4 1 28 28 1 0 0 00:25:24 0
但是为了RID的可预测性,推荐在BGP进程下手工指定RID。
R1#conf t R1(config)#router bgp 1 R1(config-router)#bgp router-id 1.1.1.1 R1(config-router)#exit R2#conf t R2(config)#router bgp 2 R2(config-router)#bgp router-id 2.2.2.2 R2(config-router)#exit
同时我们还可以在R1和R2之间对BGP邻居关系配置MD5认证。
R1(config)#router bgp 1 R1(config-router)#neighbor 10.10.12.2 password cisco R1(config-router)#exit R2(config)#router bgp 2 R2(config-router)#neighbor 10.10.12.1 password cisco R2(config-router)#exit
最后,由于BGP是建立在TCP连接之上的。因此要能够正确的建立BGP邻居关系,TCP连接正常是先决条件。
默认BGP建立TCP连接的方式是:
和目的地址为neighbor X.X.X.X命令中的X.X.X.X命令中的X.X.X.X尝试建立TCP连接
源地址为出接口的IP地址
因此,必须保证两端TCP的源目的的IP地址的相互一致性。
删除对BGP邻居配置的命令,然后开启R1和R2之间的E0/1接口。
现在R1和R2之间存在冗余链路,如果R1和R2之间需要建立外部BGP邻居的话,应该如何建立呢?
第一种方案是,在每条链路上都建立一个邻居关系,从而形成两个邻居关系。
第二种方案是,R1和R2上分别以环回口建立邻居关系,而底层可以采用静态路由使得去往各自的环回口的路由负载均衡。
很显然,使用第二种方案更加合理。因为每建立一个BGP连接都会消耗一定的系统资源,因此减少BGP邻居关系数量将有利于路由器的资源最大化利用。
我们用R1和R2的环回口相互建立邻居关系,但首先保证环回口可达性。
在R1和R2上配置静态路由,并且使之负载均衡。
R1(config)#ip route 2.2.2.0 255.255.255.0 10.10.12.2 R1(config)#ip route 2.2.2.0 255.255.255.0 10.10.21.2 R2(config)#ip route 1.1.1.0 255.255.255.0 10.10.12.1 R2(config)#ip route 1.1.1.0 255.255.255.0 10.10.21.1
接着进入BGP进程中,利用环回口建立邻居关系。
R1(config)#router bgp 1 R1(config-router)#bgp router-id 1.1.1.1 R1(config-router)#neighbor 2.2.2.2 remote-as 2 R1(config-router)#exit R2(config)#router bgp 2 R2(config-router)#bgp router-id 2.2.2.2 R2(config-router)#neighbor 1.1.1.1 remote-as 1 R2(config-router)#exit
但是在完成上述配置之后,并没有发现邻居成功建立。
这是因为默认外部BGP邻居之间所发送的所有数据包的TTL值,都为1。
由于此时我们利用环回口建立邻居,所以跳数大于1,因此必须修改TTL值。
R1(config)#router bgp 1 R1(config-router)#neighbor 2.2.2.2 ebgp-multihop 2 //将TTL值修改为2 R1(config-router)#exit R2(config)#router bgp 2 R2(config-router)#neighbor 1.1.1.1 ebgp-multihop 2 R2(config-router)#exit
然后等待一段时间,依然发现BGP邻居无法建立,结合上个步骤中总结的BGP邻居建立的注意点,我们发现,应该是TCP连接建立的IP地址无法对应。
R1尝试和2.2.2.2建立TCP,源IP为10.10.12.1 或者 10.10.21.1
R2尝试和1.1.1.1建立TCP,源IP为10.10.12.2 或者 10.10.21.2
因此,必须修改建立TCP的源地址。
R1(config)#router bgp 1 R1(config-router)#neighbor 2.2.2.2 update-source loo0 R1(config-router)#exit R2(config)#router bgp 2 R2(config-router)#neighbor 1.1.1.1 update-source loo0 R2(config-router)#exit
终于,R1和R2之间的BGP邻居关系正常。
*Mar 1 02:35:05.535: %BGP-5-ADJCHANGE: neighbor 2.2.2.2 Up
这种冗余物理链路的BGP邻居关系,我们可以采用建立环回口的方式,这是一条逻辑的邻居关系,下层位IGP。因此如果冗余的话需要由IGP来决定。
下面给出R1和R2之间的所有邻居配置:
R1(config)#router bgp 1 R1(config-router)#no synchronization R1(config-router)#bgp router-id 1.1.1.1 R1(config-router)#bgp log-neighbor-changes R1(config-router)#neighbor 2.2.2.2 remote-as 2 R1(config-router)#neighbor 2.2.2.2 ebgp-multihop 2 R1(config-router)#neighbor 2.2.2.2 update-source loo0 R1(config-router)#no auto-summary R2(config)#router bgp 2 R2(config-router)#no synchronization R2(config-router)#bgp router-id 2.2.2.2 R2(config-router)#bgp log-neighbor-changes R2(config-router)#neighbor 1.1.1.1 remote-as 1 R2(config-router)#neighbor 1.1.1.1 ebgp-multihop 2 R2(config-router)#neighbor 1.1.1.1 update-source loo0 R2(config-router)#no auto-summary
验证BGP邻居关系。
BGP邻居建立要经历以下几个状态:
ldle:BGP被管理性down或者在尝试下一次建立
Connect:BGP进程在等待down或者尝试下一次建立。这个状态无法判断TCP连接是否建立成功。
Active:TCP连接正在建立,同时BGP还未发出BGP数据包。
Opensent:TCP连接建立完成,同时BGP发出BGP数据包。
Openconfirm:收到了邻居的Open数据包,接着BGP只需要发送keeplive数据包保活。
Established:BGP邻居连接建立完成。