BGP(Border Gateway Protocol)>

·Autonomous Systems:(自治系统定义)
  运行同一种选路策略,由统一管理者管理的一组网络。

AS中可以存在多种选路策略

  RFC对AS的定义:一组被统一管理的路由器,它们使用相同的内部网关协议和统一的度量值在AS内部路由分组,并使用外部网关协议将分组路由到其他AS。

  每一个自治系统都有一个AS号

·AS号由internet地址授权委员会(IANA)统一负责分配,下设三个分支局

  AS取值范围:1-65535
1-64511 (公有)
64512-65535 (私有)

  电信AS号:4134  网通AS号:9929 4837  中国教育网:4538

·以下的网站可以获取到AS的一些信息
  Bgp.potaroo.net  一个好的网站,可以了解到关于AS号和IP地址的分配信息
http://www.routeviews.org/

  Telnet route-server.ip.att.net   telnet这一地址可以看到一台BGP路由器的镜像

·BGP协议是一个用来在AS之间传递路由的协议

·BGP路由有一个路径列表,中间记录了这条路由所经过的所有的AS号,BGP路由器不会接受路径列表中包含其AS号的路由选择更新,这种机制也被称为EBGP的水平分割原则。用来防环

·BGP路由器只能将其使用的路由通告给他的邻居。也就是说只传递最优的路由。

·BGP被称为路由矢量路由协议又称路径矢量路由协议,因为一个AS向另一个AS所传递的BGP路由更新,其实是传递一条路径信息,并且描述了通过这条路径所能到达的网络。

·BGP支持逐跳路由选择模式的策略–你可以决定自已的数据流去往哪一个AS,但不能决定邻接的AS如何转发你的数据流。

何时使用BGP:
1、AS允许数据包通过自已到达其它AS
2、AS有多条到其它自治系统的连接
3、需要对数据流进入和离开AS的方式进行控制

BGP的特性:
·BGP属于EGP,是高级DV协议,也被称为路径矢量协议,可靠更新,基于TCP 179端口。
·现在使用版本BGP4。
·第一次做完整更新,以后就只增量更新、触发更新。
·使用keeplive消息维持邻居关系   60S一次
·丰富的metric值,也叫路径属性。按顺序比较metric值进行选路
·被设计用于特大的网络,例如internet  
·BGP的目地是提供一种域间路由选择系统,确保自主系统能够无环路的交换路由选择信息。BGP路由器交换有关前往目标网络的路径的信息。

BGP的几张表:

·Neighbor table :
List of BGP neighbors   BGP的邻居关系需要显示的配置    发送open报文建立邻居关系,保存所有邻居关系
·BGP forwarding table/database       保存从每一个邻居处学到的所有路由
List of all networks learned from each neighbor
Can contain multiple pathways to destination networks
Database contains BGP attributes for each pathway
·IP routing table        保存去往目的地的最优路由
List of best paths to destination networks

BGP表和路由表是独立的,同样遵循AD小的进入路由表。
BGP默认不做负载均衡,只会选出最优的路由放进路由表,

·Router-ID选举和OSPF一致。

四种报文:
Open —includes holdtime and BGP router ID,当然还有AS号,建立邻居关系,通常手工指定router-id   
Keepalive —每隔60S发送一次。hold time=180S   维持邻居关系(维持tcp连接的)   holdtime不一致也能建立邻居关系,邻居间协商,选用时间小的作为hold time

Update —information for one path only (could be to multiple networks)
       —Includes path attributes and networks    只能包含一条路径信息,多条路由信息(共享一个AS号)

Notification   检测出错误后才会发这个报文  并会断开邻居关系    
      —when error is detected
      —BGP connection is closed after sent  (做maximum-prefix时可看到)

·BGP用Open报文建邻居,用KeepaLive报文做日常联系   

·OPEN消息中包含以下内容:
  1、版本
  2、自主系统号
  3、hold time 注意:这个时间是可以协商的,取两个BGP邻居中较小的保持时间。
  4、BGP 路由器的 router-id,选择方法与OSPF中相同
  5、可选参数

·一个UPDATE 消息一次可以只通告一条路由,并携带多个属性。
一个UPDATE 消息一次也可通告多条路由,但它们的所有属性必须相同。
一个UPDATE 消息可以同时撤消多条路由。

实际上也就是说一个UPDATE中只能有一组相同的路径属性,也就是说只能有一条路径,但可以有多个目标网络号。

BGP的邻居关系:    不能自动发现,需要手工指定,无需直连
BGP邻居也叫BGP对等体,分两种:
  EBGP–位于当前AS之外的,属于其它AS的邻居,位于不同AS之间,通常要求直连。
  IBGP–位于同一个AS之内的邻居,无需彼此相连,只要它们能够彼此到达对方,完成TCP握手即可。

