思科的BGP协议操作解析

• BGP 是外部路由协议,用来在AS 之间传递路由信息
• 是一种增强的距离矢量路由协议
• 可靠的路由更新机制
• 丰富的Metric度量方法
• 从设计上避免了环路的发生
• 为路由附带属性信息
• 支持CIDR (无类别域间选路)
• 丰富的路由过滤和路由策略

BGP AS号码
不同AS通过AS号区分,AS号取值范围1-65535,其中64512-65535是私有AS号。

BGP路由传递
BGP 通过单播方式构建TCP会话以建立BGP 邻居,并要求两端的
设备通过该TCP连接周期性的发送KeepAlive消息保持该会话
BGP通过定义策略或者规则来穿越AS,所以BGP是as-by-as的

可靠的路由更新
• 传输协议:TCP ,端口号179
• 触发式更新:无需周期性更新,只发送增量路由(增加、修改、删除的路由信息)
• 周期性(60s )发送keepAlive 报文检测TCP

基于TCP 连接的邻居关系
• BGP 邻居关系建立在TCP 连接的基础之上
• 可以通过IGP 或静态路由来提供TCP 连接的IP 可达性

BGP的邻居关系
IBGP相同的AS号码
建立IBGP邻接关系,满足的条件
– 自治系统号相同
– 定义邻居建立TCP会话
– IBGP邻居可达

EBGP不是相同的AS号码
建立EBGP邻接关系,必须满足三个条件
– EBGP之间自制系统号不同
– 定义邻居建立TCP会话
– neighbor中指定的IP地址要可达

EBGP 多跳和指定更新源
• EBGP 可以采用直连建立,也可以采用环回口作为更新源建立EBGP 邻居用以备份。但是需要修改TTL 值
思科的关闭直连检测解决方案
• 思科一个小的BGP 特性
#neighbor 11.1.1.1 disable-connected-check //关闭直连检测,用于两个ebgp邻居直接向连但是采用环回接口构建邻居的场景使用该命令不需要修改TTL值

建立EBGP邻居关系
R1(config-if)#router bgp 100
R1(config-router)#neighbor 10.1.15.5 remote-as 200 //通过直连接口建立EBGP邻居
R1(config-router)#network 1.1.1.1 mask 255.255.255.255 //用network命令宣告业务路由

以环回接口为源地址的EBGP邻居
R2(config-if)#router bgp 100
R2(config-router)#neighbor 66.1.1.1 remote-as 200 //用环回口建立EBGP邻居
R2(config-router)#neighbor 66.1.1.1 ebgp-multihop 2 //设置到邻居的EBGP跳数为2跳(默认一跳)

R6(config-if)#router bgp 200
R6(config-router)#neighbor 22.1.1.1 remote-as 100
R6(config-router)#neighbor 22.1.1.1 disable-connected-check 设置到邻居的EBGP关闭直连检查

IBGP
R1(config-if)#router bgp 100
R1(config-router)#neighbor 44.1.1.1 remote-as 100 //用环回口建立IBGP邻居
R1(config-router)#neighbor 44.1.1.1 update-source l0 //针对邻居的更新源地址为L0的地址
R1(config-router)#neighbor 44.1.1.1 next-hop-self //在ASBR上针对IBGP邻居做下一跳自我
如果不想做下一跳自我,可将ASBR上把连接EBGP的直连引入到IGP
验证
R1#show ip bgp summary

  1. 对等体组
    R1(config)#router bgp 100
    R1(config-router)#neighbor CISCO peer-group //创建对等体模板为QYT
    R1(config-router)#neighbor CISCO remote-as 100 //填充命令
    R1(config-router)#neighbor CISCO update-source l0
    R1(config-router)#neighbor CISCO next-hop-self
    R1(config-router)#neighbor 22.1.1.1 peer-group CISCO //针对邻居调用对等体模板

