<BGP认证>
BGP支持MD5认证
router bgp 123
  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不会自动汇总

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

router bgp 123
  no auto-summary   //关闭自动汇总


<Summary>aggregate聚合

1)通过Network做汇总:

方法:先为路由器配置一条静态的汇总路由,再宣告进BGP就可以了,注意不要把明细路由宣告进BGP
手动写一条静态路由给NULL0
ip route 192.168.0.0 255.255.252.0 Null0

router bgp 123
  network 192.168.0.0 mask 255.255.252.0

2)Aggregate:
使用aggregate命令做路由聚合

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

例一:如下图所示,要求在R2上做聚合,让R1收到一条192.168.0.0/16的聚合路由

 

R2:
router bgp 123
  aggregate-address 192.168.0.0 255.255.255.0

注意:观察R1,你会发现,默认情况下,明细和汇总路由都会被发出。


例二:以下命令做聚合,则只发汇总,不发明细
R2:
router bgp 123
  aggregate-address 192.168.0.0 255.255.255.0 summary-only //只通告汇总

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

第一步:ip prefix-list 1 permit 192.168.2.0/24

第二步:route-map CCNP
  match ip address prefix-list 1

第三步:router bgp 123
  aggregate-address 192.168.0.0 255.255.255.0 suppress-map CCNP   //抑制192.168.2.0/24路由                                                                       

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

例四:
使用aggregate做汇总后,在汇总路由中的一些明细属性将会消失,用下面这一命令可以还原
router bgp 123
  aggregate-address 192.168.0.0 255.255.255.0 as-set   //还原AS属性

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

如果不将明细路由的属性还原,有可能导致路由回馈现象发生:
路由回馈现象:
 
在R2上起两条路由宣告进BGP,在R1上做聚合,想想有啥问题。在这时as-set命令就有大作用了。


aggregate命令参数详解:

aggregate-address
     advertise-map          //Set condition to advertise attribute
     as-set                         //Generate AS set path information
     attribute-map           //Set attributes of aggregate
     route-map                 //Set parameters of aggregate
     summary-only         //Filter more specific routes from updates
     suppress-map         //Conditionally filter more specific routes from updates
  nlri
  <cr>

Advertise-map----只对advertise-map里面匹配的路由进行聚合。当advertise-map里面匹配的明细路由全部消失后,即使聚合路由范围内还有其他明细路由,聚合路由也将消失。当与as-set合用时,只继承advertise-map里面匹配的明细路由的属性。


As-set----让聚合路由继承明细路由的属性,包括:as-path,local_preference,community,origin-code。与advertise-map合用,只继承advertise-map里面匹配的明细路由的属性。


Attribute-map和route-map----这两个参数一样,可以将聚合路由的属性清除掉(除了as-path属性),添加自己需要添加的属性。


Summary-only----将聚合路由所包括的所有明细路由都抑制掉,被抑制的路由在bgp的转发表里,显示为s,代表suppress的意思。发送更新时,只发送聚合路由。可以与neighbor 1.1.1.1 unsuppress-map XX合用,对特定邻居漏过特定的明细路由。


Suppress-map----将suppress-map里面匹配的路由抑制掉,被抑制的路由在bgp的转发表里,显示为s,代表suppress的意思。发送更新时,只发送聚合路由和没有被抑制的明细路由。可以neighbor 1.1.1.1 unsuppress-map XX合用,对特定邻居漏过特定的明细路由。


<IGP与BGP之间的重分布>

redistribute命令可以将IGP的路由引入BGP。
例:
router bgp 123
   redistribute eigrp 90

注意:
将OSPF重分布进BGP的时候,默认只能将internal的路由重分布进BGP。如果还想将OSPF的其他路由重分布进BGP,可以用以下命令。

router bgp 123
     redistribute ospf 110 match [internal | external | nssa external]      //后面的参数可以任意组合

向IGP中注入BGP路由:
一般不建议将BGP的路由重分布进IGP,因为路由条目很大,很容易造成IGP的瘫痪。
默认情况下只能将EBGP的路由重分布进IGP。默认不让IBGP的路由重分布进BGP是为了防止环路。如果非要将IBGP的路由重分布进IGP。需要在进程内使用以下命令:

router bgp 123
     bgp redistribute-internal

