14.1 谁需要BGP
BGP是一种路径矢量路由协议,用于传输自治系统间的路由信息,BGP在启动的时候传播整张路由表,以后只传播网络变化的部分触发更新,它采用TCP连接传送信息,端口号为179,在Internet上,BGP需要通告的路由数目极大,由于TCP提供了可靠的传送机制,同时TCP使用滑动窗口机制,使得BGP可以不断地发送分组,而无需像OSPF或EIGRP那样停止发送并等待确认。
14.2 BGP简介
BGP是路径矢量协议,它使用一个AS号列表,数据包必须通过这些AS才能到达目的,同时对产生的AS-path做一定的策略。AS-Path对于路由环路非常容易检测到,如果路由器接受到一条含有本地AS号的AS-path,说明出现环路。 BGP没有给出每个AS域内的拓扑结构,因此BGP只能看到AS树,而IGP只能看到AS域内拓扑结构, 下图是一个典型的BGP路由表
route-server>show ip bgp
当某个特殊目的网络有并列的,等开销的路径时,Cisco缺省执行EBGP只选择一条路径,但可以使用maximum-paths改变并行路径缺省的最大数目,但仅对EBGP有效。
14.3 BGP消息类型
Open Message
TCP对话建立以后,两个邻居都要发送一个Open消息,每个邻居都用该消息来标示自己,并规定自己的BGP运行参数
BGP version
它明确了发起者正在运行的BGP版本号(2,3,4),可以通过neighbor version修改,缺省版本号为4。如果版本号不相同,路由器将自动降低版本号重发Open消息,直到版本一致
AS number
发起会话路由器的AS号,用于确认EBGP或者IBGP会话
Hold time
路由器必须收到一个keepalive或者更新消息之前允许经过的最大秒数。Holdtime必须是0(在这种情况下,必须是没有发送Keepalive)或者至少3s。Cisco默认的holdtime为180s,如果两个邻居间holdtime不一致,选较短的那个做为两者可接受的时间
BGP router-ID
选取方式和OSPF相同,使用数值最大的loopback口地址,没有loopback则使用物理接 口上数值最大的地址
Optional parameters
用于一些可选功能的支持.例如鉴别,多协议支持及路由刷新等
Keepalive Message
如果路由器接受了他在邻居的Open消息中的参数,它就会发送一个应答的Keepalive消息。 默认情况Keepalive间隔 60s,或者是达成一致的保持时间的1/3
Update Message
Notification Message
当检测到差错的时候就会发送Notification消息,通常会导致BGP连接终止,例如使用Notification消息进行BGP版本的协商
14.4 BGP有限状态机
Idle State
a) BGP通常以Idle State开始(此时拒绝接收所有入连接)。当一个开始事件出现,BGP过程初始化所有BGP资源,打开重试连接(ConnectRetry)计时器,初始化到邻居的TCP连接,接听来自邻居的TCP初始化消息并将它的状态转到Connect状态.
b) 开始事件是由一个操作者配置一个BGP过程,或者重置一个已经存在的过程或者路由器软件重置BGP过程引起
c) 一个差错的出现会将BGP过程的状态转为Idle.路由器可能会试图发起另外一个开始事件.为了防止在持续差错条件下导致的摆动,在第一次转回到空闲状态后,路由器会自动开启重试连接计时器,当计时器终止后,路由器就会放弃重新开始BGP.重试计时器第一次的时间为60s,下一次为前一次的2倍120s,成指数形式增加
Connect State
此状态下BGP过程会等到TCP连接完成以后再决定后续的动作.
1. 如果TCP连接建立成功,BGP连接将ConnectRetry清零,完成初始化并给邻居发送一个Open消息,转移到Open状态
2. 如果TCP连接建立失败,BGP继续监听由邻居发起的连接,重置ConnectRetry计时器并转移到Active状态
3. 如果在连接状态下,ConnectRetry超时,计时器将重新开始,并再一次试图与邻居建立TCP连接,BGP保持Connect状态,此时如果有任何其他输入事件,转入Idle状态
Active State
在此状态,BGP过程试图与邻居建立一个TCP连接
1. 如果连接成功,BGP过程将ConnectRetry计时器清零,完成初始化,给邻居发送一个Open消息并转移到发送Open消息状态,Hold计时器设置为4mins
2. 如果在激活状态,ConnectRelay计时器超时,将回到ConnectState并且重置ConnectRelay计时器.也发起一个到对等的TCP连接并继续监听来自对等体的连接.
3. 如果邻居试图与一个未知IP建立TCP会话,同时ConnectRelay计时器重置,连接被拒绝并保持在Active状态
4. 任何一个事件(除开始事件)都回导致状态转向idle
Open send State
在此状态下,已经发送了Open消息,BGP等待邻居发来的Open消息,
1. 当收到一个Open消息,如果发现差错,将给邻居发一个Notification消息并转入Idle状态
2. 如果收到的Open消息没有差错,将给邻居发送一个Keepalive消息并将Keepalive计时器清零,此时协商一个较短的holdtime,如果为0,则没有启动Hold和keepalive计时器,根据AS号选择IBGP或者EBGP,同时将状态转移到OpenConfirm状态
3. 如果收到一个TCP断开消息,本地断开BGP连接,重置ConnectRetry计时器,并转入Active状态
Open Confirm State
此状态下BGP会等待一个Keepalive消息或者Notification消息
1. 如果收到一个Keepalive消息,转移到Establish状态
2. 如果收到一个Notification消息,转入Idle状态,并断开TCP连接
3. 如果Hold计时器超时,检测到一个差错或出现stop事件,BGP将给邻居发送一个Notification并断开连接,转入Idle状态
Establish State
此状态下,BGP对等体间的连接已经完全建立,可以交换Update Keepalive和Notification消息,如果收到Notification自动转入Idle,并中断连接
14.5 路径属性
BGP路径属性分为4类
1. Well-known mandatory 公认必遵 – 所有的BGP路由器必须识别
(Update消息必须包含该属性)
2. Well-known discretionary 公认可遵 – 所有BGP路由器都能识别,但不是一定需要
(Update消息可以不包含该属性或者该属性任选)
3. Optional transitive 可选传递 – 不是所有的BGP路由器都能识别,但所有BGP
路由器都能传递它 (此属性即使BGP路由器不接受也可以传递)
4. Optional nontransitive 可选非传递– 不是所有的BGP路由器都能识别,不能
识别BGP路由器丢弃它 (此属性如果BGP路由器不接受则立即丢弃此消息,不再传递)
ORIGIN
属于公认必选属性,明确了路由更新的来源,用于判断路由可信度,当BGP有多条路由来源时,路由器会将ORIGIN做为路由决策的参考 来源有如下几类:
IGP---从AS内部学到,ORIGIN为0 EGP---NLRI从EGP学到,ORIGIN为1 Incomplete---NLRI通过其他手段获得,ORIGIN为3
一般来说具有较低ORIGIN值得前缀被优先选取, IGP>BGP>重分布 例如通过重分布进入BGP,ORIGIN属性为3,通过Network命令注入其ORIGIN为0
AS_PATH
描述一个路由传递过程中经过那一些AS(不算自己,从离自己最近的AS开始,以目的网段的AS结束),为了避免AS环路,如果从外部收到一条包含自己AS的路由,就说明有环路,此时BGP将丢弃该路由
通常一条AS_PATH含有多个同一AS号,用于加长AS_PATH,提供策略选路,如下图
Next_Hop
该属性描述了到公布目的地址的路径的下一跳路由器的IP地址
1. 如果正在进行路由通告的路由器和接收的路由器在不同的AS中,Next_Hop为正在宣告的路由器接口的ip
2. 如果正在宣告的路由器和接收的路由器在同一个AS内,并且更新消息中NLRI目的地也在同一个AS中,则next_hop为一宣告的路由的邻居的ip
3. 如果正在宣告的路由器和接收的路由器是内部对等体,并且更新消息的NLRI指向不同AS,则Next_hop为学习到路由的外部对等实体的ip
Local_Pref
仅用在本地AS,不会传到其他AS,具有较高Local_pref的路由将被优先考虑,默认值100 如下图,优先考虑ISP1的路由
Multi_Exit_Disc(MED)
Local_Pref仅影响离开AS的业务量,而MED用于影响流入AS的业务量,它允许一个AS将其首选入口通知给另一个AS,具有最低MED值的路由作为首选
Atomic_Aggregate and Aggregator
BGP支持向另一个BGP路由器传递重叠的路由,BGP有如下重叠处理选项
1. 同时公布精细和初略的路由
2. 只公布精细路由
3. 之公布路由中没有重叠的部分
4. 聚合两条路由并公布聚合后的路由
5. 两者都不公布
如右图即为在进行聚合时导致了路由信息丢失
Atomic_Aggregate属性即是用来警告下游路由器聚合时产生路径信息丢失,可设置附加属性Aggregate来通告汇聚点,Cisco采用BGP-RID来作为Aggregator地址,如下图
Weight
Cisco专有,对于离开AS的报文,从多条路径中选择哪一条。它是不传递的。缺省下从对等体学到的所有路由器的权重值是0,由本地路由器产生的所有路由的权重值是32768选路时优先选用权值最高的路径
Comunity
使可以向一组源路由使用相同的策略,即一个目的地作为一些目的地团体中的一个成员,这些目的地共享一个或多个共同特性。它有4个字节 – 前面两个字节的AS号,后面两个字节的管理上定义表示符,而Cisco正好反过来,用ip bgpcommuity new-format改过来
当对团体路由进行聚合时,聚合路由继承了所有路由的全部团体属性
NO_EXPORT的团体属性,携带该属性的路由允许在邻居AS内公布但不允许邻居AS把路由公布其他AS NONE属性删除现存的团体属性 NO_ADVERTISE属性指不在IBGP邻居间传递带有该属性的路由 DELETE属性用于只删除匹配特定团体列表的属性
ORIGINATOR_ID 由路由反射器(RR)使用,它是有路由发起者产生的一个32比特的值,该值是本地AS里路由发起者的RID,如果路由器发起者从该属性值中看到了自己的RID,就说明有环路,该路由忽略 Cluster_LIST 由路由反射器使用,它是路由经过反射器簇ID的一个序号。如果路由反射器在该属性值中发现自己的本地簇ID,就说明有环路,忽略掉。如果一个簇里不止一个RR,要在进程下用bgp cluster-id手工指定簇ID,因为默认RR将自己的RID当成cluster-id
AS_SET
由于聚合时AS_PATH中数据丢失,导致产生环路的潜在因素增加,因此加入AS_SET字段,通告汇聚时包含的AS号AS_PATH替代了ATOMIC_AGGREGATE的功能, 但也有其缺点:如聚合的网络出现故障,AS_SET的改变将通告到聚合点以外
14.6 BGP选路规则
BGP路由信息库(RIB)包括
13, 选择邻居ip地址最小的路由
14.7 BGP路由惩罚
路由抑制可以阻止公布不稳定的路由,它为每条路由分配一个动态的度量数字用来反映稳定程度,当一条路由出现摆动,就给他分配一个惩罚值,摆动得越多,惩罚值越大。当一段时间不摆动,惩罚值降低,在一个半衰期后,降到原来的一半。如果惩罚值超过抑制上限,该路由就被抑制,只有当一个半衰期后惩罚值降低到重新使用界限时,才重新使用。
缺省下, 惩罚值 – 每次摆动1000 抑制界限 – 2000 重新使用界限 – 750 半衰期 – 15分钟 最大抑制时间 – 60分钟,或者半衰期的4倍
14.8 iBGP和IGP的同步
在某些情况下将IGBP当IGP使用,但是每个IBGP路由器必须与其它每一个IBGP路由器建立对等,即必须保证AS内IBGP全互连,全互连可以防止AS内产生BGP环路,同时保证BGP路由上的所有路由器都知道如何转发数据包到目的地
14.8.1 IBGP和IGP同步规则
一条从IBGP邻居学习到的路由在进入IGP路由表或者公布给一个BGP对端之前,通过IGP必须知道该路由.
同步可以防止没有足够信息的IGP造成路由黑洞.但也会带来很多缺陷,为了使IBGP工作正常,可以采用2种方法:
1.将外部路由重分发到IGP中从而保证IGP和BGP同步,但对于IGP路由器一般无法承受巨大的internet路由条目,在几个大型的中断事故中,多数是BGP无意中被分发到了OSPF或者IS-IS中
2。IBGP为逻辑上全网状连接,且关闭同步功能,所有路由器通过BGP知道外部路由,且不用通知IGP就能将路由加入到路由表中,但如果一个AS中有多个IBGP路由器,一个路由器将于其他每个路由器建立对等,十分耗时,故常采用联盟或者路由反射器来控制IBGP逻辑上的全互连.
同步是一个较老的BGP特性,在新版的IOS中,同步默认被关闭 下图为关闭同步前后的区别,前者为同步打开,后者为同步关闭
Seattle#show ip bgp
BGP table version is 7, local router ID is 206.25.193.1
14.9 管理大型网络中的BGP
在一个较大规模的AS中试图生成全互连的IBGP对等关系是一个规模庞大的工作,同时对于BGP对等关系的管理也十分复杂。BGP设计了如下4种方式对对等关系进行管理
14.9.1 对等体组(Peer Group)
在大型互联网络中,一个路由器的策略会应用到多个对等关系,在Cisco路由器中可以使用一个名字和一系列的路由策略来定义一个对等组(Peer Groups),任何对等策略对整个group生效,对等组提高了路由器性能,只需访问一次策略数据库,生成一个Update消息,并将副本发给所有的对等体即可。
14.9.2 团体属性(Communities)
相对于PeerGroups是对一组路由器使用策略,而团体(Communities)是对一组路由是用策略,团体可设置成为一个公用的值或者管理员定义的特有团体,一条路由可以属于多个团体,路由聚合可以继承所有路由的全部团体属性
14.9.3 路由反射器(Route reflectors)
由反射器(Route reflectors) 在大型的AS中,全互连带来极大的工作量,通过路由反射器(RR)可以建立一种C/S结构,如一个含有N个路由器的AS内,全互连将使用对等会话数目为(N-2)N/2,如果选取一个RR,则对等会话数目将降为N-1。对一个C/S结构称其为一个RR-Cluster。RR公布路由的规则:
1,如果路由是从非客户的IBGP对等学习到的,只将它反射给客户 2,如果路由是从客户处学习到的,将它反射给除了发起该路由的客户外 所有的客户以及非客户 3,如果路由是从EBGP邻居学来的,将它反射给所有的客户和非客户 将一个路由器配置成路由反射器(RR),用neigbhor route-reflect-client把自己配成反射器,由该命令所定义的IBGP邻居路由器当成客户机,这些客户机只与RR建立对等关系。RR不能改动它从客户处收到的路由的属性。在一个AS内可以做RR冗余,因为客户并不知道自己是客户,所有一个RR可以是另一个路由反射器的客户。只需要RR支持路由反射,客户不需要支持
RR使用了2个BGP路径属性:
ORIGINATOR_ID
由路由反射器(RR)使用,它是有路由发起者产生的一个32比特的值,该值是本地AS里路由发起者的RID,如果路由器发起者从该属性值中看到了自己的RID,就说明有环路,该路由忽略
Cluster_LIST
由路由反射器使用,它是路由经过反射器簇ID的一个序号。如果路由反射器在该属性值中发现自己的本地簇ID,就说明有环路,忽略掉。如果一个簇里不止一个RR,要在进程下用bgp cluster-id手工指定簇ID,因为默认RR将自己的RID当成cluster-id
14.9.4 联盟属性(Confederations)
14.10 BGP消息格式
14.10.1 BGP Message Header
BGP消息信头包含了标记,长度和类型3个字段
14.11.2 BGP和IGP间的重分发
通过在BGP路由进程模式下 redistribute eigrp 300 可将IGP注入到BGP中,其度量值为以前路由协议的度量值,可以通过Default-metric 修改,重分发到BGP后有部分管理员不想公开的IGP路由,需使用路由过滤器过滤掉。
另一方面,AS内的非运行BGP的路由可能需要一定的外部路由信息,如左图中的AngelFire需要从Taos知道AS300 AS100的路由信息,则需要在Taos上做重分发
redistribute bgp 200 metric 10000 100 255 1 1500
不过一般禁止这样使用,如果Taos是一个internet上的BGP路由器,重分发后极大数目的路由将会进入IGP,导致IGP崩溃,此种重分发一般只用在具有有限前缀的企业网络,此时Taos可以加入一条静态路由
ip route 192.168.250.0 255.255.255.0 Serial0
此时192.168.1.212/30将不会通告给AngelFire,同时192.168.250.0的摆动仅会影响到Taos,不会影响到Angelfire
14.11.3 BGP默认路由
对于上图的AS200,仅有一个出口,则可以在出口上做默认路由
ip route 0.0.0.0 0.0.0.0 Serial0
也可以配置成BGP通告的默认路由,此时只需ip route 0.0.0.0 0.0.0.0 Null0
同时也可以使用neighbor 192.168.1.225 default-originate
此时类似于OSPF的default-information-originate always此时不管路由器实际上有没有缺省路由,
neighbor 192.168.1.225 distribute-list 1 out
!
access-list 1 permit 0.0.0.0
access-list 1 deny any
都将公布一条默认路由。如果只想发布默认路由,通过distribute-list过滤
14.11.4 IBGP without an IGP
如图,通过配置AS100的3台路由器的neighbor使其全互连此时必须关闭同步功能,如果同步功能打开,IBGP路由无法加入路由表
注:关闭工作状态的BGP进程的同步后,需要重新启动BGP进程
在Vail和Telluride上可以使用 neighbor next-hop-self此后,在公布学到的EBGP路由时将会以自己的地址做为下一跳,使用回环口做BGP进程接口
neighbor 1.1.1.1 update-source loopback 0
14.11.5 EBGP多跳
由于EBGP需要直接连接,且数据报文TTL值为1,update-source为loopback时,需要经过多跳,所以可以定义:
14.11.6 聚合路由
一种方法是建立一条静态的到Null0的路由,让BGP通告出去,
另一种方法是采用Aggregate-address 192.168.192.0 255.255.248.0
Summary-only:用于只公布聚会和的路由,不公布具体地址,并且在BGP路由表中用S表示
如上图, AS100->AS200需要通告精细路由和汇聚路由,200-〉300只通告汇聚地址。配置如下:
suppress-map:
利用suppress-map 也可以抑制选中的前缀 例如 在Stowe链路上公布192.168.192~194.0 在mammoth上公布196~197.0不公布195.0 199.0
attribute-map: 用于改变聚合路由属性
attribute-map: 用于改变聚合路由属性
aggregate-address 192.168.192.0 255.255.248.0 as-set
Advertise-map:
在公布带有as-set的聚合路由时,不希望该聚合路由继承所有被聚合路由的所有属性
14.12 管理BGP连接
14.13 路由策略
14.13.1 重置BGP连接 运行BGP的路由器,当如下配置出现变化后必须重置BGP连接
1. 补充或者改变与BGP有关的访问列表
2. 改变与BGP有关的权值
3. 改变与BGP有关的分配列表
4. 改变与BGP有关的计时器的相关规定
5. 改变BGP的管理距离
6. 改变与BGP有关的route-map
可以使用软重置连接,但软重置连接将会带来较大的内存消耗,需要留意内存使用情况 首先需要对邻居配置
neighbor 192.168.1.253 soft-reconfiguration inbound
Clear ip bgp 192.168.1.253 soft out|in
14.13.2 Distribute-list 过滤路由
14.13.3 正则表达式
14.13.4 AS-PATH过滤
Neighbor distribute-list可以对NLRI处理,as_path过滤则是对AS的处理。
14.13.5 Route-Map过滤
14.13.7 管理距离和后门路由
14.13.8 Local_Pref和MED属性
14.13.9 调整AS_path
14.13.10 路由标记
14.13.11 路由惩罚
bgp dampening half-life reuse suppress max-suppress 被抑制的BGP路由表里标记d 和h show ip bgp flap-statistics | dampened-paths可以查看被抑制的路由 可以使用 clear ip bgp flap-statistics|dampened-paths 清楚被抑制的路由条目 例如 clear ip bgp flap-statistics regexp _30_ 来清除所有As_path含有AS 30的被抑制的路由条目
14.14 大型 BGP
BGP Communities
团体可以对一组路由使用相同的策略
BGP Confederations BGP联盟可以使管理者将大型的AS分割成小型的AS,而这些小型AS对外部是隐藏的 联盟属性如下:
1. 在联盟内部保留联盟外部的路由的NEXT_HOP属性
2. 公布给联盟的路由的MED属性在整个联盟范围内予以保留
3. 路由的Local_pref属性在整个联盟范围内予以保留
4. 在联盟范围内,将成员AS号加入AS_PATH,但并不公布到联盟外,使用type 3,4 的AS_PATH
5. AS_PATH中的联盟AS号用于避免环路,当联盟内选择一个最短的AS_PATH可以考虑不使用联盟AS号
Route Reflectors
14.15 BGP命令解析
Aggregate-address address mask
用于手工汇聚路由,不加参数表示创建一条汇聚路由,但并不抑制精细路由
Aggregate-address address mask as-set
用于手工汇聚路由,AS-set用于在汇聚时加入汇聚地址和AS_SET字段,防止产生路由环路
neighbor {ip-address | peer-group-name} default-originate route-map
route-map-name
neighbor {ip-address | peer-grp} distribute-list {acl-number-or-name prefix-list-name} in|out
例如CCIE_lab考试一道题目:要求aggregate 不使用no-summary参数而抑制精细路由,其配置如下:
neighbor {ip-address | peer-group-name} ebgp-multihop maximum-hop-count
EBGP多跳,用于如下的网络拓扑结构,EBGP邻居间没有直接连接,需要EBGP多跳解决,默认EBGP多跳开启后,Default 255不打开,EBGP多跳为1。
neighbor {ip-address | peer-group-name} filter-list as-path-list-number in|out
neighbor {ip-address | peer-group-name} filter-list as-path-list-number
weight weight
neighbor {ip-address | peer-group-name} next-hop-self
当一个BGP路由器学到一条EBGP路由,他发送给IBGP路由器时Next-hop属性是默认不更改的
RouterB从A学到一条IBGP路由,当他通告给EBGP邻居C时,将不会修改下一跳,依旧保留A的下一跳属性
对于一个NBMA型的网络
neighbor {ip-address | peer-group-name} password password
在BGP对等链路上启用TCP MD5认证
neighbor ip-address peer-group peer-group-name
定义对等体组,简化配置
neighbor {ip-address | peer-group-name} prefix-list prefix-list-name in|out
neighbor {ip-address | peer-group-name} send-community
在配置BGP路由器团体属性时必须加入send-community参数
show ip bgp prefix
14.16 调整BGP性能
14.16.1 BGP收敛调整
对于边缘路由器,对等路由器以及路由反射器的初始化,将会产生大量的数据流。
1. 有关TCP的考虑
主要有2个参数影响TCP性能, 最大分段尺寸MSS 和 TCP窗口大小
a) MSS
一个Session的MSS会在初始化的时候确定,Cisco默认值按RFC971定为536,可以按照MTU 1500 将其修改为1460,减少报文ACk的数量
b) 窗口大小
TCP窗口大小用来控制TCP数据报发送速度的一种机制,后文队列优化将详细讲解如何调整窗口大小
c) 路径MTU发现
对于一个路由器可以通过PMTUD自动发现路径上的MTU,对于一个环状网络,若所有接口为POS口,则MTU为4470,如果其中加入一段fastEthernet链路,则MTU降为1500 将严重影响性能,不过GigabyteEthernet中有了Jumbo Frame的概念来消除MTU影响
2. 队列优化
1. 保持队列优化
接口上可以配置 hold-queue value in, 保持队列大小= 窗口大小/(2*MSS)*对等体个数
2. SPD
SPD是运行输入保持队列上的队列管理机制,标准的SPD配置建议如下::
Ip spd mode aggressive
Ip spd headroom 1000
Ip spd queue min-threshold 998
Ip spd queue max-threshold 999
3. BGP只读模式
Bgp update-delay RO_limit 来配置BGP停留在只读模式的时间,处在只读模式的BGP对等体只接收更新,不通告任何前缀,仅在收到Keepalive消息后,自动脱离只读模式
14.16.2 减轻网络故障影响 1.BGP快速外部切断 拆除BGP绘画的缺省行为需要保持计时器超时,缺省值180s, BGP可以启用快速切断某个 EBGP故障路由器的会话 Ip bgp fast-external-fallover [permit|deny]
2. IGP/BGP收敛时间增量
在IS-IS中设置过载位 Set-overload-bit on-startup timeout Set-overload-bit on-startup wait-for-bgp 在OSPF中设置max_Metric Max-metric router-lsa on-startup timeout Max-metric router-lsa on-startup wait-for-bgp
3. BGP不中断转发
14.16.2 减轻网络故障影响 1.BGP快速外部切断 拆除BGP绘画的缺省行为需要保持计时器超时,缺省值180s, BGP可以启用快速切断某个 EBGP故障路由器的会话 Ip bgp fast-external-fallover [permit|deny]
2. IGP/BGP收敛时间增量
在IS-IS中设置过载位 Set-overload-bit on-startup timeout Set-overload-bit on-startup wait-for-bgp 在OSPF中设置max_Metric Max-metric router-lsa on-startup timeout Max-metric router-lsa on-startup wait-for-bgp
3. BGP不中断转发
14.17 BGP in CCIE_lab
14.17.1 评估路由器的BGP能力
BGP的性能很大程度上决定于路由器的平台,处理器,内存,背板带宽,从对等体收到的路由条目,发送的路由条目,是否做RR等有关。
14.17.4 Local_As属性
如上,如果AS8的路由器Day将进行迁移,假设为Day 和Night合并为AS9,而不修改AS141~AS143的路由器(他们依旧认为Day属于AS8),这种迁移需要加入一个loca-as参数,即将Day的BGP进程改为9后,对指向的邻居做如下修改
但是8上的AS-Path将会为 8 9 ….. 在做As_path 过滤时需要添加这个local-as 可以在local-as后加入no-prepend参数修改这个属性
然后再配置BGP的时候 network 通告这个199.172.1.0/21的网段,这样的好处是,如果查找路由时,例如199.172.6.0网段down掉后,查找路由表精细路由发现丢失后,不必查遍整个路由表,直接查到这条null0的路由,丢弃报文,这样是一种避免路由黑洞的方法。
当然更常用的方法是使用BGP自带的聚合命令2.Aggregate-address命令汇总路由 Aggregate-address 199.172.1.0 255.255.248.0 这条命令可以挂接6种参数,具体分析如下:
1. Summary-only
默认的不加任何参数,将会同时通告精细路由和汇总路由,Summary-only参数可以抑制精细路由的通告,但是可能会导致路由黑洞
2. Suspress-map
抑制路由表,可以抑制一些路由的发送,例如,我谨希望汇聚后,发送5.0和6.0两条精细路由,可以做如下配置
3. AS-set
AS-set参数用于在聚合时保留精细路由的一些属性,完善AS_path以防止环路产生,在实际聚合时为了避免一些环路或者其他故障,此参数应该一直打开
4. Attribute-map
5. Advertise-map
如上2个参数十分特别,都可以和router-map参数一样控制,修改汇总路由的属性。不同点是,Attribute-map用于修改聚合路由的属性,而不关心具体的精细路由属性是什么,而对于Advertise-map 主要就是参考某条或者某几条精细路由属性而不去强行修改聚合路由的属性 聚合时,如果起源不同,则选择精细路由更高编号的起源属性,明细路由的团体属性全部被继承
14.17.6 条件路由通告
条件路由通告体噢铬镍钢允许对路由通告进行更多控制的用户定义路由通告方式。 Non-exist-map指定了在BGP RIB中需要跟踪的网段, 当non-exist-map中的路由存在的时候, advertise-map中指定的路由将不会被通告,如果non-exist-map中指定的路由被撤销,在重新出现之前,通告advertise-map中的路由条目。
Show ip bgp neighbors ip-addr | begin condition 监控条件路由通告
14.17.7 BGP路由过滤
Distribute-list和Route-map的优先级 在同时使用Distribute-list 和Route-map时,Distribute-list优先级高于Route-map 它将首先进 路由过滤,然后再将过滤后的路由转发给Route-map进一步处理 相比之下Distribute-list相对较为简单,而Route-map可以修改很多参数。例如MED Local_pref Community 属性等….
14.17.8 BGP起源属性修改 通过Route-map设置 set origin [egp as-no | igp | incomplete]
14.17.9 修改AS_Path属性更改路由 Neighbor ip-addr allowas-in [num-of-occrrences] 允许IOS在接收BGP更新的时候最多接收10次本地AS号码重复,但这样会关闭环路预防功能 例如一个AS有多个出口,我们可以人为的增加一些本地AS进入AS_Path来影响选路。
14.17.10 AS-path filter
通过一个AS-path filter 可以过滤来自某些AS的路由条目,AS过滤采用正则表达式的方法。正则表达式的使用方法前文已有叙述。下面介绍几种常用的过滤方法
14.17.11 后门路由
后门路由用于一些特殊的情况将IGP路由的优先级调高于EBGP,下面看一种比较特殊的情况
例如如上拓扑结构,BB2中的199.172.0.0网段,通过重分布进入OSPF路由。在R5和R3上将会学到来自R4的IGP路由,同时R5做为R4的IBGP邻居将会学到一条IBGP的路由,由于IBGP路由管理距离大,在R5上对于选路没有影响,但对于R3而言,它将学到一条来自R5的EBGP路由,同时收到R4的IGP路由,此时,R3将把199.172.0.0的下一跳定义为R5,此时就产生了环路了。解决此问题的方法就是在R5和R3上的neighbor后挂接backdoor参数
14.17.12 下一跳参数
默认的下一跳规则如下,自己产生的路由的下一跳为0.0.0.0,收到来自EBGP路由将下一跳改为EBGP对端的IP,对IBGP通告时不修改下一跳的值。但是可以通过next-hop-self修改此规则,将对IBGP也通告下一跳地址为自己。另可以采用next-hop-unchanged,防止收到EBGP路由后,修改下一跳的值,例如如上环路问题,也可通过在R5和R4上宣告Next-hop-unchanged来解决 对于下一跳属性,还可以使用route-map来更改
14.17.13 Local_Pref和Weight属性控制路由
Local_Pref属性只能在AS内传递,也就是说可以定义一个route-map,修改本地路由的Local_Pref, 同时也可以做对IBGP邻居的通告,或接收的路由进行Local_Pref修改,配置时,同样是先建立一个ACL,然后建立一个routemap来match ip address ,然后set local_preference来修改, Weight,只具有本地意义,在本地上对路由进行选择,同样也采用set weight来做
14.17.14 MED控制路由条目
在BGP选路规则中,比较完Weight, Local_pref, local_path, Origin AS_PATH后才会比较MED值 MED用于AS有多个出口的时候,向其它AS公告最佳的入口。 MED可以通过同样的方法使用Route-map Set Metric 来修改。 对于MED属性,有如下特殊情况
对于联盟内的MED是不会比较的,如果上拓扑需要比较可以使用
bgp bestpath med confed
默认情况下,没有MED,MED值将设置为0,但可以更改
bgp bestpath med missing-as-worst
这样,就不会将MED丢失的路由MED=0作为选择标准
MED的值是如下方法设计的:
1. IGP进入的,则为IGP的Metric
2. 直连进入的,则为0
3. 聚合路由,MED丢失
14.17.15 团体属性
团体属性是BGP属性非常强大的属性,它通过一系列的标记,将路由条目分组,进行过滤,控制等 常有用。常见的属性有
1. Internet 默认的团体,支持在任何AS内发布
2. No_Export 不能宣告到本地以外的AS,同时也不能宣告到联盟以外
3. No_Advertise 不能通告给任何对等体
4. Local_AS 不能宣告到本地AS以外
团体属性配置如下:首先建立一个ACL或前缀列表,然后route-map中match ip。Set Community就行了,ip bgp-community new-format 将使用AA:NN的新格式。此后set community可以有additve参数, 这个参数类似ip地址中的Se参数,就是在原有属性上附加其他的团体属性, 同时可以使用 set comm. -list community-lis-no delete来删除某些团体属性。最后在Neighbor上挂接route-map
注意:必须加入 neighbor ip-addr send-community 参数
团体过滤列表:
Ip community-list number [permit | deny] {AA:nn | internet | local-as | no-export | no-advertise }
Ip community-list number [permit | deny] regular-expression
带名字的团体过滤列表如下
Ip community-list standard list-name [permit | deny] {AA:nn | internet | local-as | no-export |no-advertise }
Ip community-list expended list-name [permit | deny] regular-expression
ip community-list 1 permit no-export
ip community-list 100 permit ^5
ip community-list standard my-community permit local_as
ip community-list expanded your-community permit 5$
在ACL里面Match community 或者 match extcommunity 就可以匹配相应的属性了
14.17.16 EBGP多跳的使用
如下网络拓扑,在连接ISP时有多条链路的情况下,可以使用LoopBack口作为update-source
然后设置EBGP跳数,同时让对端ISP的BGP邻居指向Loopback口。同时在只有单一归路的情况下设置Loopback做为Update-source也将会减少很多不稳定因素
14.17.17 BGP路由惩罚
Bgp dampening [route-map map-name] {half-time | reuse-limitt start-suspress suppress-duratin}
打开BGP dampening后,默认best path dampening会打开。
Show ip bgp dampening parameters可以看到详细的参数
Service_Provider# show ip bgp dampening parameters
dampening 5 750 2000 20
Half-life time : 5 mins Decay Time : 775 secs
Max suppress penalty: 12000 Max suppress time: 20 mins
Suppress penalty : 2000 Reuse penalty : 750
Show ip bgp dampening flap-statistics 可以看到具体被抑制的路由
Clear ip bgp dampening regexp _30_ 可以清楚带有AS 30 的所有被惩罚的路由
14.17.18 其他Feature
Neighbor soft-reconfiguration inbound 由于outbound不耗内存,所以默认打开的
打开inbound的soft-reconfiguration可以在更改配置后软更新,但将消耗一些内存
节省BGP内存的方法:
1. Route-filter来减少路由条目
2. Aggregate 减少路由条目
3. Maximum-prefixes limitation-num {warning-percent waring-only}
14.17.19 前缀列表
Ip prefix-list kaka seq n deny/permit 10.0.0.0/8 ge 9 le 15
Ge表示大于等于,故如果只需要/24的路由,可以表示成为 ge 24 le 24
14.17.20 过滤处理顺序
distribute-list/Prefix-listRoute-Map入站, 过滤列表
Route-map过滤列表 ORF接收到的前缀出站 distribute-list/Prefix-list
14.17.21 条件路由注入
Bgp inject-map routemap-name exist-map routemap-name [copy-attributes]
对于如上的拓扑结构,AS100遵循最佳出口原则,即172.16.1.0 走R2->R4 172.16.2.0走R3->R5
有如下配置方法:
1. MED,在AS200上设置MED,使AS100识别
2. AS-Path Prepend ,R4通告给R2的2.0路由,加长AS-path,同理R5