• Preferred-Value
  • Local-Preference
  • AS_PATH
  • 1. AS_PATH属性介绍
  • 2. AS_PATH的四种类型
  • 3. 使用route-policy修改AS_PATH
  • Origin
  • MED
  • 1. 关于MED属性
  • 2. MED的比较原则及配置注意事项
  • 3. MED默认值
  • NEXT_HOP
  • 1. NEXT_HOP属性的默认操作
  • 2. 在多路访问网络中的NEXT_HOP
  • Community
  • 1. 关于Community属性
  • 2. 使用route-policy设置Community属性值
  • 3. 几个公认的的Community属性值
  • Atomic_Aggregate及aggregator

BGP拥有丰富的路径属性。BGP的这些路径属性,将影响BGP路由的优选,同时也使得BGP的路由策略能力异常强大。




bgp注入路由的方式 bgp route policy_属性值


路径属性的分类:


bgp注入路由的方式 bgp route policy_IP_02


Preferred-Value

首选值(Preferred-Value)是华为设备的特有属性,该属性仅在本地有效。当BGP路由表中存在到相同目的网络的路由时,将优先选择协议首选值最大的路由。

Preferred-Value的取值范围:0~65535。路由器本地始发的BGP路由默认Preferred-Value为0,从其他BGP邻居学习到的路由(该路由是不会携带Preferred-Value的,Preferred-Value只在本地有效,不会被通告给任何邻居),加载到本地后默认Preferred-Value也为0。


bgp注入路由的方式 bgp route policy_属性值_03


Preferred-Value是一个本地有效的华为私有属性。这个属性的含义有点像:“一条路由在我心目中的权重”。既然是在“我心目中”的,那么这个属性值自然是不能传递给别人的,只有自己知道。

在上图中,B路由器将会同时从A和C学习到两条BGP路由:10.0.1.0/24及10.0.2.0/24。默认情况下,从A及C学习到的这两条路由Preferred-Value都是0。我们可以在B上部署策略,将A发来的10.0.1.0/24路由的Preferred-Value调节为100,将C发来的10.0.2.0/24路由的Preferred-Value调节为100,这样一来就能够实现B上去往10.0.1.0/24的流量走A,去往10.0.2.0/24的流量走C的效果。注意,在B上部署的这个策略只会影响B自身。

[B-bgp] display bgp routing-table


bgp注入路由的方式 bgp route policy_属性值_04


Local-Preference

LP(Local-Preference)属性是一个公认自决属性,属性值越大,则路由越优。Local-Preference就是本地优先级,本地的意思就是AS内部,LP只能在AS内部、在IBGP邻居之间传递,而不会传递给EBGP邻居。


bgp注入路由的方式 bgp route policy_R3_05


上图中,ABC同属一个AS,假设A及C都有到达10.0.1.0/24的路由,并且都将路由更新给了B,那么如果我们希望B去往10.0.1.0/24网络走A,当A挂掉的时候自动切换到C,这就可以在A上部署策略,将传递给B的BGP路由10.0.1.0/24的LP属性值设置为200,而C传递给B的路由的LP属性值保持默认100即可。这样一来B在做路由优选时,在其他条件相同的情况下,就会优选A传递过来的这条10.0.1.0/24路由。

[B-bgp] display bgp routing-table


bgp注入路由的方式 bgp route policy_bgp通告四原则_06


  • LP属性只能在IBGP邻居之间传递(除非做了策略,否则LP值在AS内的IBGP邻居间传递过程中不会丢失),而不能在EBGP邻居之间传递。但是可以在AS边界路由器上使用In方向的策略来修改LP属性值。
  • BGP路由器在向其EBGP邻居发送路由更新时,此时该EBGP路由不能携带LP属性,但是对方收到该路由后,会在本地为这条路由赋一个默认值,也就是100(可通过命令修改),然后再将路由传递给自己的IBGP邻居。

AS_PATH

1. AS_PATH属性介绍


bgp注入路由的方式 bgp route policy_bgp注入路由的方式_07