·建议EBPG之间用直连接口来建邻居
·建议IBGP中用环回口建邻居

·从EBGP邻居学到的路由管理距离是20
·从IBGP邻居学到的路由管理距离是200

BGP的防环机制:
·BGP’s Split Horizon Rule:
IBGP:从IBGP邻居收到的路由不再传给其他的IBGP邻居。
EBGP:不接收携带本AS号的路由更新。

BGP路由黑洞问题:       
·BGP路由黑洞的解决方法:
  1)物理线路的Full Mesh
  2)BGP重分布进IGP
  3)IGP内所有路由器都运行BGP

·水平分割的解决方法:   从IBGP学到的路由不能传给下一条IBGP邻居
1)Full Mesh    邻居关系的全互联
2)BGP’s Partial Mesh (路由反射器/联邦) 

·最佳方案
  MPLS/×××

·如果是宣告一个主类网络,则它的掩码不会在BGP路由表中显示出来,表示默认使用主类网络的标准掩码。

<BGP>

R4(config)#router bgp 64512
R4(config-router)#bgp router-id 94.4.4.4
R4(config-router)#neighbor 24.1.1.2 remote-as 64513 (EBGP邻居)

R2(config)#router b 64513
R2(config-router)#neighbor 3.3.3.3 remote-as 64513 (IBGP邻居)
R2(config-router)#neighbor 3.3.3.3 update-source loopback 0 (更新源是环回口)

R3(config)#ip route 5.5.5.0 255.255.255.0 serial 0
R5(config)#ip route 3.3.3.0 255.255.255.0 serial 0
R5(config-router)#neighbor 3.3.3.3 update-source loopback 0
R3(config-router)#neighbor 5.5.5.5 ebgp-multihop 2      (EBGP设置多跳,环回口才用得上)
R5(config-router)#neighbor 3.3.3.3 ebgp-multihop (默认255)

全局模式下的这条命令修改对所有邻居的keepalive-interval和hold-time
R5(config-router)#timers bgp keepalive-interval hold-time

修改对特定邻居的keepalive-interval和hold-time。
R5(config-router)#neighbor 1.1.1.1 times keepalive-interval hold-time

R2#show ip bgp summary (摘要的邻居邻居信息)
R2#show ip bgp 2.2.2.0/24  显示明细路由的详细信息
R2#show tcp brief    可以看到是谁发起的TCP链接
R2#show ip bgp neighbors  (详细的邻居信息)
R2#show ip bgp rib-failure    可以看到提示有更高AD的路由
R2#show ip bgp neighbors 2.2.2.2 advertised-routes  看向这个邻居发了哪些路由信息
R2#show ip bgp neighbors 3.3.3.3 received-routes  看这个邻居给我发了哪些路由信息,必须在本路由器上用下面这条命令开启后才能用
R2(config-router)#neighbor 3.3.3.3 soft-reconfiguration inbound  开启查看接收到的路由信息的功能

debgu ip routing  查看路由表调试信息
debug ip bgp updata 查看BGP更新信息
EBGP用环回口做邻居后,不能再将此环回口宣告进BGP,否则会出现递归错误,造成邻居BGP表的翻动,IBGP不会出现这一问题,因为它们AD值是200,无法争抢入路由表

R4(config-router)#network 4.4.4.0 mask 255.255.255.0 (严格按照IP地址掩码通告)
R4(config-router)#network 100.0.0.0 (在auto-summary时,也可以主类方式通告)

·BGP的network能够通告路由表中的所有非BGP路由量。

打>号的路由是优的路由,会放进路由表并传给下一个邻居,不优的路由是不会传给下一个邻居
优的路由要满足两个条件:1、同步  2、下一跳

——————————————————————————————
——————————————————————————————
<关于更新源>
在BGP建邻居过程中,neighbor命令所指定的邻居的IP地址,也必须是邻居用来和本路由器建立TCP连接的地址。如果不匹配,两端建立不起邻居关系。

“show ip bgp summary中的Neighbor” / “show ip bgp中的Next Hop ”
都是指Update-Source。

可以在路由器上用以下命令指定使用哪个接口来和邻居建立联系,这个接口就是自已的更新源:
R1(config-router)#neighbor 3.3.3.3 update-source loopback 0

<BGP的下一跳机制>
BGP是一个AS-by-AS的路由协议,而不是一个router-by-router的路由协议。

BGP路由的下一跳并不是指下一个路由器的IP地址,而是指到达下一个AS的IP地址。

所以,默认情况下,从EBGP邻居学到的路由再向其它的IBGP邻居传递的时候,下一跳不改变。

<MA网络的下一跳问题>

p_w_picpath

R4(config-router)#network 172.16.1.0 mask 255.255.255.0

R3:
   Network          Next Hop            Metric LocPrf Weight Path