动态发现邻居
R3(config)#router bgp 100
R3(config-router)#bgp listen range 0.0.0.0/0 peer-group CISCO //针对一个子网范围来应用对等体组
验证
R3(config-router)#do show ip bgp peer-group
主动发起连接:
R3(config)#router bgp 100
R3(config-router)#neighbor CISCO transport connection-mode active //针对对等体模板设置tcp主动发起

AS欺骗
R1(config)#router bgp 100
R1(config-router)#neighbor 55.1.1.1 local-as 65535 //针对邻居宣告本地(虚假)AS为65535

移除私有AS
R5(config)#router bgp 200
R5(config-router)#neighbor 10.1.56.10 remove-private-as all //移除所有私有AS
replace-as 参数//移除所有私有AS,同时用自身的AS(200)替换原有的私有AS,保持AS-path长度

BGP 报文有五种类型:
在这里插入图片描述

• Open:负责和对等体建立邻居关系。
• KeepAlive:该消息在对等体之间周期性地发送,用以维护连接。
• Update:该消息被用来在BGP对等体之间传递路由信息。
• Notification:当BGP Speaker检测到错误的时候,就发送该消息给对等体。
• Route-refresh:用来通知对等体自己支持路由刷新能力。

BGP 协议中消息的应用
• 通过TCP 建立BGP 连接时,发送OPEN 消息
• 连接建立后,如果有路由需要发送或路由变化时,发送UPDATE 消息通告对端
• 稳定后要定时发送KEEPALIVE 消息以保持BGP 连接的有效性
• 当本地BGP 在运行中发现错误时,要发送NOTIFICATION 消息通告BGP 对等体
• ROUTE-REFRESH当路由策略发生变化时,触发请求邻居重新通告路由

BGP状态机
在这里插入图片描述

• 当建立BGP会话,路由器与邻居之间的关系经过如下状态:

  1. Idle(空闲): 路由器查看路由表,邻居是否可达.
  2. Connect(连接): 路由器发现路由并完成TCP连接的三次握手.
  3. Open sent(打开发送): 发送BGP会话之间的连接参数.
  4. Open confirm(打开确认): 路由器收到连接参数一致性的确认.
  5. Established(已建立): 邻居关系建立

出现IDLE的错误:没有目标的路由、IP报文中的TTL不足、协商不成功、管理DOWN
出现ACTIVE错误:没有目标的路由、指定了错误的邻居、没有回送报文的路由

BGP 数据库
• IP 路由表 (IP-RIB)
• 全局路由信息库,包括所有IP路由信息。
• BGP 路由表 (Loc-RIB)
sh ip ro bgp
• BGP路由信息库,包括本地BGP Speaker选择的路由信息。
sh ip bgp
• 邻居表
• 对等体邻居清单列表
sh ip bgp su

• Adj-RIB-In
• 对等体宣告给本地Speaker的未处理的路由信息库
• Adj-RIB-Out
• 本地Speaker宣告给指定对等体的路由信息库
BGP路由信息处理
在这里插入图片描述ORF 出方向路由过滤
R1
R1(config)#ip prefix ORF permit 5.5.5.5/32
R1(config)#router bgp 100
R1(config-router)#neighbor 10.1.15.5 capability orf prefix-list send 发送
R1(config-router)# neighbor 10.1.15.5 prefix-list ORF in
R5:
R5(config-if)#router bgp 200
R5(config-router)# neighbor 10.1.15.1 capability orf prefix-list receive 接受

BGP 的下一跳行为
BGP 是AS by AS 的协议,不同于IGP 中的下一跳是一个路由器地址,BGP中的下一跳为如何去往其他AS 的一个设备;而且在不同AS之间将保持不变
1)下一跳自我(一般在ASBR实施)
2)ASBR上把直连引入到IGP(不是在IGP中network)

BGP 路由通告原则( 一)
• 连接建立时,BGP Speaker 只把本身用的最优路由通告给对等体
• 多条路径时,BGP Speaker 只选最优的路由放入路由表

BGP 路由通告原则( 二)
• BGP Speaker 从EBGP 获得的路由会向它所有BGP 对等体通告(包括EBGP 和IBGP)