AS_PATH是公认必遵属性,用于描述到达目标网络所要经过的AS号的序列。有两个非常重要的作用:

一是用于在AS之间的路由防环,如果一台路由器收到一条BGP路由,该路由携带的AS_PATH中出现了自己所在AS的AS号,那么它知道出现了环路,因此忽略该条路由更新。

AS_PATH的另一个作用是用于路由优选,我们知道AS_PATH实际上是一个列表,呈现出来就是一串AS号,那么既然是列表它就有长度,AS_PATH越短则该路由被视为越优,因为这条路径距离目的地所要经过的AS跳数更少。

2. AS_PATH的四种类型

  • AS_SET:一个去往特定目的地所经路径上的无序AS号列表。
  • AS_SEQENCE:一个有序的AS号列表。
  • AS_CONFED_SEQUENCE:联邦内特有的AS_PATH类型,一个去往特定目的地所经路径上的有序AS号列表,其用法与AS_SEQUENCE一样,区别在于该列表中的AS号属于本地联邦中的AS号。
  • AS_CONFED_SET:联邦内特有的AS_PATH类型,一个去往特定目的地所经路径上的无序AS号列表,用方法与AS_SET一样,区别在于列表中的AS号属于本地联邦中的AS号。

以上四种类型是通过AS_PATH属性中的类型代码进行区分。


bgp注入路由的方式 bgp route policy_bgp注入路由的方式_08


AS_Sequence很好理解,上图在不做任何策略的情况下,传递到R4的BGP路由携带的AS_PATH的类型即为AS_Sequence,这是个有序的AS号列表,当R4收到路由更新的时候,AS_PATH为300,100,R4就知道要去目的地,需经AS300再到AS100,才可达目的。


bgp注入路由的方式 bgp route policy_R3_09


再看上面这张图,R1通告明细路由:172.16.1.0/24及172.16.2.0/24;R2通告明细路由172.16.10.0/24及172.16.11.0/24。这些明细路由被通告给了R3。现在在R3上做路由汇总,这条汇总路由由R3产生并且传递给了R4,这条汇总路由的AS_PATH为300,丢失了其下的明细路由的AS_PATH属性,那么如果R4与R1或R2之间如果有EBGP的连接,就有可能产生路由环路,R1、R2都会收到这条汇总路由并且接受路由更新。这是因为这条汇总路由并未携带任何关于AS100及AS200的信息。

所以其实还是需要在汇总路由上保留其明细路由的AS_PATH,而至于保留下来的明细路由的AS_PATH中的AS号是什么顺序已经不重要了,因为出于防环的目的只要AS号就够了。使用aggregate命令加上as-set关键字,可以使产生的汇总路由继承明细路由的部分路径属性,其中包括AS_PATH属性值。此时R3产生的这条汇总路由的AS_PATH将携带两个AS_PATH类型(两段信息),一是AS_Sequence,值为300,另一个类型为AS_Set,包含{100,200}两个AS号,并且是无序的。于是乎R4上收到的路由所携带的AS_PATH综合起来就是300 {100,200}。值得注意的是,这个括号里的AS号,在进行AS_PATH长度计算的时候,只当一跳来算,关于这点的验证,请看选路规则章节。

3. 使用route-policy修改AS_PATH

示例1


bgp注入路由的方式 bgp route policy_R3_10


上图中,R1将BGP路由10.0.1.0/24更新给R2,在没有部署策略的情况下,R2收到10.0.1.0/24路由的AS_PATH为:100。我们可能基于某种需求,希望修改路由的AS_PATH,例如我们想插入一个AS号999,就可以在route-policy中使用apply as-path 999 additive命令来实现。注意我们是在R1上对R2做export方向的route-policy,10.0.1.0/24路由在没有被R1更新出去之前AS_Path是空的,然后被插入了上面所说的AS号999,紧接着路由被送给EBGP邻居R2,那么R1所在的AS号码100又被追加到了路由的AS_PATH前,所以最终路由的AS_PATH就是100 999。