*> 172.16.1.0/24   10.1.1.2                1             0 64513 i

router#debug ip bgp updates

MA网络的下一跳:当把一条路由发送给EBGP邻居时,如果这条路由的最终下一跳与EBGP邻居的更新源地址在同一网段的时候,路由的下一跳不改变。

<Peer-Group>类似于建立一个批处理文件
BGP中,建立邻居关系的时候,有可能要对邻居指上多条命令,peer-group可以将多条命令组合在一起,用来在建邻居关系的时候一次性调用。减少了配置量。

BGP为每个邻居都占用一部分Buffer,使用Peer-Group可以使多个邻居共用同一部分Buffer。减少资源占用。
而且针对比较多的邻居关系,可以减少配置量。

R1(config-router)#neighbor WOLF peer-group     定义一个peer-group组
R1(config-router)#neighbor WOLF remote-as 64513         向组中加入命令
R1(config-router)#neighbor WOLF update-source loopback 0

R1(config-router)#neighbor 2.2.2.2 peer-group WOLF    调用

network—关于BGP中的宣告:
注意:本命令只会宣告路由,不会激活一个接口进入BGP域

在BGP中,network的特点是:
  1、能够通告路由表中的所有非BGP路由量、只要是路由表中有的路由,它都可以宣告,直连的,静态的,即使
     从IGP学到的也可以
  2、默认情况下必须精确宣告网络和掩码
  3、只起到宣告作用,不建邻居
  4、可宣告IGP学到的路由,并携带Metric和Next-hop

·Auto-summary对于network的影响:
   1、可以是主类方式宣告(如:network 3.0.0.0),条件是:在路由表中必须有子网路由;
   2、也可以是明细方式宣告,必须带mask(如:network 3.3.3.0 mask 255.255.255.0),条件是:必须和IGP表的路由精确匹配。
   3、如果是用no auto-summary,那么network只能用明细方式宣告(除非是主类网络)。通常都会用这一方式。

R4(config-router)#network 4.4.4.0 mask 255.255.255.0 (在no auto-summary时,严格按照IP地址掩码通告,不加mask按主类掩码匹配)
R4(config-router)#network 100.0.0.0 (在auto-summary时,也可以主类方式通告,前提是有一条明细)

如果路由器从IGP和IBGP都学到一条路由,由于IBGP路由的AD值为200,通常会大于IGP学到的路由,所以它会选择从IGP学到的放进路由表,并在IBGP路由的前面打上r,表示自已有一条同样的IGP路由。

<Synchronization>同步。只针对IBGP邻居

·Do not use or advertise to an external neighbor a route learned by IBGP
until a matching route has been learned from an IGP.
开启同步的情况下,AS内的一个路由器从IBGP邻居处学到一条路由,不用也不传,除非是从IGP学到同样一条路由。(网络号和掩码都必须完全一样)

同步规则是为了在一个不是full-mesh的网络中解决路由黑洞而产生的。如果路由器认为一条BGP路由存在黑洞的可能性,它就不会去传这条路由。

R3(config)#ip route 4.4.4.0 255.255.255.0 serial 0 (必须写成24位)从IGP收到同一条路由
R3(config)#ip route 24.0.0.0 255.0.0.0 serial 0 (只要下一跳可达即可)

BGP路由优化的2个条件:   show ip bgp中看到路由前没有 〉  有r 说明不优
1)同步问题
2)下一跳是否可达 

解决方案:
R3(config-router)#no synchronization (不检测同步,高版本IOS默认开启)
R2(config-router)#neighbor 3.3.3.3 next-hop-self
—————————————————————————————
BGP的邻接状态机:

1、idle  空闲–查找是否有去往邻居的路由
2、connect  连接–建立TCP三次握手
3、Active  活动–协商还未成功
4、open sent  打开发送–互发参数进行协商,也就是发送open报文
5、open confirm  打开确认–协商取得一致
6、established   建立

只有当连接处于建立状态时,才能交换更新、存活和通知消息

如果一直停在idle状态,则可能:
   1、没有去往邻居的路由
   2、neighbor命令指错了邻居的地址

如果一直停在active状态,则可能:
   1、邻居没有过来的路由
   2、邻居没有指neighbor命令
   3、邻居neighbor中指的地址错误
   4、两端的AS号不匹配 

<BGP认证>
BGP支持MD5认证
R2(config-router)#neighbor 2.2.2.2 password cisco

清除BGP会话:
当你将一个policy应用于BGP的时候,由于BGP是不会做周期更新,所以需要手动做更新。

clear ip bgp *     来硬的,会DOWN掉邻居关系
clear ip bgp * soft    软清,不会down掉邻居关系

neighbor [ip-address] soft-reconfiguration inbound   本命令告诉BGP路由器:保存从邻居那里学到的所有路由更新,供入站策略被修改时使用。这样就无需对方重新发送信息。

