BGP的路径属性和选路规则

(66) 2024-05-02 10:01:01

文章目录

  • BGP选路规则
  • 路径属性
    • Preferred-Value
    • Local-Preference
    • 优先本地始发
    • AS_PATH
    • OGN
    • MED
    • 其余规则
    • 重点属性总结
  • 社团属性
    • 公认社团属性配置
    • 自定义社团属性配置

BGP选路规则

  • 优选Preferred-Value属性值最大的路由
  • 优选Local_Preference属性最大的路由
  • 本地始发的BGP路由优于从其他对等体学习到的路由

本地始发的路由优先级:优选手动聚合>自动聚合>network>import>从对等体学到的

  • 优选AS_Path属性最短的路由
  • 优选Origin属性最优的路由

Origin属性的优先级从高到低的排序:i(IGP)> e(ECP)> ?(incomplete)

  • 优选MED属性值最小的路由
  • 优选从EBGP对等体处学来的路由(EBGP路由优先级高于IBGP路由)
  • 优选到Next_Hop的IGP度量值最小的路由
  • 优选Cluster_list最短的路由
  • 优先Router ID (Originator_ID最小的设备通告的路由
  • 优选具有最小IP地址的对等体通告的路由

路径属性

接下里我将对解释每一条路径属性,并且通过下面拓扑展示如何通过修改这些路径属性来干涉选路。
BGP的路径属性和选路规则 (https://mushiming.com/)  第1张
搭建好实验环境后,只在R1上宣告1.1.1.0/24和10.10.10.0/24,在R4查看BGP表,可以看出R4收到了R2和R3发来的1.1.1.0/24和10.10.10.0/24的路由信息,此时R4到这两个网段选择的都是走R2。

[r4]display bgp routing-table 

 BGP Local router ID is 4.4.4.4 
 Status codes: * - valid, > - best, d - damped,
               h - history,  i - internal, s - suppressed, S - Stale
               Origin : i - IGP, e - EGP, ? - incomplete


 Total Number of Routes: 2
      Network            NextHop        MED        LocPrf    PrefVal Path/Ogn

 *>i  1.1.1.0/24         2.2.2.2         0          100        0      1i
 * i                     3.3.3.3         0          100        0      1i
 *>i  10.10.10.0/24      2.2.2.2         0          100        0    1i
 * i                     3.3.3.3         0          100        0      1i

Preferred-Value

  • 该属性为华为设备的私有属性,其他厂商的设备也有类似的属性,可以理解为一条路的权重,简称‘PV’。PV属性是本设备上选路优先级最高的属性,这个属性越大越优,该属性只能在本设备上进行修改,不能传递,传递出去的路由不携带该属性,而对方收到该路由后,这个属性依然按照默认值(默认为0)加表。所以该属性是本设备上干涉选路最方便的路由。
  • 修改PV属性使R4到1.1.1.0/24选择R3
# 第一种修改方法
[r4]bgp 2 # 进入BGP进程
[r4-bgp]peer 3.3.3.3 preferred-value 100 # 将从邻居3.3.3.3处学到的路由的PV属性都调为100
# 查看干涉结果 
[r4-bgp]display bgp routing-table 

 BGP Local router ID is 4.4.4.4 
 Status codes: * - valid, > - best, d - damped,
               h - history,  i - internal, s - suppressed, S - Stale
               Origin : i - IGP, e - EGP, ? - incomplete

 Total Number of Routes: 2
      Network            NextHop        MED        LocPrf    PrefVal Path/Ogn

 *>i  1.1.1.0/24         3.3.3.3         0          100        100    1i
 * i                     2.2.2.2         0          100        0      1i
 *>i  10.10.10.0/24      3.3.3.3         0          100        100    1i
 * i                     2.2.2.2         0          100        0      1i
  • 第一种方法将某个邻居发来的路由全部进行修改,导致R4到1.0.0.0/24和到10.10.10.0/24都是选择R3,那R2的链路就空闲了,所以在干涉BGP的选路时,我们期望实现负载分担,即不同的流量走不同的线路,分担一条单一线路的压力。在该次实验中,我们期望R4去1.1.1.0/24走R3,去10.10.10.1/24走R2。
# 第二种修改方法,使用路由策略,单独修改某一条或一些路由的路径属性
[r4-bgp]undo peer 3.3.3.3 preferred-value # 先取消上次配置
# 抓取流量
[r4]ip ip-prefix pv permit 1.1.1.0 24
# 编写路由策略
[r4]route-policy pv permit node 10
Info: New Sequence of this List.
[r4-route-policy]if-match ip-prefix pv
[r4-route-policy]apply preferred-value 100
[r4-route-policy]q
# 由于route-policy末尾隐含拒绝所有,所以最后需要编写一条大动作为permit的空策略,即允许所有通过
[r4]route-policy pv permit node 20
Info: New Sequence of this List.
# 调用策略,策略可以在出向(export)和入向(import)调用,出向影响他人,入向影响自己
[r4-bgp]peer 3.3.3.3 route-policy pv import  # pv属性只能在本设备上生效,只能本地在入向调用
# 查看R4的BGP表
```bash
[r4-bgp]display bgp routing-table 

 BGP Local router ID is 4.4.4.4 
 Status codes: * - valid, > - best, d - damped,
               h - history,  i - internal, s - suppressed, S - Stale
               Origin : i - IGP, e - EGP, ? - incomplete


 Total Number of Routes: 4
      Network            NextHop        MED        LocPrf    PrefVal Path/Ogn

 *>i  1.1.1.0/24         3.3.3.3         0          100        100    1i
 * i                     2.2.2.2         0          100        0      1i
 *>i  10.10.10.0/24      2.2.2.2         0          100        0      1i
 * i                     3.3.3.3         0          100        0      1i
  • 通过详细查看某条不优的BGP路由信息可以知道该路由不优的原因
    BGP的路径属性和选路规则 (https://mushiming.com/)  第2张

Local-Preference

  • Local-Preference简称‘LP’,本地优先级属性,默认值为100越大越优。LP属性可以进行传递,但是只能在IBGP邻居之间传递,传递到EBGP邻居时将不携带该属性,所以,这个属性是在干涉IBGP内部选路最常用的属性。
  • 取消之前的路由策略,通过修改LP属性使R4去1.1.1.0/24选择R3,实现负载分担
# 取消之前的路由策略
[r4-bgp]undo peer 3.3.3.3 route-policy pv import
# 抓取流量
[r4]ip ip-prefix lp permit 1.1.1.0 24
# 编写路由策略
[r4]route-policy lp permit node 10
Info: New Sequence of this List.	
[r4-route-policy]if-match ip-prefix lp
[r4-route-policy]apply local-preference 150
# 编写空表
[r4]route-policy lp permit node 20
Info: New Sequence of this List.
[r4-route-policy]q
# 调用策略,LP属性可以在AS内传递,可以在R3的出向上配置影响R4,也可以在R4的入向配置,影响自身
[r4]bgp 2
[r4-bgp]peer 3.3.3.3 route-policy lp import 
# 查看干涉结果
[r4-bgp]display bgp routing-table 

 BGP Local router ID is 4.4.4.4 
 Status codes: * - valid, > - best, d - damped,
               h - history,  i - internal, s - suppressed, S - Stale
               Origin : i - IGP, e - EGP, ? - incomplete

 Total Number of Routes: 4
      Network            NextHop        MED        LocPrf    PrefVal Path/Ogn

 *>i  1.1.1.0/24         3.3.3.3         0          150        0      1i
 * i                     2.2.2.2         0          100        0      1i
 *>i  10.10.10.0/24      2.2.2.2         0          100        0      1i
 * i                     3.3.3.3         0          100        0      1i

优先本地始发

  • 本地在bgp协议中宣告本地路由表中的IGP路由时,在本地的BGP表中下一跳地址为0.0.0.0;而通过BGP从其他邻居处学习到的路由,下一跳地址正常不为0.0.0.0;本地优选下一跳为0.0.0.0的路由传递给本地的其他BGP邻居;
  • 本地不同方式宣告的路由优先级也不同,本地始发的路由优先级:优选手动聚合>自动聚合>network>import

AS_PATH

  • AS_PATH记录某条BGP路由所进过的AS号,用来防止环路,也可以用来选路,AS号越少的越优

AS_PATH的两种特殊情况:
在我们使用手工聚合后,聚合路由会丢失AS_PATH属性,但我们聚合路由时开启AS_SET功能后,将不同的AS明细路由的AS号用大括号括起来放入AS_PATHS属性中。但注意,在比较选路时,不管大括号中包含多少个AS号,我们都当作是一个来看待。
在使用联邦时,联邦间也使用AS_PATH属性记录联邦号来进行防环,用小括号将联邦号括起;在进行AS_PATH长度比较
时,不考虑小括号中的内容。

  • 在干涉选路时,我们可以增加AS_PATH的长度以避免选择某条路,这里通过修改AS_PATH实现负载分担
# AS_PATH是可以在所有AS内传递的,所以我们可以在R4的入向修改,也可以在R2的出向修改,这里我选择在R2的出向修改
# 在R2发往R4的1.1.1.0/24路由信息上添加AS号,使R4去1.1.1.0/24选择R3
[r4-bgp]undo peer 45.1.1.2 route-policy pv export # 取消之前在R4上做的路由策略
# 在R2上抓取流量
[r2]ip ip-prefix as permit 1.1.1.0 24
# 编写策略
[r2]route-policy as permit node 10
Info: New Sequence of this List.
[r2-route-policy]if-match ip-prefix as
[r2-route-policy]apply as-path 1 1 1 ?  # 在AS号中添加3个1
  INTEGER<1-4294967295>  AS number in asplain format (number<1-4294967295>)
  STRING<3-11>           AS number in asdot format                              
                         (number<1-65535>.number<0-65535>)
  additive               Append to original As Number  # 在原有AS号的基础上添加AS号
  overwrite              Overwrite original As Number  # 覆盖原有AS号
[r2-route-policy]apply as-path 1 1 1 additive # 因为AS号还用来防环,不能随便覆盖,
# 编写空策略,允许通过其他流量
[r2]route-policy as permit node 20
Info: New Sequence of this List.
[r2-route-policy]q
# 调用策略,在R2的出方向调用,影响发向邻居4.4.4.4的路由信息
[r2-bgp]peer 4.4.4.4 route-policy as export
# 在R4上查看干涉结果
[r4]display bgp routing-table 

 BGP Local router ID is 4.4.4.4 
 Status codes: * - valid, > - best, d - damped,
               h - history,  i - internal, s - suppressed, S - Stale
               Origin : i - IGP, e - EGP, ? - incomplete


 Total Number of Routes: 4
      Network            NextHop        MED        LocPrf    PrefVal Path/Ogn

 *>i  1.1.1.0/24         3.3.3.3         0          100        0      1i
 * i                     2.2.2.2         0          100        0      1 1 1 1i
 *>i  10.10.10.0/24      2.2.2.2         0          100        0      1i
 * i                     3.3.3.3         0          100        0      1i

  • 新添的AS号在Path属性的最左边,如果在EBGP间出向调用修改AS号的策略,会先执行策略,在添加实际经过过的AS;入向调用是策略新增AS号处于列表的最左端。
  • 由于AS_PATH属性用来防环,所以我们在增加AS号最好是添加AS_PATH中已存在的AS号(可以重复添加),毕竟,选路只跟长度有关,和内容无关。

OGN

  • OGN:起源属性,标明该路由进入BGP的方式
  • 通过Network发布的路由,标 i
  • 将本地路由表中EGP路由重发布到BGP协议,标 e
  • 将本地路由表中IGP路由重发布到BGP协议,标 ?
  • 三种起源码的优先级关系为:i > e > ?
# 通过修改R2发往R4的1.1.1.0/24路由的起源属性,实现负载分担,使R4去往1.1.1.0/24选择R3
[r2-bgp]undo peer 4.4.4.4 route-policy as export  # 先取消之前在R2上做的路由策略
# 在R2将1.1.1.0/24路由的OGN修改为e,先抓取流量
[r2]ip ip-prefix ogn permit 1.1.1.0 24
# 编写策略
[r2]route-policy ogn permit node 10
Info: New Sequence of this List.
[r2-route-policy]if	
[r2-route-policy]if-match ip-	
[r2-route-policy]if-match ip-prefix ogn
[r2-route-policy]apply origin incomplete 
# 编写空表
[r2]route-policy ogn permit node 20
Info: New Sequence of this List.
[r2-route-policy]quit
# 调用策略,在出向调用,修改该路由信息的属性后发出
[r2-bgp]peer 4.4.4.4 route-policy ogn export 
# 在R4上查看干涉结果
<r4>display bgp routing-table

 BGP Local router ID is 4.4.4.4 
 Status codes: * - valid, > - best, d - damped,
               h - history,  i - internal, s - suppressed, S - Stale
               Origin : i - IGP, e - EGP, ? - incomplete


 Total Number of Routes: 4
      Network            NextHop        MED        LocPrf    PrefVal Path/Ogn

 *>i  1.1.1.0/24         3.3.3.3         0          100        0      1i
 * i                     2.2.2.2         0          100        0      1?
 *>i  10.10.10.0/24      2.2.2.2         0          100        0      1i
 * i                     3.3.3.3         0          100        0      1i

MED

  • MED:多出口鉴别属性,在宣告或重发布时,每条BGP路由会携带该路由信息在本地路由表中的开销值。该属性可以影响其他AS的流量如何流入自己AS中,如下图中R1收到R2和R3发来的关于R4的路由信息,MED值分别是100和10,如果R1想与R4通信,它会优先选择通过R3。
    BGP的路径属性和选路规则 (https://mushiming.com/)  第3张
  • BGP协议在进行宣告时,可以宣告路由表中任意的路由条目,默认将这些路由的开销值继承到BGP路由的MED属性中。若本地宣告的BGP路由传递给EBGP邻居,将携带MED值,便于EBGP邻居所在的AS内部的设备进行选路。若本地通过IBGP邻居学到的BGP路由,也会传递给自己的EBGP邻居,但是将会将MED值归0传递。因为这些度量并不是本地产生的。
    BGP的路径属性和选路规则 (https://mushiming.com/)  第4张

总结:
为方便相邻AS在本AS内选路,本AS存在EBGP邻居关系的设备都建议宣告内部AS的路由。
某条路由最多在本AS和相邻AS内传播,凡是不是本地宣告的路由,在传递给EBGP对等体时归0。
注意:
我们在进行MED值比较时,多条相同的路由信息必须来自同一个AS才可以,即AS_PATH属性中最左边的AS号必须相同,否则没有可比性,将直接跳过这一条的比较。

# 取消之前在R2上做的路由策略
[r2-bgp]undo peer 4.4.4.4 route-policy ogn export
# 在R1上修改发往R2的1.1.1.0/24路由的MED值,使R4取1.1.1.0/24网段的时候选择R3
# 抓取流量
[r1]ip ip-prefix med permit 1.1.1.0 24
# 编写策略
[r1]route-policy med permit node 10
Info: New Sequence of this List.
[r1-route-policy]if-match ip-prefix med
[r1-route-policy]apply cost 10
# 编写空表
[r1]route-policy med permit node 20
Info: New Sequence of this List.
[r1-route-policy]q
# 调用策略
[r1]bgp 1
[r1-bgp]peer 2.2.2.2 route-policy med export 
# 在R4上查看干涉结果
<r4>display bgp routing-table

 BGP Local router ID is 4.4.4.4 
 Status codes: * - valid, > - best, d - damped,
               h - history,  i - internal, s - suppressed, S - Stale
               Origin : i - IGP, e - EGP, ? - incomplete

 Total Number of Routes: 4
      Network            NextHop        MED        LocPrf    PrefVal Path/Ogn

 *>i  1.1.1.0/24         3.3.3.3         0          100        0      1i
 * i                     2.2.2.2         10         100        0      1i
 *>i  10.10.10.0/24      2.2.2.2         0          100        0      1i
 * i                     3.3.3.3         0          100        0      1i

其余规则

  • 优选从EBGP对等体处学来的路由
    BGP的路径属性和选路规则 (https://mushiming.com/)  第5张
  • 优先到Next_hOP的IGP度量值最小的路由
    BGP的路径属性和选路规则 (https://mushiming.com/)  第6张
  • 优选Cluster_List最短的路由。Cluster_List记录该路由在AS内所进过的RR的RID。
    BGP的路径属性和选路规则 (https://mushiming.com/)  第7张
  • 优选Router ID(Originator_ID)最小的设备通告的路由,Oringinator_ID:起源者ID,在使用路由反射器时携带的属性,有起源者ID比较起源者ID,没有则比较通告者的RID。
    BGP的路径属性和选路规则 (https://mushiming.com/)  第8张
  • 优选具有最小IP地址的对等体通告的路由,在上述条件中如果比较的时起源者ID,且相同的情况下比较该条。
    BGP的路径属性和选路规则 (https://mushiming.com/)  第9张

重点属性总结

属性名称 传播范围 默认值 评判标准 常用于
PV 本设备 0 越大越有(0-65535) 优先级不传播的特性,只能在本地的入方向调用
LP IBGP对等体之间 100 越大越优 用于干涉IBGP邻居关系下选路最常用属性
AS_PATH EBGPD对等体之间 AS号越少越优 可以干涉到EBGP关系/IBGP关系选路
OGN BGP对等体之间 根据起源类型决定 i > e > ? 可以干涉到EBGP关系/IBGP关系选路
MED 相邻AS 默认取值为全局路由表中的开销值 越小越优 最常用于干涉EBGP关系选路

社团属性

  • 社团属性本质是对BGP路由的标记,在通告或传递路由时打入不同的标记,便可以根据这些标记对抓取想要的BGP路由信息制定策略。如下图中,AS600中有生产网段和办公网段的路由,我们在宣告这些路由时可以对生产网段打一种标记,对办公网段打上另一种标记,然后对拥有相应标记的路由做相应的策略。

BGP的路径属性和选路规则 (https://mushiming.com/)  第10张

  • 社团属性本身其实就是个标号,用来区分路由的,由32位二进制构成,社团属性有两种表示方法:1.直接用十进制表示;2.十六位:十六位,前16位为AS号,后16位为自定义编号。
  • 社团属性可以自己定义编号也定义了几个公认的社团属性

1.0X00000000 : internet所有BGP路由默认属于这个名称为“internet”的社团中。如果我们使用路由过滤器匹配社团属性为internet的路由时,将匹配到任意一条BGP路由
2,0XFFFFFF02:no - advertise,被打上这个社团属性的路由将不被通告给其对等体
3,0XFFFFFF01:no - export,被打上这个社团属性的路由间无法通告给自己的EBGP邻居(不包括联邦的EBGP邻居)
4,0XFFFFFF03:no - export - subconfed,被打上这个社团属性的路由间无法通告给自己的EBGP邻居,包括联邦的EBGP邻居

公认社团属性配置

  • 这里我使用如下拓扑简单的演示如何添加公认社团属性
    BGP的路径属性和选路规则 (https://mushiming.com/)  第11张
  • 为BGP路由添加社团属性需要用到路由策略
# 抓取需要添加公认社团属性的流量
[r1]ip ip-prefix com permit 1.1.1.0 24 
# 编写策略
[r1]route-policy com permit node 10
Info: New Sequence of this List.
[r1-route-policy]if-match ip-prefix com
[r1-route-policy]apply community ?  # 查看可添加的社团属性
  INTEGER<0-4294967295>  Specify community number  # 十进制表示的社团属性
  STRING<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
[r1-route-policy]apply community internet  # 添加社团属性
# 添加空表允许其他路由通过
[r1]route-policy com permit node 20
Info: New Sequence of this List.
[r1-route-policy]q
  • 配置好路由策略后可以调用,如下这种调用方式可以使发往邻居12.1.1.2的路由执行策略,使用该方式调用路由策略,路由只有在发往该邻居时才会添加社团属性,本地路由不具备社团属性。
[r1-bgp]peer 12.1.1.2 route-policy com export 
  • 也可以在宣告路由时就调用策略,如果所宣告的路由符合匹配的流量就执行策略,使用该方式调用策略,符合条件的路由在本地就会携带路由属性。
[r1-bgp]network 1.1.1.0 24 route-policy com
  • 但由于各大厂商默认传递BGP路由信息时不携带社团属性,如果不开启该功能会出现如下情况:

1.如果某条路由在宣告的时候添加的社团属性,那它不能被传递出去
2.如果某条路由是在发给某邻居时添加社团属性,那它可以传递出去,但不想携带社团属性

# 在R1上开启社团属性携带功能
[r1-bgp]peer 12.1.1.2 advertise-community # 向该邻居传递的路由可以携带社团属性
  • 在R2上查看该路由的详细属性,是否携带我们添加的社团属性
    BGP的路径属性和选路规则 (https://mushiming.com/)  第12张
  • 如果想要R2可以传递携带社团属性的路由信息,也需要开启携带功能。

自定义社团属性配置

  • 除了上述四种公有社团属性,其他都是自定义社团属性,我还是使用上面的拓扑演示如何添加自定社团属性和如何抓取携带这些自定义社团属性的路由并采取策略。
  • 在R1上添加社团属性
# 抓取需要添加自定义社团属性的网段
[r1]ip ip-prefix com permit 1.1.1.0 24 
# 在策略种添加自定义社团属性
[r1]route-policy com2 permit node 10
Info: New Sequence of this List.
[r1-route-policy]if-match ip-prefix com
[r1-route-policy]apply community 1:1   # 添加自定义社团属性
[r1-route-policy]q
[r1]route-policy com2 permit node 20
Info: New Sequence of this List.
[r1-route-policy]q
# 调用策略
[r1-bgp]network 1.1.1.0 24 route-policy com2
# 开启社团属性携带功能
[r1-bgp]peer 12.1.1.2 advertise-community
  • 在R2上抓取携带社团属性的流量。想要抓取携带社团属性的路由需要用到社团属性过滤器(community-filter)
# 使用社团属性过滤器抓取流量
[r2]ip community-filter 1 permit 1:1  # ip community-filter 编号(1-99) deny/permit 社团属性
# 抓取后使用route—policy做策略
[r2]route-policy com permit node 10
Info: New Sequence of this List.
[r2-route-policy]if-match community-filter 1 # 匹配社团属性过滤器 1 所抓取的流量
[r2-route-policy]apply preferred-value 100  # 将抓取的流量的 PV属性 调为 100
[r2-route-policy]q
# 添加一张空表允许其他路由通过
[r2]route-policy com  permit node 20
Info: New Sequence of this List.
[r2-route-policy]q
# 调用策略
[r2-bgp]peer 12.1.1.1 route-policy com import 
# 查看结果,修改成功
[r2-bgp]display bgp routing-table 

 BGP Local router ID is 2.2.2.2 
 Status codes: * - valid, > - best, d - damped,
               h - history,  i - internal, s - suppressed, S - Stale
               Origin : i - IGP, e - EGP, ? - incomplete


 Total Number of Routes: 1
      Network            NextHop        MED        LocPrf    PrefVal Path/Ogn

 *>   1.1.1.0/24         12.1.1.1        0                     100    1i
THE END

发表回复