bgp

 <BGP(Border Gateway Protocol)>

 
·BGP属于EGP,是高级DV协议,也被称为路径矢量协议,基于TCP 179端口。
·现在使用版本BGP4。
  第一次做完整更新,以后就只增量更新
 
·Autonomous Systems:运行同一种选路策略,由统一管理者管理。 
 1-64511   (公有)
 64512-65535 (私有)
  电信AS号:4134  网通AS号:9929
  Bgp.potaroo.net  一个好的网站,可以了解到关于AS号的一些信息
  Telnet route-server.ip.att.net这一地址可以看到公网上的路由条目数
 
·IGP支持的路由条目有限
 运行IGP不利于管理,
 做路由聚合、选路。
 
·BGP路由器只能将其使用的路由通告给他的邻居。
BGP用Open报文建邻居,用KL报文做日常联系
 
·Neighbor table :
  List of BGP neighbors
·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
·Keepalive每隔60S发送一次。hold time=180S
Update ---information for one path only (could be to multiple networks)
       ---Includes path attributes and networks
Notification
      ---when error is detected
      ---BGP connection is closed after sent
 
·一个UPDATE 消息一次只能通告一条路由,但它可以携带多个属性。
 一个UPDATE 消息一次也可通告多条路由,但它的属性必须相同。
 一个UPDATE 消息可以同时撤消多条路由。
 
BGP建立一个BGP会话的过程:
 
·BGP路由黑洞的解决方法:
 1)物理线路的Full Mesh (成本高,不可取)
 2)BGP重分布进IGP(不可取)
 3)BGP's Full Mesh  IGP内所有路由器都运行BGP(不可取)
 4)BGP's Partial Mesh (路由反射器/联邦)
 
·BGP's Split Horizon Rule:
 IBGP:从IBGP邻居收到的路由不再传给其他的IBGP邻居。
 EBGP:不接收携带本AS号的路由更新。
 
EBPG之间用直连接口来建邻居
IBGP中用环回口建邻居
 
 
<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)
 
R2#show ip bgp summary (摘要的邻居邻居信息)
R2#show tcp brief 
R2#show ip bgp neighbors  (详细的邻居信息)
 
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、下一跳
 
<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学到的(网络号和掩码都必须完全一样)
 
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个条件:
 1)同步问题
 2)下一跳是否可达  
 
高级解决方案:
R3(config-router)#no synchronization (不检测同步,高版本IOS默认开启)
R2(config-router)#neighbor 3.3.3.3 next-hop-self (对邻居3.3.3.3说,将下一跳改为我)
 
“show ip bgp summary中的Neighbor” / “show ip bgp中的Next Hop ”
 都是指Update-Source。
 
<Peer-Group>
 
BGP为每个邻居都占用一个Buffer,使用Peer-Group可以使多个邻居共用一个Buffer。
针对多的邻居关系,减少配置量。
R1(config-router)#neighbor WOLF peer-group 
R1(config-router)#neighbor WOLF remote-as 64513
R1(config-router)#neighbor WOLF update-source loopback 0 
 
调用:neighbor 2.2.2.2 peer-group WOLF 
 
·Loopback口互ping。
 
<MA网络的下一跳问题>
 
R1(config-router)#network 2.2.2.0 mask 255.255.255.0
 
R3:
   Network          Next Hop            Metric LocPrf Weight Path
*> 2.2.2.0/24       123.1.1.2                1             0 64513 i
 
R3将BGP收到的2.2.2.0/24下一跳与R1路由表中2.2.2.0/24下一跳比较,
如果在同一网段,就发生“重定向”,直接指向R1路由表中2.2.2.0/24的下一跳。
 
<origin attribute>
IGP (i)  从IBGP邻居学到的路由会打上i
EGP (e)这个EGP指的是一种早期的协议,现已不用
Incomplete(?)
 
 
<Auto-Summary>
 
·当其他协议重分布进BGP时,默认会进行自动汇总。
 
·将IGP重分布BGP中,会携带IGP中的Metric和Next-hop。
 
·当从BGP邻居收到一条路由,发现下一跳是自己的直连接口地址,则拒收此路由。
 
