一、BGP概述
(一)自主系统
1、内部网关协议(IGP):用于自治系统内部交换信息。如:rip,igrp,eigrp,ospf,is-is都是IGP
2、外部网关协义(EGP):用于连接自主系统。如:BGP。是一种域间路由选择协议(idrp)
3、AS自治系统的含义:自治系统可能使用多种IGP,并采用多种度量值。在BGP看来,对另一个AS来说,它有统一的内部路由选择规划。
4、AS的编号:自治系统是一个16位的数字,范围为1--65535。1--65411是注册因特网编号,属于公有。 65412-65535是保留编号,属于私用。
(二)BGP的特性
1、BGP使用TCP作为传输协议,端口号179。ospf、igrp、eigrp运行于ip层。Is-is在网络层,rip用udp协议。
2、bgp是一种距离矢量协议。实际上是一种路径矢量协议。路径矢量信息包括一个BGP AS号列表,其中列表中列出了前往目标网络必须经过的AS。还包括前往下一个AS的路由器IP地址(下一跳属性),以及源头编码属性。
AS路径:即前往目标网络通过的AS列表。 需每个AS都会有一个编号。BGP不接受在AS路径属性中包含本自治系统的编号的路由选择更新,以防止环路。
3、支持CIDR(无类别域间选路),简化了路由聚合,减少了路由表
4、BGP更新只发送增量消息,不是所有的路由表。
5、提供了丰富的路由策略。
(三)BGP的用途
1、基本策略的路由选择
(1)BGP支持AS级策略。制定路由选择策略,被称为基于策略的路由选择。BGP根据路由选择信息中的属性可以制定AS策略
(2)BGP路由器只把自已获悉或使用的最佳路由通告给邻接自主系统对体,其他路由不通告。邻接自主系统,即与本自主系统相邻的自主系统。
即BGP路由器只把自已获悉的最佳路由通告给相邻自主系统的BGP路由器。
2、使用BGP的时机
AS有多条到其他自主系统的连接
必须对数据流进入和离开AS的方式进行控制
AS允许分组穿过它前往其他自主系统
3、不使用BGP的时机
只有一条到INTERNET或另一个AS的连接
自主系统之间带宽较低
当一个AS与另一个AS的路由策略相同时
路由器没有足够的能力来处理BGP更新
以上情况应用静态路由来解决。
浮动静态路由:即把静态路由的管理距离调整 到比动态路由协议的管理距离还要大。只有动态路由协议不可用时,此静态路由才被使用。
(四)BGP的邻接关系及工作机制
1、工作机制
BGP系统启动时,发送整个BGP路由表交换路由信息,之后为了更新路由表,只交换更新信息,即只有增量信息
在系统运行过程中,通过接收和发送KEEPALIVE 消息来检测互相之间连接是否正常
BGP发送优选的BGP路由和引入的IGP路由给对等体。
2、BGP邻接关系:
BGP发起者:运行BGP的路由器被称为BGP发起者
BGP对等体:即BGP邻居。任何两个运行BGP协议的路由器,通过TCP连接,交换BGP路由信息的,就是BGP对等体。可以是直接连接的,也可以是不直连的。
EBGP:外部BGP。即两个不同的AS之间的BGP连接,叫EBGP。BGP在不同自主系统路由器之间运行的时,被称为EBGP。运行EBGP的路由器之间必须有特理上的直接链路。
IBGP:BGP在同一个AS的路由器之间运行时。即在同一个自主系统内的BGP叫IBGP。运行IBGP的路由器之间不一定要物理直连,但必须保证逻辑上的全连接
3、BGP的路由通告原则:
(1)多条路径时,BGP speaker只选择最优的给自已使用。即有多条到目的网络的路径时,选最优的。
(2)BGP speaker只把自已使用的路由通告给相邻体。结合第一条,即只通告最佳路由给相邻体。
(3)BGP speaker从EBGP获悉的路由会向它所有的BGP相邻体通告,包括EBGP和IBGP
(4)BGP speaker从IBGP获得的路由,不向它的GBGP相邻体通告,避免发生环路。
(5)BGP speaker 从IBGP获得的路由信息是否通告给EBGP相邻体,要依据IGP和BGP的同步情况决定。只有IGP已完全知晓了BGP的路由信息,即IGP和BGP已完全同步了,才通告给EBGP
(6)连接一建 立,BGP speaker将把自已所有BGP路由通告给新相邻体,之后只发送更新的部分。
注意:一般不会把BGP路同注入到内部的IGP路由器中,因为BGP路由表太大,会导致IGP网络崩溃。
(五)BGP的几种报文(几种消息类型)
1、打开消息(open):用来交换各自版本号,自治系统号,保持时间,BGP标识等信息。(你好,跟我交个朋友吧)
2、存活消息(keepalive):即和BGP对等体的keepalive消息。向对等体通告彼此还连接着,没中断。(我还活着呢,别不理我)
3、更新消息(update):有新的路由选择信息则发送update消息。更新消息中只含一条路径的信息。如果是多条路径,则需要多条更新消息。也可以撤消多条不可达路由信息。
一个更新消息只能通告一个路由,但可以携带多个路径属性;一个更新消息可以通告多条路由,但路径属性必须相同。
撤消路由:要撤销的路由的ip地址前缀。
路径属性:包括AS路径,源头,本地优先级等。
网络层可达性信息:包含 通过该路径可以达到的ip地址前缀。
4、通知消息:检测到错误条件时发送通知消息。然后立即关闭BGP连接。包含一个错误代码,一个错误子代码,和有关错误信息。(我不跟你玩了)
(五)BGP协议邻接关系的状态
首先是空闲状态(IDLE)
BGP一旦开始就进入connect(连接)状态,如果定时器超时,则仍处于connect状态
如果连接失败则进入ACTIVE(活动)状态,在active状态下,如果TCP连接建立不成功,则一直处于active状态。成功后进入opensent(打开发送)状态
如connect状态下,连接成功也进入opensend状态
opensend状态下,BGP一旦收到open报文(打开消息),就会进入openconfirm(打开确认)状态
在openconfirm状态下,如果keepalive定时器超时,则停在openconfirm状态下。
直到收到keepalive报文,进入established(已建立)状态。邻居建立成功。
仅当连接处于已建 立状态时,才能交换更新,存活和通知消息。
(六)BGP的三种路由来源
纯动态注入:路由器将通过IGP路由协议动态获得的路由信息直接注入到BGP中。一般用redistribute命令把IGP路由信息重分发到BGP路由中。
半动态注入:路由器有选择的将IGP路由协议获得的动态路由信息注入到BGP中。如用:network命令声明哪些网络的路由注入到BGP路由中。
静态注入: 路由器将静态配置的某条路由注入到BGP系统中。
(七)BGP表
运行BGP的路由器都有一个独立的BGP拓扑表,也叫BGP路由选择表,用于存储从其他路由器那里获悉的路由选择信息。这个表独立于IP路由选择表。
BGP邻居建立邻接关系后,邻居之间交换BGP路由
BGP路由器从每个BGP邻居那里获得路由选择信息
并把信息加入到BGP拓扑数据库中,即BGP路由选择表中
然后从BGP路由选择表中选出前往各个目的网络的最佳 路由
将最佳路由提供给IP路由选择表。
二、BGP的属性
(一)属性的分类
(1)公认强制属性(必遵属性)
在路由更新的数据报中必须存在的路由属性。如缺少必遵属性,路由信息将会出错。必遵属性有:AS路径属性(as path);下一跳属性(next-hop);源头属性(origin)
(2)公认自由决定的属性(可选属性)
可选的,不一定存在于更新的数据报文中。根据需要配置。包括以下属性:本地优先级属性(local precerence);原子聚合属性(atomic aggregate)
(3)可选传递属性(过渡属性)
具有AS间可传递的属性就是过渡属性。过渡属性的值可以被传递到其他的AS中,并继续起作用。包括:聚合站属性(aggregntor);共同体(团体)属性(community)
可选属性不要求所有BGP实现都支持。它可能是私有属性。BGP路由器对于支持的可选传递属性,BGP将接纳此属性值。对于不支持的可选传递属性,路由器将原封不动地将属性值传递给其他BGP路由器。
即BGP路由器对于支持的可选传递属性,则接收属性值,并也把属性值转给到BGP邻居。而对于不支持的可选传递属性,则原封不动的传递给其他BGP路由器。自已不接纳。
(4)可选非传递属性(非过渡属性)
只在本地起作用,出了自主系统或域,那属性值就恢复到缺省值 ,不向外传递。包括:多出口鉴别器属性(MED)
注:CISCO还定义了BGP属性权重。
(5)CISCO使用的属性类型编码:
源头 (origin) 1
AS路径 2
下一跳 3
MED 4
本地优先级 5
原子聚合 6
聚合站 7
共同体 8
始发站 ID 9
集群列表 10
(二)属性分讲
1、AS路径属性 (必遵属性)
是路由经过的AS序列。即列出到达目的网络时经过的AS清单。
BGP使用AP-PATH(AS路径)作为路由更新的一部分。为了避免路由环,当从外部收到一条路由,发现此路由的AS路径属性中发现包含本自治系统号时,将丢弃此路由。
BGP在向EBGP对等体通告 一条路由时,要将自已的AS号加入到AS路径属性中
在将路由通告 给IBGP邻居时,不修改AS路径属性。
在其他条件相同的情况下,选择AS路径最短的路由
2、下一跳属性 (next-hop )(必遵属性)
(1)概述:
用于指出前往目的地的下一跳IP地址。
与IGP不同,BGP中的跳指的是AS,而不是路由器。因此下一跳是下一个AS。
对一个AS中的网络而言,这个AS的下一跳就是下一个AS的入接口的IP地址。
对EBGP而言,下一跳是另一个AS中发送更新的邻居路由器的IP地址。并且,BGP规定,EBGP通告的下一跳,应被传到IBGP中,并且不会改变。(即所有IBGP知道的另一个AS的下一跳是相同的)
A: BGP(包括EBGP和IBGP)在向IBGP通告从其他EBGP获得的路由信息时,不改变下一跳地址。即本AS的BGP路由器从其他AS中的EBGP得到的下一跳信息传给IBGP时,下一跳信息不变。(即所有IBGP知道的另一个AS的下一跳是相同的)
B: 本AS的BGP在向EBGP通告路由信息时,即本AS的BGP路由器在把本AS的路由信息传到其他AS中时,下一跳地址就是本AS中BGP路由器的端口地址。(即通告本AS路由信息到其他AS的那个运行EBGP的路由器接口就是其他AS到达本AS的下一跳)
C: 当多路连接时,多路访问网络(如以太网)上运行BGP时,BGP路由器将使用合适的地址作为下一跳地址。即第三方下一跳。
D: 如果连接路由器的介质是非广播多路访问(NBMA) (X.25,帧中继网等)时,有时需要修改下一跳属性业阻止问题的产生。
E: 递归查找:
F: 修改下一跳属性
#neighbor {ip-address|perr-group-name} next-hop-self
3、源头属性(origin) (必遵属性)
定义路由信息的源头。即路由信息是从哪来的。
(1)IGP: 路由信息是从AS内部获得。路由信息是使用NETWORK命令注入到BGP路由表中的,则ORIGIN属于IGP类。IGP源头用 i 表示。
(2)incomplete(不完全): 路由的源头未知或通过其他方法获得的。用重分发命令 redistribute 注入到BGP路由表中的,属于不完全类源头。
(3)EGP: 路由是通过EGP获悉的,在BGP中用 e 表示。EGP已过时,internet不支持了。
静态注入的路由信息优先级最高, 半动态注入的(network命令)的次之, 纯动态注入的(ridistribute命令)最差。
4、本地优先级(可选属性)
(1)概述:
用于自治系统内部优选到达某一目的地的路由。即告诉AS中的路由器,哪条路径是离开AS的首选路径。用来选择到区域外,即自治统外部某一网络目的地时,选接一个好的出口。本地优先级越高,路径被选中的可能性越大。
在同一个AS中的多个IBGP,有到AS外的某一目的网络的多个出路时,则首选优先级高的那个。本地优先级只在AS内部传递,不传到AS外。(本AS中的所有路由器都叫IBGP,包括运行EBGP的也运行IBGP)
(2)例子:
5、MED值(可选非传递属性)
(1)概述
本地优先级定义的是选择最佳出口,而MED是定义选择入口。
MED称为度量值
与本地优先级不同,MED是自主系统之间交换的。MED被传输到邻接AS,该AS使用它,但不将它传给下一个AS。将收到的路由更新传给下一个AS时,将删除其度量值 。
当某个AAS有多个入口时,用MED属性值可以帮助外部的邻居路由器选一条较好的入口路径。MED值越低,优先级越高
默认情况下,路由器只比较来自同一AS中的各EBGP邻居的MED值。不比较来自不同AS的EBGP邻居的MED值。如果要对不同自主系统中的邻居提供的MED值进行比较,除非能够确认不同的AS采用了相同的IGP路由选择方式。或配置:bgp always-compare-med命令
(2)例子:
6、共同体(团体属性)(可传递属性)
(1)概述:
BGP共同体是一种用于过滤入站出站路由的方法。
团体属性标识了一组有相同特征的路由信息。与它所在的自治系统和网段无关。其他路由器将根据该团体属性来做决策。增加路由策略的灵活性。
(2) 团体属性的四种值:
A: 团体号: aa:nn 。(号码型团体属性) aa:nn团体号是一个32位的数。前16位表示AS号,后16位表示共同体号。即:aa是AS号, nn是共同体号。默认用十进制形式表示。取值范围: 1--4294967200
B: no-export : (包括这个 在内的以下在三种值都不是数字型的共同体属性,都是预设的)。no-export,不通告到EBGP, 不把共同体属性通告到AS外。一个路由器收到一个团体属性名预设为 no-export的团体属性的路由,将不把此路由传递给EBGP邻居。
C: no-advertise: 不通告到任何BGP,包括同一AS内的IBGP也不能通告。收到一条带有no-advertise的团体属性的路由,将不把此路由传给BGP,包括IBGP。
D: local-as: 不发送到本AS以外。不把带有此团体属性的路由传到AS以外。
(3)共同体属性配置
A: #set community {community-number [additive]} [none]
community-number:设置团体属性的团体号。有上面介绍的四种团体值。
additive: 可选项。追加共同体属性。将共同体属性值,即新的团体号,增加到已经存在的共同体属性值之后,即追加共同体属性。一条路由可拥有多个共同体属性。
none: 删除共同体属性
B: #neighbor {ip-address | perr-group-name} send-community
把共同体属性发送给一个BGP邻居。 默认情况下,共同体属性不被发给任何邻居。共同体属性在出站BGP更新中被删除,只有配置此命令才能传递出去。
ipaddress: 团体属性将要被发送到BGP邻居的IP地址
peer-group-name:BGP对等体组的名称
C: #neighbor {ip-address | peer-group-name } router-map {map-name} [in | out ]
set community命令与此命令一起用,以将映射表应用于路由选择更新。用以将此命令中名为 map-name 的映射表应用于 ip address中指定的邻居路由器的路由更新。如果为in 则应用于进入的更新报文。
如果为out ,则应用于邻居路由器更新报文发出时。
D: #ip community-list {community-list-nmber} {permit |deny } {community-number}
community-list-number: 是列表号。即创建一个团体列表。然后可用映射表对列表号作出控制
community-number: 允许加入或拒绝加入的团体号 1-99范围
#match community {community-list-number} [exact]
用于在映射表中匹配列表号的命令。
exact:意思是,必须与match命令中指定的列表号中指定的团体属性完全匹配。要匹配的团体属性中有且只有团体列表中的所有团体属性值 。
总结:
set community 是设置路由的团体属性
neighbor ip-address send-community 命令把团体属性传给邻居
neighbor ip-address router-map 命令是控制邻居路由器的路由更新
ip community -list 和 match community 用于控制团体的访问。
例:
C路由器:
(config)#router bgp 65001 //进入BGP自治系统65001
(config-router)#network 192.168.1.0 //把 192.168.1.0 路由注入BGP 路由器C
(config-router)#neighbor 172.30.1.2 remote-as 65002 //建立对等体邻居。此处的IP地址为EBGP对等体路由器的直接接口的ip地址
(config-router)#neighbor 172.30.1.2 send-community //把路由器c的共同体属性传给路由器A
(config-router)#neighbor 172.30.1.2 router-map test out //邻居路由器A收到了C路由器传来的路由选择信息时,根据映射表test中定义的规则向外转发路由。即路由器A向外转发从C路由器收到的路由时,需要执行映射表规则。
(config)# router-map test permit 10 //定义路由映射表 test
(config-map)# match ip address 1 //任何匹配访问列表1的路由都将团体100 添加到现存的团体属性中的团体里。如果没有additive关键字,则用共同体 100 的属性替换路由现存的共同体属性。即把共同体100 添加到符合条件的路由的共同体属性中。一个路由的共同体属性可以有多个共同体。此处的意思是,匹配访问列1的路由,传给邻居路由器时都加上共同体属性100
(config-map)# set community 100 additive
(config-map)# router-map test permit 20
(config-map)# match ip address 2
(config-map)# set community no-export //任何匹配 访问列表2的路由都将共同体属性设为 no-export,即不传播到AS外。即把所有传播到邻居172.30.1.2 的路由共同体属性都设为 no-export。所以,所有从此路由器传给邻据路由器172.30.1.2的路由,都不会从172.30.1.2这台邻居路由器所属AS中传递到其他AS中。
(config)# access-list 1 permit 192.168.1.0 0.0.0.255
(config)#access-list 2 permit 0.0.0.0 255.255.255.255 //所有路由都匹配。
A路由器:
(config)#router bgp 65002
(config-router)#neighbor 172.30.1.1 router-map checkmon in
(config-router)#router-map checkmon permit 10
(config-router)#match community 1 // 如果共同体属性值中包含有共同体列表1中的共同体号的路由,把权重设为 20。即所有共同体属性值中包含共同体99的路由都把权重值设为20
(config-router)#set weight 20
(config-router)#router-map checkmon permit 20
(config-router)#match community 2 //没有任何设定,不做任何动作。
(config)#ip community-list 1 permit 99 //共同体列表1允许99共同体加入。即共同体列1中包含 99共同体。
(config)#ip community-list 2 permit internet //共同体列表2包含internet值,意味着所有路由。 即所有路由都被列表2允许。
7、权重
三、BGP的工作原理
(一)IBGP全互联
(1)IBGP不将通过IBGP获悉的路由传给其他IBGP对等体。可避免路由环路。
(2)IBGP之间一定要全互联。全互联不是指物理上要互联,而 是逻辑上要互联。如TCP相连也可。(在联盟和反射的情况下不要求全互联)
(3)BGP路由选择表太大,不能将所有BGP路由重分到IGP路由器中。因为IGP路由器无法承受。
注意:IBGP一定要全互联,TCP全互联也可。因为TCP要保证每个分组都让接收方确认接收,不能是多播和广播方式。如果IBGP不全互联的话,就可能造成路由选黑洞。
(二)联盟
在一个AS中,如果IBGP路由器过多,因为要求IBGP全互联,所以将会有过多的IBGP会话(n(b-1)/2)。 N为IBGP路由器数。这样会需要维护大量的会话及数据流。此时可用联盟和路由反射来减少会话数。此处专讲联盟。
联盟即把一个AS中的多个IBGP划分为一个联盟。一个AS可划分多个个联盟。联盟之间再进行全连接。这样就会减少会话数。注意一点,联盟内部的所有IBGP仍需要全连接。有点像在一个大的AS中划分多个小的AS。
(三)路由器反射
1、几个术语:
路由反射器:可以把通过IBGP所获悉的路由通告给其他IBGP对等体的路由器。因为AS内部的IBGP不把从IBGP获悉的路由通告 给其他IBGP对等体。实现全连会造成会话多,浪费资源。
此处我们可以把一台IBGP路由器设定为路由反射器,路由反射器可以转发从其他IBGP获悉的路由到IBGP。路由反射器在中心,其他IBGP再与路由反射器相连,这样就可以不用全互联了,用星型结构。反射路由器有点类似于OSPF中的DR路由器。
客户:与路由反射器有IBGP对等体关系的路由器叫客户。即与路由反射器直连的IBGP路由器叫客户。
集群:一个路由反射器与其客户组成一个集群。一个集群通常只有一个路由反射器。此时路由反射器的ROUTER ID为集群的ID。当一个集群有多个路由反射器时,需配置集群ID,用来标识集群。也便于路由反射器知道更新来自集群内还是集群外。
非客户:非路由反射器的客户的其他对等体被称为非客户。
2、路由反射器的设计:
AS内部可将AS分为几个集群。每个集群由至少一个路由反射器和几个客户组成。也可以有多个路由反射器。集群内的路由器不必全互联,但一个集群内如有多个路由反射器,每个路由反射器都必须与每个客户互连。
路由反射器之间也必须用IBBGP进行全互联。包括同集群内的路由反射器和不同集群的路由反射器都必须全互联。
3、路由反射器的工作原理
路由反射器收到一个户的更新时,路由反射器把更新发给集成内的所有客户对等体和所有客户对等体(其他集群的路由反射器)。
如果更新来自非客户对等体,则将更新发到本集群内的所有客户
如果来自EBGP对等体,则将更新传给所有客户对等体和非客户对等体
建议一个集群只配一个路由反射器,如果多个反射器,容 易造成环路
4、配置路由反射器
#neighbor {ip-addreess} router-reflector-client //把路由器配置路由反射器,并指定的IP-address邻居设为客户
# bgp cluster-id {clusterid} //当集群内有多个路由反射器时,用此命令配置集群ID
show ip bgp neighbors //验证路由反射器
(四)BGP同步
BGP从IBGP获悉的路由信息是否通告给EBGP相邻体,依据IGP和BGP的同步情况决定。如果IBP和BGP完全同步,才通告给EBGP。
因为当IBGP之间进行间接连接时,而非直连时,他们之间只是建立了一条TCP连接。而这条TCP连接经过的路由器,到达两个IBGP之间的路径,叫中转路径。而这条中转路径中的路由器有可能只运行着IGP协议。这些IGP路由器在两个IBGP之间只传递数据,而不知BGP的路由信息。但要转发路由数据时必须知道路由信息才能转发。所以需要同步。
当位于AS内部的中转路径上的所有路由器都是运行的BGP时,就不需要同步。
(五)路由选择过程
(1)首先丢弃下一跳(next-hop)不可达的路由
(2)优先选择最大权重的路由
(3)优选最高本地优先级的路由
(4)优选本路由器始发的路由。即当前路由器通告的路由。
(5) 优选经过AS(AS-Path)最少的路由
(6)优选起点关型(origin)最低的路由
(7)优选MED值最低的路由
(8)优选从EBGP学来的路由。外部(EBGP)优于内部IBGP
(9) 优选AS内部最短的路径可达的路由。
(10)优选邻居BGP路由器ID最小的路由
(11)如邻居BGP ID相同,则选邻居IP地址最小的路由
四、BGP的配置
(一)基本配置
1、(config)# router bgp {自治系统号} //开启BGP路由
2、(config-router)#neighbor {ip-address | peer-group-name} router-as {as_id} //指定BGP邻居
ip-address: 指定邻居BGP的IP地址。此处的邻居IP,是指邻居BGP路由器的IP地址,特别是在未直连的IBGP路由器之间,不是指直接相连的路由器的IP地址。
peer-group-name:指定BGP对等体组的名称。是一组采用相同更新策略的BGP邻居。可以把策略应用于对等体组。把多个邻居加到对等体组中,这样这个策略就可以应用于所有属于对等体组中的BGP路由器。
as_id: 邻据BGP路由器所属的AS号。如AS号与本AS相同,则是IBGP邻居.如果AS号与本AS不同,则是EBGP邻居。
(config-router)#neighbor {ip -address | peer-group-name} shutdown //禁用已有的BGP邻居或对等组。
(config-router)# no neighbor {ip -address | peer-group-name} shutdown //重新启用BGP邻居。
(config)# neighbor {peer-group-name} peer-group //可以用以上命令创建一个对等体组
(config)# neighbor {ip-address} peer-group {peer-group-name} //把ip-address中的路由器加入到对等体组中。每个邻接路由器只能属于一个对等体组的成员
(config)# clear ip bgp peer-group {peer-group-name} //用此命令删除对等体组
对等体组只在当前路由器上有作用,不传递给其他路由器
3、指定源IP地址
BGP路由器在指定邻居对等体BGP路由器的IP地址时,在邻据对等体BGP路由器上,也要指定目标地址为刚才指定自已为邻居的路由器的源IP地址。
即BGP路由器A有多个接口,有多个IP地址,如IP地址A1和IP地址A2 。 路由器A的邻居对等体路由器B也有多个IP地址,为B1和B2。当在路由器A上用IP地址A1为源地址,目标地址为B1来建立BGP邻居的话,那边在路由器B上必须用B1为源地址,A1为目标地址建 立BGP邻居。用B2为源,A1为目标地址,B1为源,A2为目标地址都不行。
为避免出现以上问题,增加稳定性,在路由器上配置环回接口,用环回接口来互配邻居BGP对等体,会增强稳定性。一般一个BGP路由器到邻据BGP路由器有多个出口时,配置环回接口来建立邻居。
(config-router)# neighbor {ip-address|peer-group-name} update-source loopback {interface-number}
update-source: 指定默认的源地址为后面指定的环回接口。而 不是默认发出的IP地址。
interface-number:有时会配置多个环回接口,这里指定是哪个环回接口
4、EBGP多跳(当EBGP之间配置为非直连时使用)
在EBGP邻居中命使用环回接口进行对等体邻居配置时需用上。
EBGP对等体之间一般是用直连接口地址来配置邻居。因为EBGP之间不通告IGP路由信息。如不直连将无法找到对方的路由,无法建 立邻居。
如用环回接口配置EBGP对等体,必须在EBGP两边各配置一条静态路由指向直连网络的物理地址,还需要启用EBGP多跳。
EBGP一般是直连的,所以TTL值为1,即存活间为1。 而直连时,需要配置TTL值。TLL值即跳值。用环回接口来建立EBGP邻居时也一样要配置,环回接口时TTL值为2.当有更多跳时配置为更多的跳数。
(config-router)# neibhbor ebgp-mulitihop [ttl]
例:(config)# router bgp 651000
(config-router)# neighbor 172.16.1.1 remote-as 651001 //此处的地址EBGP邻据路由器环回接口的地址
(config-router)# neighbor 172.16.1.1 update-source lookback 0 //源地址为环回接口0的地址
(config-router)# neighbor ebgp-mulitihop 2 //EBGP之间的TTL值为2 ,因为是环回接口。
(config)# ip router 172.16.1.1 255.255.255.0 192.168.1.3 //配置一条静态路由,以能找到对端环回端口。这里的192.168.1.3,是EBGP邻居与自已直连接口的IP 地址。
ebgp对等体邻居也做相应的配置
5、重置会话
# clear ip bgp {* |ip-address} {soft [in |out] }
(二)把IGP路由变成BGP路由
1、network命令注入(半自动注入方式)
指定哪些网络被加入BGP路由进程,并通告给其他BGP路由器
(config)# network {network-number} [mask {mask}] //把哪些网络通告到BGP路由中。
与IGP的network命令不一样,BGP的network命令是告诉BGP通告什么,哪些网络路由通告到BGP中。而IGP的network命令是哪些网络启用IGP协议进程。
必须用一系列的nework命令在AS中的BGP路由器上指定所有要通告的AS中的网络,而不仅仅是那些与当前BGP路由器直接相连的网络。
2、redistribute 命令 (纯动态注入方式)
在BGP路由进程下使用
3、静态注入
(1)先在BGP进程下定义一条静态路由
(2)再用命令: redistribute static命令把静态路由注入到BGP路由中。
例:
(三)BGP路由操纵
1、权重
是cisco专有属性,用以配置每个邻居的权重
权重属性提供本地路由选择策略,不会传给任何BGP邻居,包括IBGP。而本地优先级会在AS内部传播,传给IBGP,不传给EBGP.
一台路由器有多个离开AS的出口时,即有多条前往一个目的地路由时,将选择权重最高的路由作为下一跳路由。
与本地优先级的区别:当一台路由器有多个离开AS的出口时,根据权重来决定选择哪个出口。
当一个AS中有多台路由器提供了多个出口时,将根据本地优先级来决定选择哪个出口。
#neighbor {ip-address | peer-group-name} weight {weight}
ip-address:对端路由的IP地址。
weight:权重值。
例:
(config)#router bgp 100
(config-router)#neighbor 10.10.1.1 remote-as 200
(config-router)#neighbor 10.10.2.1 remote-as 400
(config-router)#neighbor 10.10.1.1 weight 200
(config-router)#neighbor 10.10.2.1 weight 150
2、本地优先级
(1)设置修改到达所有路由器的本地优先级
(config-router)#bgp default local-preference {value} //更改本路由器到达所有其他路由器的本地优先级
value:取值范围 1--4294967295 。 默认值为100
此命令是设定前往所有路由器的本地优先级。
(2)设置到达具体网络的本地优先级
通过路由映射表控制
(config-router)#neighbor 10.10.1.1 route-map test in //从邻居路由器10.10.1.1接收路由更新时,执行入口路由映射表test检查。即EIBGP路由器10.10.1.1把路由更新传给本路由器时,本路由器执行入口检查。
(config)#route-map test permit 10 //设置映射表 test
(config)#match ip address 60 // 匹配访问列表60的路由更新
(config)#set local-preference 400 //匹配访问列表60的更新,即访问172.20.0.0网段时,其本地优先级设为400
(config)#route-map test permit 20 //允许其他所有的网络通过。类似于访问列表中的 permit any 语句。
(config)#access-list 60 permit 172.20.0.0 0.0.255.255 // 访问172.20.0.0网络的匹配。
3、MED值
当有多条路径进入AS时,可使用MED值,以选择哪条路径进入。只对同一个AS中的多条入口路径作MED值比较。
MED在自主系统之间交换,AS收到另一个AS中的MED属性值后,但不将它传递给下一个AS。
cisco默认:不含MED值的更新,其MED值为0,这使得该路由将成为首选路由。
IEFF标准:不含 MED值的更新,其MED值视为无穷大,这将使得这种路由最不可能被选中。
(config)#bgp bestpath med missing-as-worst //执行此命令后,将执行IEFF标准。即不包含MED值的更新,其值将无穷大。
(1)修改所有路由的MED值
(config-router)#default-metric {number} //修改与本路由器相邻的所有与其相邻的EBGP路由器的MED值。
(2)用映射表控制MED值,以对不同网络设定不同的MED值
(config-router)#neighbor 172.17.1.1 route-map test out //即在向邻居路由器172.17.1.1发送路由更新时,启用映射表检查。
(config)#route-map test permit 10 //设置映射表 test
(config)#match ip address 60 // 匹配访问列表60的路由更新
(config)#set metric 100 //匹配访问列表60的路由更新,其MED值设为100
(config)#route-map test permit 20 //允许其他所有的网络通过。类似于访问列表中的 permit any 语句。
(config)#set metric 200 //所有其他的不是访问 10.10.1.0网络的MED值都设为200
(config)#access-list 60 permit 10.10.1.0 0.0.05.255 //外部AS访问 10.10.1.0网络时将匹配,将MED值设为100.
注:本地优先级是:外部AS把优先级传到本AS中,并在本AS中传播。而MED是本AS把MED值传到外部AS中,并在外部AS中传播,但不传到下一个AS中。
4、AS-PATCH
操作路径信息顺序
有多条到达目的地的路径,并且其他属性值相同时,AS-PATH属性最小的将获得选择。即经过的AS最少的将获得选择。
(1)映射表控制
在映射表中加入:
#set as-path {tag |prepend {as-path-string}} //增加AS路数,来更改路径选择。人工增加AS路径信息的长度
tag:只能用于重分发路由到BGP中。将与路由相关的标记转移成一个AS路径。
prepend:将AS-PATH-STRING值添加到router-map匹配的路由的AS路径信息后面,可应用于出界,入界映射。
例:
(config)#router bgp 100
(config-router)#neighbor 192.168.9.1 remote-as 200
(config-router)#network 172.17.0.0 //把网络172.17.0.0注入到BGP路由中。
(config-router)#neighbor 192.168.9.1 route-map test out //本路由器把路由更新传到192.168.9.1邻居路由器时,将应用test映射表出站过滤。
(config)#route-map test
(config)#set as=path prepend 100 100 //把本地AS号100,复制两次加入到路径信息中,传给AS200
通过上面语句,AS300从AS200接收到到达172.17.0.0的更新报文,该报文带有的AS路径信息会变为(200 100 100 100 ),这样AS300到达网络172.17.0.0的AS-path属性为4跳。
(四)BGP路由汇总
1、常用术语
(1)聚合站:指出执行路由聚合的路由器的ID和AS号,是一个可选传递属性。
(2)原子聚合:它告诉邻接AS,始发路由器对路由进行了聚合。是一个公认自由决定的属性。默认情况下,通告路由聚合时,指出它来自执行聚合的AS,聚合前的AS没有列出。
2、网络边界汇总
1、默认BGP不通告子网,只通告分类网或超网到BGP邻居。如:172.16.22.0,只通告 172.16.0.0/16分类网。
2、(config)#network {network-number} [mask {network-mask}] 用此命令可以通告子网到BGP邻居中。一定在后面要接相应的掩码。如: network 172.16.22.0 mask 255.255.255.0即可。
注意:不管是分类网络,还是子网,还是汇总网,想通告出去,必须在路由选择表中有此路由选项。路由器的路由选择表是从IGP路由协议和静态路由器中获得。一个BGP路由器,都同时运行IGP路由协议。如果IGP中没有此路由选项,可通过静态路由生成。
例(1): network 172.16.0.0 ,想通告此分类网到BGP邻居中, 路由选择表中必须有 172.16.0.0或有此网络的子网(如:172.16.22.0/24)的路由选项。而要生成172.16.0.0这个路由选项,一是此路由器也运行IGP路由协议,直接生成路由选项,或从其他IGP路由器上传播过来的路由选项;二是用静态路由生成。
例(2): network 172.16.22.0/24,想通告此子网到BGP邻居中,路由选择表中也必须有 172.16.22.0/24的路由项。
例(3): network 172.16.24.0 255.255.252.0 ,汇总了172.16.24/22这个网段,而此时路由选择表中没有此路由选项,则无法通告此汇总路由到邻居BGP。则用静态命令:
#ip router 172.16.24.0 255.255.252.0 null //应用这个命令后,路由表中将有这条路由,则可以把这条汇总路由通告到BGP邻居中。 null是指向空接口。
(config)#router bgp 65001
(config-router)# neighbor 172.16.2.1 remote-as 65000
(config-router)# network 192.168.25.0 mask 255.255.255.0 //路由表中有此选择,可以传播到BGP邻居中。
(config-router)# network 192.168.24.0 mask 255.255.1252.0 //路由表中没此选择,则不可以传播到BGP邻居中。
(config)# ip route 192.168.24.0 255.255.252.0 null //加入此项,则上面那个网络可以传播 到BGP邻居中了。
3、BGP自动汇总
(config-router) #auto-summary //此命令启动自动汇总后,在BGP表中,所有重发而来的子网都被汇总为相应的分类子网。
(config-router)# no auto-summary //关闭自动汇总。即不进行自动汇总。所有重分发来的子网保持原样。
例: 开启自动汇总的情况下: 将网络 64.100.50.0/24重分发到BGP中后,则BGP将默认拥有64.0.0.0 /8这个网络, 这是默认的分类网络。64.100.50.0/24自动被汇总成分类网了。
关闭自动汇总可以解决。为正确的把子网通告给BGP,应用命令: network 64.100.50.0 mask 255.255.255.0 ,而不要使用redistributed connected进行重分发。
4、汇总命令
#aggregate-address {ip-addrees} {mask} [summary-only] [as-set]
ip address:要创建的聚合后的地址 mask:聚合后的掩码
summary-only:只通告聚合路由。 默认是通告聚合路由和具体路由。即只通告汇总后的路由。不加此项,则汇总后的路由和具体路由都通告。
as-set: 在聚合路由的AS路径属性中包含具体路由列出的所有AS号,即原子聚合属性。默认只包含生成聚合路由的路由器所在的AS号。
(五)多宿主设计方案
(六)把BGP重分发到IGP中
(一)自主系统
1、内部网关协议(IGP):用于自治系统内部交换信息。如:rip,igrp,eigrp,ospf,is-is都是IGP
2、外部网关协义(EGP):用于连接自主系统。如:BGP。是一种域间路由选择协议(idrp)
3、AS自治系统的含义:自治系统可能使用多种IGP,并采用多种度量值。在BGP看来,对另一个AS来说,它有统一的内部路由选择规划。
4、AS的编号:自治系统是一个16位的数字,范围为1--65535。1--65411是注册因特网编号,属于公有。 65412-65535是保留编号,属于私用。
(二)BGP的特性
1、BGP使用TCP作为传输协议,端口号179。ospf、igrp、eigrp运行于ip层。Is-is在网络层,rip用udp协议。
2、bgp是一种距离矢量协议。实际上是一种路径矢量协议。路径矢量信息包括一个BGP AS号列表,其中列表中列出了前往目标网络必须经过的AS。还包括前往下一个AS的路由器IP地址(下一跳属性),以及源头编码属性。
AS路径:即前往目标网络通过的AS列表。 需每个AS都会有一个编号。BGP不接受在AS路径属性中包含本自治系统的编号的路由选择更新,以防止环路。
3、支持CIDR(无类别域间选路),简化了路由聚合,减少了路由表
4、BGP更新只发送增量消息,不是所有的路由表。
5、提供了丰富的路由策略。
(三)BGP的用途
1、基本策略的路由选择
(1)BGP支持AS级策略。制定路由选择策略,被称为基于策略的路由选择。BGP根据路由选择信息中的属性可以制定AS策略
(2)BGP路由器只把自已获悉或使用的最佳路由通告给邻接自主系统对体,其他路由不通告。邻接自主系统,即与本自主系统相邻的自主系统。
即BGP路由器只把自已获悉的最佳路由通告给相邻自主系统的BGP路由器。
2、使用BGP的时机
AS有多条到其他自主系统的连接
必须对数据流进入和离开AS的方式进行控制
AS允许分组穿过它前往其他自主系统
3、不使用BGP的时机
只有一条到INTERNET或另一个AS的连接
自主系统之间带宽较低
当一个AS与另一个AS的路由策略相同时
路由器没有足够的能力来处理BGP更新
以上情况应用静态路由来解决。
浮动静态路由:即把静态路由的管理距离调整 到比动态路由协议的管理距离还要大。只有动态路由协议不可用时,此静态路由才被使用。
(四)BGP的邻接关系及工作机制
1、工作机制
BGP系统启动时,发送整个BGP路由表交换路由信息,之后为了更新路由表,只交换更新信息,即只有增量信息
在系统运行过程中,通过接收和发送KEEPALIVE 消息来检测互相之间连接是否正常
BGP发送优选的BGP路由和引入的IGP路由给对等体。
2、BGP邻接关系:
BGP发起者:运行BGP的路由器被称为BGP发起者
BGP对等体:即BGP邻居。任何两个运行BGP协议的路由器,通过TCP连接,交换BGP路由信息的,就是BGP对等体。可以是直接连接的,也可以是不直连的。
EBGP:外部BGP。即两个不同的AS之间的BGP连接,叫EBGP。BGP在不同自主系统路由器之间运行的时,被称为EBGP。运行EBGP的路由器之间必须有特理上的直接链路。
IBGP:BGP在同一个AS的路由器之间运行时。即在同一个自主系统内的BGP叫IBGP。运行IBGP的路由器之间不一定要物理直连,但必须保证逻辑上的全连接
3、BGP的路由通告原则:
(1)多条路径时,BGP speaker只选择最优的给自已使用。即有多条到目的网络的路径时,选最优的。
(2)BGP speaker只把自已使用的路由通告给相邻体。结合第一条,即只通告最佳路由给相邻体。
(3)BGP speaker从EBGP获悉的路由会向它所有的BGP相邻体通告,包括EBGP和IBGP
(4)BGP speaker从IBGP获得的路由,不向它的GBGP相邻体通告,避免发生环路。
(5)BGP speaker 从IBGP获得的路由信息是否通告给EBGP相邻体,要依据IGP和BGP的同步情况决定。只有IGP已完全知晓了BGP的路由信息,即IGP和BGP已完全同步了,才通告给EBGP
(6)连接一建 立,BGP speaker将把自已所有BGP路由通告给新相邻体,之后只发送更新的部分。
注意:一般不会把BGP路同注入到内部的IGP路由器中,因为BGP路由表太大,会导致IGP网络崩溃。
(五)BGP的几种报文(几种消息类型)
1、打开消息(open):用来交换各自版本号,自治系统号,保持时间,BGP标识等信息。(你好,跟我交个朋友吧)
2、存活消息(keepalive):即和BGP对等体的keepalive消息。向对等体通告彼此还连接着,没中断。(我还活着呢,别不理我)
3、更新消息(update):有新的路由选择信息则发送update消息。更新消息中只含一条路径的信息。如果是多条路径,则需要多条更新消息。也可以撤消多条不可达路由信息。
一个更新消息只能通告一个路由,但可以携带多个路径属性;一个更新消息可以通告多条路由,但路径属性必须相同。
撤消路由:要撤销的路由的ip地址前缀。
路径属性:包括AS路径,源头,本地优先级等。
网络层可达性信息:包含 通过该路径可以达到的ip地址前缀。
4、通知消息:检测到错误条件时发送通知消息。然后立即关闭BGP连接。包含一个错误代码,一个错误子代码,和有关错误信息。(我不跟你玩了)
(五)BGP协议邻接关系的状态
首先是空闲状态(IDLE)
BGP一旦开始就进入connect(连接)状态,如果定时器超时,则仍处于connect状态
如果连接失败则进入ACTIVE(活动)状态,在active状态下,如果TCP连接建立不成功,则一直处于active状态。成功后进入opensent(打开发送)状态
如connect状态下,连接成功也进入opensend状态
opensend状态下,BGP一旦收到open报文(打开消息),就会进入openconfirm(打开确认)状态
在openconfirm状态下,如果keepalive定时器超时,则停在openconfirm状态下。
直到收到keepalive报文,进入established(已建立)状态。邻居建立成功。
仅当连接处于已建 立状态时,才能交换更新,存活和通知消息。
(六)BGP的三种路由来源
纯动态注入:路由器将通过IGP路由协议动态获得的路由信息直接注入到BGP中。一般用redistribute命令把IGP路由信息重分发到BGP路由中。
半动态注入:路由器有选择的将IGP路由协议获得的动态路由信息注入到BGP中。如用:network命令声明哪些网络的路由注入到BGP路由中。
静态注入: 路由器将静态配置的某条路由注入到BGP系统中。
(七)BGP表
运行BGP的路由器都有一个独立的BGP拓扑表,也叫BGP路由选择表,用于存储从其他路由器那里获悉的路由选择信息。这个表独立于IP路由选择表。
BGP邻居建立邻接关系后,邻居之间交换BGP路由
BGP路由器从每个BGP邻居那里获得路由选择信息
并把信息加入到BGP拓扑数据库中,即BGP路由选择表中
然后从BGP路由选择表中选出前往各个目的网络的最佳 路由
将最佳路由提供给IP路由选择表。
二、BGP的属性
(一)属性的分类
(1)公认强制属性(必遵属性)
在路由更新的数据报中必须存在的路由属性。如缺少必遵属性,路由信息将会出错。必遵属性有:AS路径属性(as path);下一跳属性(next-hop);源头属性(origin)
(2)公认自由决定的属性(可选属性)
可选的,不一定存在于更新的数据报文中。根据需要配置。包括以下属性:本地优先级属性(local precerence);原子聚合属性(atomic aggregate)
(3)可选传递属性(过渡属性)
具有AS间可传递的属性就是过渡属性。过渡属性的值可以被传递到其他的AS中,并继续起作用。包括:聚合站属性(aggregntor);共同体(团体)属性(community)
可选属性不要求所有BGP实现都支持。它可能是私有属性。BGP路由器对于支持的可选传递属性,BGP将接纳此属性值。对于不支持的可选传递属性,路由器将原封不动地将属性值传递给其他BGP路由器。
即BGP路由器对于支持的可选传递属性,则接收属性值,并也把属性值转给到BGP邻居。而对于不支持的可选传递属性,则原封不动的传递给其他BGP路由器。自已不接纳。
(4)可选非传递属性(非过渡属性)
只在本地起作用,出了自主系统或域,那属性值就恢复到缺省值 ,不向外传递。包括:多出口鉴别器属性(MED)
注:CISCO还定义了BGP属性权重。
(5)CISCO使用的属性类型编码:
源头 (origin) 1
AS路径 2
下一跳 3
MED 4
本地优先级 5
原子聚合 6
聚合站 7
共同体 8
始发站 ID 9
集群列表 10
(二)属性分讲
1、AS路径属性 (必遵属性)
是路由经过的AS序列。即列出到达目的网络时经过的AS清单。
BGP使用AP-PATH(AS路径)作为路由更新的一部分。为了避免路由环,当从外部收到一条路由,发现此路由的AS路径属性中发现包含本自治系统号时,将丢弃此路由。
BGP在向EBGP对等体通告 一条路由时,要将自已的AS号加入到AS路径属性中
在将路由通告 给IBGP邻居时,不修改AS路径属性。
在其他条件相同的情况下,选择AS路径最短的路由
2、下一跳属性 (next-hop )(必遵属性)
(1)概述:
用于指出前往目的地的下一跳IP地址。
与IGP不同,BGP中的跳指的是AS,而不是路由器。因此下一跳是下一个AS。
对一个AS中的网络而言,这个AS的下一跳就是下一个AS的入接口的IP地址。
对EBGP而言,下一跳是另一个AS中发送更新的邻居路由器的IP地址。并且,BGP规定,EBGP通告的下一跳,应被传到IBGP中,并且不会改变。(即所有IBGP知道的另一个AS的下一跳是相同的)
A: BGP(包括EBGP和IBGP)在向IBGP通告从其他EBGP获得的路由信息时,不改变下一跳地址。即本AS的BGP路由器从其他AS中的EBGP得到的下一跳信息传给IBGP时,下一跳信息不变。(即所有IBGP知道的另一个AS的下一跳是相同的)
B: 本AS的BGP在向EBGP通告路由信息时,即本AS的BGP路由器在把本AS的路由信息传到其他AS中时,下一跳地址就是本AS中BGP路由器的端口地址。(即通告本AS路由信息到其他AS的那个运行EBGP的路由器接口就是其他AS到达本AS的下一跳)
C: 当多路连接时,多路访问网络(如以太网)上运行BGP时,BGP路由器将使用合适的地址作为下一跳地址。即第三方下一跳。
D: 如果连接路由器的介质是非广播多路访问(NBMA) (X.25,帧中继网等)时,有时需要修改下一跳属性业阻止问题的产生。
E: 递归查找:
F: 修改下一跳属性
#neighbor {ip-address|perr-group-name} next-hop-self
3、源头属性(origin) (必遵属性)
定义路由信息的源头。即路由信息是从哪来的。
(1)IGP: 路由信息是从AS内部获得。路由信息是使用NETWORK命令注入到BGP路由表中的,则ORIGIN属于IGP类。IGP源头用 i 表示。
(2)incomplete(不完全): 路由的源头未知或通过其他方法获得的。用重分发命令 redistribute 注入到BGP路由表中的,属于不完全类源头。
(3)EGP: 路由是通过EGP获悉的,在BGP中用 e 表示。EGP已过时,internet不支持了。
静态注入的路由信息优先级最高, 半动态注入的(network命令)的次之, 纯动态注入的(ridistribute命令)最差。
4、本地优先级(可选属性)
(1)概述:
用于自治系统内部优选到达某一目的地的路由。即告诉AS中的路由器,哪条路径是离开AS的首选路径。用来选择到区域外,即自治统外部某一网络目的地时,选接一个好的出口。本地优先级越高,路径被选中的可能性越大。
在同一个AS中的多个IBGP,有到AS外的某一目的网络的多个出路时,则首选优先级高的那个。本地优先级只在AS内部传递,不传到AS外。(本AS中的所有路由器都叫IBGP,包括运行EBGP的也运行IBGP)
(2)例子:
5、MED值(可选非传递属性)
(1)概述
本地优先级定义的是选择最佳出口,而MED是定义选择入口。
MED称为度量值
与本地优先级不同,MED是自主系统之间交换的。MED被传输到邻接AS,该AS使用它,但不将它传给下一个AS。将收到的路由更新传给下一个AS时,将删除其度量值 。
当某个AAS有多个入口时,用MED属性值可以帮助外部的邻居路由器选一条较好的入口路径。MED值越低,优先级越高
默认情况下,路由器只比较来自同一AS中的各EBGP邻居的MED值。不比较来自不同AS的EBGP邻居的MED值。如果要对不同自主系统中的邻居提供的MED值进行比较,除非能够确认不同的AS采用了相同的IGP路由选择方式。或配置:bgp always-compare-med命令
(2)例子:
6、共同体(团体属性)(可传递属性)
(1)概述:
BGP共同体是一种用于过滤入站出站路由的方法。
团体属性标识了一组有相同特征的路由信息。与它所在的自治系统和网段无关。其他路由器将根据该团体属性来做决策。增加路由策略的灵活性。
(2) 团体属性的四种值:
A: 团体号: aa:nn 。(号码型团体属性) aa:nn团体号是一个32位的数。前16位表示AS号,后16位表示共同体号。即:aa是AS号, nn是共同体号。默认用十进制形式表示。取值范围: 1--4294967200
B: no-export : (包括这个 在内的以下在三种值都不是数字型的共同体属性,都是预设的)。no-export,不通告到EBGP, 不把共同体属性通告到AS外。一个路由器收到一个团体属性名预设为 no-export的团体属性的路由,将不把此路由传递给EBGP邻居。
C: no-advertise: 不通告到任何BGP,包括同一AS内的IBGP也不能通告。收到一条带有no-advertise的团体属性的路由,将不把此路由传给BGP,包括IBGP。
D: local-as: 不发送到本AS以外。不把带有此团体属性的路由传到AS以外。
(3)共同体属性配置
A: #set community {community-number [additive]} [none]
community-number:设置团体属性的团体号。有上面介绍的四种团体值。
additive: 可选项。追加共同体属性。将共同体属性值,即新的团体号,增加到已经存在的共同体属性值之后,即追加共同体属性。一条路由可拥有多个共同体属性。
none: 删除共同体属性
B: #neighbor {ip-address | perr-group-name} send-community
把共同体属性发送给一个BGP邻居。 默认情况下,共同体属性不被发给任何邻居。共同体属性在出站BGP更新中被删除,只有配置此命令才能传递出去。
ipaddress: 团体属性将要被发送到BGP邻居的IP地址
peer-group-name:BGP对等体组的名称
C: #neighbor {ip-address | peer-group-name } router-map {map-name} [in | out ]
set community命令与此命令一起用,以将映射表应用于路由选择更新。用以将此命令中名为 map-name 的映射表应用于 ip address中指定的邻居路由器的路由更新。如果为in 则应用于进入的更新报文。
如果为out ,则应用于邻居路由器更新报文发出时。
D: #ip community-list {community-list-nmber} {permit |deny } {community-number}
community-list-number: 是列表号。即创建一个团体列表。然后可用映射表对列表号作出控制
community-number: 允许加入或拒绝加入的团体号 1-99范围
#match community {community-list-number} [exact]
用于在映射表中匹配列表号的命令。
exact:意思是,必须与match命令中指定的列表号中指定的团体属性完全匹配。要匹配的团体属性中有且只有团体列表中的所有团体属性值 。
总结:
set community 是设置路由的团体属性
neighbor ip-address send-community 命令把团体属性传给邻居
neighbor ip-address router-map 命令是控制邻居路由器的路由更新
ip community -list 和 match community 用于控制团体的访问。
例:
C路由器:
(config)#router bgp 65001 //进入BGP自治系统65001
(config-router)#network 192.168.1.0 //把 192.168.1.0 路由注入BGP 路由器C
(config-router)#neighbor 172.30.1.2 remote-as 65002 //建立对等体邻居。此处的IP地址为EBGP对等体路由器的直接接口的ip地址
(config-router)#neighbor 172.30.1.2 send-community //把路由器c的共同体属性传给路由器A
(config-router)#neighbor 172.30.1.2 router-map test out //邻居路由器A收到了C路由器传来的路由选择信息时,根据映射表test中定义的规则向外转发路由。即路由器A向外转发从C路由器收到的路由时,需要执行映射表规则。
(config)# router-map test permit 10 //定义路由映射表 test
(config-map)# match ip address 1 //任何匹配访问列表1的路由都将团体100 添加到现存的团体属性中的团体里。如果没有additive关键字,则用共同体 100 的属性替换路由现存的共同体属性。即把共同体100 添加到符合条件的路由的共同体属性中。一个路由的共同体属性可以有多个共同体。此处的意思是,匹配访问列1的路由,传给邻居路由器时都加上共同体属性100
(config-map)# set community 100 additive
(config-map)# router-map test permit 20
(config-map)# match ip address 2
(config-map)# set community no-export //任何匹配 访问列表2的路由都将共同体属性设为 no-export,即不传播到AS外。即把所有传播到邻居172.30.1.2 的路由共同体属性都设为 no-export。所以,所有从此路由器传给邻据路由器172.30.1.2的路由,都不会从172.30.1.2这台邻居路由器所属AS中传递到其他AS中。
(config)# access-list 1 permit 192.168.1.0 0.0.0.255
(config)#access-list 2 permit 0.0.0.0 255.255.255.255 //所有路由都匹配。
A路由器:
(config)#router bgp 65002
(config-router)#neighbor 172.30.1.1 router-map checkmon in
(config-router)#router-map checkmon permit 10
(config-router)#match community 1 // 如果共同体属性值中包含有共同体列表1中的共同体号的路由,把权重设为 20。即所有共同体属性值中包含共同体99的路由都把权重值设为20
(config-router)#set weight 20
(config-router)#router-map checkmon permit 20
(config-router)#match community 2 //没有任何设定,不做任何动作。
(config)#ip community-list 1 permit 99 //共同体列表1允许99共同体加入。即共同体列1中包含 99共同体。
(config)#ip community-list 2 permit internet //共同体列表2包含internet值,意味着所有路由。 即所有路由都被列表2允许。
7、权重
三、BGP的工作原理
(一)IBGP全互联
(1)IBGP不将通过IBGP获悉的路由传给其他IBGP对等体。可避免路由环路。
(2)IBGP之间一定要全互联。全互联不是指物理上要互联,而 是逻辑上要互联。如TCP相连也可。(在联盟和反射的情况下不要求全互联)
(3)BGP路由选择表太大,不能将所有BGP路由重分到IGP路由器中。因为IGP路由器无法承受。
注意:IBGP一定要全互联,TCP全互联也可。因为TCP要保证每个分组都让接收方确认接收,不能是多播和广播方式。如果IBGP不全互联的话,就可能造成路由选黑洞。
(二)联盟
在一个AS中,如果IBGP路由器过多,因为要求IBGP全互联,所以将会有过多的IBGP会话(n(b-1)/2)。 N为IBGP路由器数。这样会需要维护大量的会话及数据流。此时可用联盟和路由反射来减少会话数。此处专讲联盟。
联盟即把一个AS中的多个IBGP划分为一个联盟。一个AS可划分多个个联盟。联盟之间再进行全连接。这样就会减少会话数。注意一点,联盟内部的所有IBGP仍需要全连接。有点像在一个大的AS中划分多个小的AS。
(三)路由器反射
1、几个术语:
路由反射器:可以把通过IBGP所获悉的路由通告给其他IBGP对等体的路由器。因为AS内部的IBGP不把从IBGP获悉的路由通告 给其他IBGP对等体。实现全连会造成会话多,浪费资源。
此处我们可以把一台IBGP路由器设定为路由反射器,路由反射器可以转发从其他IBGP获悉的路由到IBGP。路由反射器在中心,其他IBGP再与路由反射器相连,这样就可以不用全互联了,用星型结构。反射路由器有点类似于OSPF中的DR路由器。
客户:与路由反射器有IBGP对等体关系的路由器叫客户。即与路由反射器直连的IBGP路由器叫客户。
集群:一个路由反射器与其客户组成一个集群。一个集群通常只有一个路由反射器。此时路由反射器的ROUTER ID为集群的ID。当一个集群有多个路由反射器时,需配置集群ID,用来标识集群。也便于路由反射器知道更新来自集群内还是集群外。
非客户:非路由反射器的客户的其他对等体被称为非客户。
2、路由反射器的设计:
AS内部可将AS分为几个集群。每个集群由至少一个路由反射器和几个客户组成。也可以有多个路由反射器。集群内的路由器不必全互联,但一个集群内如有多个路由反射器,每个路由反射器都必须与每个客户互连。
路由反射器之间也必须用IBBGP进行全互联。包括同集群内的路由反射器和不同集群的路由反射器都必须全互联。
3、路由反射器的工作原理
路由反射器收到一个户的更新时,路由反射器把更新发给集成内的所有客户对等体和所有客户对等体(其他集群的路由反射器)。
如果更新来自非客户对等体,则将更新发到本集群内的所有客户
如果来自EBGP对等体,则将更新传给所有客户对等体和非客户对等体
建议一个集群只配一个路由反射器,如果多个反射器,容 易造成环路
4、配置路由反射器
#neighbor {ip-addreess} router-reflector-client //把路由器配置路由反射器,并指定的IP-address邻居设为客户
# bgp cluster-id {clusterid} //当集群内有多个路由反射器时,用此命令配置集群ID
show ip bgp neighbors //验证路由反射器
(四)BGP同步
BGP从IBGP获悉的路由信息是否通告给EBGP相邻体,依据IGP和BGP的同步情况决定。如果IBP和BGP完全同步,才通告给EBGP。
因为当IBGP之间进行间接连接时,而非直连时,他们之间只是建立了一条TCP连接。而这条TCP连接经过的路由器,到达两个IBGP之间的路径,叫中转路径。而这条中转路径中的路由器有可能只运行着IGP协议。这些IGP路由器在两个IBGP之间只传递数据,而不知BGP的路由信息。但要转发路由数据时必须知道路由信息才能转发。所以需要同步。
当位于AS内部的中转路径上的所有路由器都是运行的BGP时,就不需要同步。
(五)路由选择过程
(1)首先丢弃下一跳(next-hop)不可达的路由
(2)优先选择最大权重的路由
(3)优选最高本地优先级的路由
(4)优选本路由器始发的路由。即当前路由器通告的路由。
(5) 优选经过AS(AS-Path)最少的路由
(6)优选起点关型(origin)最低的路由
(7)优选MED值最低的路由
(8)优选从EBGP学来的路由。外部(EBGP)优于内部IBGP
(9) 优选AS内部最短的路径可达的路由。
(10)优选邻居BGP路由器ID最小的路由
(11)如邻居BGP ID相同,则选邻居IP地址最小的路由
四、BGP的配置
(一)基本配置
1、(config)# router bgp {自治系统号} //开启BGP路由
2、(config-router)#neighbor {ip-address | peer-group-name} router-as {as_id} //指定BGP邻居
ip-address: 指定邻居BGP的IP地址。此处的邻居IP,是指邻居BGP路由器的IP地址,特别是在未直连的IBGP路由器之间,不是指直接相连的路由器的IP地址。
peer-group-name:指定BGP对等体组的名称。是一组采用相同更新策略的BGP邻居。可以把策略应用于对等体组。把多个邻居加到对等体组中,这样这个策略就可以应用于所有属于对等体组中的BGP路由器。
as_id: 邻据BGP路由器所属的AS号。如AS号与本AS相同,则是IBGP邻居.如果AS号与本AS不同,则是EBGP邻居。
(config-router)#neighbor {ip -address | peer-group-name} shutdown //禁用已有的BGP邻居或对等组。
(config-router)# no neighbor {ip -address | peer-group-name} shutdown //重新启用BGP邻居。
(config)# neighbor {peer-group-name} peer-group //可以用以上命令创建一个对等体组
(config)# neighbor {ip-address} peer-group {peer-group-name} //把ip-address中的路由器加入到对等体组中。每个邻接路由器只能属于一个对等体组的成员
(config)# clear ip bgp peer-group {peer-group-name} //用此命令删除对等体组
对等体组只在当前路由器上有作用,不传递给其他路由器
3、指定源IP地址
BGP路由器在指定邻居对等体BGP路由器的IP地址时,在邻据对等体BGP路由器上,也要指定目标地址为刚才指定自已为邻居的路由器的源IP地址。
即BGP路由器A有多个接口,有多个IP地址,如IP地址A1和IP地址A2 。 路由器A的邻居对等体路由器B也有多个IP地址,为B1和B2。当在路由器A上用IP地址A1为源地址,目标地址为B1来建立BGP邻居的话,那边在路由器B上必须用B1为源地址,A1为目标地址建 立BGP邻居。用B2为源,A1为目标地址,B1为源,A2为目标地址都不行。
为避免出现以上问题,增加稳定性,在路由器上配置环回接口,用环回接口来互配邻居BGP对等体,会增强稳定性。一般一个BGP路由器到邻据BGP路由器有多个出口时,配置环回接口来建立邻居。
(config-router)# neighbor {ip-address|peer-group-name} update-source loopback {interface-number}
update-source: 指定默认的源地址为后面指定的环回接口。而 不是默认发出的IP地址。
interface-number:有时会配置多个环回接口,这里指定是哪个环回接口
4、EBGP多跳(当EBGP之间配置为非直连时使用)
在EBGP邻居中命使用环回接口进行对等体邻居配置时需用上。
EBGP对等体之间一般是用直连接口地址来配置邻居。因为EBGP之间不通告IGP路由信息。如不直连将无法找到对方的路由,无法建 立邻居。
如用环回接口配置EBGP对等体,必须在EBGP两边各配置一条静态路由指向直连网络的物理地址,还需要启用EBGP多跳。
EBGP一般是直连的,所以TTL值为1,即存活间为1。 而直连时,需要配置TTL值。TLL值即跳值。用环回接口来建立EBGP邻居时也一样要配置,环回接口时TTL值为2.当有更多跳时配置为更多的跳数。
(config-router)# neibhbor ebgp-mulitihop [ttl]
例:(config)# router bgp 651000
(config-router)# neighbor 172.16.1.1 remote-as 651001 //此处的地址EBGP邻据路由器环回接口的地址
(config-router)# neighbor 172.16.1.1 update-source lookback 0 //源地址为环回接口0的地址
(config-router)# neighbor ebgp-mulitihop 2 //EBGP之间的TTL值为2 ,因为是环回接口。
(config)# ip router 172.16.1.1 255.255.255.0 192.168.1.3 //配置一条静态路由,以能找到对端环回端口。这里的192.168.1.3,是EBGP邻居与自已直连接口的IP 地址。
ebgp对等体邻居也做相应的配置
5、重置会话
# clear ip bgp {* |ip-address} {soft [in |out] }
(二)把IGP路由变成BGP路由
1、network命令注入(半自动注入方式)
指定哪些网络被加入BGP路由进程,并通告给其他BGP路由器
(config)# network {network-number} [mask {mask}] //把哪些网络通告到BGP路由中。
与IGP的network命令不一样,BGP的network命令是告诉BGP通告什么,哪些网络路由通告到BGP中。而IGP的network命令是哪些网络启用IGP协议进程。
必须用一系列的nework命令在AS中的BGP路由器上指定所有要通告的AS中的网络,而不仅仅是那些与当前BGP路由器直接相连的网络。
2、redistribute 命令 (纯动态注入方式)
在BGP路由进程下使用
3、静态注入
(1)先在BGP进程下定义一条静态路由
(2)再用命令: redistribute static命令把静态路由注入到BGP路由中。
例:
(三)BGP路由操纵
1、权重
是cisco专有属性,用以配置每个邻居的权重
权重属性提供本地路由选择策略,不会传给任何BGP邻居,包括IBGP。而本地优先级会在AS内部传播,传给IBGP,不传给EBGP.
一台路由器有多个离开AS的出口时,即有多条前往一个目的地路由时,将选择权重最高的路由作为下一跳路由。
与本地优先级的区别:当一台路由器有多个离开AS的出口时,根据权重来决定选择哪个出口。
当一个AS中有多台路由器提供了多个出口时,将根据本地优先级来决定选择哪个出口。
#neighbor {ip-address | peer-group-name} weight {weight}
ip-address:对端路由的IP地址。
weight:权重值。
例:
(config)#router bgp 100
(config-router)#neighbor 10.10.1.1 remote-as 200
(config-router)#neighbor 10.10.2.1 remote-as 400
(config-router)#neighbor 10.10.1.1 weight 200
(config-router)#neighbor 10.10.2.1 weight 150
2、本地优先级
(1)设置修改到达所有路由器的本地优先级
(config-router)#bgp default local-preference {value} //更改本路由器到达所有其他路由器的本地优先级
value:取值范围 1--4294967295 。 默认值为100
此命令是设定前往所有路由器的本地优先级。
(2)设置到达具体网络的本地优先级
通过路由映射表控制
(config-router)#neighbor 10.10.1.1 route-map test in //从邻居路由器10.10.1.1接收路由更新时,执行入口路由映射表test检查。即EIBGP路由器10.10.1.1把路由更新传给本路由器时,本路由器执行入口检查。
(config)#route-map test permit 10 //设置映射表 test
(config)#match ip address 60 // 匹配访问列表60的路由更新
(config)#set local-preference 400 //匹配访问列表60的更新,即访问172.20.0.0网段时,其本地优先级设为400
(config)#route-map test permit 20 //允许其他所有的网络通过。类似于访问列表中的 permit any 语句。
(config)#access-list 60 permit 172.20.0.0 0.0.255.255 // 访问172.20.0.0网络的匹配。
3、MED值
当有多条路径进入AS时,可使用MED值,以选择哪条路径进入。只对同一个AS中的多条入口路径作MED值比较。
MED在自主系统之间交换,AS收到另一个AS中的MED属性值后,但不将它传递给下一个AS。
cisco默认:不含MED值的更新,其MED值为0,这使得该路由将成为首选路由。
IEFF标准:不含 MED值的更新,其MED值视为无穷大,这将使得这种路由最不可能被选中。
(config)#bgp bestpath med missing-as-worst //执行此命令后,将执行IEFF标准。即不包含MED值的更新,其值将无穷大。
(1)修改所有路由的MED值
(config-router)#default-metric {number} //修改与本路由器相邻的所有与其相邻的EBGP路由器的MED值。
(2)用映射表控制MED值,以对不同网络设定不同的MED值
(config-router)#neighbor 172.17.1.1 route-map test out //即在向邻居路由器172.17.1.1发送路由更新时,启用映射表检查。
(config)#route-map test permit 10 //设置映射表 test
(config)#match ip address 60 // 匹配访问列表60的路由更新
(config)#set metric 100 //匹配访问列表60的路由更新,其MED值设为100
(config)#route-map test permit 20 //允许其他所有的网络通过。类似于访问列表中的 permit any 语句。
(config)#set metric 200 //所有其他的不是访问 10.10.1.0网络的MED值都设为200
(config)#access-list 60 permit 10.10.1.0 0.0.05.255 //外部AS访问 10.10.1.0网络时将匹配,将MED值设为100.
注:本地优先级是:外部AS把优先级传到本AS中,并在本AS中传播。而MED是本AS把MED值传到外部AS中,并在外部AS中传播,但不传到下一个AS中。
4、AS-PATCH
操作路径信息顺序
有多条到达目的地的路径,并且其他属性值相同时,AS-PATH属性最小的将获得选择。即经过的AS最少的将获得选择。
(1)映射表控制
在映射表中加入:
#set as-path {tag |prepend {as-path-string}} //增加AS路数,来更改路径选择。人工增加AS路径信息的长度
tag:只能用于重分发路由到BGP中。将与路由相关的标记转移成一个AS路径。
prepend:将AS-PATH-STRING值添加到router-map匹配的路由的AS路径信息后面,可应用于出界,入界映射。
例:
(config)#router bgp 100
(config-router)#neighbor 192.168.9.1 remote-as 200
(config-router)#network 172.17.0.0 //把网络172.17.0.0注入到BGP路由中。
(config-router)#neighbor 192.168.9.1 route-map test out //本路由器把路由更新传到192.168.9.1邻居路由器时,将应用test映射表出站过滤。
(config)#route-map test
(config)#set as=path prepend 100 100 //把本地AS号100,复制两次加入到路径信息中,传给AS200
通过上面语句,AS300从AS200接收到到达172.17.0.0的更新报文,该报文带有的AS路径信息会变为(200 100 100 100 ),这样AS300到达网络172.17.0.0的AS-path属性为4跳。
(四)BGP路由汇总
1、常用术语
(1)聚合站:指出执行路由聚合的路由器的ID和AS号,是一个可选传递属性。
(2)原子聚合:它告诉邻接AS,始发路由器对路由进行了聚合。是一个公认自由决定的属性。默认情况下,通告路由聚合时,指出它来自执行聚合的AS,聚合前的AS没有列出。
2、网络边界汇总
1、默认BGP不通告子网,只通告分类网或超网到BGP邻居。如:172.16.22.0,只通告 172.16.0.0/16分类网。
2、(config)#network {network-number} [mask {network-mask}] 用此命令可以通告子网到BGP邻居中。一定在后面要接相应的掩码。如: network 172.16.22.0 mask 255.255.255.0即可。
注意:不管是分类网络,还是子网,还是汇总网,想通告出去,必须在路由选择表中有此路由选项。路由器的路由选择表是从IGP路由协议和静态路由器中获得。一个BGP路由器,都同时运行IGP路由协议。如果IGP中没有此路由选项,可通过静态路由生成。
例(1): network 172.16.0.0 ,想通告此分类网到BGP邻居中, 路由选择表中必须有 172.16.0.0或有此网络的子网(如:172.16.22.0/24)的路由选项。而要生成172.16.0.0这个路由选项,一是此路由器也运行IGP路由协议,直接生成路由选项,或从其他IGP路由器上传播过来的路由选项;二是用静态路由生成。
例(2): network 172.16.22.0/24,想通告此子网到BGP邻居中,路由选择表中也必须有 172.16.22.0/24的路由项。
例(3): network 172.16.24.0 255.255.252.0 ,汇总了172.16.24/22这个网段,而此时路由选择表中没有此路由选项,则无法通告此汇总路由到邻居BGP。则用静态命令:
#ip router 172.16.24.0 255.255.252.0 null //应用这个命令后,路由表中将有这条路由,则可以把这条汇总路由通告到BGP邻居中。 null是指向空接口。
(config)#router bgp 65001
(config-router)# neighbor 172.16.2.1 remote-as 65000
(config-router)# network 192.168.25.0 mask 255.255.255.0 //路由表中有此选择,可以传播到BGP邻居中。
(config-router)# network 192.168.24.0 mask 255.255.1252.0 //路由表中没此选择,则不可以传播到BGP邻居中。
(config)# ip route 192.168.24.0 255.255.252.0 null //加入此项,则上面那个网络可以传播 到BGP邻居中了。
3、BGP自动汇总
(config-router) #auto-summary //此命令启动自动汇总后,在BGP表中,所有重发而来的子网都被汇总为相应的分类子网。
(config-router)# no auto-summary //关闭自动汇总。即不进行自动汇总。所有重分发来的子网保持原样。
例: 开启自动汇总的情况下: 将网络 64.100.50.0/24重分发到BGP中后,则BGP将默认拥有64.0.0.0 /8这个网络, 这是默认的分类网络。64.100.50.0/24自动被汇总成分类网了。
关闭自动汇总可以解决。为正确的把子网通告给BGP,应用命令: network 64.100.50.0 mask 255.255.255.0 ,而不要使用redistributed connected进行重分发。
4、汇总命令
#aggregate-address {ip-addrees} {mask} [summary-only] [as-set]
ip address:要创建的聚合后的地址 mask:聚合后的掩码
summary-only:只通告聚合路由。 默认是通告聚合路由和具体路由。即只通告汇总后的路由。不加此项,则汇总后的路由和具体路由都通告。
as-set: 在聚合路由的AS路径属性中包含具体路由列出的所有AS号,即原子聚合属性。默认只包含生成聚合路由的路由器所在的AS号。
(五)多宿主设计方案
(六)把BGP重分发到IGP中