<Auto-Summary>

·当其他IGP协议重分布进BGP时,默认会进行自动汇总。其它情况下BGP不会自动汇总

·将IGP重分布BGP中,会携带IGP中的Metric和Next-hop。
  1、在auto-summary情况下,将IGP重分布进BGP,不会携带原有的METRIC值,next-hop
  2、在no auto-summary情况下,会携带原有的METRIC值和掩码,next-hop

R1(config-router)#no auto-summary (高版本IOS默认开启)

R4(config-router)#network 4.4.4.0 mask 255.255.255.0
(在no auto-summary时,必须严格按照IP地址掩码通告)

<Summary>aggregate聚合

1)通过Network做汇总:
R4(config)#ip route 192.168.0.0 255.255.252.0 Null0    写静态路由时将接口指向空接口
R4(config-router)#network 192.168.0.0 mask 255.255.252.0 (不要宣告明细)

在BGP中的network命令只要是路由表中有的路由,它都可以宣告,直连的,静态的,即使从IGP学到的也可以

2)Aggregate:

第一步:要先宣告每一条明细
第二步:在BGP进程中用以下命令做聚合

例一:
R4(config-router)#aggregate-address 192.168.0.0 255.255.252.0 (宣告明细)
注意:默认情况下,明细和汇总都会被发出。

例二:只发汇总,不发明细
R4(config-router)#aggregate-address 192.168.0.0 255.255.252.0 summary-only (只通告汇总)

例三:还可用抑制列表对其中的一部分明细路由进行抑制
Suppress-map 抑制列表 —–抓的就是被抑制的路由

R2(config)#ip prefix-list 1 permit 192.168.0.0/23 ge 24 le 24

R2(config)#route-map WOLF
R2(config-route-map)#match ip address prefix-list 1

R2(config-router)#aggregate-address 192.168.0.0 255.255.252.0 suppress-map WOLF
                                             (抑制192.168.0.0/24 ;192.168.1.0/24路由)

注意:如果用了suppress-map不起作用的话,要清一下本路由器,要硬清才行

使用aggregate做汇总后,在汇总路由中的一些明细属性将会消失,用下面这一命令可以还原
R1(config-router)#aggregate-address 192.168.0.0 255.255.252.0 as-set (还原AS属性)

*> 192.168.0.0/22   0.0.0.0                       100  32768 4 i
{4,5} (明细从不同AS传来)

如果不将明细路由的属性还原,有可能导致路由回馈现象发生:
路由回馈现象:

p_w_picpath
在R2上起两条路由宣告进BGP,在R1上做聚合,想想有啥问题。在这时as-set命令就有大作用了。

——————————————————————————————-
——————————————————————————————-

<Reflector>路由反射器

路由反射器就是一台路由器,可以将它的IBGP邻居指定为自已的客户端。

路由反射器和其客户的集合被称为集群(cluster),每一个集群都有一个cluster-id,默认情况下路由反射器的router-id会被用做cluster-id,也可以手工指定。路由反射器所传递的每一条路由都会带上这个cluster-id。    用来防环

·打破IBGP的水平分割规则。
1、从EBGP学到的一条路由,会传给client和非client端
2、从client端学到的路由,会传给其它client和非client端
3、从非客户端收到路由,会转发给客户端以及EBGP邻居,但不会转发给非客户端。

在路由反射器上做—
R2(config-router)#neighbor 1.1.1.1 route-reflector-client 这一条命令全搞定
(1.1.1.1为R1的客户端)

<Confederation>
联邦
·将大AS划分成若干个小AS,小AS之间是EBGP关系

·1、联邦中的所有路由器都必须用起小AS号。(Route bgp 小AS)
  R1(config)#router bgp 64512

·2、联邦中的所有路由器都必须声明大AS号
R1(config-router)#bgp confederation identifier 123

·3、连接小AS的边界路由器要互相指peers:
R1(config-router)#bgp confederation peers 64513
(对端小AS号)

注意:两个小AS之间也要解决多跳问题,大AS的边界路由器必须向内做next-hop-self。

·联邦外路由器和联邦的边界路由器建立邻居关系时,neighbor大AS号。
·联邦中的小AS号(64512)不算作AS-Path属性比较,只算作一个
·在sh ip bgp中,小AS号会用括号括住,并且不算做一个进行路径比较的AS号

BGP选路策略–

BGP的metric又称为路径属性

属性分类
1、公认强制的–所有的BGP的updata消息都要包含该属性
2、公认自由决定的–该属性是可选可不选的,但是所有的BGP进程都能识别
3、可选(部分路由器可以识别)传递的–即使BGP进程不能识别该属性,也会继续传递下去
4、可选非传递的–如果BGP进程不能识别该属性,可以忽略这条updata,并且不传递下去