BGP 路由通告原则( 三)
• BGP Speaker 从IBGP 获得的路由不会通告给它的IBGP 邻居。

BGP 路由通告原则( 四)
• BGP Speaker 从IBGP 获得的路由是否通告给它的EBGP 对等体要依IGP 和BGP同步的情况来决定

IBGP水平分割原则
BGP防环是通过AS_PATH实现的,而AS_PATH仅仅在路由离开AS才回被更改,因此在AS内,IBGP就没有EBGP的防环能力,为了防止环路的出现,BGP路由器不会将从IBGP邻居学习过来的路由再通告给自己其他IBGP邻居。— BGP的水平分割原则。

BGP同步
在IBGP路由加入路由表并发布给EBGP对等体之前,会先检查IGP路由表。只有在IGP也知道这条IBGP路由时,它才会被加入到路由表,并发布给EBGP对等体
R1(config)#router bgp 100
R1(config-router)#synchronization //开启iBGP和IGP的同步
R1(config-router)#bgp redistribute-internal //允许把iBGP路由引入到igp

多点接入的下一跳
为了优化转发数据,直接找到最优转发数据的下一跳ASBR没有针对IBGP邻居做下一跳自我的情况下,iBGP设备直接把报文转发到了没有BGP邻居的设备(优化转发)
1.2 下一跳不变(域间MPLS),为了数据优化转发
1.3 RR(非ASBR)的情况下针对iBGP邻居使用route-map/policy修改下一跳为RR(set next-hop x.x.x.x/apply ip-address next-hop ),而非ASBR

BGP产生路与的方式
1, network 命令:
BGP的network命令为通告路由
把IGP(比如OSPF)发现的路由信息通过network命令注入到BGP路由表中需要严格匹配掩码
2, import 命令
通过import-route命令把IGP路由或静态路由注入到BGP路由表中
3, 汇聚
aggregate汇总产生的路由,产生的路由可能修改起源属性等内容

BGP路由聚合种类
自动聚合
• 对BGP 引入的子网路由进行自然掩码聚合。配置自动聚合后,生成聚合后的自然网段路由,而原引入的子网路由被抑制,不会被优选和发布给BGP邻居。
R1(config-router) bgp 100
R1(config-router)redistribute connected 只对引入的路由生效
R1(config-router)#auto-summary

手动聚合
• 对BGP本地路由进行聚合。通常情况下,手动聚合的优先级高于自动聚合的优先级
任意的明细路由的存在是汇总路由存在的前提;如果所有的明细路由全部消失,汇总路由也会消息

先聚合再生成BGP路由的方式
R1(config)#ip route 1.1.1.0 255.255.255.252 null 0 //写包含汇总路由的静态路由指向空接口NULL0
R1(config)#router bgp 100
R1(config-router)#network 1.1.1.0 mask 255.255.255.252

过滤策略
• 关键字Suppress-map 能产生聚合路由,但抑制指定路由的通告。可以用route-map 有选择地抑制一些具体路由,其它具体路由仍被通告。

原子聚合和聚合者
• 原子聚合是 公认自决属性 ,用来通知下游的邻居丢失了特定路由的路径信息。当更精确的路由被汇聚为不够精确的路由的时候会引起信息丢失,原子聚合属性只是,用来通知下游的邻居丢失了特定路由的路径信息。当更精确的路由被汇聚为不够精确的路由的时候会引起信息丢失,原子聚合属性只是UPDATE数据包中设置的一个标志位,它提醒下游路由器在聚合的过程中丢失了一些路径信息。当原子聚合属性被设置后,下游路由器不能删除这个属性或是发送到目的网段的更精确路由。
• 聚合者属性是一个 可选过渡属性 ,— 般针对某个NLRI与原子聚合属性同时使用。聚合者属性包含了会聚路由的与原子聚合属性同时使用。聚合者属性包含了会聚路由的SPEAKER的相关信息,属性中包含了创建聚合路由并且标记原子聚合属性的路由器的的相关信息,属性中包含了创建聚合路由并且标记原子聚合属性的路由器的BGP ID和自治系统号码。这些信息指明了非精确会聚合路由的来源,可以用来找到更精确路由的源头

