BGP 基础3

接收路由

接收路由的限制

  • EBGP
    • AS-PATH防环。当收到一条路由,发现这条路由的AS-PATH里面包含有自己的AS号,则不接收这条路由。
    • 解决方法有:
      • 在CE端:neighbor x.x.x.x allowas-in NUMBER。默认不加NUMBER,则允许AS号出现的次数为3。
      • 在PE端:neighbor x.x.x.x as-override。如果传递的路由里包括邻居的AS号,则将邻居的AS号替换成自己的AS号后再发送给邻居。
  • IBGP
    • 下一跳:收到的路由的下一跳是自己的时候,不接收此路由。
    • cluster-list
    • originator

限制路由器从邻居收到路由的数量

  • 通常邻居发来的所有路由都可以接收,但是可以手工配置,最多从邻居接收多少条路由
    • maximum-prefix: neighbor x.x.x.x maximum-prefix NUMBER. 默认达到75%的阈值,发送报警信息。超过了设定值,则会down掉邻居关系,状态为IDLE(Pfxct),默认是永久down掉,需要手工清除。
    • neighbor x.x.x.x maximum-prefix NUMBER PERCENTAGE restart / warning-only。NUMBER指的是最多的接收的路由数量,PERCENTAGE为报警阈值的百分比。restart指的是达到最大接收路由后重新建立邻居的连接,restart后面可以接时间(分钟),过了这个时间后重新建邻居。

限制收到路由的as-path长度

  • 当路由器收到as-path长度达到255个的时候(IOS系统),会重置BGP邻居关系
  • 可以手工设置接收as-path多少以内的路由,超过限制后则不会接收
  • 在BGP全局下: bgp maxas-list NUMBER