例如:
1、公认强制属性  
    –AS路径(AS-path)
    –下一跳(next-hop)
    –源头(origin)

2、公认自由决定的
    –本地优先级(local preferent)

3、可选传递的
    –社团属性(community)

4、可选非传递属性    多出口鉴别属性
    –MED   cisco路由器都可以识别

weight(权重)–cisco私有技术,只具有本地意义,用于本地路由器进行选路

一条路由信息包含了一组属性,每一个属性由三个字段组成。
·属性类型
·属性长度
·属性值

以下为BGP选路原则:

CISCO所定义的选路原则标准是11条,这里加了两条(中文的两条),共13条。所加的两条算不上标准的选路原则,只是做一个补充而已。
Prefer highest weight (local to router).   默认下为0,在起源路由器权重为32768
Prefer highest local preference (global within AS).   
Prefer route originated by the local router (next hop = 0.0.0.0).  本地起源路由最优,BGP协议规则,CISCO上不用
================================================以上比大,越大越优
Prefer shortest AS path.   选择最短路径的AS
Prefer lowest origin code (IGP < EGP < incomplete).   比较起源代码,
                        i  <  e  <     ?
Prefer lowest MED (exchanged between autonomous systems).
Prefer EBGP path over IBGP path.    EBGP路由优于IBGP
Prefer the path through the closest IGP neighbor.  选择通往自己最近的IBGP邻居通告的路由做最终路由
如果配置了maximum-path[ibgp]n,如果存在多条等价的路径,会插入多条路径。
Prefer oldest route for EBGP paths.  选择最老的EBGP路由,只适用于EBGP
Prefer the path with the lowest neighbor BGP router ID.     比较邻居的router-id,选择最小的router-id
多跳路径的始发路由器ID相同,那么选择CLUSTER_LIST长度短的
Prefer the path with the lowest neighbor IP address.   比较邻居的ip地址,选择最小的

<Weight>CISCO的私有属性

·本地有效。只在这一台路由器上起作用,人为设置的邻居的权重
·默认值=32768(本地产生)/ 0(收到的路由)
·在进行比较时,weight值越大越好

当一个路由器分别从两个不同的邻居处学到同一条路由,它可以根据WEIGHT值决定从哪个邻居走

修改Weight—

p_w_picpath
例如:
R3同时从R1和R4学到同一条BGP路由,想优选从R1走,可以在R3上改:

R3(config-router)#Neighber 13.1.1.1 weight 100

也可针对某一条路由单独修改
R3(config)#access-list 1 permit 172.16.1.0

R3(config)#route-map WE
R3(config-route-map)#match ip address 1
R3(config-route-map)#set weight 8
R3(config)#route-map WE 20
R3(config-route-map)#exit
记住:还要在后面写一条让其它路由通过的空的route-map语句

R3(config-router)#neighbor 13.1.1.1 route-map WE in 在自己的进方向调用

<Local_Preference>越大越好

本地优先级是公认自由决定的属性,它告诉AS中的路由器,哪条路径是离开AS的首选路径。

特点:
·告诉自己的IBGP邻居如何离开本AS。注意这一句话,和MED做比较有啥不同
·只能在本AS内传递。
·默认值=100 (show ip bgp 1.1.1.0/24)

设置方法:通常可以在AS的边界路由器上设置本地优先级

R1(config-router)#bgp default local-preference 101 会影响所有路由,将本地缺省路由改为101
这条命令打上后,本地的值就会变,但必须show明细才能看得到
打上这一命令后—-
·对"EBGP传过来的路由"\"自己network的路由"起效,要show明细才能看到。
·对"IBGP传过来的路由"\"汇总路由"不起效。

也可以针对单独的一条路由设置:
例如:如果在边界R1上,将EBGP路由172.16.1.0的优先级设置为100,在边界R4上将EBGP路由172.16.1.0的本地优先级设置为200,内部路由器R3在选路时,流量会从R4走。

p_w_picpath

R1(config)#access-list 1 permit 172.16.1.0

R1(config)#route-map WE
R1(config-route-map)#match ip address 1
R1(config-route-map)#set local-preference 100
R1(config)#route-map WE 20
R1(config-route-map)#exit

R1(config)#router bgp 1
R1(config-router)#neighbor 3.3.3.3 route-map WE out

<AS-Path>shortest AS-path
BGP路由每经过一个AS,就会将这个AS号加入自已的AS-Path中。

当一个路由器收到两条去往同一个目的地的路由,它将选择最短AS路径,到目标网络经过的AS最少的路由胜出。
这个属性只能在EBGP邻居之间传路由时进行改动,对IBGP邻居传来的路由改不了

R1(config)#route-map AS
R1(config-route-map)#set as-path prepend 7 8 9  设置虚拟的AS号

通常都会这样加set as-path prepend 4 4 4 加自已的AS号,不易搞混