BGP 路由聚合需要考虑的问题
• 明细路由的发布 summary-only、Suppress-map
• BGP路由属性的继承 attribute-map
AS-Path
Origin
Community
聚合路由的问题
• 聚合路由不继承原有BGP 路由属性 as-set

R5(config)#route-map ORG PErmit 10
R5(config-route-map)#set origin incomplete 将匹配的路由起源修改为不完整的
R5(config)#router bgp 200
R5(config-router)#aggregate-address 1.1.1.0 255.255.255.252 summary-only attribute-map ORG as-set 在R5上聚合R1产生的路由并还原AS-PAS长度并设置起源属性为不完整的

BGP防止环路
• EBGP
通过AS-Path属性,丢弃从EBGP对等体接收到的在AS-Path属性里包含自身AS号的任何更新信息
• IBGP
BGP路由器不会将任何从IBGP对等体接收到的更新信息传给其它IBGP对等体

射路由反射 (RFC 2796)
• 降低对指定路由器IBGP路由通告机制的限制,允许将从IBGP对等体接收到的更新信息传给某些IBGP对等体
RR的更新规则
从非客户端收到的路由更新给客户端
从客户端收到收到的路由更新给所有邻居(客户端、非客户端、EBGP)
除了非客户端不传非客户端,其他都进行传递!

RR环境下的防环
簇(cluster):RR和它们的客户端就组成簇
新的防环规则:
1) 簇ID(可选配置)
• 通过4 字节的Cluster_ID 来标识Cluster ,通常会使用Loopback 地址作为Cluster_ID
• 一个Cluster 里可以包括一个或多个RR ;一个Client 可以同时属于多个Cluster
路由反射环路防止机制-Cluster_List
• Cluster_List 属性用于防止AS 内部的环路
• Cluster_List 是可选非过渡属性,属性类型编码为10
• 当RR 在它的客户机之间或客户机与非客户机之间反射路由时,RR 会把本地Cluster_ID添加到Cluster_List 的前面。如果Cluster_List 为空,RR 就创建一个
• 当RR 接收到一条更新路由时,RR 会检查Cluster_List 。如果Cluster_List中已经有本地Cluster_ID ,丢弃该路由;如果没有本地Cluster_ID ,将其加入Cluster_List,然后反射该更新路由

2) 起源ID
• Originator ID 属性用于防止在反射器和客户机/ 非客户机之间产生环路
• Originator_ID 属性长4 字节,可选非过渡属性,属性类型为9 ,是由路由反射器((RR )产生的,携带了本地AS 内部路由发起者的Router ID
• 当一条路由第一次被RR 反射的时候,RR 将Originator_ID属性加入到这条路由,标识这条路由的始发路由器。如果一条路由中已经存在了Originator_ID属性,则RR 将不会创建新的Originator_ID
• 当其它BGP Speaker 接收到这条路由的时候,将比较收到的Originator_ID和本地的Router ID ,如果两个ID 相同,BGP Speaker会忽略掉这条路由,不做处理

R1(config)#router bgp 100
R1(config-router)#neighbor 33.1.1.1 route-reflector-client 针对33.1.1.1设置对方为我的客户端
验证
R1#sh ip bgp neighbors 22.1.1.1 advertised-routes

R4(config)#router bgp 100
R4(config-router)#bgp cluster-id 1.1.1.1 设置簇ID

联盟 (RFC3065)
• 将大的AS分成若干小的AS,而小AS之间建立EBGP对等体关系
实际并未打破EBGP和IBGP的防环规则
R5(config)#router bgp 2005
R5(config-router)#bgp confederation identifier 200 //对外宣称AS号码为200
R5(config-router)#bgp confederation peers 2067 指定对内联邦邻居2067
注意:两个小AS之间也要解决多跳问题,大AS的边界路由器必须向内做next-hop-self。

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

BGP的团体属性
必须针对邻居发送团体属性(neighbor send-comm)
应用的位置:1)针对邻居收、发 2)产生路由(network、聚合、引入等)来应用
众所周知的团体属性
internet 表示可以向任何对等体发送匹配的路由。缺省情况下,所有的路由都属于Internet团体。
no-advertise 表示不向任何对等体发送匹配的路由。即收到具有此属性的路由后,不能发布给任何其他的BGP对等体。
no-export 表示不向AS外发送匹配的路由,但发布给其它子自治系统。即收到具有此属性的路由后,不能发布到本地AS之外。
local-AS 表示不向AS外发送匹配的路由,也不发布给其它子自治系统。即收到具有此属性的路由后,不能发布给任何其他的子自治系
统。
additive 表示追加路由的团体属性
R7(config)#route-map Comm permit 10
R7(config-route-map)# set community no-advertise 设置团体属性为不公告
R7(config)#router bgp 200
R7(config-router)#network 7.7.7.7 ma 255.255.255.255 route-map Comm 针对邻居调用route-map列表
R7(config-router)#neighbor 66.1.1.1 send-community