选路原则:

  1. Weight — 权重(选大)
    • Weight是cisco私有的属性,取值范围0-65535,选大。
    • 本地始发路由的weight值默认为32768。
    • 可以在IBGP、EBGP邻居的入方向设置,也可以在始发路由的时候设置。
      • neighbor x.x.x.x weight 10 #更改邻居发来的所有路由的weight值。
      • neighbor x.x.x.x route-map WEIGHT in #在可以route-map里将特定的路由抓出来,并更改其weight值,然后在neighbor邻居的时候调用route-map。
    • Weight属性只在本地有效,不可传递。
  2. Local-preference — 本地优先级(选大)
    • 本地优先级是公有属性,选大,可以在IBGP中传递。
    • 可以在EBGP的入方向设置,IBGP入方向和出方向都可以设置,也可以在始发路由的时候设置。
      • bgp default local-preference NUMBER #设置全局的默认本地优先级。
      • neighbor x.x.x.x route-map LP in #可以将邻居的所有或部分路由抓出来,并设置本地优先级。
    • 从EBGP邻居学来的路由和本地始发路由,不携带本地优先级,所以使用默认的本地优先级100来设置。
    • Local-preference属性只在本AS内有效,可以在IBGP邻居间传播,无法传递给EBGP邻居。
  3. 本地起源
    • 本地始发的路由要优于从别的邻居学来的路由。
    • 本地始发的路由有:
      • Network
      • Redistribute
      • Aggregate
    • 在Cisco的设备里,因为有weight的属性,所以这个比较原则一般看不到效果。
  4. As-path(选as-path短的)
    • AS-PATH是BGP的公认必选属性,选短。
    • AS-PATH可以在EBGP的IN方向和OUT方向设置,但效果不一样。
      • 在route-map下,set as-path prepend #可以加AS号或是last-as。
        • 最多可以加255个AS号。
        • last-as,对于本地始发路由就是本AS,对于非始发路由就是上一个经过的AS的AS号。
    • 可以和TAG配合做BGP的防环。
      • 在route-map下,set as-path tag #在重分布路由的时候,AS-Path号可以作为route tag被重分布并在IGP间传递。譬如在OSPF进程下,redistribute bgp 23 route-map AS subnets。
    • bgp bestpath as-path ignore #可以手工配置忽略AS-PATH比较,使用后续的原则选路。
    • 可以使用过滤列表做AS-PATH的过滤(正则表达式)。
  5. 起源代码(IGP>EBGP>imcomplete,选小)
    • 起源代码也是BGP的公认必选属性,选小。
    • 可以在EBGP或IBGP的任何方向设置,也可以在始发路由的时候设置。
      • 在route-map下,set origin。再neighbor的时候调用route-map。
    • network的路由默认的起源代码是IGP;redistribute的路由起源代码为incomplete。
    • 选路原则:IGP > EGP > Incomplete 。
  6. MED — 多出口区分(选小)
    • MED类似于IGP的metric,选小,可选可传递属性。
    • 可以在EBGP或IBGP的任何方向设置,也可以在始发路由的时候设置。
    • 默认情况下会将IGP路由的metric值带到BGP内部充当MED。
    • MED为空的情况下,默认按照0来处理。bgp bestpath med missing-as-worst,通过命令将空的MED值设置为最差。
    • MED可以在IBGP邻居间传递的。默认情况下,BGP只能将本地始发路由的MED值或者手工配置的MED发给EBGP邻居,即从一个AS的EBGP邻居学到的路由的MED值,不会传递给另一个AS的EBGP邻居。
    • 默认情况下,不会比较从不同AS传过来的MED值。bgp always-compare-med,即不同AS也会比较MED。
    • bgp deterministic-med。从不同邻居的学到的相同路由,同AS比较MED,不同AS则不比较MED。路由的顺序是最新学到的在上面,学到最久的再下面。比较是自上而下,一一比较,最终选出最优的路由。
  7. EBGP优于IBGP
    • 从EBGP邻居学来的路由优于从IBGP邻居学来的路由。
  8. 最近的IGP下一跳(主要用于IBGP)
    • BGP下一跳相关的路由,在路由表中的metric值得对比,选小。即使是不同的IGP协议,不比较AD值,只比较metric的绝对值。
    • bgp bestpath igp-metric ignore #忽略比较IGP的metric,继续往下选。
  9. 如果配置了maximum-path [ibgp] NUMBER,存在多条等价的路径,会插入多条路径
    • BGP默认情况下不支持负载均衡。当maximum-path配置等于2及以上时,默认可以做等价负载均衡。
    • BGP的负载均衡受上面8条选路原则影响。只有在上面8条原则选不出最优路由时,才能进行负载均衡。
    • 默认情况下,即使as-path长度相同,从不同AS学到的相同路由不会进行负载均衡。bgp bestpath as-path multipath-relax ,可以使其负载均衡。如果as-path长度不相同,则不会进行负载均衡。bgp bestpath as-path ignore和bgp bestpath as-path multipath-relax无法同时使用。
    • 可以通过手工配置实现BGP的不等价负载均衡。
      • loopback建的邻居:可以使用路由表的递归查询功能,多写几条静态路由指到不同的虚拟的下一跳。再写到虚拟下一条的静态路由,下一条指向真正的下一跳。在FIB表里,最终的下一跳都是实际的直连的下一跳。
      • 物理接口建立的邻居。
        • 先设置不同接口的带宽。
        • bgp dmzlink-bw。开启根据链路带宽进行负载均衡。
        • neighbor x.x.x.x dmzlink-bw。
        • dmzlink-bw是一种拓展团体属性,需要在neighbor x.x.x.x send-community extended,才会传给其他IBGP邻居。
  10. 最老的(主要用于EBGP)。bgp bestpath compare-routerid 会略过这条比较。
  11. 最小的RID(选小)
  12. 多条路径的始发路由器ID相同,那么选择cluster-id长度短的(选短)
  13. BGP优选来自于最低的邻居地址的路径(选小)

Author: 技师

发表评论

电子邮件地址不会被公开。 必填项已用*标注