将BGP路由注入OSPF或EIGRP时,会将AS-PATH中最前面一个AS号作为TAG值重分布过去。

再把OSPF重分布进BGP时,可用以下方法将TAG还原为AS-PATH
route-map CCNP
  set as-path tag

router bgp 123
  redi ospf 110 match in ex 1 ex 2 route-map CCNP


<向BGP注入默认路由>

方法一:
ip route 0.0.0.0 0.0.0.0 null 0                      
router bgp 12
   network 0.0.0.0

方法二:
ip route  0.0.0.0 0.0.0.0 null 0                      
router bgp 12
   redistribute static
   default-information originate

方法三:
router bgp 12                                     
    neighbor x.x.x.x default-originate

router bgp 12                                    
    neighbor x.x.x.x default-originate route-map xx      //加入条件路由

注意:在使用条件路由时,必须用prefix来匹配路由才行,ACL不行

-------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------

<Reflector>路由反射器

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

·路由反射器打破了IBGP的水平分割规则,它的传递规则如下:

1、从EBGP学到的一条路由,会传给client和非client端
2、从client端学到的路由,会传给其它client和非client端
3、从非客户端收到路由,会转发给客户端以及EBGP邻居,但不会转发给非客户端。

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


配置路由反射器---
R2:
router bgp 123
  neighbor 1.1.1.1 route-reflector-client   //将R2配置为路由反射器,R1为客户端

当RR的客户full mesh时,可以用
no bgp client-to-client reflection
禁止客户到客户的路由反射。可以减少路由更新。


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

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

·2、联邦中的所有路由器都必须声明大AS号
router bgp 64512
    bgp confederation identifier 123

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

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

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

BGP选路策略--


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

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

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

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

4、可选非传递属性
    --MED

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

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

以下为BGP选路原则:

CISCO所定义的选路原则标准是11条,这里加了两条(中文的两条),共13条。所加的两条算不上标准的选路原则,只是做一个补充而已。

Prefer highest weight (local to router).
Prefer highest local preference (global within AS).
Prefer route originated by the local router (next hop = 0.0.0.0).
Prefer shortest AS path.
Prefer lowest origin code (IGP < EGP &lt; incomplete).
Prefer lowest MED (exchanged between autonomous systems).
Prefer EBGP path over IBGP path.
Prefer the path through the closest IGP neighbor.   【可修改IGP 的metric 】
如果配置了maximum-path[ibgp]n,如果存在多条等价的路径,会插入多条路径。
Prefer oldest route for EBGP paths.
Prefer the path with the lowest neighbor BGP router ID.
多跳路径的始发路由器ID相同,那么选择CLUSTER_LIST长度短的
Prefer the path with the lowest neighbor IP address.


<Weight>
·CISCO的私有属性
·该属性本地有效。只在本路由器上起作用,不能传递给任何邻居
·weight属性用来影响本路由器自已的选路
·当一个路由器学到两条相同目的地路由,它可以根据WEIGHT值决定哪一条最优
·默认值=0    如果是本地产生的路由weight值为32768
·在进行比较时,weight值越大越好

例:通过修改Weight来选路
 
需求:
如上图所示,R3同时从R1和R4学到172.16.1.0的BGP路由,想优选从R1走

解法:
可以在R3上改动weight值

R3:
router bgp 1
  Neighber 1.1.1.1 weight 100  //从邻居1.1.1.1传来的所有BGP路由weight值都改为100

也可使用route-map针对某一条路由单独修改
R3:
access-list 1 permit 172.16.1.0

route-map WE
  match ip address 1
  set weight 8
route-map WE 20    //一定要加上这条空的route-map语句

router bgp 1
  neighber 1.1.1.1 route-map WE in
 

<Local_Preference>越大越好

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

特点:
·优先级属性用来影响IBGP邻居,告诉自己的IBGP邻居如何离开本AS。
·只能在本AS内传递,不能传给EBGP邻居。
·默认值=100

设置方法:通常可以在AS的边界路由器上设置本地优先级,用以下命令。

R1:
router bgp 1
  bgp default local-preference 200     //将本地优先级默认值改为200