做OUT方向往后加
做IN方向往前加
·做out方向:出本AS之前预先设定AS号,人为设定的AS号顺序不变。
·做in 方向:进本AS之前预先设定AS号,人为设定的AS号顺序不变。

<origin attribute>
IGP (i)  在BGP中用network命令宣告的路由
EGP (e)  这个EGP指的是一种早期的协议,现已不用
Incomplete(?) 重分布进BGP的路由或者静态路由

route-map wolf
   set origin egp
nei 3.3.3.3 route-map wolf out

<MED>Multi-Exit Discriminator多出口鉴别属性

特点:
·当两个AS之间存在多条路径的时候才使用
·告诉自己的EBGP邻居如何进入本AS。Local prefrerence决定如何出去,MED决定EBGP邻居如何进来
·只能传递一个AS。
·默认值=0,MED值越小越好

Show ip bgp 中显示的Metric值就是MED

R1(config)#route-map MED
R1(config-route-map)#set metric 1

R1(config-router)#neighbor 24.1.1.4 route-map MED out

注意不能到对方的AS中去看,只能用以下的方法来验证
测试方法: 扩展ping / debug ip bgp updates再软清

·默认不比较从不同AS传来路由的MED。如果要比较不同AS传来的MED值,要用下面的命令
R2(config-router)#bgp always-compare-med

——————————————————————————————-
——————————————————————————————-
<Community>主要用来控制路由的传播范围
社团属性,也叫共同体属性,是可选传递属性 

·“可选”:意味着并不是所有的路由器都能识别这个社团属性。

·社团属性类似于tag标记,它允许路由器能够使用一个指示符来标记路由,并且允许其它路由器根据这个标记做出相应的决定。

·一条路由可以设置多个社团属性,也就是说允许同时打上多个标记

·还可以利用社团属性实现一些扩展的功能。比如在MPLS-×××中的RT属性。

·默认情况下社团属性不会传递给邻居,必须有以下命令才行
  R2(config-router)#neighbor 1.1.1.1 send-community

·社团属性只会传给指定的邻居,并只在此邻居上起效。
  比如上例:就只传给1.1.1.1这一邻居,并只在它上面起效,默认不会再向后传

——————————————-
·社团属性分以下两种:
  1、well-known communities 公认团体
  2、Private communities  私有团体

·社团属性中已经预定义好的三类well-known属性:
   no-advertise:携带此属性的路由不会通告给任何BGP邻居。也就是说只传达给一个邻居
   no-export: 携带此属性的路由不会传出本AS外,只会传给IBGP。(联邦中的小AS会传递)。
   local-AS: 携带此属性的路由不会传出小AS。

配置公有团体属性:
R4(config)#route-map WOLF permit 10
R4(config-route-map)#set community no-advertise/no-export/local-AS
R4(config-router)#neighbor 24.1.1.2 route-map wolf out
R4(config-router)#neighbor 24.1.1.2 send-community  每个路由器对下一个邻居都要打这条命令

在24.1.1.2上show明细可以看到社团属性,还有其它的一些属性

配置私有团体:
R4(config)#route-map WOLF permit 10
R4(config-route-map)#set community 4:20  4建议为AS号:20随便写
R4(config-router)#neighbor 24.1.1.2 send-community

做相应的策略:在R3上再做处理
R3(config)#ip community-list 1 permit 4:20
R3(config)#route-map CCNP deny
R3(config-route-map)#match community 1
R3(config-route-map)#exit
R3(config)#route-map CCNP permit 20

R3(config-router)#nei 35.1.1.5 route-map CCNP out 调用

R1(config)#ip bgp new-format   可显示出私有的属性,新格式  把十进制的属性变为有冒号的样子

FEATURE

<local-as>主要在过渡AS号时用
如果在EBGP中,邻居指错了R2的AS号,可以在本地用以下方法解决:
R2(config-router)#neighbor 12.1.1.1 local-as 3
                                   (对方指错的AS号)

show ip bgp
   Network          Next Hop            Metric LocPrf Weight Path
*> 1.1.1.0/24       12.1.1.1                 0             0 3 1 i
(加入了指错的AS号)

R2(config-router)#neighbor 12.1.1.1 local-as 3 no-prepend
(在AS-path中去掉指错的AS号,只能在我自已这边收到的路由中去掉)

<BackDoor>

p_w_picpath

问题提出:
1、R2和R3之间用以太网链路相连,R2和R3之间运行一个IGP协议,并将172.16.1.0宣告进IGP。
2、三台路由器运行BGP,组成在个AS
3、R1与R2建EBGP邻居,R1和R3建EBGP邻居。
4、在R2上将172.16.1.0网络再宣告进BGP。
5、 R3通过IGP学到172.16.1.0路由,同时也通过EBGP邻居学到172.16.1.0路由。它将比较两条路由的AD值来选最优路由,由于 EBGP路由的AD值默认为20,所以R3选择EBGP路由为最优路由,并放入路由表。而实际上这条EBGP路由所连接的是一条T1的链路,带宽是小于 R2与R3之间的以太网链路的。并非最好的路由。