值得一提的是,对于BGP而言AS_PATH属性是一个相当重要的路径属性,使用route-policy固然能够根据需求灵活的修改AS_PATH,但是任何针对AS-PATH的策略都必须谨慎执行,因为BGP的工作——例如防止路由环路等对AS_PATH的依赖很高。就拿上面的例子来说,实际上添加999的AS号码是没有意义的,因为999的AS在这里并不存在,如果只是为了加长AS_PATH,可以考虑添加一个值为100的AS号,而不是999。

示例2


bgp注入路由的方式 bgp route policy_bgp通告四原则_11


上图的实验中,我们是在R2做import方向的route-policy,同样是使用命令apply as-path 999additive,结果与示例1是不一样的。由于策略是部署在R2上的,因此R1将路由更新给R2的时候路由的AS_PATH是100,R2收到该路由后,由于配置了import方向的route-policy,因此在该路由的AS_PATH前追加AS号999,于是最终在R2的BGP表里10.0.1.0/24的路由AS_PATH是999 100。

示例3


bgp注入路由的方式 bgp route policy_属性值_12


如果不是想在AS_PATH中插入AS号,而是想覆盖AS_PATH呢?可以在route-policy中使用applyas-path overwrite命令。在上图的示例中,我们在R2上对R1做import方向的route-policy,那么当R1将路由10.0.1.0/24更新给R2的时候,路由的AS_PATH属性值为100,随后由于R2部署了策略,因此该路由的AS_PATH被覆盖为999,所以最终在R2的BGP表中,10.0.1.0/24的路由AS_PATH属性值为999。

Origin

公认必遵属性,明确了路由的来源,BGP路由来源有三种途径:


bgp注入路由的方式 bgp route policy_R3_13


bgp注入路由的方式 bgp route policy_属性值_14


上图中,R1采用network的方式,将直连路由10.0.1.0/24引入了BGP,那么该条路由的Origin属性值就为IGP,在BGP表中,标记为i:

[R2] display bgp routing-table


bgp注入路由的方式 bgp route policy_bgp注入路由的方式_15


当然,如果R1改用重发布(import-route)的方式引入这条直连路由,那么该条路由的origin属性值就是incomplete,在BGP表中的标记就是?。

MED

1. 关于MED属性

MED(MULTI_EXIT_DISC)是可选非传递属性,是一种度量值,用于向外部邻居指出进入AS的首选路径,即当入口有多个时,AS可以使用MED动态地影响其他AS如何选择进入路径。MED属性值越小,则路由越优。MED主要用于在AS之间交互,MED属性值随路由通告给EBGP对等体后,对方在AS内传播该路由时,会携带该MED属性值,但是,这个MED属性值不会被通告给下一个AS。


bgp注入路由的方式 bgp route policy_IP_16


在上图中,C路由器所在的AS200双归属到AS100(有两条出口路径到AS100),可以利用MED属性来控制C进入AS100选择的路径。AS100中有路由1.1.1.0/24被A及B通告给了C。那么我们在A上部署策略,将该路由的MED设置为10;在B上部署策略,将MED设置为20。这样一来在C上关于1.1.1.0/24路由就分别从A和B各学习到一条BGP路径,C会比较这两条路径的MED,在其他条件相同的情况下,优选MED小的路径,因此最终优选从A通告过来的路由。

2. MED的比较原则及配置注意事项

  • 默认情况下,只比较来自同一相邻AS的BGP路由的MED属性,就是说如果同一个目的地的两条路由通告自不同的AS,则不进行MED的比较。
  • MED只在直接相连的AS间影响业务量,而不会跨AS传递。
  • 一台BGP路由器将路由通告给EBGP邻居时是否携带MED值,需要根据以下条件进行判断(在不对EBGP邻居使用路由策略的情况下):
  • 如果该BGP路由是本地始发(network或import-route)的,则携带MED值发送给EBGP邻居。
  • 如果该BGP路由是从其他BGP邻居学习过来的,那么将该路由通告给EBGP邻居时不携带MED。
  • 在IBGP邻居之间传递路由时,MED值会被保留并传递,除非部署了策略,否则MED值在传递过程中不发生改变也不会丢失。