BGP Community :自定义团体属性值
• 通过干预携带团体属性的路由,影响数据报文转发,也用于路由清洗

R1(config)#ip prefix-list 100 permit 3.3.3.3/32
R1(config)#route-map COM permit 10
R1(config-route-map)#match ip address prefix-list 100 匹配条目
R1(config-route-map)#set community 100:1 设置团体属性
R1(config)#router bgp 100
R1(config-router)#neighbor 55.1.1.1 route-map COM out 针对邻居出方向调用
R1(config-router)#neighbor 55.1.1.1 send-community 针对邻居传递
团体属性
R5(config)#router bgp 200
R5(config-router)#neighbor 77.1.1.1 send-community 针对邻居传递
团体属性
R7(config)#ip community-list 10 permit 100:1
R7(config)#route-map Prefer-path permit 10
R7(config-route-map)# match community 10
R7(config-route-map)# set weight 55
R7(config-route-map)#route-map Prefer-path permit 20
R7(config-route-map)#router bgp 2067
R7(config-router)#neighbor 66.1.1.1 route-map Prefer-path in

ip bgp new-format 可显示出私有的属性,新格式
验证
R5(config)#do sh ip bgp 1.1.1.1

BGP的属性
公认传递(well-known mandatory ):必须支持,而且必须包含,包括as-path,next-hop,origin
公认非传递(well-known discretionary):必须支持,但是可以不包含,包括local-preference
可选传递(optional transitive ):可以不支持,但是必须往下传,包括community
可选非传递(optional nontransitive ):可以不支持,也可以不往下传,包括med