在auto-summary情况下,将IGP重分布进BGP,不会携带原有的METRIC值
在no auto-summary情况下,会携带原有的METRIC值
 
R1(config-router)#no auto-summary (高版本IOS默认开启)
 
R4(config-router)#network 4.4.4.0 mask 255.255.255.0 
(在no auto-summary时,必须严格按照IP地址掩码通告)
 
在BGP中,network的特点是:
1、 必须精确宣告路由和掩码
2、 只起到宣告作用,不建邻居
3、 可宣告IGP学到的路由,并携带Metric和Next-hop
 
Show ip bgp neighbors __ip___  advertised-routers查看我给这个邻居发了哪些路由
 
<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 (不要宣告明细)
 
2)Aggregate:
要先宣告每一条明细,再用以下命令做聚合 
R4(config-router)#aggregate-address 192.168.0.0 255.255.252.0 (宣告明细)
                    明细&汇总都被发出
 
B    192.168.0.0/22 [200/0] via 0.0.0.0, 00:00:16, Null0
 
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路由)
 
如果在R1上做的话,明细路由携带AS号的一些属性将会消失,用下面这一命令可以还原
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传来)
 
BGP选路策略--
 
1、<Weight>CISCO的私有属性
 
·本地有效。只在这一台路由器上起作用,
·默认值=32768(本地)/ 0(收到的路由)
 
当一个路由器分别从两个不同的邻居处学到同一条路由,它可以根据WEIGHT值决定从哪个邻居走
 
修改Weight---
R1同时从R3和R2学到同一条BGP路由,在R1上改:
Neighbot 3.3.3.3 weight 1
 
R1(config)#route-map WE
R1(config-route-map)#
R1(config-route-map)#set weight 8
 
R1(config-router)#neighbor 2.2.2.2 weight 8
 
<Local_Preference>
 
本地优先级是公认自由决定的属性,它告诉AS中的路由器,哪条路径是离开AS的首选路径。
 
·告诉自己的IBGP邻居如何离开本AS。注意这一句话,和MED做比较有啥不同
·只能在本AS内传递。
·默认值=100 (show ip bgp 1.1.1.0/24)
 
设置方法:单独在AS内的每一台路由器上设置它的本地优先级
例如:如果R1上,网络3.3.3.0的优先级设置为100,R2上网络3.3.3.0的本地优先级设置为200,流量会从R2走。
R1(config)#route-map WE
R1(config-route-map)#set local-preference 101
 
R1(config-router)#bgp default local-preference 101 会影响所有路由
打上这一命令后----
·对"EBGP传过来的路由"\"自己network的路由"起效,要show明细才能看到。
·对"IBGP传过来的路由"不起效。
 
 
<AS-Path>shortest AS-path
最短AS路径,到目标网络经过的AS最少的路由胜出
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)  从IBGP邻居学到的路由会打上i
EGP (e)这个EGP指的是一种早期的协议,现已不用
Incomplete(?)
 
<MED>多出口鉴别属性
 
·告诉自己的EBGP邻居如何进入本AS。Local prefrerence决定如何出去,MED决定EBGP邻居如何进来
·只能传递一个AS。
·默认值=0
MED值越小越好
Sh 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
 
测试方法: 扩展ping / debug ip bgp updates
 
·默认不比较从不同AS传来路由的MED。
R2(config-router)#bgp always-compare-med 
 
 
<Reflector>
路由反射器
·打破IBGP的水平分割规则。
 从非客户端收到路由,会转发给客户端以及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)
R2#show ip bgp neighbor 12.1.1.1 adverised-routes
·2、联邦中的所有路由器都必须声明大AS号
 R1(config-router)#bgp confederation identifier 1
 
·3、连接小AS的边界路由器要互相指peers:
联邦中的小AS号(64512)不算作比较,只算作一个
 R1(config-router)#bgp confederation peers 64512
                    (对端小AS号)
 
·联邦外路由器和联邦的边界路由器建立邻居关系时,neighbor大AS号。
在sh ip bgp中,小AS号会用括号括住,并且不算做一个进行路径比较的AS号
 
<Community>
社团属性  
“可选”:BGP的所有邻居都有可能不识别社团属性。(是可选的,路由器默认不认识)
 
