1、BGP的概念:
BGP(Border Gateway Protocol,边界网关协议)是一个距离矢量路由协议,和传统的基于下一跳的IGP协议不一样,它是基于AS(自治系统)的协议。BGP属于外部网关路由协议,它解决的是AS之间的选路问题,也正是这样,它更适合用于互联网。BGP的关键在于理解BGP的报文,邻居的创建、BGP路由属性、选路原则等。
.
一、自治系统是什么?
自治系统(autonomous system,简称“AS”),是由同一个技术管理机构管理,使用统一选路策略(运行同一动态路由协议)的一组路由器的集合。自治系统的编号取值范围是1~65535。其中1~64511是互联网上注册的公有AS号类,相似于公有IP地址,是全球惟一且不可重复使用的;64512~65535是私有AS号,相似于私有IP地址,能够重复使用可是互联网上不可见。
.
二、动态路由分类
动态路由协议有不少分类方法,按自治系统分类、按协议类型分类是最经常使用的两种。node
按自治系统分类:数据库
IGP:内部网关路由协议,主要包含RIP、OSPF、ISIS、EIGRP(思科私有协议)。IGP路由协议运行在AS内部,解决的是AS内部的选路问题。主要做用是发现、计算路由。网络
EGP:外部网关路由协议,一般就是指BGP,它运行在AS与AS之间,解决的是AS之间的选路问题。BGP的主要做用是控制路由条目的传播和选择最优路由。app
通常会先使用IGP协议在自治系统内部计算和发现路由条目,再经过BGP协议将IGP协议产生的路由传递至其余的AS(自治系统)。ide
三、BGP的特征
BGP解决的是AS之间的路由学习问题,当今互联网是全球互联,在中国,互联网运营商有移动、电信和联通。每一个公司都有本身的自治系统,而且内部运行IGP协议。可是互联网又要求互联,因此经过BGP就能够在电信和联通等之间学习对方的AS内部路由,使电信和联通的用户之间互相通讯。oop
BGP具备如下特征:学习
传输协议:TCP,端口号179
BGP是外部路由协议,用来在AS之间传递路由信息
是一种加强的路径矢量路由协议
拥有可靠的路由更新机制
具有丰富的Metric(一种度量标准)度量方法
无环路协议设计
为路由条目附带多种属性信息
支持CIDR(就是支持子网划分后地址域间选路)
丰富的路由过滤和路由策略
无需周期性更新
路由更新时只发送增量路由
周期性发送KeepAlive(保活)报文以保持 TCP连通性测试
2、BGP的工做原理
BGP是跨公网、跨AS(自治系统)的路由协议,能够在AS之间学习路由。BGP的动态学习路由也是基于邻居,只有邻居关系正常,BGP才能够正常工做。
.
一、BGP邻居关系
运行BGP的路由器一般被称为BGPSpeaker(发言者),相互之间传递报文的speaker之间互称为对等体(peer)。BGP邻居关系的创建、更新和删除是经过对等体之间的5种报文、6种状态机和5个表等信息来完成,最终造成BGP邻居。ui
(1)BGP报文类型及做用:
BGP报文头中的type定义了BGP的报文类型。BGP对等体之间经过5种报文进行路由信息的交互,5种报文分别有:Open、Update、Notification、KeepAlive和Route-Refresh。
.this
(2)BGP状态:
BGP状态描述的是BGP邻居的创建过程,BGP状态共有六种,分别是Idle(空闲)、Connect(链接)、Active(活动)、OpenSent(打开发送)、OpenConfirm(打开确认)和Established(创建成功)。
.
BGP数据库是BGP正常工做所须要的存储空间,基于保存的内容不一样,可分为如下几种:
IP路由表(IP-RIB):全局路由信息库,包括全部最优的IP路由信息。
BGP路由表(Loc-RIB):BGP路由信息库,包括本地BGP Speaker通告的路由信息,将其中最优路由添加到IP路由表中。注意:先要关注BGP路由表、若BGP路由表中不是最优路由,则没法在IP路由表中可见。
邻居表:对等体邻居清单列表,包括对等体两端的邻居信息即邻居列表。
Adi-RIB-In:对等体宣告给本地Speaker的未处理的路由信息库。
Adj-RIB-Out:本地Speaker宣告给指定对等体的路由信息库。
(4)BGP邻居关系类型:
在BGP中大体可分为两种邻居关系:IBGP邻居和EBGP邻居。
.
BGP邻居的AS号和本端的AS号相同就为IBGP(邻居),不一样就是EBGP邻居。
.
IGP(内部网关协议,如OSPF)创建邻居通常要求三层设备直连,而且经过广播或组播创建邻居关系。而BGP(外部网关协议)的邻居关系是基于TCP的,也就是说只要让TCP/IP可达,不管是否直连,BGP对等体彼此之间就能够创建邻居关系。因此BGP创建邻居以前首先要考虑的就是对等体之间的路径可达(是否存在路由,能够ping通)。务必要经过IGP或者静态路由使对等体两端互通。
二、通告BGP路由的方法
BGP路由是经过BGP命令通告而成的,而通告BGP路由的方法有两种:network和Import。
(1)network方式:
.
使用network命令能够将当前设备路由表中的路由(非BGP)发布到BGP路由表中并通告给邻居,和OSPF中使用network命令的方式大同小异,只不过在BGP宣告时,只须要宣告网段+掩码数便可,如:network 12.12.0.0 16。
(2)Import方式:
.
使用Import命令能够将该路由器学到的路由信息重分发到BGP路由表中,是BGP宣告路由的一种方式,能够引入BGP的路由包括:直连路由、静态路由及动态路由协议学到的路由。其命令格式与在RIP中重分发OSPF差很少。
三、BGP对等体的交互原则
BGP设备会将最优路由加入BGP路由表,造成BGP路由。BGP设备与对等体创建邻居关系后,采用如下交互原则:
从IBGP对等体得到的BGP路由,BGP设备只传递给它的EBGP对等体。
从EBGP对等体得到的BGP路由,BGP设备传递给它全部EBGP和IBGP对等体(对等体是IBGP只能传递一跳,对等体是EBGP则不限制)
当存在多条到达同一目的地址的有效路由时,BGP设备只将最优路由发布给对等体
路由更新时,BGP设备只发送更新的BGP路由
全部对等体发送的路由,BGP设备都会接收
全部EBGP对等体在传递过程当中下一跳改变
全部IBGP对等体在传递过程当中下一跳不变(须要特别注意)
默认EBGP传递时 TTL值为1(须要特别注意)
默认IBGP传递时 TTL值为255
四、更新源创建邻居关系
这个概念说白了就是在指定对等体时,使用对方的loopback口,由于该接口比任何物理接口都要稳定,只要设备在运行,loopback口就不会关闭,只要有一条链路能够和对方的loopback地址通讯,就不会形成BGP状态的改变,若使用物理接口,一旦这个物理接口down掉,那么BGP也就完了,因此这种使用loopback口创建BGP邻居的方法称为更新源创建邻居,一般会在同一个AS内使用冗余链路来确保BGP的稳定性。(若在不一样AS内使用对端路由器的loopback地址来创建邻居关系,须要改变两个路由器上的TTL值,具体解释请参考博文末尾的配置总结)
如在上图中,三个路由器同在AS 100区域中,若R1和R3要使用更新源创建邻居关系,那么配置以下:
R1路由器:
[R1]bgp 100 <!--设置BGP编号为100--> [R1-bgp]router-id 1.1.1.1 <!--配置该路由器自己的route ID,该地址通常为loopback接口地址--> [R1-bgp]peer 3.3.3.3 as-number 100 <!--指定对端的loopback地址,“100”是对端路由器所在的BGP编号--> [R1-bgp]peer 3.3.3.3 connect-interface LoopBack0 <!--指明对端的这个地址是哪一个loopback接口,这里是loopback接口 0-->
R3路由器(相关命令解释参考R1路由器的配置):
[R3]bgp 100 [R3-bgp]router-id 3.3.3.3 [R3-bgp]peer 1.1.1.1 as-number 100 [R3-bgp]peer 1.1.1.1 connect-interface LoopBack0
注意:本地loopback接口先要让对等体可达(就是能够ping通对方的loopback地址),须要手动添加对等体环回接口的路由条目或者使用OSPF、RIP等自动学习对方环回接口的路由。
五、保证IBGP下一跳可达
在AS边缘的BGP设备,会接收到它的EBGP对等体邻居传递过来的BGP路由信息。上面说过:全部EBGP对等体在传递过程当中下一跳改变, 全部IBGP对等体在传递过程当中下一跳不变。上个图来直观的说一下:
图中,用A——J分别来代替路由器的接口IP地址,结合全部EBGP对等体在传递过程当中下一跳改变, 全部IBGP对等体在传递过程当中下一跳不变这个结论,能够看到图中存在什么问题(本身看图理解吧,是在是懒癌晚期,不想解释了),就是图中R3路由器之后的路由器收到的路由条目中的下一跳是错误的,解决办法就是在R3和R5路由器上对R4和R6宣称下一跳为它本身,而后就会发现,R4学到的下一跳地址是E。R6学到的下一跳就是I。这只是解决了R1宣告路由时出现的问题,那么若是如今R6又宣告了一条路由,就还须要在R4和R2路由器上对R3和R1宣称下一跳为它本身。这样才算保证了IBGP的下一跳可达。
.
配置以下(就拿一个路由器来举例,前三条配置命令的解释能够参考上面的注释,主要是最后一条命令,来改变路由的下一跳):
[R3]bgp 200 [R3-bgp]router-id 3.3.3.3 [R3-bgp]peer 34.1.1.4 as-number 200 <!--34.4.4.4是R4的地址,用来和R4创建邻居关系--> [R3-bgp]peer 34.1.1.4 next-hop-local <!--这条命令用来改变向邻居传递路由时,宣称全部传给邻居的路由条目,下一跳都是本身-->
六、EBGP多跳
这个好理解,因为默认BGP中EBGP邻居之间的TTL值为1,(TTL,数据包的生命周期值,每通过一个路由器该值会-1,当该值为0后,数据包将会被丢弃)。若EBGP对等体非直连(通讯时须要通过一个以上的路由器,TTL值就不够用了),TTL值限制会使非直连的对等体没法正常创建邻居关系,因此须要用EBGP多跳的命令来解决非直连的邻居关系。以下图,若不配置EBGP多跳,那么R1和R3将没法正常创建邻居关系:
配置上图中的R3路由器多跳(R1路由器也须要进行相似的配置,进而改变TTL值,这里只拿R3为例):
R3 配置以下:
[R3]bgp 200 [R3-bgp]router-id 3.3.3.3 [R3-bgp]peer 12.0.0.1 as-number 100 [R3-bgp]peer 12.0.0.1 ebgp-max-hop 2 <!--指明跳数为2,也就是TTL值为2-->
七、控制BGP选路
BGP协议包含不少路由属性,这些属性能够很是灵活的控制BGP的选路。
.
BGP的属性分为共有必遵,公认任意、可选过渡可选非过渡四大类,以下表为BGP的属性及对应的分类:
(1)公有必遵:全部BGP路由器均可以识别,且必须存在update报文中。
(2)公有任意:全部BGP路由器均可以识别,但不要求必须存在于update报文中,能够根据具体状况来决定是否添加到Update报文中。
(3)可选过渡:BGP路由器能够选择是否在Update报文中携带这种属性。接收的路由器若是不识别这种属性,能够转发给邻居路由器(这就是过渡的含义),邻居路由器可能会识别并使用这种属性。
(4)可选非过渡:BGP路由器能够选择是否在Update报文中携带这种属性。在整个路由发布的路径上,若是部分路由器不能识别这种属性,可能会致使该属性没法发挥做用。由于接收的路由器若是不识别这种属性,将丢弃这种属性,而再也不转发给邻居路由器。
BGP属性的介绍:
.
BGP经常使用的属性有:Origin、AS-PATH、Next-Hop、Local-Perf和MED等。
.
(1)Origin(起源)属性:属于公有必遵,用来定义路径信息的来源,其做用是标记一条路由是怎么成为BGP路由的。它有如下三种类型:
IGP(I):优先级最高,经过Network命令注入BGP路由表的路由,其Origin属性为IGP。
EGP(e):优先级次之。经过EGP获得的路由信息,其Origin属性为EGP。
Incomplete(?):优先级最低。经过其余方式学习到的路由信息。如BGP经过Import-route命令重分发引入的路由,其Origin属性为Incomplete。可使用 display bgp routing-table 命令查看,将显示在最后一列,其列名是Path/Ogn
.
(2)AS-PATH(AS路径)属性:该属性按照矢量顺序记录某条路由从本地到目的地址要通过的全部AS编号,在接受路由时,设备若是发现AS-PATH列表中有本AS号,则不接收该路由,从而避免了AS间的路由环路。
若在查看BGP路由表时,看到了AS编号,如(100,200,300),则表示该路由条目是通过了AS300、AS200和AS100传播到本设备,其中AS100是离本设备最近的AS。
.
(3)Next-Hop(下一跳)属性:又回到保证IBGP下一跳可达这个问题了,这么说吧,在前面提到的保证IBGP下一跳可达,就是利用了Next-Hop属性,不解释了。
.
(4)Local-Perf属性:用来标识BGP路由的优先级,,用于判断流量离开AS时的最佳路由。当BGP的设备经过不一样的IBGP对等体获得目的地址相同可是下一跳不一样的多条路由时,将选择优先级Local-Perf属性值较高的路由。Local-Perf属性仅在IBGP对等体之间有效,不会通告给其余AS,本地优先级在AS内部传递,数值越高越优先。默认优先级为100,能够手动更改。下面是我在网上找到的一个配置图(可使用ACL来定义一些流量,也能够直接修改本地的优先级,下图是基于ACL来对不一样网段设置不一样的优先级)。
(5)MED属性:用于判断流量进入邻居AS时的最佳路由,当一个运行BGP的设备经过不一样的EBGP对等体获得目的地址同样可是下一跳不一样的多条路由时,在其余条件相同的状况下,将选择MED 值较小者做为最佳路由,用来改变下游的选路。
MED属性仅在相邻两个AS之间传递,收到此属性的AS一方不会再将其通告给其余任何第三方AS。MED属性能够手动配置,默认为0,具体配置看图吧:
在RT3上配置以下能够控制AS200中两个路由器的选路:
八、BGP的选路原则
BGP 选路原则
(1)若去往目的网络的路由下一跳不可达,则能够忽略此路由
(2)Preferred-Value优先级以数值高的路由优先
(3)Local-Preference优先级以数值高的路由优先
(4)聚合路由优先级高于非聚合路由
(5)本地手动聚合路由的优先级高于本地自动聚合的路由
(6)本地经过Network命令引入的路由的优先级高于本地经过Import-route命令引入的路由
(7)AS路径长度最短(最少个数)的路径优先级高
(8)比较Origin属性,IGP优先级高于EGP,EGP优先级高于Incomplete
(9)选择MED优先级较小的路由
(10)EBGP路由优先级高于IBGP路由
(11)BGP优先选择到BGP下一跳的IGP度量低的路径
当以上所有相同,则为等价路由,能够负载分担(注:AS-PATH必须一致),当负载分担时,如下3条原则无效
(12)比较Cluster-List长度,短者优先
(13)比较Originator_ID(若是没有Originator_ID,则用Router ID比较),选择数值较小的路径
(14)比较对等体的IP地址,选择IP地址数值最小的路径
3、BGP的配置实例
上面的BGP理论啰嗦了那么多,其实真正的配置倒很简单(这也符合网络的特点),来个实验图配置一下吧!
网络拓扑以下:
需求以下:
一、AS 200内部使用OSPF协议使AS 200内部互通,并在AS 200内部各个路由器上都运行BGP协议(R1和R二、R3创建邻居关系,R4和R二、R3及R5创建邻居关系,),各个AS之间运行BGP协议。
二、分别在R1和R5使用BGP协议宣告21.0.0.0/24和20.0.0.0/24,使全部路由器学到这两条路由信息。
三、经过BGP的属性控制选路,实现PC 1→R1→R2→R4→R5→PC 2→R5→R4→R3→R2→R1→PC 1的路由通讯。顺便将多个控制选路的方法测试一下。
四、在R二、R3和R4路由器上分别向BGP协议中注入本地的OSPF路由信息,使全网互通(虽然在第三个要求实现了控制路由选路,可是并不意味着PC1能够ping通任何一个路由器,好比R2)。
五、为了引出EBGP多跳的配置,尝试一下R1和R4直接创建对等体关系。
开始配置:
一、自行配置各个PC、路由器物理接口及loopback接口的IP地址(我是懒癌晚期患者,请多多担待),路由器IP配置参考:
<R1>sys <!--进入系统视图--> [R1]in g0/0/0 <!--进入物理接口--> [R1-GigabitEthernet0/0/0]ip add 12.1.1.1 24 <!--配置IP地址--> [R1-GigabitEthernet0/0/0]int loop 0 <!--进入loopback接口--> [R1-LoopBack0]ip add 1.1.1.1 32 <!--配置IP地址-->
二、配置AS 200内部的OSPF路由协议:
R2路由器配置以下:
[R2]ospf 1 <!--开启OSPF进程1--> [R2-ospf-1]area 0 <!--配置OSPF区域ID为0--> [R2-ospf-1-area-0.0.0.0]net 2.2.2.2 0.0.0.0 <!--宣告该路由器全部直连网段--> [R2-ospf-1-area-0.0.0.0]net 12.1.1.0 0.0.0.255 [R2-ospf-1-area-0.0.0.0]net 24.1.1.0 0.0.0.255 <!--OSPF宣告网段时须要写反掩码-->
R3路由器配置以下(相应注释请参考R2):
[R3]ospf 1 [R3-ospf-1]area 0 [R3-ospf-1-area-0.0.0.0]net 3.3.3.3 0.0.0.0 [R3-ospf-1-area-0.0.0.0]net 13.1.1.0 0.0.0.255 [R3-ospf-1-area-0.0.0.0]net 34.1.1.0 0.0.0.255
R4路由器配置以下(相应注释请参考R2):
[R4]ospf 1 [R4-ospf-1]area 0 [R4-ospf-1-area-0.0.0.0]net 4.4.4.4 0.0.0.0 [R4-ospf-1-area-0.0.0.0]net 24.1.1.0 0.0.0.255 [R4-ospf-1-area-0.0.0.0]net 34.1.1.0 0.0.0.255
三、开始配置BGP,使相应路由器为邻居关系:
R1配置以下:
[R1]bgp 100 <!--配置BGP编号为100--> [R1-bgp]router-id 1.1.1.1 <!--指定路由器ID--> [R1-bgp]peer 12.1.1.2 as 200 <!--与R2路由器的GE 0/0/0接口创建邻居关系--> [R1-bgp]peer 13.1.1.3 as 200 <!--与R3路由器的GE 0/0/1接口创建邻居关系--> [R1-bgp]network 21.0.0.0 24 <!--宣告本路由器上的21.0.0.0/24网段-->
因为配置BGP时,不少重复性的命令,因此,没有特别不同的配置时,我接下来就不写注释了
R2配置以下:
[R2]bgp 200 [R2-bgp]router-id 2.2.2.2 [R2-bgp]peer 12.1.1.1 as 100 <!--与R1路由器的GE 0/0/0接口创建邻居关系--> [R2-bgp]peer 4.4.4.4 as 200 <!--与R4路由器的loopback接口创建邻居关系--> [R2-bgp]peer 4.4.4.4 connect-interface LoopBack 0 <!--指明4.4.4.4是对端的loopback接口编号为0--> [R2-bgp]peer 4.4.4.4 next-hop-local <!--因为与R4属于IBGP,因此要保证下一跳可达-->
R3配置以下:
[R3]bgp 200 [R3-bgp]router-id 3.3.3.3 [R3-bgp]peer 13.1.1.1 as 100 [R3-bgp]peer 4.4.4.4 as 200 [R3-bgp]peer 4.4.4.4 connect-interface LoopBack 0 [R3-bgp]peer 4.4.4.4 next-hop-local
R4配置以下:
[R4]bgp 200 [R4-bgp]router-id 4.4.4.4 [R4-bgp]peer 2.2.2.2 as 200 [R4-bgp]peer 3.3.3.3 as 200 [R4-bgp]peer 2.2.2.2 next-hop-local [R4-bgp]peer 3.3.3.3 next-hop-local [R4-bgp]peer 2.2.2.2 connect-interface LoopBack 0 [R4-bgp]peer 3.3.3.3 connect-interface LoopBack 0 [R4-bgp]peer 45.1.1.5 as 300 <!--与R5路由器的GE 0/0/0接口创建邻居关系-->
R5配置以下:
[R5]bgp 300 [R5-bgp]router-id 5.5.5.5 [R5-bgp]peer 45.1.1.4 as 200 [R5-bgp]network 20.0.0.0 24
如今BGP的邻居关系已经创建完成,能够经过如下命令查看:
[R1]dis bgp peer BGP local router ID : 1.1.1.1 Local AS number : 100 Total number of peers : 2 Peers in established state : 2 Peer V AS MsgRcvd MsgSent OutQ Up/Down State Pre fRcv 12.1.1.2 4 200 5 8 0 00:02:11 Established 1 13.1.1.3 4 200 7 10 0 00:04:34 Established 1 <!--State列为Established则表示BGP邻居关系正常创建,能够正常运行BGP协议-->
至此,PC 1已经能够和PC 2进行通讯了,固然是BGP协议作的咯,可是如今除了非直连网段及AS 200内部路由器之外,也只有PC1和PC2能够通讯,如PC1并不能ping通R2路由器。
四、开始作第三个需求,经过BGP的属性控制选路,实现PC 1→R1→R2→R4→R5→PC 2→R5→R4→R3→R2→R1→PC 1的路由通讯。
先使用tracert命令查看PC1和PC2通讯时的路由,看看都是通过哪一个路由器。
PC1到达PC5所通过的路由器以下:
PC>tracert 20.0.0.1 #使用tracert命令进行查看 traceroute to 20.0.0.1, 8 hops max (ICMP), press Ctrl+C to stop 1 21.0.0.254 <1 ms 16 ms 15 ms 2 12.1.1.2 16 ms 15 ms 16 ms 3 24.1.1.4 31 ms 32 ms 31 ms 4 45.1.1.5 31 ms 47 ms 31 ms 5 *20.0.0.1 31 ms 32 ms
PC5到达PC1所通过的路由器以下:
PC>tracert 21.0.0.1 traceroute to 21.0.0.1, 8 hops max (ICMP), press Ctrl+C to stop 1 20.0.0.254 15 ms <1 ms 16 ms 2 45.1.1.4 16 ms 31 ms 16 ms 3 24.1.1.2 31 ms 31 ms 31 ms 4 12.1.1.1 47 ms 16 ms 47 ms 5 21.0.0.1 31 ms 31 ms 31 ms
来吧,开始配置选路问题(共三个方法可实现):
实现方法1:修改Local-Perf属性来改变R3路由器的优先级
在R3路由器上配置以下:
[R3]route-policy lop permit node 10 <!--建立名为lop的路由策略--> Info: New Sequence of this List. [R3-route-policy]apply local-preference 222 <!--设置本地优先级是222--> [R3-route-policy]quit [R3]bgp 200 <!--进入bgp 200--> [R3-bgp]peer 4.4.4.4 route-policy lop export <!--向R4通告该策略--> [R3-bgp]quit [R3]quit <R3>reset bgp all <!--刷新BGP-->
此时再查看PC5到达PC1所通过的路由器,就发现中间不通过R2路由器,而通过了R3路由器到达的PC1,以下:
PC>tracert 21.0.0.1 traceroute to 21.0.0.1, 8 hops max (ICMP), press Ctrl+C to stop 1 20.0.0.254 <1 ms 16 ms 16 ms 2 45.1.1.4 15 ms 16 ms 31 ms 3 34.1.1.3 31 ms 32 ms 31 ms 4 13.1.1.1 47 ms 31 ms 47 ms 5 *21.0.0.1 47 ms 31 ms
实现方法2:使用AS-PATH属性控制选路
为了还原最初走R2的效果,须要清除上一步R3路由器配置的Local-Perf属性,在R3路由器执行如下命令进行删除:
[R3]bgp 200 [R3-bgp]undo peer 4.4.4.4 route-policy lop export
删除后,稍等会能够自行查看,PC2和PC1时是否又恢复了走R2路由器而不走R3。
而后在R2路由器修改AS-PATH属性(就是让R2路由器在向R4路由器通告21.0.0.0网段时,告诉R4通过了好多区域,固然,这些区域是虚造出来的,这个区域数确定比R3所通过的区域数多,因此R4就会选择走R3而不走R2,由于要走最优路径嘛):
R2配置以下:
[R2]route-policy as permit node 10 <!--建立名为as的路由策略--> Info: New Sequence of this List. [R2-route-policy]apply as-path 123 123 123 add <!--添加几个as区域--> [R2-route-policy]quit [R2]bgp 200 <!--进入bgp 200--> [R2-bgp]peer 4.4.4.4 route-policy as export <!--向R4通告该策略--> [R2-bgp]quit [R2]quit <R2>reset bgp all <!--刷新BGP--> <!--随便添加的AS区域,并不会影响通讯,当R3路由器down掉后,R4路由器仍是会把数据包发到R2路由器-->
如今在PC2再测试一下,会发现又开始走R3路由器了:
PC>tracert 21.0.0.1 traceroute to 21.0.0.1, 8 hops max (ICMP), press Ctrl+C to stop 1 20.0.0.254 16 ms <1 ms 15 ms 2 45.1.1.4 32 ms 15 ms 31 ms 3 34.1.1.3 16 ms 31 ms 32 ms 4 13.1.1.1 31 ms 31 ms 31 ms 5 *21.0.0.1 47 ms 31 ms
实现方法3:使用MED属性控制选路
在一开始测试过,PC1去往PC5是通过R2路由器,而不是R3路由器,那么如今就增长R2路由器的MED属性并通告给R1路由器,使它通过R3路由器而不是R2路由器。
[R2]route-policy med permit node 10 <!--建立名为med的路由策略--> Info: New Sequence of this List. [R2-route-policy]apply cost + 500 <!--增长500的med值--> [R2-route-policy]quit [R2]bgp 200 [R2-bgp]peer 12.1.1.1 route-policy med export <!--通告给R1路由器--> [R2-bgp]quit [R2]quit <R2>reset bgp all <!--刷新BGP-->
在PC1测试一下:
PC>tracert 20.0.0.1 traceroute to 20.0.0.1, 8 hops max (ICMP), press Ctrl+C to stop 1 21.0.0.254 16 ms <1 ms 16 ms 2 13.1.1.3 15 ms 16 ms 15 ms 3 34.1.1.4 47 ms 16 ms 16 ms 4 45.1.1.5 31 ms 31 ms 31 ms 5 *20.0.0.1 32 ms 31 ms
已经改走R3路由器了,说明配置生效,经过这三个选路的实现方法不难发现,BGP控制选路主要都是经过BGP属性值来调整完成的。BGP包含大量的属性,而这些属性直接影响着选路,全部BGP比IGP具备更强大的控制能力。
五、第四个需求:在R二、R3和R4路由器上分别向BGP协议中注入本地的OSPF路由信息,使全网互通。
R2路由器:
[R2]bgp 200 [R2-bgp]import-route ospf 1 <!--将OSPF注入BGP,其中“1”表明OSPF的进程号-->
其他路由器配置基本一致:
R3:
[R3]bgp 200 [R3-bgp]import-route ospf 1
R4:
[R4]bgp 200 [R4-bgp]import-route ospf 1
自行查看各路由器的路由条目验证吧!文章末尾有相关查看命令。
六、第五个需求:尝试一下R1和R4直接创建对等体关系。
R1配置以下:
[R1-bgp]bgp 100 [R1-bgp]peer 34.1.1.4 as 200 [R1-bgp]peer 34.1.1.4 ebgp-max-hop 2 <!--因为中间隔着一个路由器,又不在同一个AS内,属于EBGP, 默认TTL值为1,因此要改变一下跳数-->
R4配置以下
[R4]bgp 200 [R4-bgp]peer 13.1.1.1 as 100 [R4-bgp]peer 13.1.1.1 eb [R4-bgp]peer 13.1.1.1 ebgp-max-hop 2
查看验证(可能须要等一会才可创建邻居成功,等待时间不会超过两分钟)
[R1-bgp]dis bgp peer <!--查看BGP的邻居关系--> BGP local router ID : 1.1.1.1 Local AS number : 100 Total number of peers : 3 Peers in established state : 3 Peer V AS MsgRcvd MsgSent OutQ Up/Down State Pre fRcv 12.1.1.2 4 200 27 38 0 00:17:49 Established 8 13.1.1.3 4 200 55 70 0 00:45:35 Established 8 34.1.1.4 4 200 12 13 0 00:00:02 Established 8 <!--34.1.1.4的State列为Established,表示创建邻居成功-->
相关查看命令:
[R4]dis ip routing-table <!--查看路由器的全部路由信息--> [R4]dis ospf routing <!--查看经过OSPF协议学到的路由信息--> [R4]dis bgp peer <!--查看经过BGP协议学到的路由信息--> [R1-bgp]dis bgp peer <!--查看BGP的邻居关系-->
4、配置总结
在配置过程当中须要注意如下几点,以避免出现错误:一、在创建邻居关系,指定对端路由器地址前,务必保证能够ping通对端路由器。二、AS内部创建BGP邻居关系时,最好指定对方的Loopback地址,但不要忘记更新源,参考命令: “ [R3-bgp]peer 4.4.4.4 connect-interface LoopBack 0 ” 。三、若在AS内部有一个以上的的路由器运行着BGP协议,对于AS内部来讲,这也是IBGP协议,不要忘记更改下一跳的属性,也就是前面提到的“保证IBGP下一跳可达”,命令参考:“[R4-bgp]peer 2.2.2.2 next-hop-local”四、前面说到,若在两个不一样AS区域的路由器上创建邻居关系,哪怕这两个路由器是直连的,也要改变它的TTL值,目的是让路由器之间用来创建邻居关系的数据包,能够多通过几个路由器,再被丢弃,由于,虽然不一样AS的路由器是直连的,只有一跳便可,可是因为指定的是对端路由器的loopback地址,loopback地址的网段确定与路由器直连的网段不是同一个网段,路由器收到该数据包后就把它当成另外一个路由器上的地址了,因此在两个AS间创建邻居关系时,必定要改变它的跳数,IBGP之间创建邻居关系就不用改变TTL值了,由于在IBGP中,数据包的TTL值默认为255。改变TTL值的参考命令:“ [R1-bgp]peer 34.1.1.4 ebgp-max-hop 2 ”这条命令,须要跳几下就把数值设置为几就行,能够比实际跳数大,可是不能比实际跳数小。