BGP学习总结
------李永峰
命令集合与注解
(config-if)#router bgp 64512
(开启bgp进程,64512为自己所在AS)
(config-router)#neighbor 12.1.1.1 remote-as 100
(指定和谁建立邻居,12.1.1.1为对方地址)
(config-router)#neighbor 4.4.4.4 remote-as 64512
(指定和谁建立邻居,4.4.4.4为对方地址,这里是对方环回口地址)(config-router)#neighbor 4.4.4.4 update-source loopback 0 (用自己环回地址和对方环回地址建邻居时,用该命令指定更新源)(config-router)#neighbor 4.4.4.4 next-hop-self
(收到路由后,用自己地址作为下一跳再传给邻居R4)
(config-router)#neighbor 2.2.2.2 route-reflector-client
(指定R2为反射器客户端,路由可以反射给邻居R2)
(config-router)#neighbor 3.3.3.3 route-reflector-client
(指定R3为反射器客户端,路由可以反射给邻居R3)
(config-router)#bgp confederation identifier 200
(配置联盟大AS号码,这样路由器对外宣称自己AS为200 ) (config-router)#bgp confederation peers 64513
(配置联盟对等体AS号码)
(config-router)#bgp dampening 15 750 2000 60
(开启路由惩罚)
BGP基本配置详解
目的:两两路由器之间建立邻居关系
R1和R2建立EBGP邻居关系
R1(config)#router bgp 100(100为自己所在的AS号码)
R1(config-router)#neighbor 12.1.1.2 remote-as 200(邻居的地址,邻居的AS号码)
R2(config)#router bgp 200(100为自己所在的AS号码)
R2(config-router)#neighbor 12.1.1.1 remote-as 100(邻居的地址,邻居的AS号码)
同理进行R3 与R4邻居建立。
略
R2与R3使用环回口建立IBGP邻居关系,
R2(config-if)#router bgp 200
R2(config-router)#neighbor 3.3.3.3 remote-as 200
R2(config-router)#neighbor 3.3.3.3 update-source loopback 0
R3 (config-if)#router bgp 200
R3(config-router)#neighbor 2.2.2.2 remote-as 200
R3(config-router)#neighbor 2.2.2.2 update-source loopback 0 Update-source 后面跟用来跟对方建立邻居的环回口名称
建立邻居注意事项:
1.推荐EBGP邻居使用直连接口IP建立,IBGP邻居使用环回接口
2.BGP邻居和物理线路无关,无需直接相连,即R1也可以和R5
建立邻居关系,只需要保证该邻居地址可达(简单说就是ping的通)
3.如果EBGP也使用环回口建立,多加一条
R1(config-router)#neighbor 2.2.2.2 remote-as 200
R1(config-router)#neighbor 2.2.2.2 date-source loopback 0 R1(config-router)#neighbor 2.2.2.2 ebgp-multihop 2
ebgp-multihop作用其实是修改ip包里的TTL值,因为默认下EBGP 建立邻居数据包TTL=1
修改以后
接下来是通告路由条目
R1(config-router)#network 192.168.1.0 mask 255.255.255.0
注意:必须是路由表中有的,或者BGP表中最优的(通过show ip bgp 看到有 *> 符号的)
接着下一跳调整
BGP下一跳原则:
1.EBGP之间传递路由时,以自己作为next-hop然后发给对方
2.IBGP之间传递时,不修改next-hop属性
3.注意,联盟内的EBGP之间传递,是不修改next-hop的
所以在R3上面,学到了路由确因为下一跳不可达,所以没有最优
我们可以在R2上加一条命令
这样R2虽然与R3是IBGP关系,不过R2会修改下一跳为自己,再将路由传递给R3.类似的,在R3上也可以考虑使用该命令,否则R3从R4上学到的再传给R2时候又会出现相同现象。
基本配置结束
BGP路由反射器详解
BGP水平分割防环机制(针对IBGP邻居)
从一个IBGP邻居传过来的路由不会转交给另外一个IBGP邻居
所以为了让R5从R2学到R1上的路由以后能给转交给R3,有3个常见办法
1.R2,R3,R5之间互相建立邻居,实现全互联关系
2.利用路由反射器
3.规划建立联盟
RR据有打破水平分割的功能,可以将其IBGP客户端传来的路由给其他所有邻居。
非IBGP客户端来的路由则可以传给客户端。
RR指的是一台路由器,只在需要担当该功能的路由器上配置,其他路由器不知情。
R5(config-router)#neighbor 2.2.2.2 route-reflector-client
(指定R2为客户端,路由可以反射给邻居R2)
R5(config-router)#neighbor 3.3.3.3 route-reflector-client
(指定R3为客户端,路由可以反射给邻居R3)
RR冗余(R5,R6指向相同的客户端,使用下面命令设定相同ID) R5(config-router)#bgp cluster-id 100.1.1.1(任意ID)
R6(config-router)#bgp cluster-id 100.1.1.1(任意ID)
BGP联盟详解
联盟将IBGP关系变成联盟EBGP关系(如R4与R5没有做联盟前为IBGP关系,所以R4从R2收到路由不会给R5),所以也就避开了水平分割。
配置如下
R2(config-if)#router bgp 64512
R2(config-router)#neighbor 12.1.1.1 remote-as 100
R2(config-router)#neighbor 4.4.4.4 remote-as 64512
R2(config-router)#neighbor 4.4.4.4 update-source loopback 0 R2(config-router)#neighbor 4.4.4.4 next-hop-self
R2(config-router)#bgp confederation identifier 200
(配置联盟大AS号码,这样路由器对外宣称自己AS为200 )
R2(config-router)#bgp confederation peers 64513
(配置联盟对等体AS号码)
这两条命令所有联盟的路由器都输入
没有配置bgp confederation identifier 200前 R2对外宣称64512 配置了bgp confederation identifier 200后R2对外宣称200
BGP路由惩罚详解
BGP里对于频繁翻动的路由(一会学到了一会又消失了,比如接口频繁up/down)会进行抑制
每当某条路由浮动一次(比如原来好的,接着突然邻居又告诉你不好了),它的惩罚值就会增加(默认加1000),当超过抑制阀值时就被抑制(默认为2000),意思就算现在可以用也不放到路由表,从而防止bgp表的抖动。
如果没有变化了,其惩罚值随时间慢慢降低,直到降低到抑制阀值以下,又可以加入路由表了
half-time是指半衰期,单位min,每经过half-time的时间,抑制值
就会减半,默认15min。
reuse当一条被抑制路由的惩罚值低于该值后,该路由重新被标记为可用。
默认750
suppress 该值就是抑制阀值,超过该值路由被抑制。
默认2000 max-suppress最大抑制时间,被抑制路由的抑制时间超过该值后,不管惩罚值为多少,都会重新标记为可用,默认60min。
注明:bgp dampening 只对EBGP学习过来的路由起作用.对IBGP不起作用
配置命令
R2(config-router)#bgp dampening 15 750 2000 60
或者
R2(config-router)#bgp dampening
(什么参数都不加即使用默认参数,和第一条命令效果一样)
可以通过show ip bgp具体路由来查看该路由惩罚值(如下图,Dampinfo:penalty 1000)
也可以通过show ip bgp dampening flap-statistics查看那些路由翻动被惩罚了
地势坤,君子以厚德载物11。