3. MED默认值


bgp注入路由的方式 bgp route policy_R3_17


  • 如果BGP路由器通过IGP学习到一条路由,并且通过network或import-route的方式将路由引入BGP,产生的BGP路由的MED值继承路由在IGP中的metric。例如上图中如果R2通过OSPF学习到了11.1.1.0/24路由,并且该路由在R2的全局路由表中OSPF Cost=100,那么当R2将路由network进BGP的时候,产生的BGP路由MED值将继承这条路由的OSPF Cost值100。
  • 如果BGP路由器将本地的直连路由通过network或import-route的方式引入BGP,那么这条BGP路由的MED默认为0,因为直连路由cost为0。
  • 如果BGP路由器将本地的静态路由通过network或import-route的方式引入BGP,那么这条BGP路由的MED默认为0,因为静态路由cost为0。
  • 如果BGP路由器通过BGP学习到其他邻居传递过来的一条路由,那么将路由更新给自己的EBGP邻居时,默认是不携带MED的。
  • 可以使用default med命令修改默认的MED值,default med命令只对本设备上用import-route命令引入的路由和BGP的汇总路由生效。例如在R2上配置default med 999,那么R2通过import-route及aggregate命令产生的路由传递给R3时,路由携带的MED为999。

说明:以上结论已经在实验环境中验证。

NEXT_HOP

NEXT_HOP属性是一个公认必遵属性,也就是在所有的Update报文里都必须携带的属性。这个属性描述了去往目的网络的下一跳地址。

1. NEXT_HOP属性的默认操作

A. 将路由更新给EBGP邻居


bgp注入路由的方式 bgp route policy_IP_18


当一台BGP路由器将路由通告给自己的EBGP邻居时,该路由的NEXT_HOP属性值会被设置为其BGP更新源IP地址。

在上图中,R1及R2之间使用直连接口IP地址建立EBGP连接,那么R1将路由11.1.1.0/24通告给R2的时候,路由携带的NEXT_HOP属性值就是R1的接口地址10.1.12.1。

R2将收到的BGP路由11.1.1.0/24装载进路由表后,该路由在路由表中的下一跳就是10.1.12.1,也就是路由的NEXT_HOP属性值。

B. 将EBGP邻居传递过来的路由更新给自己的IBGP邻居


bgp注入路由的方式 bgp route policy_R3_19


当BGP路由器把从EBGP邻居学习到的路由传递给自己的IBGP邻居时,会保留路由的NEXT_HOP属性值不变。例如上图中,R2从EBGP邻居R1学习到的路由的NEXT_HOP属性值为10.1.12.1,那么当R2将路由再通告给自己的IBGP邻居R3的时候,路由的NEXT_HOP属性值保持不变,仍然为10.1.12.1。

R3将学习到的BGP路由11.1.1.0/24装载进全局路由表时,该路由的下一跳地址就是10.1.12.1,这里值得一提的是,对于R3而言10.1.12.1并非处于本地直连网络,因此当R3要转发数据到11.1.1.0/24网络的时候,实际上还需要做一次递归,也就是需要再在路由表中查找到10.1.12.1的 路由。

C. 通过aggregate命令注入的BGP汇总路由,NEXT_HOP属性值为执行汇总的路由器的更新源IP地址。

2. 在多路访问网络中的NEXT_HOP


bgp注入路由的方式 bgp route policy_bgp注入路由的方式_20


在前面的内容中,我们已经了解到:“当一台BGP路由器将路由更新自己的EBGP邻居时,该路由的NEXT_HOP属性值会被设置为其BGP更新源IP地址”。但是这有一个例外的情况。