R2(config-router)#neighbor 1.1.1.1 send-community 
 
“传递”:社团属性只会传给指定的邻居,并只在此邻居上起效。
比如上例:就只传给1.1.1.1这一邻居,并只在它上面起效,不会再向后传
 
·no-advertise:携带此属性的路由不会通告给任何BGP邻居。
·no-export: 携带此属性的路由不会传出本AS外,只会传给IGP。(联邦中的小AS会传递)。
·local-AS: 携带此属性的路由不会传出小AS。
 
R1(config-route-map)#set community no-advertise/no-export/local-AS
 
<BGP用loopback口建邻居,不要再通告此loopback>
 
·通过IGP(OSPF)学到对方loopback,用looback建EBGP邻居
·又在BGP中通告此loopback。
 
此时路由表中会出B和O翻动的现象。
因为EBGP AD=20,所以路由表中会显示B
但路由是2.2.2.2/32 Next-hop 2.2.2.2,路由表会有环路检测机制
将路由的网络位与下一跳的相应网络位比较,如果相同,就删除此路由。
把这条路由删除,所以又变成打O的。
 
<local-as>
如果在EBGP中,邻居指错了R2的AS号,可以在本地用以下方法解决:
R2(config-router)#neighbor 12.1.1.1 local-as 3
                                   (对方指错的AS号)
 
   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> IE要考
 
·通过IGP学到某条路由,又从EBGP学到相同的路由。
 由于EBGP AD=20,小于IGP的AD,所以会优先EBGP的路由,
 但实际路径从IGP走更优化。
例如:R2学到两条相同的路由,用以下方法改
 
R2(config-router)#network 3.3.3.0 mask 255.255.255.0 backdoor
                    (将此路由的AD调高到200)
将BGP学到的路由的AD值提高,从20提高到200
 
<Dampening>  
 
·为了防止路由频繁抖动。BGP利用Dampening机制,将这种频繁抖动的路由有条件的加以抑制。
·BGP默认不启用Dampening,而且仅对EBGP邻居传来的路由启效。
·一条路由up->down,默认惩罚1000,当达到start suppress值时,被抑制。
被抑制的路由不会传给本地,也不会传给其他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#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 1.1.1.0/24 (打d的路由,不会进入本地路由表,也不会传给其他BGP邻居)
 
R2#cle 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
 
<Next-hop-unchange>
 
·都用loopback建邻居
 
解法1:
R3(config-router)#neighbor 1.1.1.1 next-hop-unchanged 
 
当EBGP用直连接口建邻居时,或者IOS不支持unchaged命令时,
%BGP: Can propagate the nexthop only to multi-hop EBGP neighbor
 
解法2:
R1(config)#route-map NH
R1(config-route-map)#set ip next-hop 12.1.1.2
 
R1(config-router)#neighbor 13.1.1.3 route-map NH in
 
<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).
 
<Regular Expression> 规则表达式,用来控制AS号,控制自已只接受哪些AS来的路由
用AS号过滤的路由
^ : 匹配输入字符的开头
$ : 匹配输入字符的结尾
_ : 匹配一个字符(空格/逗号/左括号/右括号等)
. : 匹配任何一个字符
* : 星号前的字符可重复0次或多次
 100  : 只要AS中包括100都匹配
_100_ : 所有经过AS100的路由
_100$ : 起源于AS100的路由
^100_ : 进入本AS之前的AS必须是100
^100$ : 起源于AS100,并直接传入本AS
100$:起源的AS号其最后三位一定是100,例如:100,1100,2100都可以
.*    : 所有路由
 
R1#show ip bgp regexp ^23$
 
<1> R1(config)#ip as-path access-list 1 permit _1$
    R1(config-router)#neighbor 13.1.1.1 filter-list 1 in 
             (只允许起源于AS1的路由进入)
 
<2> R1(config)#ip as-path access-list 1 permit _1$
    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 
 
<Remove-Private-AS>
 
R1(config-router)#neighbor 13.1.1.3 remove-private-AS 
 
   Network          Next Hop            Metric LocPrf Weight Path
*> 2.2.2.0/24       13.1.1.1                               0 1 i
 
 

你可能感兴趣的:(BGP)