接收路由
接收路由的限制
- 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
选路原则:
- 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属性只在本地有效,不可传递。
- 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邻居。
- 本地起源
- 本地始发的路由要优于从别的邻居学来的路由。
- 本地始发的路由有:
- Network
- Redistribute
- Aggregate
- 在Cisco的设备里,因为有weight的属性,所以这个比较原则一般看不到效果。
- 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号。
- 在route-map下,set as-path prepend #可以加AS号或是last-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的过滤(正则表达式)。
- 起源代码(IGP>EBGP>imcomplete,选小)
- 起源代码也是BGP的公认必选属性,选小。
- 可以在EBGP或IBGP的任何方向设置,也可以在始发路由的时候设置。
- 在route-map下,set origin。再neighbor的时候调用route-map。
- network的路由默认的起源代码是IGP;redistribute的路由起源代码为incomplete。
- 选路原则:IGP > EGP > Incomplete 。
- 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。路由的顺序是最新学到的在上面,学到最久的再下面。比较是自上而下,一一比较,最终选出最优的路由。
- EBGP优于IBGP
- 从EBGP邻居学来的路由优于从IBGP邻居学来的路由。
- 最近的IGP下一跳(主要用于IBGP)
- BGP下一跳相关的路由,在路由表中的metric值得对比,选小。即使是不同的IGP协议,不比较AD值,只比较metric的绝对值。
- bgp bestpath igp-metric ignore #忽略比较IGP的metric,继续往下选。
- 如果配置了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邻居。
- 最老的(主要用于EBGP)。bgp bestpath compare-routerid 会略过这条比较。
- 最小的RID(选小)
- 多条路径的始发路由器ID相同,那么选择cluster-id长度短的(选短)
- BGP优选来自于最低的邻居地址的路径(选小)