BGP(边界网关协议)是一个路径矢量路由协议,和传统的基于下一跳的IGP协议不一样,它是基于AS(自治系统)的协议。BGP属于外部网关路由协议,它解决的是AS之间的选路问题,也正是由于这样,它更适合用户互联网。学习BGP的关键在于理解BGP的报文、邻居的创建、BGP路由属性、选路原则等。接下来详细介绍——BGP路由协议。node
博文大纲:
1、BGP的概述;
1.自治系统
2.动态路由的分类
1)按自治系统分类
2)按协议类型分类
3.BGP的概念
4.BGP的特性
2、掌握BGP的工做原理;
1.BGP邻居关系
(1)BGP报文
(2)BGP状态机
(3)BGP数据库
(4)BGP邻居关系类型
2.通告BGP路由的方法
(1)Network方式
(2)Import方式
3.BGP的配置
(1)BGP对等体的配置
(2)保证IBGP下一跳可达
(3)BGP的属性
(4)BGP的选路原则
3、实验案例;
4、总结BGP的配置;数据库
不一样于RIP、OSPF之类的路由协议,BGP是在自治系统之间进行路由学习及选路的协议。举例来讲:把一个城市当作一个自治系统,RIP、OSPF路由协议就像是城市中的公交;BGP则至关于火车、高铁运行在城市与城市之间。在更好的了解BGP的概念以前,咱们先介绍一下自治系统的概念。网络
自治系统(AS)是由同一个技术管理机构管理,使用统一选路策略(运行同一种动态路由协议)的一组路由器的组合。自治系统的编号取值范围为1~65535。其中1~64511是互联网上注册的公有AS号,相似于公网地址,是全球惟一的且不可重复使用;64512~65535是私有AS号,相似于私网地址,能够重复使用可是互联网上是不可见的。app
动态路由协议有不少种分类方法,其中按自治系统分类、按协议类型分类是比较经常使用的两种。ide
IGP:即自治系统内部的路由协议,主要包含RIPv1/v二、OSPF、ISIS、EIGRP(Cisco私有协议)。IGP是运行在AS内部的路由协议,它主要解决AS内部的选路问题。其主要做用是发现、计算路由;oop
EGP:即自治系统之间的路由协议,一般指BGP。EGP是运行在AS与AS之间的路由协议,它主要解决的是AS之间的选路问题。BGP的主要做用是控制路由的传播和选择最优路由;学习
一般状况下,会先使用IGP协议在自治系统内部计算和发现路由条目,再经过BGP协议将IGP协议产生的路由传递至其余的自治系统。ui
距离矢量路由协议:RIPv1/v二、BGP(路径矢量协议)、EIGRP(高级的距离矢量协议);
链路状态路由协议:OSPF、ISIS;this
BGP是一种运行在AS与AS之间的动态路由协议,主要做用是在AS之间自动交换无环路由信息,以此来构建AS的拓补图,从而消除路由环路并实施用户配置的路由策略。目前公网路由条目众多,IGP协议没法承载,可是对于BGP来讲却能轻松应对。并且BGP相比IGP具备更多的属性特性,更加便于在大规模的网络中使用多种路由策略,因此BGP协议经常使用于ISP与ISP之间或跨地域总、分公司之间的路由信息交互。设计
BGP解决的是自治系统之间的路由学习问题。当今互联网是全球互联,在中国,互联网运营商有电信和联通。每一个公司都有本身的自治系统,而且内部运行IGP协议。可是互联网又要求互联,因此经过BGP就能够在电信和联通之间的学习路由,是电信的用户能够和联通的用户之间上网聊天,发送邮件等。如图:
BGP具备如下特性:
(1)传输协议:TCP,端口号179;
(2)BGP是外部路由协议,用来在AS之间传递路由信息;
(3)是一种加强的路径矢量路由协议;
(4)拥有可靠的路由更新机制 ;
(5)具有丰富的Metric度量方法;
(6)无环路协议设计;
(7)为路由条目附带多种属性信息;
(8)支持CIDR(无类别域间选路);
(9)丰富的路由过滤和路由策略;
(10)无需周期性更新;
(11)路由更新时只发送增量路由;
(12)周期性发送KeepAlive报文以保持 TCP连通性;
BGP是跨公网、跨自治系统的路由协议,能够在自治系统之间学习路由。BGP的动态学习路由也是基于邻居,只有邻居关系正常,BGP才能够正常工做。
运行BGP的路由器一般被称为BGPSpeaker(发言者),相互之间传递报文的Speaker之间互称为对等体(Peer)。BGP邻居关系的创建、更新和删除是经过对等体之间交互5种报文、6种状态机和5个表等信息来完成的,最终才能够造成邻居关系。
BGP报文头中的Type定义了BGP的报文类型。BGP对等体之间经过5种报文进行路由信息的交互。下面详细介绍5种报文的详细信息。
Open(打开)报文是TCP链接创建后发送的第一个报文,用于创建BGP对等体之间的链接关系,主要包含BGP版本、本地AS编号、Hoidtime(保存时间)等信息。对等体在接收到对端发过来的Open报文并协商成功后,将发送KeepAlive报文确认并保持链接的有效性。BGP对等体关系确认后,对等体之间才能够进行发送剩下的报文,交换路由信息。
Update(更新)报文用来在BGP对等体之间更新路由信息。
Update报文能够经过多条属性系统同的就可达路由信息,也可撤销多条不可达路由信息。
- 网络可达信息(NLRI):经过此字段发布多条具备相同属性的可达路由,这些路由信息可共享同一组路由属性,此字段由可达的目的IP地址前缀和掩码组成;
- 撤销多条不可达路由:经过该字段发布应经失效或者不可达的路由信息。此字段由不可达的目的IP地址和掩码组成;
Update报文能够用于只撤销路由,在仅用于撤销路由时,不须要包括路径属性或NLRI。一样,也能够用于只通告可达路由,此时则不须要携带撤销路由信息。
Notification(通知)报文的做用是当BGP检测到错误信息时,马上向对等体发出Notification报文,以后BGP链接会当即中断。要注意的是,无论当前的BGP状态当时处于何种状态,只要收到Notification报文就会返回idle状态。换而言之,BGP是不容许错误出现的一种路由协议,在选路原则中,更优的路径每每是邻居关系最久的对等体,以此反映对等体两端经历很长的时间都没有出现错误,而以前学过的其余路由协议则是越新越好。
用来告知对等体本地所支持路由的刷新能力。在全部BGP路由器拥有Route-Refresh(路由更新)能力的状况下,若是BGP的入口路由策略发生了变化,本地BGP路由器会向对等体发送Route-Refresh报文,收到此消息的对等体会将其路由信息从新发给本地BGP路由器。这样,能够在不中断BGP链接的状况下,对BGP路由表进行动态刷新,并应用新的路由策略。
该报文在对等体之间周期性的发送,用以保持链接的有效性并维护器链接,KeepAlive(保持)报文只有一个BGP报文头。默认KeepAlive(保持)报文发送周期为60s,Holdtime(保存报文)为180s。KeepAlive报文相似于OSPF协议中的Hello报文,当收到对等体发过来的KeepAlive报文后会刷新Holdtime计时器,若是Holdtime计时器超时仍然没有收到KeepAlive报文,则认为对等体失效。
BGP状态机描述的是BGP邻居的创建过程,经过对这些不一样状态的学习,能够更加深刻地了解BGP的工做原理,以及排查思路。BGP状态机公有六种状态,如图:
下面详细介绍BGP的六种状态:
ldle(空闲)状态,BGP拒绝任何进入的链接请求,IdIe状态是BGP的初始状态。在ldle状态下,BGP拒绝邻居发送的链接请求。只有在收到本设备的Start事件(如运行BGP协议)后,BGP才开始尝试和其余BGP对等体进行TCP链接,并转至Commect状态。任何状态中收到NOtification报文或TCP拆链通知等Error事件后,BGP都对转至ldle状态。
Connect(链接)状态下,BGP等待TCP链接的创建完成后再决定后续操做。在Connect状态下,BGP启动链接重传定时器(一般计时器为30s),等待TCP完成链接。若是TCP链接成功,那么BGP向对等体发送Open报文,并转至OpenSent(开放)状态;若是TCP链接失败,那么BGP转至Active(活跃)状态;若是链接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP继续尝试和其余BGP对等体进行TCP链接,停留在Connect状态。
Active(活跃)状态下,BGP将尝试进行TCP链接的创建,是BGP的中间状态。在Active状态下,BGP老是在试图创建TCP链接,若是TCP链接成功,那么BGP向对等体发送Open报文,关闭链接重传定时器,并转至OpenSent状态;若是TCP链接失败,那么BGP停留在Active状态;若是链接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP转至Connect状态。
在OpenSent(开放集)状态下,BGP等待对等体的Open报文,并对收到的Open报文中的AS号、版本号、Holdtime等进行检查。若是收到的Open安博文正确,那么BGP发送KeepAlive报文,并转至OpenConfirm(打开确认)状态;若是发现收到的Open报文有错误,那么BGP发送Notification报文给对等体,并转至IdIe状态。
OpenConfirm(打开确认)状态下,BGP等待KeepAlive或Notification报文。若是收到KeepAlive报文,则转至Established(确认)状态;若是收到Notification报文,则转至ldle状态。
在Established(确认)状态下,BGP能够在对等体之间交换Update、KeepAlive、Route-refresh报文和Notification报文。若是收到正确的Update或KeepAlive报文,那么BGP就认为对端处于正常运行状态,将保持BGP链接;若是收到错误的Update或KeepAlive报文,那么BGP发送Notification报文通知对端,并转至ldle状态。
注意:Route-refresh报文不会改变BGP状态。若是收到Notification报文,那么BGP转至ldle状态。若是收到TCP拆链通知(FIN),那么BGP断开链接,转至ldle状态。
在BGP对等体创建的过程当中,一般可见的三种状态是ldle、Active、Established。BGP对等体双方的状态必须都为Established,BGP邻居关系才能成立,双方经过Update报文交换路由信息。
BGP数据库是BGP正常工做所须要的存储空间,基于保存的内容不一样,可分为以下几种:
全局路由信息库,包括全部最优的IP路由信息。
BGP路由信息看,包括本地BGP Speaker通告的路由信息,将其中最优路由添加到IP路由表中。
注意:先要关注BGP路由表,若BGP路由表中不是最优路由,则没法在IP路由表中可见。
对等体邻居清单列表,包括对等体两端的邻居信息及邻居列表。
对等体宣告给本地Speaker的未处理的路由信息库。
本地Speaker宣告给指定对等体的路由信息库。
在BGP中大体可分为两种邻居关系:
- IBGP:同一个AS内部的BGP邻居关系,IBGP邻居一般是指运行BGP协议的对等体两端均在同一个AS域内,属于同一个BGP AS内部;
- EBGP:AS之间的BGP邻居关系,EBGP邻居一般是指运行BGP协议的对等体两端分别在不一样的AS内;
注意:IGP协议创建邻居通常要求三层直连,而且经过广播或组播创建邻居。而BGP的邻居关系是基于TCP的,也就是说只要TCP/IP可达,不管是否直连,BGP对等体彼此之间就能够创建邻居关系。因此BGP创建邻居以前首先要考虑的就是对等体之间的路径可达(是否存在路由)。务必要经过IGP或者静态路由使对等体两端互通。
如图:根据邻居之间是否属于同一个自治系统能够判断,R1和R2是EBGP邻居关系,R2和R4是IBGP邻居关系。若是AS300中有路由要传播到AS100,那么BGP的传播路径为R5→R4→R2→R1。须要注意的是,在AS200内部,除了R2和R4是IBGP邻居关系外,R2和R三、R3和R4均可以配置为IBGP邻居关系,彻底取决于网络工程师的规划。
可使用如下命令创建IBGP邻居和EBGP邻居,其中as-number后面跟邻居所在的AS好,邻居的AS号和本端的AS号相同就成为IBGP邻居,不一样就为EBGP邻居。
R2的配置以下:
[R2]bgp 200 //进入bgp视图,其中本端AS号为200 [R2-bgp]router-id 2.2.2.2 //配置BGP的router-id [R2-bgp]peer 12.1.1.1 as-number 100 //和12.1.1.1创建EBGP邻居关系 [R2-bgp]peer 34.1.1.4 as-number 200 //和34.1.1.4创建IBGP邻居关系
上面配置为R2设备经过有两个对等体邻居,R1:12.1.1.1为EBGP邻居,R4:34.1.1.4为IBGP邻居。须要注意的是R2和R4可达。
R5的配置以下:
[R5]bgp 300 [R5-bgp]router-id 5.5.5.5 [R5-bgp]peer 45.1.1.4 as-number 200
上面配置为R5设备通告有一个对等体邻居,R4:45.1.1.4为EBGP邻居。
须要注意的是,对等体两端如果非直连关系,须要先用IGP或者静态路由连通BGP对等体两端。
[R5]display bgp peer //查询BGP邻居信息; //在结果中重点查看state一列,Established表示已经创建链接; //BGP对等体两端同步路由信息的前提是BGP邻居关系为Established;
BGP路由是经过BGP命令通告而成的,而通告BGP路由的方法有两种:Network方式和Import方式。
使用Network方式能够将当前设备路由表中的路由(非BGP)发布到BGP路由表并通告给邻居,须要注意的是,network的对象是路由条目而不是接口。
如图:R1和R2位于AS100内,而且R1和R2是IBGP邻居关系,R2和R3是EBGP邻居关系。R1上有两个环回接口,因此在R1的路由表中就会有两个环回接口的直连路由。要求实现经过R1上宣告1.1.1.0/32和2.2.2.0/32路由,最终R3能够经过BGP学习到。配置命令以下:
[R1]bgp 100 [R1-bgp]router-id 1.1.1.1 [R1-bgp]peer 12.0.0.2 as-number 100 [R1-bgp]network 1.1.1.1 32 [R1-bgp]network 2.2.2.2 32 //R1将自身的1.1.1.1/32和2.2.2.2/32经过Network的方式发布到BGP中
BGP经过路由和IGP不一样,在IGP中,通告的是接口,以OSPF为例,假如路由器有两个接口,地址分别为192.168.1.1/24和192.168.2.1/24,那么运行IGP时,能够通告汇总地址,以使这两个接口运行OSPF协议,命令为network 192.168.0.0 0.0.255.255 area 0 。可是BGP不一样,BGP经过的不是接口,而是路由,假如路由表中的实际路由为1.1.1.0/24,那么就不能执行命令network 1.0.0.0 8以8为经过,必须以实际的路由通告。
使用Import命令能够将锁学习到的路由信息重分发到BGP路由表中,是BGP宣告路由的一种方式,能够引入BGP的路由包括直连路由、静态路由即动态路由协议学习的路由。和Network方式的区别是,Import的对象是某种动态路由协议,而不是路由条目。
R2和R3是EBGP邻居关系。在AS100中运行OSPF动态路由协议,R1经过OSPF宣告了物理接口及两个环回接口,而且R2已经经过OSPF学习到1.1.1.1/32和2.2.2.2/32两条路由,这些学习的路由能够在R2上经过Import方式引入BGP协议中。配置命令以下:
[R2-bgp]import-route ospf 110 //110为运行OSPF的进程号
经过display bgp routing-table命令能够查看BGP的路由表,在输出的BGP路由中,“*” 表示有效的路由,“>”表示最优的路由,只有最优的路由才会最终放入路由表中。
若是某个BGP路由条目不优,那么缘由可能有:
- 在同步打开的状况下,从IBGP邻居学习到的路由不会经过给其余BGP邻居,也不会使用该路由哦,直到经过IGP也学习到该路由或有静态路由能够关闭同步来解决(路由进程下执行 undo synchronization);
- BGP 路由条目的下一跳不可达;
BGP设备会将最优路由加入到BGP路由表,造成BGP路由。BGP设备与对等体创建邻居关系后,采起如下交互原则:
(1)从IBGP对等体得到的BGP路由,BGP设备只传递给它的EBGP对等体;
(2)从EBGP对等体得到的BGP路由,BGP设备传递给它的全部EBGP和IBGP对等体(对等体是IBGP只能传递一跳,对等体是EBGP则不限制);
(3)当存在多条到达同一目的地址的有效路由时,BGP设备只将最优路由发布给对等体;
(4)路由更新时,BGP设备只发送更新的BGP路由;
(5)全部对等体发送的路由,BGP设备都会接收;
(6)全部EBGP对等体在传递过程当中下一跳改变;
(7)全部IBGP对等体在传递过程当中下一跳不变;
(8)默认EBGP传递时,TTL值为1;
(9)默认IBGP传递时。TTL值为255;
因为默认BGP中EBGP邻居之间的TTL值为1,若EBGP对等体非直连,在传递时,TTL跳数限制会使非直连的EBGP对等体没法正常创建邻居关系,因此须要用EBGP多跳的命令来解决非直连 的邻居关系。
配置命令以下:
[R3]bgp 200 [R3-bgp]router-id 3.3.3.3 [R3-bgp]peer 12.0.0.1 as-number 100 //保证12.0.0.1可达 [R3-bgp]peer 12.0.0.1 ebgp-max-hop 2 //设置TTL值为2,使其可达
链接公网环境设备的地址很容易出现各类各样的问题,为了不由于接口不稳定或DOWN而致使的BGP状态的改变。一般会在同一个AS内使用冗余链路来确保BGP的稳定性,这样即便某一链路故障,也不影响BGP的邻居关系,因此常常会使用LoopBack接口IP地址和对端创建BGP邻居,由于环回接口永远是UP,因此只要至少有一条链路可达,BGP的邻居关系就不会因链路而发生改变,这种使用环回接口创建BGP邻居的方法称为更新源创建邻居。
R1的配置以下:
[R1]bgp 100 [R1-bgp]router-id 1.1.1.1 [R1-bgp]peer 3.3.3.3 as-number 100 [R1-bgp]peer 3.3.3.3 connect-interface LoopBack0
R3的配置以下:
[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接口先要让对等体可达; //须要手动添加对等体环路接口的路由条目或者IGP自动学习对方环回接口路由
在AS边缘的BGP设备,会接收到它的BGP对等体邻居传递过来的BGP路由信息。若是是下面这种状况:
假如R1通告一条路由,通过EBGP邻居传播到AS200后,R2看到的路由下一跳为12.0.0.1,继续通过EBGP传播到R3以后,R3看到的路由下一跳是23.0.0.2。R3传播给IBGP邻居R4后,R4看到的路由下一跳依然为23.0.0.2,由于经过IBGP邻居接收的BGP路由下一跳不变。又由于R4没有下一跳地址23.0.0.2的路由,因此R1传播过来的信息无效,不能传播给其余BGP邻居,更不能放入路由表。
解决的方法:在R3上宣称下一跳为R3本身,那么R4看到的下一跳就变成了34.1.1.3,而34.1.1.3能够经过IGP学习到(由于是直连网络),从而解决了路由无效的问题。R3执行以下命令能够实现:
[R3]bgp 300 [R3-bgp]router-id 3.3.3.3 [R3-bgp]peer 23.0.0.2 as-number 200 [R3-bgp]peer 34.1.1.4 as-number 300 [R3-bgp]peer 34.1.1.4 next-hop-local
区别于传统的协议,BGP协议包含不少路由属性,这些属性能够很是灵活的控制BGP的选路。
BGP的属性共分为公有必遵、公认任意、可选过渡、可选非过渡。如图:
- 公有必遵:全部BGP路由器均可以识别,且必须存在于Update报文中;
- 公认任意:全部BGP路由器均可以识别,但不要求必须存在于Update报文中,能够根据具体状况来决定是否添加到Update报文中;
- 可选过渡:BGP路由器能够选择是否在Update消息中携带这种属性。接收的路由器若是不识别这种属性,能够转发给邻居路由器(这就是过渡的含义),邻居路由器可能会识别并使用到这种属性;
- 可选非过渡:BGP路由器能够选择是否在Update消息中携带这种属性。在整个路由发布的路径上,若是部分路由器不能识别这种属性,可能会致使该属性没法发挥做用。由于接收的路由器若是不识别这种属性,将丢弃这种属性,并且再也不转发给邻居路由器;
BGP的经常使用属性有Origin、AS-PATH、Next-Hop、Local-Pref和MED等。
Origin属性属于公有必遵,用阿里定义路径信息的来源,其做用是标记一条路由是怎么成为BGP路由的。
Origin包含如下三种类型:
- IGP(i):优先级最高。经过Network命令注入BGP路由表的路由,其Origin属性为IGP;
- EGP(e):优先级次之。经过EGP获得的路由信息,经过使用Import-route命令注入的路由,其Origin属性为EGP;
- Incomplete(?):优先级最低。经过其余方式学习到的路由信息;
AS-PATH属性按矢量顺序记录了某条路由从本地到目的地址所要通过的全部的AS编号。在接收路由时,设备若是发现AS-PATH列表中有本AS号,则不接收该路由,从而避免了AS间的路由环路。
AS路径列表记录了所通过的AS号,各AS号之间以逗号分隔,且离本设备最近的AS号在最前面。
当BGP Speaker发布始发于本自治系统的路由时,遵循如下原则:
(1)当BGP Speaker将这条路由通告到EBGP对等体时,便会在Update报文中建立一个携带本地AS好的AS-PATH列表;
(2)当BGP Speaker将这条路由通告给IBGP对等体是,便会在Update报文中建立一个空的AS-PATH列表;
当BGP Speaker抓饭来自于其余自治系统的路由时,遵循如下原则:
(1)当BGP Speaker将这条路由通告给EBGP对等体时,便会把本地AS编号添加到AS-PATH列表的最前面。收到此路由的BGP设备根据AS-PATH属性就能够知道去目的地址所要通过的AS。离本地AS最近的相邻AS号排在前面,其余AS号按顺序依次排序;
(2)当BGP对等体将这条路由发布给IBGP对等体时,不会改变这条路由相关的AS-PATH属性;
如图:AS200中的路由器RTA通告了一条路由18.0.0.0/8。该路由分别经过(200→300→400→100)和(200→500→100)传递到AS100中。AS100在收到的路由中会携带该路由传播路径中的全部AS列表,其中最近的放在前面。
Next-Hop属性记录了路由的下一跳信息。BGP的下一跳属性和IGP的有所不一样,IGP中的下一跳描述的是下一个路由器,而BGP中的下一跳描述的是下一个AS,因此大部分状况下不是直连设备的IP地址。
一般状况下,Next-Hop属性遵循如下原则:
(1)BGP Speaker在向EBGP对等体发布某条路由时,会把该路由信息的下一跳属性设置为本地与对端创建BGP邻居关系的接口地址;
(2)BGP Speaker将本地始发路由发布给IBGP对等体时,会把该路由信息的下一跳属性设置为本地与对端创建BGP邻居关系的接口;
(3)BGP Speaker在向IBGP对等体发布从EBGP对等体学来的路由时,并不改变路由信息的下一跳属性;
图中A~J对应每一个路由器的接口的IP地址。R1经过一条BGP路由1.1.1.0,首先R2收到,由于R1和R2是邻居,并且该路由器始发于本自治系统(AS100),因此在通告给R2时下一跳为A。R2继续通告给R3,由于R2和R3是EBGP邻居,因此通告给R3时下一跳为C。R3继续通告给R4,由于R3和R4是IBGP邻居,并且该路由不是始发于本自治系统(AS200),而是由其余自治系统学习而来的,因此R3通告给R4时,下一跳不变,依然为C,同理,R5和R6的下一跳为G。
Local-Pref属性标识BGP路由的优先级,用于判断流量离开AS时的最佳路由。当BGP的设备经过不一样的IBGP对等体获得目的地址相同但下一跳不一样的多条路由时,将优先级选择Local-Pref属性值最高的路由。Local-Pref属性仅在IBGP对等体之间有效,不通告给其余AS。本地优先级在AS内部传递,优先级越高越优先。
Local-Pref属性能够手动设置,若是路由器没有配置Local-Pref属性,BGP选路是将该路由的Local-Pref值按默认值100来处理。
图中,互联网路由210.52.83.0/24和210.52.82.0/24分别经过ISP1和ISP2两个自治系统传到ISP0自治系统。配置RT4中210.52.83.0/24路由的Local-Pref属性为一个更高的值200,同理配置RT3中210.52.82.0/24路由的Local-Pref属性为一个更高的值200.如此一来,ISP0中的设备去往210.52.83.0/24将会走ISP1,去往210.52.82.0/24将会走ISP2。
在RT4上,控制210.52.83.0的Local-Pref属性为200,而210.52.82.0的Local-Pref属性为100的配置以下:
[RT4]acl number 2000 [RT4-acl-basic-2000]rule 5 permit source 210.52.83.0 0.0.0.255 [RT4]route-policy test permit node 10 [RT4-route-policy]if-match acl 2000 //知足匹配ACL的条件 [RT4-route-policy]apply local-preference 200 //修改Local-Pref为200 [RT4]route-policy test permit node 20 [RT4-route-policy]peer 1.1.1.1 route-policy test import //和邻居1.1.1.1 入方向应用策略
MED属性用于判断流量进入邻居AS是的最佳路由,当一个运行BGP的设备经过不一样的EBGP 对等体获得目的地址相同但下一跳不一样的多条路由时,在其余条件相同的状况下,将优先选择MED值较小者做为最佳路由,用来改变下游的选路。
MED属性仅在相邻两个AS之间传递,收到此属性的AS一方不会再将其通告给其余任何第三方AS。MED属性能够手动配置,若是路由没有配置MED属性,BGP选路时将该路由的MED值按默认值0来处理。
如图:AS200中将两条路由(210.52.83.0和210.52.82.0 )通告给AS100.其中RT1在通告是将210.52.83.0设置一个比较小的MED属性(50),RT2在通告时将210.52.82.0设置一个比较小的MED属性(50)。AS100收到这些通告后,会认为到达210.52.82.0通告RT2的路径是最优的,而到达210.52.83.0通告RT1的路径是最优的。
在RT3上,而骗子会发送给EBGP邻居RT1的路由条目中匹配210.52.82.0/24,将MED属性设置为100,其余的设置为50的命令以下:
[RT3]acl number 2000 [RT3-acl-basic-2000]rule 5 permit source 210.52.82.0 0.0.0.255 [RT3]route-policy test1 permit node 10 [RT3-route-policy]if-match acl 2000 //知足配置ACL的条件 [RT3-route-policy]apply cost 100 //修改MED属性为100 [RT3-route-policy]route-policy test permit node 20 [RT3]route-policy test permit node 20 [RT3-route-policy]apply cost 50 //没有配置条件表明匹配一切条件,修改MED值为50 [RT3]peer 1.1.1.1 route-policy test1 export
众所周知,BGP是被普遍应用于互联网ISP与ISP之间的路由协议,而BGP之因此能被众多ISP所信任,主要是由于其路径选择过程很是严格。
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条原则无效
(1)比较Cluster-List长度,短者优先;
(2)比较Originator_ID(若是没有Originator_ID,则用Router ID比较),选择数值较小的路径;
(3)比较对等体的IP地址,选择IP地址数值最小的路径;
(1)要求实现两个AS之间的互相通讯;
(2)经过修改BGP属性使实现业务需求的路径从R2切换到R3;
仅配置通告AS内部的直连路由,配置过程略!
在R1和R二、R1和R3配置EBGP邻居关系,使R一、R2和R3之间能够经过EBGP相互传递路由。在R二、R3和R4上配置IBGP邻居关系,使R二、R3和R4之间经过IBGP互相传递路由。
R1的配置以下:
[R1]bgp 100 [R1-bgp]router-id 1.1.1.1 [R1-bgp]peer 10.0.12.2 as-number 200 [R1-bgp]peer 10.0.13.3 as-number 200 [R1-bgp]network 1.1.1.1 32 //通告网络1.1.1.1/32
R2的配置以下:
[R2]bgp 200 [R2-bgp]router-id 2.2.2.2 [R2-bgp]peer 10.0.12.1 as-number 100 [R2-bgp]peer 10.0.24.4 as-number 200 [R2-bgp]peer 10.0.24.4 next-hop-local
R3的配置以下:
[R3]bgp 200 [R3-bgp]router-id 3.3.3.3 [R3-bgp]peer 10.0.13.1 as-number 100 [R3-bgp]peer 10.0.34.4 as-number 200 [R3-bgp]peer 10.0.34.4 next-hop-local
R4的配置以下:
[R4]bgp 200 [R4-bgp]router-id 4.4.4.4 [R4-bgp]peer 10.0.24.2 as-number 200 [R4-bgp]peer 10.0.34.3 as-number 200 [R4-bgp]network 4.4.4.4 32
R1的路由表:
[R1]dis bgp routing-table //查看经过BGP学到的路由表 BGP Local router ID is 1.1.1.1 Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP, ? - incomplete Total Number of Routes: 3 Network NextHop MED LocPrf PrefVal Path/Ogn *> 1.1.1.1/32 0.0.0.0 0 0 i *> 4.4.4.4/32 10.0.12.2 0 200i * 10.0.13.3 0 200i
R4的路由表:
[R4]dis bgp routing-table BGP Local router ID is 4.4.4.4 Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP, ? - incomplete Total Number of Routes: 3 Network NextHop MED LocPrf PrefVal Path/Ogn *>i 1.1.1.1/32 10.0.24.2 0 100 0 100i * i 10.0.34.3 0 100 0 100i *> 4.4.4.4/32 0.0.0.0 0 0 i
此时BGP已经配置完成,会发现R4去往R1的1.1.1.1优先走R2,而R1去往R4的4.4.4.4优先走R2。接下来改变选路问题。
根据要求,从R4去往R1的路由从R2改走R3。下面几种方法都可实现!
在R3上修改本地优先级属性并传出给R4。
[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 [R3-bgp]peer 10.0.34.4 route-policy lop export //应用策略 [R3-bgp]quit [R3]quit <R3>reset bgp all //刷新路由属性
刷新以后,在R4上查看路由表:
[R4]dis bgp routing-table BGP Local router ID is 4.4.4.4 Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP, ? - incomplete Total Number of Routes: 3 Network NextHop MED LocPrf PrefVal Path/Ogn *>i 1.1.1.1/32 10.0.34.3 0 222 0 100i * i 10.0.24.2 0 100 0 100i *> 4.4.4.4/32 0.0.0.0 0 0 i
经过路由表能够看出此时R4去往R1的路由已经改走R3了!
为了还原最初走R2的效果,请使用如下命令清除调用策略的语句:
[R3]bgp 200 [R3-bgp]undo peer 10.0.34.4 route-policy lop export
在R2上修改AS-PATH属性并传给R4:
[R2]route-policy as permit node 10 Info: New Sequence of this List. [R2-route-policy]apply as-path 123 123 123 additive //表示在原有的路径上行额外添加( 12三、12三、123)路径 [R2-route-policy]quit [R2]bgp 200 [R2-bgp]peer 10.0.24.4 route-policy as export [R2-bgp]quit [R2]quit <R2>reset bgp all
查看R4BGP路由效果:
[R4]dis bgp routing-table BGP Local router ID is 4.4.4.4 Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP, ? - incomplete Total Number of Routes: 3 Network NextHop MED LocPrf PrefVal Path/Ogn *>i 1.1.1.1/32 10.0.34.3 0 100 0 100i * i 10.0.24.2 0 100 0 123 123 12 3 100i *> 4.4.4.4/32 0.0.0.0 0 0 i
经过路由表能够看出此时R4去往R1的路由已经改走R3了!
若是但愿R1去往R4的路由该走R3,可使用MED属性控制R1的路由选路,使R1去往R4从R2该走R3。查看以前的配置会发现从R1去往R4走R2。,经过如下配置能够实现:
R2的配置以下:
[R2]route-policy med permit node 10 Info: New Sequence of this List. [R2-route-policy]apply cost + 50 [R2-route-policy]quit [R2]bgp 200 [R2-bgp]peer 10.0.12.1 route-policy med export [R2-bgp]quit [R2]quit <R2>reset bgp all
查看R1的BGP路由表:
[R1]dis bgp routing-table BGP Local router ID is 1.1.1.1 Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP, ? - incomplete Total Number of Routes: 3 Network NextHop MED LocPrf PrefVal Path/Ogn *> 1.1.1.1/32 0.0.0.0 0 0 i *> 4.4.4.4/32 10.0.13.3 0 200i * 10.0.12.2 50 0 200i
实验完成!
经过实验不难发现:BGP控制选路主要是经过BGP属性值的调整完成的。BGP包含大量的属性,而这些属性直接影响选路,因此BGP相对于ICP来讲具备更强大控制能力。须要注意的是:BGP选路的方法有不少种,要确保选用正确的方法,同时须要注意不通属性键的优先级问题。
在配置过程当中须要注意如下几点,以避免出现错误:
(1)在创建邻居关系,指定对端路由器地址前,务必保证能够ping通对端路由器。
(2)AS内部创建BGP邻居关系时,最好指定对方的Loopback地址,但不要忘记更新源,参考命令: “ [R3-bgp]peer 4.4.4.4 connect-interface LoopBack 0 ” 。
(3)若在AS内部有一个以上的的路由器运行着BGP协议,对于AS内部来讲,这也是IBGP协议,不要忘记更改下一跳的属性,也就是前面提到的“保证IBGP下一跳可达”,命令参考:“[R4-bgp]peer 2.2.2.2 next-hop-local”
(4)前面说到,若在两个不一样AS区域的路由器上创建邻居关系,哪怕这两个路由器是直连的,也要改变它的TTL值,目的是让路由器之间用来创建邻居关系的数据包,能够多通过几个路由器,再被丢弃,由于,虽然不一样AS的路由器是直连的,只有一跳便可,可是因为指定的是对端路由器的loopback地址,loopback地址的网段确定与路由器直连的网段不是同一个网段,路由器收到该数据包后就把它当成另外一个路由器上的地址了,因此在两个AS间创建邻居关系时,必定要改变它的跳数,IBGP之间创建邻居关系就不用改变TTL值了,由于在IBGP中,数据包的TTL值默认为255。改变TTL值的参考命令:“ [R1-bgp]peer 34.1.1.4 ebgp-max-hop 2 ”这条命令,须要跳几下就把数值设置为几就行,能够比实际跳数大,可是不能比实际跳数小。
———————— 本文至此结束,感谢阅读 ————————