总结:
·通过IGP学到某条路由,又从EBGP学到相同的路由。
由于EBGP AD=20,小于IGP的AD,所以会优先EBGP的路由,
但实际路径可能从IGP走更优。Cisco路由器配置

解决:
R3学到两条相同的路由,用以下方法在BGP进程下改,实际上就是提高了从BGP学到的路由的AD值

R3(config-router)#network 172.16.1.0 mask 255.255.255.0 backdoor
(将此路由的AD调高到200)
将BGP学到的路由的AD值提高,从20提高到200

<BGP负载均衡>
高版本的IOS即可对EBGP路由进行负载均衡,也可对IBGP路由进行负载均衡
条件是:按照BGP选路原则前八条都比不出来的情况下,多条路由才能进行负载均衡

对EBGP路由负载均衡:
R1(config-router)#maximum-paths 2

对IBGP路由负载均衡:
R1(config-router)#maximum-paths ibgp 2

例:如下图所示,在R1上会收到两条EBGP路由172.16.1.0/24。可以在R1上用maximum-paths命令实现EBGP路由的负载均衡。

p_w_picpath

<Next-hop-unchange>

p_w_picpath

问题的产生:
1、三台路由器先运行一个IGP协议,注意,172.16.1.0不用宣告进IGP
2、然后运行BGP,R1与R2建立EBGP邻居,R2与R3建立IBGP邻居
3、在R3上将172.16.1.0宣告进BGP
4、观察R1与R2上的172.16.1.0路由的下一跳,看看有啥问题产生
   R2的下一跳指向13.1.1.3   R1的下一跳指向12.1.1.2
你将会发现,在R1与R2之间形成了环路。

解法1:
R2(config-router)#neighbor 1.1.1.1 next-hop-unchanged 告诉邻居下一跳不改变,推荐做法

这种方法有两个限制:
1、IOS不支持unchaged命令时
2、EBGP必须要有多跳   如果没有用环回口  没有多跳  则需手工打上EBGP的多跳

%BGP: Can propagate the nexthop only to multi-hop EBGP neighbor EBGP必须要有多跳,也就是说通常要用环回口建EBGP邻居

解法2:
R1(config)#route-map WOLF
R1(config-route-map)#set ip next-hop 13.1.1.3

R1(config-router)#neighbor 12.1.1.2 route-map WOLF in  将邻居12.1.1.2传进来的路由的下一跳改为13.1.1.3
——————————————————————————————-
<Dampening> 

·为了防止路由频繁抖动。BGP利用Dampening机制,将这种频繁抖动的路由有条件的加以抑制。
·增强了路由的稳定性,但不牺牲表现良好的(well-behaved)路由的收敛时间。
·BGP默认不启用Dampening,而且仅对EBGP邻居传来的路由启效。
·一条路由up->down,默认惩罚1000,当达到start suppress值时,被抑制。

Dampening为每一条前缀维护了一个路由抖动的历史记录。
Dampening算法包含以下几个参数:
历史记录――――当一条路由flaping后,改路由就会被分配一个惩罚值,并且它的惩罚状态被设置为history。
惩罚值(penalty)――――路由每flaping一次,这个惩罚值就会增加。默认的路由flaping惩罚值为1000。如果只有路由属性发生了变化,那么惩罚值为500。这个值是硬件编码的。
抑制门限(suppress limit)――――如果惩罚值超过了抑制门限,改路由将被惩罚或dampen。路由状态将由history转变为damp状态。默认值的抑制门限是2000,它可以被设置。
惩罚状态(damp state)――――当路由处于惩罚状态时,路由器在最佳路径选择中将不考虑这条路径,因此也不会把这条前缀通告给它的对等体。
半衰期(half life)――――在一半的生命周期的时间内,路由的惩罚值将被减少,半衰期的缺省值是15分钟。路由的惩罚值每5秒钟减少一次。半衰期的值可以被设置。
重用门限(reuse limit)――――路由的惩罚值不断的递减。当惩罚值降到重用门限以下时,改路由将不再被抑制。缺省的重用门限为750。路由器每10秒钟检查一次那些不需要被抑制的前缀。重用门限时可以被配置的。当惩罚值达到了重用门限的一半时,这条前缀的历史记录(history)将被清除,以便更有效率的使用内存。
最大抑制门限/最大抑制时间――――如果路由在短时间内表现出极端的不稳定性,然后又稳定下来,那么累计的惩罚值可能会导致这条路由在过长的时间里一直处于惩罚状态。这就是设置最大抑制门限的基本目的。如果路由表现出连续的不稳定性,那么惩罚值就停留在它的上限上,使得路由保持在惩罚状态。最大抑制门限是用公式计算出来的。最大抑制时间为一条路由停留在惩罚状态的最长时间。默认为60分钟(半衰期的4倍)可以配置。
最大抑制门限=重用门限×2(最大抑制时间÷半衰期)   由于最大抑制门限为公式算出来的,所以有可能最大抑制门限≤抑制门限,当这种情况发生时,dampening的设置是没有效果的。如重用门限=750,抑制门限=3000,半衰期=30分钟,最大抑制时间=60分钟。按照这样的配置,算出来的最大抑制门限为3000,与抑制门限一样,因为必须超过抑制门限,才能对路由进行dampening,所以这时dampening的设置没有效果。

