JUNIPER文档里面对add-path的解释:

    “BGP peers advertise routes to each other in update messages. BGP stores its routes in the Junos OS routing table (inet.0). For each prefix in the routing table, the routing protocol process selects a single best path, called the active path. Unless you configure BGP to advertise multiple paths to the same destination, BGP advertises only the active path.Related Documentation

    对于路由表中的每个前缀,路由协议进程选择一条称为活动路径的最佳路径。除非配置BGP将多条路径发布到同一目的地,否则BGP只发布活动路径。”


    在Junos里面,BGP在本地内存里存放路由信息,称之为ROUTING INFORMATION BASE.一个BGP对等体维护三种类型的RIB:adjacency-RIB-in/adjacency-RIB-out/Local-RIB。

    文档里面对Local-RIB的定义是:到达每个前缀的目的的最佳路由。基于每个目的地,只有单一的路径通告(最优)。


    那我们就先按照文档,搭建好实验环境,来观察现象。

    拓扑:

BGP-13 配置BGP多路径发布_vmx

简单解释下这个拓扑:

    在AS2里面,我们把R5/R6在本地的静态路由199.1.1.1/32和198.1.1.1/32 宣告到AS1,R7将本地的静态路由199.1.1.1/32宣告到AS1。

    于是在AS1,我们从R1上可以收到的199.1.1.1/32路由有三条路径,分别来自R5/R6/R7,而198.1.1.1/32 路由有两条路径,分别来自R5/R6。

    默认情况下,基于上述原则“到达每个前缀的目的的最佳路由,基于每个目的地,只有单一的路径通告(最优)”,在R8上看199.1.1.1/32和198.1.1.1/32 的路由都只有一条路径。

    所以,R1/R4/R8是这个实验的三个关键路由器。R1负责将同一个前缀的路由的多条发布(SEND)出去,R8负责这个多路径路由的接受(RECEIVE)。R4从R1接受并且发布到R8。


 1.首先查看配置命令:

BGP-13 配置BGP多路径发布_add-path_02

1.1. send层次下:

    path-count 配置的是多路径的数目。

    prefix-policy 配置的是策略,用于筛选路由前缀。

1.2. receive 就是接受多路径。



2.AS2的BGP配置就用R5作为例子:

2.1首先配置EBGP对等体:

BGP-13 配置BGP多路径发布_vmx_03

我们可以看到的是基本的BGP配置:type 指定是ebgp;邻居 R1的直连接口地址和AS号;export策略。

2.2配置export策略:

BGP-13 配置BGP多路径发布_juniper_04

将本地和直连路由发布出去。

 2.3配置本地路由:

BGP-13 配置BGP多路径发布_juniper_05

2.4配置完毕以后我们检查下 R5上的路由:

2.4.1 本地和直连:

BGP-13 配置BGP多路径发布_juniper_06

2.4.2查看R5 EBGP 宣告的和R1 EBGP 接受的:

          R5 BGP宣告给R1的:

BGP-13 配置BGP多路径发布_juniper_07

         R1 BGP从R5 接受的:

BGP-13 配置BGP多路径发布_add-path_08


3.AS1中的路由器的配置:

    文档里将R2/R3配置为R1的客户端,R8作为R4的客户端。BGP反射器的配置昨天在BGP-17里面已经练习了。

3.1所以我们在R1的配置里面,IBGP分为两组(看来昨天的疑问可以得到确定了):

BGP-13 配置BGP多路径发布_vmx_09

3.2 同理R4的配置也一样:

可以很清晰地看到:

group rr里,对等体是R1,所以相应的动作就是接受

group rr_rr里面,就是发送。

BGP-13 配置BGP多路径发布_add-path_10

这里会有一个策略:allow_199:

BGP-13 配置BGP多路径发布_vmx_11

因为AS2里面一共有199和198两条路由,后续会在R4多路径的配置上过滤掉了198。观察他们在R8上的区别。

3.3R8的BGP配置:

很简单,设置多路径接受即可。

BGP-13 配置BGP多路径发布_bgp_12


4.我们已经搭建完了实验环境,开始检查实验现象。

4.1 验证BGP对等体的接受和发送多路径的能力。

      当你在查看bgp邻居的时候,会发现以下字段:  

      NLRI'S for which peer can receive multiple paths : inet-unicast

      NLRI'S for which peer can send multiple paths : inet-unicast

      我们逐个检查:

       4.1.1 R1,显示对端可以receive。

BGP-13 配置BGP多路径发布_add-path_13

       4.1.2 R4,两个对等体。

BGP-13 配置BGP多路径发布_vmx_14

BGP-13 配置BGP多路径发布_juniper_15

        4.1.3 R8  略。


        4.2 检查路由的多路径。

      4.2.1 R1上是不是发布了多个路径。

            结果我们发现一个前缀多个下一跳。



BGP-13 配置BGP多路径发布_bgp_16

   以199为例子,10.0.15.2-R5,10.0.0.20-R2-R6,10.0.0.30-R3-R7。

   4.2.2 R4上是不是接受到了多个路径。

BGP-13 配置BGP多路径发布_bgp_17

    4.2.3 R4发送到R8的多路径。

BGP-13 配置BGP多路径发布_bgp_18

    可以看到198只有一条那就是10.0.0.20的下一跳。这正是我们想看到的。

BGP-13 配置BGP多路径发布_juniper_19

    R4上的策略只允许199多路径发布。

    4.3 R8的BGP路由。

BGP-13 配置BGP多路径发布_add-path_20

    4.4 查看一下199路由的detail。

BGP-13 配置BGP多路径发布_add-path_21

BGP-13 配置BGP多路径发布_juniper_22

BGP-13 配置BGP多路径发布_bgp_23

可以看到不同路径的Addpath Path ID是不同的。

那为什么*的是10.0.0.20呢?



    我最近在根据JUNIPER的官方文档学习BGP,下一节的内容将会是根据多路径进行负载均衡。这是我根据文档做的实验记录和学习笔记,逻辑和思路完全顺着它来,不懂的地方我会查文档标记出来。欢迎大家一起探讨学习。