这条命令只对EBGP邻居路由器传过来的路由以及本路由器自己宣告的路由有效,对IBGP邻居路由器传过来的路由,不会改变它们的local-preference。如果将一个IBGP邻居传来的路由传给另外一个IBGP邻居,那我必须是RR。
·对"EBGP传过来的路由"\"自己network的路由"\"AS-Path为空的聚合路由"起效,要show明细才能看到。
·对"IBGP传过来的路由"\"联邦中的EBGP传过来的路由"\"AS-Path非空的聚合路由"不起效。

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

 
R1:
access-list 1 permit 172.16.1.0

route-map WE
  match ip address 1
  set local-preference 100
route-map WE 20

router bgp 1
  neighbor 3.3.3.3 route-map WE out

R4:
access-list 1 permit 172.16.1.0

route-map WE
  match ip address 1
  set local-preference 200
route-map WE 20

router bgp 1
  neighbor 3.3.3.3 route-map WE out

<AS-Path>shortest AS-path
·BGP路由每经过一个AS,就会将这个AS号加入自已的AS-Path中。
·当一个路由器收到两条相同目的地的路由,它将选择AS路径最短的路由。
·这个属性只能在EBGP邻居之间传路由时进行改动,对IBGP邻居传来的路由改不了
·如果做了路由聚合,并加了as-set参数,聚合后继承明细路由的属性,在大括号里面的as-path在计算长度时,只算一个。在联盟内小括号里面的AS号,在选路时,不计算到as-path长度里面。


 
例:
如上图所示,要求在R1上从R2收到172.16.1.0路由时,在AS-PATH中加三个AS号,7、8、9。

R1:
access-list 1 permit 172.16.1.0

route-map AS
  match ip add 1
  set as-path prepend 7 8 9  设置虚拟的AS号

router bgp 1
  neighbor 2.2.2.2 route-map AS in

也可以让R2在传出路由给R1的时候加AS号,但要注意,在IN方向加和在OUT方向加as号时,在AS-PATH中的排列顺序有一点区别。

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

建议:通常都会这样加set as-path prepend 1 1 1 加自已的AS号,不容易出问题

在as-path prepend的后面还有一个参数,last-as,如:
route-map AS
   set as-path prepend last-as ?
  &lt;1-10>  number of last-AS prepends
意思是将离我最近的AS,将它的AS号在as-path里面再重复出现几次。这个10看起来可以和allowas-in里面的10对应起来。

bgp bestpath as-path ignore(隐藏命令)
这条命令可以使我们在选路时,跳过as-path的选路,直接往下继续选择最优路径。

<origin attribute>
本属性是用来说明BGP路由的起源,是如何成为BGP路由的。总共只有三个值:

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

这三个值有大小之分的:
i<e&lt;?   //在用来比较时,越小越优

默认每一条BGP路由都有起源属性,也可以用以下方法来改动一条路由的起源属性:

R2:
access-list 1 permit 172.16.1.0

route-map CCNP
  match ip add 1
  set origin egp
route-map CCNP 20

router bgp 1
  nei 1.1.1.1 route-map CCNP out

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

特点:
·当两个AS之间存在多条路径的时候才使用
·用来影响EBGP邻居,告诉自己的EBGP邻居如何选最优路由。
·metric传递不能传出AS。例:始发路由器可以将metric传给任何邻居,可以是IBGP/EBGP,但邻居收到后,不能传出邻居所在的AS。
·默认值=0,MED值越小越好

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

 

例:
AS2希望AS1来访问172.16.1.0网段时流量通过R1过来。来访问192.168.1.0网段时流量从R4过来。

R2:
access-list 1 permit 172.16.1.0
access-list 2 permit 192.168.1.0

route-map TO-R1 10
  match ip add 1
  set metric 100
route-map TO-R1 20
  match ip add 2
  set metric 200
route-map TO-R1 30

route-map TO-R4 10
  match ip add 1
  set metric 200
route-map TO-R4 20
  match ip add 2
  set metric 100
route-map TO-R4 30

router bgp 2
  neighbor 1.1.1.1 route-map TO-R1 out
  neighbor 4.4.4.4 route-map TO-R4 out

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


如果接收到路径没有MED,激活了bgp bestpath missing-as-worst,在这种情况下,这些路径的度量值被指定为4294967294(最大值)。优选那些主动设置了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。
  
配置公有团体属性:
route-map CCNP permit 10
  set community no-advertise/no-export/local-AS
router bgp 4
  neighbor 24.1.1.2 send-community
  neighbor 24.1.1.2 route-map CCNP out

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