被抑制的路由不会传给本地,也不会传给其他EBGP邻居
·Half-life Time    : 15 m        半衰期(一个半衰期降为原来的一半)
·Reuse      : 750         降到这个值以下,重新开始启用路由
·Start Suppress    : 2000        升到这个值以上,开始抑制
·Max Suppress Time : 60 m (4×15)   最大抑制时间

例一:
R2(config-router)#bgp dampening(对所有从EBGP收到的路由启用Dampening)
R2(config-router)#bgp dampening 15 750 2000 60  可这样修改默认参数,惩罚值不能更改

R2#show ip bgp 1.1.1.0/24  可查Dampening明细

  1, (suppressed due to dampening)
    12.1.1.1 from 12.1.1.1 (1.1.1.1)
      Origin IGP, metric 0, localpref 100, valid, external
      Dampinfo: penalty 2450, flapped 3 times in 00:11:40, reuse in 00:03:49

·正在翻动的路由会打上  h
·被惩罚的路由前面会打上  d
*d 1.1.1.0/24 (打d的路由,不会进入本地路由表,也不会传给其他BGP邻居)

R2#clear ip bgp dampening

例二:
还可针对一个路由单独做dampening,针对一个路由单独做了,就不要再在全局下做
R2(config)#ip prefix-list 1 permit 1.1.1.0/24

R2(config)#route-map DAMP 
R2(config-route-map)#match ip address prefix-list 1
R2(config-route-map)#set dampening 15 750 2000 60

R2(config-router)#bgp dampening route-map DAMP    在进程下调用

<Maximum-Prefix>控制本路由器最多能收多少路由

neighbor 1.1.1.1 maximum-prefix 10 (1)
neighbor 1.1.1.1 maximum-prefix 10 80 (2)
neighbor 1.1.1.1 maximum-prefix 10 80 warning-only (3)
neighbor 1.1.1.1 maximum-prefix 10 80 restart 20 (4)

10后面跟的数字是百分数,默认值为75%
针对Neighbor 1.1.1.1传过来的BGP路由,
(1)如果>7条,则报警;如果>10条,则断开BGP连接。Idle(PfxCt) 一旦断开,就无法再建邻居,必须手工清
(2)如果>8条,则报警;如果>10条,则断开BGP连接。
(3)如果>8条,则报警;如果>10条,也只报警,不断开BGP连接。
(4)如果>8条,则报警;如果>10条,则断开BGP连接。
20分钟后重新连接,如果≤10条,则连接;如果仍然>10条,还是断开,(Neighbor会Up,然后Down).

<Regular Expression>

正则表达式:一种用来做匹配的工具,可用来匹配字符串,在BGP中可用来按AS号进行过滤,控制自已只接受某些特定的AS传来的路由。

常用的通配符:
^ : 代表路径列表(字符串)的开头
$ : 代表路径列表(字符串)的结尾
_ : 代表一个符号(只能是空格/逗号/左括号/右括号)
. : 代表任何一个字符
* : 星号前的字符可重复0次或多次

例子:
100  : 只要AS中包括100都匹配
_100_ : 所有经过AS100的路由
_100$ : 起源于AS100的路由
^100_ : 进入本AS之前的AS必须是100
^100$ : 起源于AS100,并直接传入本AS
100$  : 起源的AS号其最后三位一定是100,例如:100,1100,2100都可以
.*    : 所有AS

R1#show ip bgp regexp ^23$

<1> R1(config)#ip as-path access-list 1 permit _4$
    R1(config-router)#neighbor 13.1.1.1 filter-list 1 in
(只允许起源于AS4的路由进入)

<2> R1(config)#ip as-path access-list 1 permit _4$
    R1(config)#route-map AS
    R1(config-route-map)#match as-path 1 
    R1(config-router)#neighbor 13.1.1.1 route-map AS in

注意:在列表的最后也有默认的deny any

老胳膊文章,转载请注明: 转载自老胳膊

本文链接地址: Cisco路由器配置——BGP