如上图,ABC三台路由器连接到一个多路访问网络中,例如以太网,ABC的接口属于一个IP子网。ABC三者的EBGP邻居关系如图所示,那么当B路由器有条BGP路由100.100.100.0/24更新给A的时候,路由的NEXT_HOP属性值为B的接口IP地址也就是10.1.123.2,随后,A收到这条路由并且准备更新给C,而这时候,由于ABC处于同一个IP子网,因此A将路由更新给EBGP邻居C的时候,会做一个特殊处理:保持路由的NEXT_HOP属性值不变。为什么这样做呢?实际上这样操作是非常有好处的,因为C收到这条路由时,发现NEXT_HOP属性为10.1.123.2,那么当C转发到达100.100.100.0/24的报文时,只需直接将数据转发给下一跳10.1.123.2即可,而不用从A去绕一下。

Community

1. 关于Community属性

Community也被称为团体字,是可选传递属性。Community是一种BGP路由标记,用于简化路由策略的执行。可以将某些路由分配特定的Community属性值,之后就可以基于Community值而不是基于前缀信息来抓取路由并执行相应的策略了。


bgp注入路由的方式 bgp route policy_bgp通告四原则_21


有了Community属性,我们可以在AS100引入这些办公及生产的路由的时候,就分别“打上”相应的Community值以作标记,例如但凡生产的路由,就打上标记100:1,但凡办公的路由就打上标记100:2,那么这些属性值随着路由传递给了AS200,在AS200上需要分别对办公及生产路由做策略的时候,只需要抓取相应的Community值即可。例如抓取100:1的Community属性值也就抓取了所有生产的路由。Community属性是一组4个8位组的数值,RFC1997规定前2B表示AS号,后2B表示基于管理目的设置的标示符,格式为AA:NN。

Community属性对邻居起作用,在设置后,需要向邻居发送该属性(advertise-community)。

2. 使用route-policy设置Community属性值

route-policy xxx permit node 10apply community ?INTEGER <0-4294967295> Specify community numberSTRING <3-11> Specify aa<0-65535>:nn<0-65535>internet Internet (well-known community attributes)no-advertise Do not advertise to any peer (well-known community attributes)no-export Do not export to external peers(well-known community attributes)no-export-subconfed Do not send outside a sub-confederation(well-known community attributes)none No community attribute

3. 几个公认的的Community属性值

业内针对特殊的需求定义了公认的Community属性值,这些属性值比较特殊,而且都有自己的定义,接 下去我们分别来看一下:

no-advertise


bgp注入路由的方式 bgp route policy_bgp通告四原则_22


R1引入了一条BGP路由,并且为路由打上了“no-advertise”的Community属性值,这条路由传递给了R2,R2发现路由携带了“no-advertise”的Community属性值,因此这条路由自己用,不会再传递给任何BGP邻居。

no-export


bgp注入路由的方式 bgp route policy_属性值_23


no-export-subconfed


bgp注入路由的方式 bgp route policy_R3_24


Atomic_Aggregate及aggregator


bgp注入路由的方式 bgp route policy_IP_25


路由汇总是许多动态路由协议都支持的特性,也是一个非常基本的协议特性,BGP当然是支持路由汇总的。然而路由汇总在优化路由条目数量的同时,也带来一定的问题,例如明细路由在路由汇总的执行点之后就被抑制了,取而代之的是新产生的这条汇总路由,而汇总路由可能会丢失明细路由的路径属性,其中包括最重要的AS_PATH属性,而AS_PATH是BGP路由防环的重要依据。

因此BGP定义了这两个路径属性:Atomic_Aggregate及Aggregator,分别用于告诉下游BGP路由器:1、这是条汇总路由, 2、汇总路由发生的地方(也就是汇总路由的始发AS和始发路由器)。

R4# display bgp routing-table 172.16.0.0BGP local router ID : 4.4.4.4Local AS number : 400Paths: 1 available, 1 best, 1 selectBGP routing table entry information of 172.16.0.0/16:From: 10.1.34.3 (3.3.3.3)Route Duration: 00h00m21sDirect Out-interface: GigabitEthernet0/0/0Original nexthop: 10.1.34.3Qos information : 0x0AS-path 300, origin igp, pref-val 0, valid, external, best, select, active, pre 255Aggregator: AS 300, Aggregator ID 3.3.3.3, Atomic-aggregateNot advertised to any peer yet