BGP选择路由的策略
下一跳的可达性是BGP路径可以被优选的前提条件
BGP选路原则

  1. 优选最高的weight ,cisco专有,本地有效,默认32768,邻居过来的为0
    R7(config)#route-map WH permit 10
    R7(config-route-map)#set weight 66 设置权重值 越大越优先
    R7(config-route-map)#router bgp 200
    R7(config-router)#neighbor 66.1.1.1 route-map WH in 针对邻居传递过来的路由入方向调用,权重值仅本地有效

  2. 优选最高的local-pref,默认是100,越大越优先,控制离开本AS的流量,只能在本AS内传递
    R6(config)#route-map LP permit 10
    R6(config-route-map)#set local-preference 101 设置本地优先级,越大越优先
    R6(config-route-map)#router bgp 200
    R6(config-router)#neighbor 22.1.1.1 route-map LP in 在ASBR的入方向调用列表,也可用于本AS内的出方向应用

  3. 本地起源,优选选择自己产生的路由

  4. 优选最短的AS_PATH ,可以使用bgp bestpath as-path ignore这个命令来跳过这一步
    R5(config)#route-map AS permit 10
    R5(config-route-map)#set as-path prepend 100 100
    R5(config-route-map)#router bgp 200
    R5(config-router)#neighbor 11.1.1.1 route-map AS in

  5. 最小的 origin code ,标记着路由是如何产生的, IGP(i) < EGP(e) < incomplete(?)
    R5(config)#route-map ORG Permit 10
    R5(config-route-map)#set origin incomplete
    R5(config-route-map)#router bgp 200
    R5(config-router)#neighbor 11.1.1.1 route-map ORG in

  6. 优选最小的 MED ,默认是0,越小越优先,控制进入本AS的流量,若将从IGP获得路由引入到BGP将继承IGP的metric,若一条相同的BGP路由条目通过不同的BGP邻居学到时,只有第一个AS号码相同时才会进行MED比较(bgp always-compare-med通过不同AS学到时,与会比较MED)
    R1(config)#route-map MED1 permit 10
    R1(config-route-map)#set metric 1000
    R1(config-route-map)#router bgp 100
    R1(config-router)#neighbor 55.1.1.1 route-map MED1 out

  7. EBGP 优于 IBGP 一条路由既能通过IBGP学到,也能通过EBGP学习到,优选EBGP学习的路由(在选择过程中,联盟内部和外部没区别)

  8. BGP优先选择到BGP下一跳的IGP路径最低的路径,同一条路由从不同的下一跳学习到,哪个下一跳的IGP的度量值小优选哪个下一跳

  9. 如果配置了maximum-paths n (n在2-6),负载均衡,如果启用了等价负载均衡,所有可用的下一跳都可以写入到路由表中(注只是路由表的负载均衡,不代表流量的负载均衡)
    R7(config-router)#router bgp 200
    R7(config-router)#maximum-paths ibgp 2

  10. 优选最老的 EBGP 路径,如果一条路由可以从多个EBGP邻居学习到,哪条路由在路由表的时间更久,则选最久的的路由(IBGP不参与比较),若出现以下情况则跳过
    ① 启用了bgp bestpath compare-routerid
    ②多条路径具有相同的router-id,因为都是从同一路由器收到
    ③当前没有最佳路径,通告最佳路径的路由器失效

11.优选最低的 BGP router ID的路由(BGP中的router id可以相同)

12.如果多条路径的Originator_ID或router id相同,RR每反射一条路由,就会在cluster_list后面加上RID,选cluster_list长度最短的 即优选经过RR少的下一跳

13.优选最低的邻居地址的路径,注意这个地址是建立邻居用的IP地址,不是接口的IP地址。

BGP的认证
2)R1和R5建立eBGP邻居,开启认证,密码为12?45
R5(config-if)#router bgp 200
R5(config-router)#neighbor 10.1.15.1 password 12?45

向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不行

BackDoor 后门链路
通过IGP学到某条路由,又从EBGP学到相同的路由。
由于EBGP AD=20,小于IGP的AD,所以会优先EBGP的路由,但实际路径可能从IGP走更优。

解决:
R3(config-router)#network 172.16.1.0 mask 255.255.255.0 backdoor
通过这样的宣告将EBGP学到的路由的AD值提高,从20提高到200

Dampening 路由惩罚

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

·Dampening的原理:
当在路由器上启用Dampening后,如果有一条路由up->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 //本命令主动清除惩罚值

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传来的路由。

常用的通配符:
^ : 代表路径列表(字符串)的开头
$ : 代表路径列表(字符串)的结尾
_ : 代表一个符号(只能是空格/逗号/左括号/右括号)
. : 代表任何一个字符

  • : 星号前的字符可重复0次或多次

ip as-path access-list 1 per ^$ 标识AS号的ACL(使用正则表达式)
匹配as-path为空的路由,即本AS中的路由
router bgp 100
nei 2.2.2.2 filter-list 1 out 调用as-path的ACL(只宣告或只接收)

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来过滤.

BGP IPV6 R1(config-if)#router bgp 100 R1(config-router)# neighbor 2015::5 remote-as 200 R1(config-router)#address-family ipv6 unicast R1(config-router-af)#neighbor 2015::5 activate R1(config-router-af)#network 2111::1/128 验证 R5#show bgp ipv6 unicast