实验报告 BGP实验
实验拓扑图
Requirment
- 搭建好拓扑如图,测试直连PING通 服务器采用回环口进行模拟。
- 大型企业A需要承担互联网的联网任务,用来透传互联网条目,ISPB上挂有很多的服务器,这些服务器在互联网上必须能够访问,ISPC上也有一些列的服务器,要求互联网能够访问。
- 每一台路由器都起一个/32 回环地址RX地址为X.X.X.X 用来建立BGP邻居关系。
- 大型企业内部起OSPF协议,ISP B内部也起OSPF协议 大型企业A分别和ISP B和ISP C建立BGP邻居关系,以用来透传互联网上的条目。
- 要求ISPC学到的挂在ISP B的服务器条目尽可能少。
- 要求ISP C前往ISP B那些服务器是通过R3和R5之间的高带宽链路的,为了充份利用链路带宽,要求ISP B访问ISP C上的服务器是走的R4和R6之间的底带宽链路,这些配置都需要在大型企业业上完成。
- 要求ISP和企业之间的BGP邻居建立是安全的。
- 完成以上所有配置后,确信网络中的每一台设备都学到了服务器对应的BGP条目。
实验步骤
-
第一步,首先按照实验需求搭建好实验拓扑图,如下:
-
第二步,按照规划,配置相应的IP地址,并且按照要求创建相应的回环口,用来表示相应的服务器
BGP邻居关系的建立
-
这里我们不管是建立EBGP还是IBGP邻居关系都统一采用回环口的方式建立,所以我们还需要在每个路由器上面创建一个回环口,如果路由器为AR1,回环口的地址就为1.1.1.1 /32,所有路由器都是按照这种配置方式。其次对AR2这样的路由器需要和AR1建立EBGP关系,与AR3和AR4建立IBGP邻居关系,也可以在AR2上面只创建一个回环口来代替,当然我们也可以一个回环口单独建立一个邻居关系,这些都是没有什么影响的,接下我们开始建立邻居关系了
-
按照图示的规划,AR1和其回环口属于AS1,AR2、AR3、AR4以及其回环口属于AS2,AR5、AR6、AR7及其回环口属于AS3,在具体介绍命令之前,我们应该需要知道,建立邻居关系的过程应该是两个路由器先互相发送单播包指邻居、然后通过ping的方式检测其TCP可达性、然后再是后面具体的过程,然后开始介绍命令吧
-
首先我们我们应该让AR1的回环口和AR2的回环口建立EBGP邻居关系,首先是在AR1路由器下面配置,命令如下:
- [AR1]BGP 1 //数字代表路由器AR1所在的自治系统的编号
- [AR1-bgp]peer 2.2.2.2 as-number 2 //邻居为AR2的回环口IP,2.2.2.2 因为要建立EBGP关系,对等体的AS号为2
- [AR1-bgp]peer 2.2.2.2 ebgp-max-hop 2 //把发送给对等体的建立TCP连接的数据包的TTL改成2,因为默认为1,会导致数据包不能到达对等体的回环口
- [AR1-bgp]peer 2.2.2.2 connect-interface LoopBack3 //默认情况下数据包从物理接口发出,所以数据包的源IP是物理接口的IP,这就会导致TCP连接不能正常建立,所以我们需要修改数据包源IP是由建立邻居关系的回环口3发出
- [AR1]ip route-static 2.2.2.2 255.255.255.255 12.12.12.2 //默认情况下,AR1和AR2的两个回环口都是不能ping通过的,通过这一步,保证两个回环口可以互通,这也就是保证TCP的可达性
- [AR1]BGP 1 //数字代表路由器AR1所在的自治系统的编号
-
然后我们在AR2路由器上面配置相关命令:
-
[AR2]BGP 2 //数字代表路由器AR1所在的自治系统的编号
- [AR2-bgp]peer 1.1.1.1 as-number 1 //邻居为AR1的回环口IP,1.1.1.1 因为要建立EBGP关系,对等体的AS号为1
- [AR1-bgp]peer 1.1.1.1 ebgp-max-hop 2 //把发送给对等体的建立TCP连接的数据包的TTL改成2,因为默认为1,会导致数据包不能到达对等体的回环口
- [AR1-bgp]peer 1.1.1.1 connect-interface LoopBack1 //默认情况下数据包从物理接口发出,所以数据包的源IP是物理接口的IP,这就会导致TCP连接不能正常建立,所以我们需要修改数据包源IP是由建立邻居关系的回环口1发出
- ip route-static 1.1.1.1 255.255.255.255 12.12.12.1
-
-
-
然后AR1和AR2就可以建立EBGP的邻居关系了,如下图:
-
在AR2路由器上面查看一样可以发现是Established状态了
-
接下来在AS2中的路由器AR2、AR3、AR4两两相互建立IBGP的邻居关系,这里不再需要更改TTL值,默认是255。在建立邻居关系之前,我们需要在AS2内部配置OSPF动态路由协议,目的是保证路由器之间的TCP可达性,使得各自用来建立IBGP邻居关系的回环口可以相互ping通,这里不再采用静态路由,毕竟配置起来太麻烦,命令不在描述,只要注意OSPF宣告的时候只能是213.34.1.0 /30、213.34.1.4 /30、213.34.1.8 /30和各自的回环口网段就可以了
-
首先是AR2和AR3建立IBGP的邻居关系,首先在AR2上面配置,命令如下:
- [AR2-bgp]peer 3.3.3.3 as-number 2
- [AR2-bgp]peer 3.3.3.3 connect-interface LoopBack1
-
然后再AR3上面配置,命令如下:
- [AR3-bgp]peer 2.2.2.2 as-number 2
- [AR3-bgp]peer 2.2.2.2 connect-interface LoopBack1
-
然后AR2和AR4之间:
- [AR2-bgp]peer 4.4.4.4 as-number 2
- [AR2-bgp]peer 4.4.4.4 connect-interface LoopBack1
-
在AR4上面配置:
- [AR4-bgp]peer 2.2.2.2 as-number 2
- [AR4-bgp]peer 2.2.2.2 connect-interface LoopBack1
-
AR3和AR4之间命令都是相同的,不在罗列
-
然后各自的IBGP邻居关系就建立好了,如下图:
- AR2上面查看:
-
AR4上面查看:
-
可以看到相应的IBGP关系都已经建立好了
-
-
接下来是在AR3和AR5、AR4和AR6分别建立EBGP关系,这里建立的EBGP关系与AR1和AR2建立关系的步骤一样,如下:
-
首先是AR3和AR5,首先在AR3上面配置:
- [AR3]BGP 2
- [AR3-bgp]peer 5.5.5.5 as-number 3
- [AR3-bgp]peer 5.5.5.5 ebgp-max-hop 2
- [AR3-bgp]peer 5.5.5.5 connect-interface LoopBack1
- [AR3]ip route-static 5.5.5.5 255.255.255.255 35.35.35.2
- [AR3]BGP 2
-
然后再AR5上面配置:
- [AR5]BGP 3
- [AR5-bgp]peer 3.3.3.3 as-number 2
- [AR5-bgp]peer 3.3.3.3 ebgp-max-hop 2
- [AR5-bgp]peer 3.3.3.3 connect-interface LoopBack1
- [AR5]ip route-static 3.3.3.3 255.255.255.255 35.35.35.1
- [AR5]BGP 3
-
这样AR3和AR5之间的EBGP邻居关系就建立好了,如下图:
-
然后是AR4和AR6之间建立EBGP的邻居关系,步骤和AR3和AR5之间一样,不在罗列命令
-
-
最后是AS3内部的IBGP邻居关系的建立,和AS2内部一样,首先启动一个OSPF协议,保证TCP的可达性,宣告的网段包括AR5、AR6、AR7的各自回环口,以及83.69.1.0/30、83.69.1.4/30网段,然后AR5和AR7、AR6和AR7建立相应的IBGP关系,就可以了,命令也不再罗列出,给出建立好之后的截图如下:
-
最后,所有的BGP邻居关系就建立好了,接下来需要保证左右两边的模拟服务器的回环口都可以互相通信,所以我们应该在AR1和AT7路由器上面宣告自己服务器IP地址,以便相互传递
-
首先是AR1:
-
[AR1-bgp]network 210.1.1.0 24
-
[AR1-bgp]network 210.1.2.0 24
-
然后我们查看AR7路由表,看是否存在这两个条目:
-
很明显没有这是什么问题了, 我们查看AR2的路由表发现上面存在210.1.1.0 /24、210.1.2.0 /24网段,如下图:
-
我们在查看AR3的路由表可以发现并没有相应的条目,说明AR2没有成功的传递给AR3,我们来查看看AR3的BGP拓普表:
-
可以发现这两个条目的下一跳还是AR1路由器,本来应该是AR2才对,所以在拓扑表中这两个条目表示无效的,是不会加到路由表中,只有存在于拓扑表中,并且最优和有效的条目才会传递下去,解决办法:更改下一跳,因为路由器在把路由条目传递给IBGP关系的路由器的时候,下一跳不会自动指向发送路由信息的路由器,而是保持上一次的值不变,而传递给EBGP邻居关系的路由器的时候,下一跳会自动更改,所以我们这里需要在AR2上面配置一条命令:
-
[AR2-bgp]peer 3.3.3.3 next-hop-local //当传递路由信息给邻居路由器的时候,路由条目的下一跳指向自己
-
我们在AR3上面查看路由表:
-
在查看AR3的BGP拓普表:
-
可以发现路由表和拓普标都正常了
-
然后我们接下来我们还需要更改到AR4的路由信息的下一跳:
- [AR2-bgp]peer 4.4.4.4 next-hop-local
-
-
接下来,AR5和AR7与AR6和AR7之间也是IBGP的邻居关系,也要在AR5和AR6上面修改相应的下一跳
-
最后我们查看AR7的路由表:
- 已经拥有相应的210.1.1.0 /24、210.1.2.0 /24的路由条目了
-
-
-
然后就是把AR7上面的服务器信息宣告出来,让AR1能够学习到,并且要在AR3和AR4上面修改下一跳,最后查看AR1的路由表如下:
-
我们用AR1的服务器pingAR7的服务器测试一下:
-
可以发现,已经可以正常通信了
-
AR1学习到更少的AR7服务器的路由条目
-
这里我们可以做一个简单的BGP路由汇总,在AR7上面配置,命令如下:
-
[AR7-bgp]aggregate 134.0.0.0 255.248.0.0 detail-suppressed //把所有住类为134的明细条目汇总为134.0.0.0 /13,并且抑制明细条目的传递,在AR7上面查看BGP拓普表:
- 可以发现明细条目被抑制了,汇总条目134.0.0.0 /13才是有效并且最优的,我们在AR1上面收到的也是汇总之后的路由条目
-
安全认证
- 接下来我们需要在AR1和AR2之间配置安全认证,命令如下:
- [AR1-bgp]peer 2.2.2.2 password cipher 密码
- [AR2-bgp]peer 1.1.1.1 password cipher 密码
- 配置完成后,邻居关系还是正常的,因为安全认证发生在TCP建立连接阶段,这里配置安全认证的时候早已完成,所以我们需要重启BGP进程才可以发现如果一方没有配置安全认证,就会造成BGP邻居关系不能建立
配置流量选路
-
我们可以通过更改BGP拓扑表里面的相应的公有或者私有属性来变更流量的路径,这里我们通过修改公有必遵属性Originate来变更流量 ,首先我们查看AR7的路由表,可以发现到达AR1的流量路径的相应路由条目的下一跳是5.5.5.5,我们需要通过修改Originate属性,让流量的下一跳是6.6.6.6
-
很明显到达路由器AR1的路由条目可以从AR3、AR5或者AR4、AR6的路径学习到,我们修改当路由条目在通过AR3、AR5之间的链路的时候,Originate变为最低等的Incomplete,这样AR7路由器就会选择从AR6传递过来的路由条目,在AR3上面配置的命令如下:
- [AR3-acl-basic-2000]rule 1 permit source 210.1.0.0 0.0.3.255 //匹配AR1宣告的路由条目
- [AR3]route-policy DADA permit node 1
- [AR3-route-policy]if-match acl 2000
- [AR3-route-policy]apply origin incomplete
- [AR3-bgp]peer 5.5.5.5 route-policy DADA export //当路由条目从AR3出去到AR5的时候匹配route-policy DADA,如果匹配成功,就修改路由条目的Originate变为最低等的Incomplete
-
查看AR7的BGP拓扑表:
- 下一跳为5.5.5.5的条目的起源变成了?,这就表示它的起源是Incomplete,i表示是IGP
-
我们在查看AR7的路由表:
- 下一跳成功变成6.6.6.6,修改成功