配置私有团体:
R4:
route-map CCNP permit 10
  set community 4:20
router bgp 4
  neighbor 24.1.1.2 send-community

做相应的策略:
R3:
ip community-list 1 permit 4:20
route-map CCNP deny
  match community 1
route-map CCNP permit 20

router bgp 123
  nei 35.1.1.5 route-map CCNP out 调用

ip bgp new-format   可显示出私有的属性,新格式

FEATURE

<local-as>主要在过渡AS号时用
 

在上图中,如果R4在与R2建EBGP邻居时,指错了AS号,本来应该是指向123,但是现在指为5了。怎么办:

如果在EBGP中,邻居指错了R2的AS号,可以在R2上用以下方法解决:

R2(config-router)#neighbor 12.1.1.1 local-as 5
                                   (对方指错的AS号)

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


虽然上面的命令解决了问题,但是一个错误的AS号加入了路由的AS-PATH中,导致这条路由传给R5时,它不接收,因为AS-PATH中包含了它自已的AS号,EBGP水平分割原因限制了路由的接收。针对这个问题有两个解决方案:

1、在R5上针对邻居使用以下命令:
R5(config-router)#neighbor 35.1.1.3 allowas-in

只要在R5上打上以上的命令,针对邻居R3传过来的EBGP路由,将不再进行EBGP水平分割的检查。

2、在R2上也可以通过增加一个参数来搞定:
R2(config-router)#neighbor 12.1.1.1 local-as 5 no-prepend
(在AS-path中去掉指错的AS号,只能在R2自已这边收到的路由中去掉)


<BGP邻居的flaping>

·路由器通过IGP学到对方loopback,并用looback建EBGP邻居
·又在BGP中通告此loopback。此时BGP邻居会出现flaping

如下图所示:

 
R1和R2之间运行一个IGP协议,比如说EIGRP。将环回口都宣告进去,这样R1和R2相互之间就有对方环回口的路由了,然后再用环回口建立EBGP邻居关系。最后再把2.2.2.0和1.1.1.0的环回口宣告进BGP。这时你会发现BGP邻居关系会发生flapping。


<BackDoor>

 
问题提出:
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走更优。

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

R3(config-router)#network 172.16.1.0 mask 255.255.255.0 backdoor

通过这样的宣告将EBGP学到的路由的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路由的负载均衡。
 


<Next-hop-unchange>

 
问题的产生:
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路由的下一跳,看看有啥问题产生

你将会发现,在R1与R2之间形成了环路。

解法1:
在R2上做:
R2:
router bgp 2
  neighbor 1.1.1.1 next-hop-unchanged   //告诉邻居下一跳不改变,推荐做法

这种方法有两个限制:
1、有的IOS不支持unchaged命令
2、EBGP必须要有多跳

%BGP: Can propagate the nexthop only to multi-hop EBGP neighbor EBGP必须要有多跳,也就是说通常要用环回口建EBGP邻居,如果是用直连接口建EBGP邻居,也要打上多跳命令才行。否则上面的命令不起作用。

解法2:
在R1上修改:
R1:
route-map CCNP
  set ip next-hop 13.1.1.3

router bgp 1
  neighbor 12.1.1.2 route-map CCNP in  //将邻居12.1.1.2传过来的路由的下一跳改为13.1.1.3
-------------------------------------------------------------------------------------------
<Dampening> 

·为了防止路由频繁抖动。BGP利用Dampening机制,将这种频繁抖动的路由有条件的加以抑制。
·增强了路由的稳定性,但不牺牲表现良好的(well-behaved)路由的收敛时间。
·BGP默认不启用Dampening,需要手一启用。
·Dampening仅对EBGP邻居传来的路由起效。

·Dampening的原理:
    当在路由器上启用Dampening后,如果有一条路由up-&gt;down,路由器会对这条路由记录一个惩罚值,每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)   最大抑制时间

例一:
R1:
router bgp 1
  bgp dampening                 //对所有从EBGP收到的路由启用Dampening
或bgp dampening 15 750 2000 60  //可这样修改默认参数,惩罚值不能更改

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邻居)

clear ip bgp dampening   //本命令主动清除惩罚值

例二:
还可针对一个路由单独做dampening,针对一个路由单独做了,就不要再在全局下做

R2:
ip prefix-list 1 permit 1.1.1.0/24

route-map DAMP 
  match ip address prefix-list 1
  set dampening 15 750 2000 60

router bgp 2
  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%
(1)针对Neighbor 1.1.1.1传过来的BGP路由,
如果>7条,则报警;如果>10条,则断开BGP连接。Idle(PfxCt) 一旦断开,就无法再建邻居,必须手工清
(2)如果>8条,则报警;如果>10条,则断开BGP连接。
(3)如果>8条,则报警;如果>10条,也只报警,不断开BGP连接。
(4)如果>8条,则报警;如果>10条,则断开BGP连接。
20分钟后重新连接,如果≤10条,则连接;如果仍然>10条,还是断开,(Neighbor会Up,然后Down).

<允许路由器只接收经过多少AS的路由>

bgp maxas-limit {1-2000}        //限制路由器只接受as-path属性里最多有几个AS号的路由更新条目。

<条件路由>

neighbor 1.1.1.1 advertise-map AAA exist-map BBB
当MAP BBB里面匹配的路由存在的话向邻居1.1.1.1通告MAP AAA里面匹配的路由。

neighbor 1.1.1.1 advertise-map AAA non-exist-map CCC
当MAP CCC里面匹配的路由不存在的话向邻居1.1.1.1通告MAP AAA里面匹配的路由。


<Regular Expression>

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

常用的通配符:
^ : 代表路径列表(字符串)的开头
$ : 代表路径列表(字符串)的结尾
_ : 代表一个符号(只能是空格/逗号/左括号/右括号)
. : 代表任何一个字符d
* : 星号前的字符可重复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$

例:如下图所示,要求R3只接收起源于AS2的路由,用正则表达式实现

 

R3:
ip as-path access-list 1 permit _2$   //在列表的最后也有默认的deny any

router bgp 3
  neighbor 13.1.1.1 filter-list 1 in


也可以使用route-map来匹配出路由单独做处理
R3:
ip as-path access-list 1 permit _4$

route-map AS
  match as-path 1
  set weight 200
route-map AS 20 

router bgp 3
  neighbor 13.1.1.1 route-map AS in

<BGP的过滤方法总结>
BGP有多种过滤方法:
A.neighbor 1.1.1.1 prefix-list 1 {in|out}
用前缀列表来过滤,这个是BGP的标准过滤方法,可以用in和out方向

B.neighbor 1.1.1.1 distribute-list access-list-number {in|out}
用访问控制列表来过滤,支持扩展访问控制列表。建议用prefix-list来过滤。

C.neighbor 1.1.1.1 route-map XX {in|out}
用route-map来过滤,一般用在前缀有属性改变的时候。

D.neighbor 1.1.1.1 filter-list as-path-access-list-number {in|out}
用as-path-access-list所定义的正则表达式表示的AS-path来过滤.


=============================================================================================================================


    community 属性: 可选传递 ,当这个属性别的路由器不识别,直接传递就可以了;能识别这个属性,就处理。


======================================================================================


BGP  的消息类型

        open   建立邻居关系
        keeplive 建立和维护邻居关系
        update 
        notification


BGP 三张表 

    neighbor table  (sh bgp nei  /  show ip bgp summary )
        - list of bgp neighbor (可以不直连)
    BGP  forwarding table /database (=bgp 表)
        - 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 destionation networks
        - AD :  EBGP 20 / IBGP 200 / 自己NETWORK 200

BGP 的邻居表  
        show bgp nei
        show ip bgp summary

External BGP (ebgp)
        -运行俩个不同AS的邻居 
        - EBGP  邻居默认是需要物理直连的(TTL=1)
Internal BGP (ibgp)

        - 运行在同一个AS 的BGP 邻居,叫 iBGP 邻居
        - IBGP 邻居物理上不需要直连 (TTL=255),只要TCP 179  连接 能建立起来就可以。

        一个邻居就是一个PEER

BGP  6 个状态

IDLE - router is searching,

Connect - completed three-way TCP 179 handshake

Active -

Open  sent : open message sent

0pen confirm : route received agreement

Estanblished: peering is established ,BGP routing begins! (收到一个 keeplive)

RR   router reflector

只有非客户的路由不反射给非客户,其他都反射。        (非客户  --&gt; RR  --X- 非客户)
RR  反射的路由 (已经 优化的),下一跳保持不变。

client

sh ip route | include 192