mpls 多协议标签交换

本文中为了解决“BGP水平分割”的问题举例说明mpls的配置,工作原理。

案例1:

 

 

 

环境描述:

1.中间的黄色区域配置OSPF area0
*宣告回环接口和内网接口
2.配置BGP
*注意AS200中只有R2和R5建邻居
*注意R2和R5需要next-hop-local

 

MPLS配置

 

 

 

什么是LDP?

 -LDP的概念

      标签分发协议LDP(Label Distribution Protocol)是 MPLS 体系中的一种主要协议。在 MPLS 网络中,两个标签交换路由器(LSR)必须用在它们之间或通过它们转发流量的标签上达成一致。

         利用 LDP 交换标签映射信息的两个标签交换路由器(LSR)作为 LDP 对等结点,并且它们之间有一个LDP标签分发协议会话。
         在一个单个会话中,每一个对等结点都能获得其它的标签映射,换句话说,这个协议是双向的。

标签分发协议结构

     

-LDP的4中消息:

(1)发现消息:用于通告和维护网络中LSP的存在;
(2)会话消息:用于建立、维护和终止LDP对等实体之间的会话连接;
(3)通告消息:用于创建、改编和删除FEC-标记绑定;
(4)通知消息:用于提供建议性的消息和差错通知。
 
LDP发现过程中,LSR通过周期性地发送HELLO消息来通告自身的存在。HELLO消息以UDP分组的形式发往“所有路由器”的组播地址。通过相互发送会话消息,l两个LSP将那能够完成初始化国曾,成为LDP对等体。两个LDP对等体之间便可以通过交换通告消息执行标记的分发、收回等操作。而对LDP协议执行过程中出现的差错以及意外事件的报告则由通知消息传递。为了保证这些操作的正确可靠,LDP使用TCP协议传送会话、通告和通知消息。
除发现消息以外的所有LDP消息都被封装在LDP协议数据单元(PDU)中,通过LDP对等体之间的TCP会话连接进行传递。LDP消息封装的方式非常灵活,既不限制一个LDP PDU中承载消息的数量,也不要求这些消息之间存在任何关联。
 
-LDP会话的建立:
    
 在MPLS中,使用标记分发协议交换标记与FEC之间绑定信息的两个LSR称为标记分发对等体。假设由Ru发往Rd的数据流被映射为FEC_F,Ru和Rd经过协商,决定将标记L绑定给FEC_F。于是,就L与FEC_F之间的绑定关系而言,Ru和Rd称为标记分发对等体,作为数据发送方的Ru被称为上游LSR,Rd则相应地被称为下游LSR。注意,所谓标记分发对等关系以及上下游关系都是针对于特定FEC与特定标记之间的绑定而言,是一种基于标记分发协议的逻辑关系,与两个LSR在物理上是否相邻并无直接联系。
 
-LDP 会话的维护
 
     LDP会话的建立取决于两个LSR之间是否存在相应的HELLO邻居关系以及各自的会话参数能否为对方所接受。要将新建的会话保持下去,也需要以这两个条件继续成立为前提。

-LDP的工作阶段:

     1.邻居发现,使用UDP 646报文,周期性发送,周期时间为5S
      2.会话建立,使用tcp 646报文,周期性发送,周期时间为15s
         如果45s收不到,那么邻居就挂掉了。

mpls工作过程:

1.LDP不为BGP路由分配标签,仅仅为IGP分配标签
2.按照BGP路由转发的数据包,使用的标签信息,是:去往这个BGP路由的下一跳IP地址时,所使用的标签
例如在R2上:
去往10.10.6.6/32时,必须走10.10.5.5
但是去往10.10.5.5时,使用的是OSPF路由,所以LDP会为该路由分配一个标签(1026)

查看相关信息

*查看mpls标签表:

      display mpls lsp

 

 

*查看路由标签表

      display ip routing-table 10.10.6.6 verbose -->关注tunnel ID

   

 

 

*查看mpls标签表,详细信息

       display mpls lsp verbose -->关注 token

      

 

 

*查看mpls ldp邻居表

         display mpls ldp peer

  

 

 

*查看mpls ldp 会话

          display mpls ldp session
                   mpls ldp会话,使用的是tcp会话,主动方发起连接的端口号是随机的,被动方固定
                   IP地址大的一方是主动发起方,IP地址小的一方是被动方。
                    只有建立会话之后才会传递标签

   

------------------------------------------------MPLS的应用----------------------------------------------

1.代替传统的IP路由转发

2.MPLS-VPN 

    VPN:virtual  private  network  虚拟专用网络

    常见的分类:

         1. 1层VPN---专线(电话线拨号)

          2. 2层VPN---通过2层技术实现的VPN(pptp vpn和 l2pt vpn)

                &MPLS--VPN属于2.5层VPN

          3. 3层VPN---通过3层技术实现的VPN(ipsec vpn)

在运营商售卖自己的MPLS-VPN业务的时候,必然会遇见以下的问题:

 

 

        1. 在运营商的边界设备上,同时连接多个VPN客户的时候,边界设备如何区分不同的VPN客户的相同的私有网络的条目?

               解决方案:

                      我们在边界路由器上,使用VRF(virtual  router  forwarding)技术,将一个真实的路由器虚拟成多个虚拟路由,每个虚拟路由器都对应着一个VPN客户。

                       虚拟路由器之间,是完全隔离的,不能相互访问的。

                       但是,在华为设备上,VRF这种技术,在配置命令中,使用的名词叫做vpn-instance;

                       即每个vpn-instance,就是一个“虚拟路由器”。

                        所以,我们在同一个边界路由器上,创建多个VPN实例,分配给每个VPN客户。

                      每个VPN实例都有一个名字,名字不能相同。

           2.运营商的边界设备上可以学习到自己相连的每个VPN客户的路由,那么接下来需要考虑的就是让不同的VPN客户的路由,进行相互传递。

             那么,此时能够在边界设备之间传递路由的协议,我们只能选择BGP。

             但是,通过BGP传递路由的时候,我们知道:BGP永远值传输那个“最好”的路由,即前面带着“>”的;

            因为,在边界路由器上,无论是哪个虚拟路由器,他们的路由必须宣告进入到BGP协议;

            一旦宣告,BGP这个协议该如何区分不同的VPN客户的路由呢?

                    解决方案:

                              为了能够让BGP在传递VPN客户路由的时候,区分出不同的VPN路由。

                              我们在这些路由条目前面添加了一个字段,叫做:RD(route distinguisher),即路由区分符;

                               RD长度是64bit;

                               但是平时BGP传递的IPV4路由,长度为32bit;

                               所以,此时BGP所传递的VPN客户路由应该是:64+32 =96bit,这种路由我们称之为:VPNV4路由。

                              那么,我们平时使用的传递IPV4路由的BGP,我们就统称之为BGP;

                               现在传递VPNV4路由的BGP,我们应该称之为:MP-BGP(多协议的BGP),

                               即这个BGP协议,什么类型的路由,都能传递

                               比如:IPV4/VPNv4/IPV6/组播路由

                              MP-BGP为了区分不同类型的路由的操作命令,在配置模式中,针对每种协议都开发了一个对应的

                               address-family

               3.一旦VPN的路由,通过MP-BGP协议传递到了对端的“边界路由器上”,此时就会面临着另外一个问题;

                    众多的VPN客户端,应该如何准确的放入到“边界路由器”上的各个“虚拟路由表”中;

                     每一个VPN客户的路由,曾经宣告进入到MP-BGP协议的时候,都会携带一个RT,比如是1:1

                      那么。这个路由到了对端的边界设备上的时候,就会检查对端设备上的每个VRF中的已经配置好的“入向RT”,

                      如果有一个VRF的入向RT也是1:1,那么久表示:该VRF,仅仅接收那些带着1:1的VPN客户路由。

                     每个虚拟路由器中,都包含了2中类型的RT;

                                -出向RT,即当路由从虚拟路由器中,宣告进入到MP-BGP协议时,所需要携带的RT

                                -入向RT,即该数值直接决定了“该虚拟路由器”会接收哪些VPN客户路由。

                                     只有当VPN客户路由中的RT和自己的VRF中的入向RT相同的时候,才会接收。

                4.配置

                   *配置R2-R5的接口IP地址,R2的1口和2口先不创建IP,R5的0和2口先不用创建IP(忽略)

                   *配置黄色区域ospf area0,R2和R5只宣告回环接口和运营商内部接口(忽略)

                   *注意R2和R5要配置一个loopback0 接口,IP分别:10.10.2.2 ;10.10.5.5 ,要宣告进入到OSPF中去

                     否则后面R2和R5通过loopback0 无法建立MP-BGP邻居。

                   *mpls配置

                        R2:

                             MPLS   lsr-id  10.10.2.2

                             mpls

                             quit

                              mpls  ldp

                              quit

                              int g0/0/0

                              mpls

                              mpls  ldp

                               quit

                         R3:

                             MPLS   lsr-id  10.10.3.3

                             mpls

                             quit

                              mpls  ldp

                              quit

                              int g0/0/0

                              mpls

                              mpls  ldp

                               quit

                              int g0/0/1

                              mpls

                              mpls  ldp

                               quit

                           R4:

                             MPLS   lsr-id  10.10.4.4

                             mpls

                             quit

                              mpls  ldp

                              quit

                              int g0/0/0

                              mpls

                              mpls  ldp

                               quit

                              int g0/0/1

                              mpls

                              mpls  ldp

                               quit

                         R5:

                             MPLS   lsr-id  10.10.5.5

                             mpls

                             quit

                              mpls  ldp

                              quit

                              int g0/0/1

                              mpls

                              mpls  ldp

                               quit

                   *虚拟路由器配置

                       R2:

                            #为A公司的客户,创建虚拟路由器A1

                            

 

                                      测试:

                                             在R2上ping -vpn-instance  A1  192.168.1.1,结果是通的!

                                       

 

                                                    测试:

                                                         在R2上ping -vpn-instance  B7  192.168.1.7,结果是通的!

                                                   

 

                                                     

 

                                                                 测试:

                                                                        在R5上 ping -vpn-instance  A56  192.168.2.6,结果是通的!

                                                              

 

                                                                      

 

                             *在边界路由器之间,建立MP-IBGP邻居关系;

                                   R2:

                                       BGP  200

                                        router-id  2.2.2.2

                                        peer  10.10.5.5 as-unmber  200

                                        peer 10.10.5.5  connecct-interface   loopback 0

                                        ipv4-family  unicast

                                               undo  peer  10.10.5.5 enable

                                                quit 

                                        ipv4-family  vpnv4

                                              peer   10.10.5.5  enable                      

                                              quit

 

                                        

 

 

                         *运营商的边界路由器,应该讲VPN客户的路由,宣告进入到MP-BGP协议,从而传递到对端设备上;

                              1.首先在R2上,添加一个去往A客户的路由条目

                                    ip  route-static  vpn-instance  A1  10.10.1.1   32   192.168.1.1

                               2.将添加好的VPN客户的路由,宣告进入到MP-BGP协议中

                                  bgp   200

                                       ipv4-family   vpn-instance   A1

                                          network  10.10.1.1  32

                                          quit

                                 3. 宣告成功之后,该路由正式进入到VPNv4的BGP数据库中。

                                         查看vpnv4  BGP数据库:

                                        

 

                               4. 但是在R5上查看的时候,并没有收到R2传送过来的VPNV4路由条目

                                   因为,运行MP-BGP协议传递VPNV4路由的时候,默认有一个策略:过滤RT,

                                   即,接收一个VPNV4客户路由的时候,该路由是必须携带着RT属性的(VPN-target)

                                  

 

                          5. 所以我们需要在R2上:将vpn-instance A1中的IPV4路由变成VPNv4 路由的时候,不但要为路由添加一个RD ,还得需要添加一个RT。并且,添加的仅仅是“出向RT”。

                              所以,为虚拟路由器A1配置如下命令:

                                       ip  vpn-instance  A1

                                       VPN-target  16:1   export-community 

                         6.为了能够让R5正常接收R2传递过来的VPNV4路由,并且放入到同一个客户的分公司对应的虚拟路由器A56中,

                           所以我们需要在R5上配置:

                                    ip  vpn-instance  A56

                                     VPN-target   16:1   import-community

                         7. 此时检查R5本地的,VPNv4的数据库,以及虚拟路由器A56的路由表,查询命令:

                                  display  bgp   vpnv4  all  routing-table  

                              

 

                                 display   ip  routing-table  vpn-instance A56

                                 

 

                            此时,R2就通过 MP-BGP ,将客户A的总公司的路由,传递到了分公司的边界路由器上。

                            接下来,我们想办法让R5,将客户A的分公司的路由,传递到R2上;

                              1. 在R5上的虚拟路由器A56中,添加一个去往分公司的路由条目

                                     ip  route-static  vpn-instance  A56  10.10.6.6  32   192.168.2.6

                               2.在R5上,将上述的静态路由,宣告进入到MP-BGP协议中,变成VPNV4路由;

                                         bgp 200

                                              ipv4-family   vpn-instance  A56

                                              import-route  static

                                              quit

                                3.为了能够让该路由传递到R2那边,并且被正常的接收,所以我们需要配置vpn-target,

                                        -R5需要:配置A56  的出向 RT ,比如可以设置为16:6

                                       -R2需要:配置A1 的入向 RT , 此时必须设置为 16:6

                                        

 

                                   4.此时我们在R2的BGP数据库中,以及A1的路由表中都可以看到R6的路由条目。

                                       但是我们在VPN客户的公司和运营商之间,并没有运行动态路由协议。

                                       所以,为了能够让VPN客户A的总公司和分公司互通。

                                       我们需要在客户的公司设备上,添加额外的路由条目:

                                         R1:

                                                ip  route-static   0.0.0.0  0  192.168.1.2

                                          R6:

                                                ip  route-static   0.0.0.0  0  192.168.2.5

                                           此时,我们在R1 上进行测试,可以与R6互通:

                                            <R1> ping -a  10.10.1.1   10.10.6.6

------------------------------------------------------------------------------------------------------

分析:R1> ping -a  10.10.1.1   10.10.6.6的数据转发过程

    1. 因为R1是标准的IP路由器,所以去往目标IP地址时,查看的是路由表:

 

     通过以上信息可知:数据包应该发送给R2;

2.R2在属于vpn-instance  A1的接口g0/0/1,收到一个标准的IP数据包:

    所以R2应该查找关于虚拟路由器 A1 的IP路由表(详细信息)

<R2>display  ip  routeing-table  vpn-instance  A1  10.10.6.6  verbose

 

 通过以上信息可知:去往10.10.6.6时,使用的路由条目是IBGP 路由:10.10.6.6/32

 并且该路由是携带者“标签”的 ------ label:1027;

但是,想要去往 10.10.6.6,必须得首先去往下一跳IP地址:10.10.5.5。

但是,去往该下一跳IP地址的时候,需要走的是标签隧道,因为Tunnel ID是0x9 ,即非0

所以,我们接下来需要查看本地的“标签转发表”的详细信息:要找到某个LSP的TOken的值为 0x9

查看信息如下:

《R2》display  mpls  lsp  verbose

通过以上信息可知:

    数据包应该从G0/0/0转发出去,并且再次添加一个出向标签(out-label:1028)

所以,在 R2-R3之间抓包,我们会发现,此时的数据结构应该是:

【2层头部】+【1028】+【1027】+【IP头部】+数据+【2层头部效验和】

3.数据包从R2发送出来,到了R3后,R3能够辨别出:当前收到的数据包时一个“标签”包;

 所以R3应该查找自己本地的“标签转发表”

因为该数据包,带了多个标签,所以必须得注意:查找标签的时候,仅仅关注“顶层标签”

所以我们要在R3的标签转发表中,找到一个条目,关注入向标签是:1028

 

 

 通过以上信息可知:

       我们需要将标签1028,交换成1025.然后从端口g0/0/0转发出去,

      此时的数据包结构是:

    【2层头部】+【1025】+【1027】+【IP头部】+数据+【2层头部效验和】

 4.数据包从R3发送出来,到了R4后,R4能够辨别出:当前收到的数据包是一个“标签包”  :

   所以R4应该查找自己本地的“标签转发表”

   因为该数据包,带了多个标签,所以必须得注意:查找标签的时候,仅仅关注“顶层标签”                           

     所以我们要在R4的标签转发表中,找到一个条目,关注入向标签是:1025       

 

 通过以上信息可知:

      我们需要将标签1025,交换成 3.然后从端口g0/0/1转发出去

       即,就是将标签1025弹掉

       此时的数据包结构是:

     【2层头部】+【1027】+【IP头部】+数据+【2层头部效验和】

5.数据包从R4发送出来,到了R5后,R5能够辨别出:当前收到的数据包时一个“标签”包;

    所以R5应该查找自己本地的“标签转发表”

    此时,该数据包仅仅携带了1个标签

     所以我们要在R5的标签转发表中,找到一个条目,关注入向标签是:1027 

 

 通过以上信息可知:

         应该讲数据包中的标签 1027干掉,因为对标签的出向动作设置的null(空)

         但是,在这个标签转发条目中,又没有明确的说明“出端口”到底是谁?

          仅仅是告诉我们应该去查找“虚拟路由表” - A56。

          因为,前面的标签处理动作是NUll,所以现在的数据包应该是一个标准的“IP数据包”。

           所以,我们应该查找虚拟路由器 A56的路由表,信息如下:

          

 

       按照上面同样的过程:

                     R6返回给10.10.1.1的数据包,也是可以顺利返回给R1的。

 ---------------------------------------------------------------------------------------------------------------------------------------------------

 

 

接下来,我们需要将VPN客户B的总公司和分公司之间的路由,搞通!

并且,我们在公司和运营商之间的链路上启用OSPF协议,进程号规定为 78

 配置如下:

       

 

      

 

      

 

      

 

 通过上面的操作:

           R7的10.10.7.7/32,就可以发送到R8上;

           为了能够让R8 的路由,发送到 R7上。

           所以,我们继续下面的配置:

          

 

          

 

 MPLS-VPN之域间VPN

 

 配置思路:Option-A

      1.配置AS100

            -接口IP地址

            -配置OSPF

            -配置MPLS

            -配置PE-ASBR之间的MP-IBGP邻居关系

      2.配置 AS200

             -配置接口IP地址

             -配置OSPF

             -配置MPLS

             -配置PE-ASBR之间的 MP-IBGP 邻居关系

       3.配置CE-R7

             -配置接口IP地址

       4.配置CE-R8

             -配置接口IP地址

       5.配置PE-CE之间

             -配置OSPF协议,确保PE-CE之间可以互相学习路由 

       6.配置ASBR-ASBR之间

       7.测试R7和R8之间的回环口的互通

 配置命令:

             

 

             

 

          

 

         

 

         

 

         

 

          

          

 

           

 

 

           

 

           

 

           

 

            

 

            

 

            

 

            

 

           

 

           

 

-------------------------------------------------------------------------------------------------------------------

CE-R7的基本配置:

 

 

 

 

PE-CE之间使用OSPF协议,规划区域为0 ;

并且在PE上使用的 OSPF 进程号为 2;

 

 

 

 此时,就能够获得从CE-R7学习过来的路由条目:10.10.7.7/32

   

 

  

 

     此时,就能够获得从CE-R7学习过来的路由条目:10.10.8.8/32

   

 

 

 

 此时,在ASBR-R3的虚拟路由器A中,可以看到通过MP-IBGP学习过来的路由条目;

 

  此时,在ASBR-R4的虚拟路由器A中,可以看到通过MP-IBGP学习过来的路由条目;

------------------------------------------------------------------------------------------------------------------------

此时,我们需要思考的是:在ASBR-R3 和  ASBR-R4之间是如何传递这些VPN客户的路由的。

在该拓扑中,为了简化,我们在 ASBR-ASBR之间使用“静态路由”的方式。

@在 ASBR-R3上添加“虚拟路由器A”中的静态路由,去往 10.10.8.8/32

IP route-static VPN-instance A  10.10.8.8  32  192.168.34.4

@配置 ASBR-R3 上的出向 RT ,然后将VPN-instance A 的静态路由,宣告进入到MP-BGP

 

 

 

 ----------------------------------------------------------------------------------------------------------------------------------------------------

 

 

 

 

 ------------------------------------------------------------------------------------------------------------------------------

   最终,在R7上面进行连通性测试:

 <R7> ping  -a  10.10.7.7  10.10.8.8 ,结果是通的!

 -------------------------------------------------------------------------------------------------------------------------------         

 以上数据包的流程分析:10.10.7.7-------->10.10.8.8

 

 

         

 

            

 

              

 

                            ------>disply  mpls   lsp  verbose

                                         ....................

                                         Out-Label           :      1025                -----使用该转发条目出去的时候,标签使用1025

                                         Token                 :     0x3                 -----等于 Tunnel ID

                                         ......................

                   

 

                 

 

                 

 

                 

 

                

 

                

 

                

 

                

 

                

 

                

 

               

 

               6.携带着2层标签的数据吧,发送给了 R5 ,此时R5仅仅关注 顶层标签 1024,查找标签转换表中的入向标签为1024的转发条目:

                

 

                

 

                 

 

                         R7----IP包---R1---标签包-(2个标签)--R2----标签包(1个标签)---R3----IP包----R4----标签包(2个标签)----R5-----标签包(1个标签)-----R6-----IP包---R8

          

   ------------------------------------------option-B------------------------------------------------------

上述的拓扑中,R7要核R8通信我们需要做以下配置:

-在ASBR之间传递VPN客户路由:之前的方法叫做Option-A

 1.在ASBR上,为vpn客户创建虚拟路由器

 2.在ASBR之间,链路需要键入到虚拟路由器中

 2.在ASB之间的虚拟路由器之间,传递路由     

优点:

       -配置简单,好理解

缺点:

       -ASBR设备的开销非常大,如果R1这边有很多个VPN客户,那么R1上就需要创建很多个vpn实例,R3(ASBR)也要创建这么多个vpn实例来接收vpn路由。

      -ASBR之间需要连接大量的互联链路,每个虚拟路由器都需要1个

特点:

       1.ASBR之间传递的是IPV4路由,转发的标准的IP数据包,不支持标签

        2.一个运营商可以看做是另外一个运营商的VPN客户(vrf-to-vrf)

针对上述的ASBR之间存在的“缺点”,我们建议:

     在ASBR之间的“1个”链路上,同时传输多个“vpn客户”的路由:

      此时,有可能面临的问题是“在同一个链路上”,如何区分不同的vpn客户的路由?

     那么,我们为不同的VPN客户的路由,添加一个RD。

     所以,我们需要在ASBR的一个链路上,需要传输的是:RD_IPV4路由

     也就是所谓的vpnv4路由

      所以,言外之意,我们需要在ASBR之间建立一个MP-BGP邻居关系

      通过这一个邻居关系,同时传递多个VPN客户的路由

     同时,既然我们再ASBR之间建立的MP-BGP邻居关系

     所以,我们就不需要在ASBR上创建很多个VPN-instance了

     但是,每个PE将VPN客户的路由通过MP-IBGP邻居关系传递到ASBR的时候,

     都是携带着 vpn-target,如果我们在ASBR上不创建 vpn-instance ,就会导致 ASBR 因为 policy vpn-target,

      不接收 vpn客户的路由

      所以,在该解决方案中,我们必须得在ASBR上,关掉vpn-instance 的policy vpn-target(过滤策略)

  最终:

       我们在ASBR之间:

              1. 建立的MP-EBGP邻居关系

              2.在ASBR上,不需要创建 vpn-instance 了

              3.在ASBR上,关掉vpnv4路由的 RT过滤策略

              4. 最终在 ASBR之间,传递的是带有标签的数据包           

配置:

       

 

       

 

 通过上述的配置,ASBR之间可以建立MP-EBGP邻居关系

 但是,

       CE-R7 通过 ospf 传递路由给PE-R1 ;

       PE-R1 通过 MP-IBGP 传递路由给 ASBR-R3 ;

       此时, ASBR-R3 因为收到的是一个VPNV4路由,并且默认情况下需要对这种路由执行“RT过滤策略”

        导致,ASBR-R3 本地因为没有配置vpn-instance ,更没有入向RT

        所以,ASBR-R3 不接收 PE-R1传递过来的VPNV4路由

        为了解决该问题,我们再ASBR-R3上,关闭掉vpnv4路由默认的“RT过滤策略”

命令如下:

        

 

 同时,我们在ASBR-R4 也能看到从R3学习过来的路由;

但是,ASBR-R4连接ASBR-R3的接口,不支持“标签数据包的转发”

所以,我们在 ASBR-R4 连接ASBR-R3的接口上,开启MPLS就可以了;

  

 

 此时,CE-R7也能收到CE-R8的路由,测试两者之间,可以正常互通!

总结:

      底层标签,是分配给VPNV4路由使用的,是通过MP-BGP 协议分配的;

                       是由“传输vpnv4”的路由MP-BGP邻居路由器分配的;

      顶层标签,是分配给 ipv4(IGP)路由使用的;是通过LDP协议分配的;

                         是由“传输IPV4”的路由IGP(ospf/isis)邻居路由器分配的;

Option-B:特点

在ASBR之间传递VPN客户路由:

   1. 在ASBR中间传递的是VPNV4路由

   2.在ASBR上不需要创建虚拟路由器

   3.在ASBR上需要关闭“RT”过滤策略

  4.在ASBR之间的链路,要启用MPLS

缺点:

  ASBR这种设备同时扮演了“路由传递”和“数据转发”的动作;为了 实现不同的AS之间的VPN客户的路由传递,则必须确保

 每个ASBR必须拥有自己AS内的所有的VPN客户的路由。

 所以,ASBR的压力是非常大的,面临着不断增加的VPN客户,ASBR就会成为“瓶颈”。

方案:

        我们系统“路由传递”和“数据转发”这两个活儿能够在ASBR上区分开。

例如:

       在每个ASB内存在大量IBGP邻居关系的时候,为了简化内部BGP架构肯定需要部署“路由反射器-RR”,即每个内部邻居都会和RR建立IBGP

       邻居,既然如此,我们可以将每个PE设备都和RR建立VPNV4邻居,这样的话,VPNv4邻居关系中,RR就可以同时拥有该AS内的所有的

        PE上的各种VPN客户的各种路由条目。

       那样的话,我们直接在不同的AS中的RR之间,建立MP-BGP邻居,

       传递vpnv4路由,就可以了。

       此时的ASBR,仅仅负责vpn客户之间的数据包转发。

        那么,这种在“不同的AS的RR之间,建立MP-EBGP邻居,传递vpnv4路由”的方案,称之为“Option-C”       

 -----------------------------------------------Option-C1--------------------------------------------------

 

 配置思路:

   确保R2和R5之间的回环口可以互通;

    即要将 AS 100的内部路由和AS 200 的内部路由,互相传递。

     不同的AS 之间的IPV4路由,常用的传递方式IPV4 BGP

 

 

 

 

 

 通过以上配置,R2和R5就可以互相学习到对方的loopback 0

然后,接下来在两者之间,建立一个vpnv4 的MP-EBGP邻居关系。

 

 但是,上述的RR-R2和RR-R5,都没有与自己AS内的,连接VPN客户的PE设备建立MP-BGP邻居,

所以,我们现在让RR-R2和PE-R1建立邻居;RR-R5 和 PE-R6 建立邻居。

 

 

 

 

 

 同时,我们需要关注的是:ASBR之间曾经建立的VPNV4的邻居可以删除,仅仅保留IPV4的BGP邻居关系。

 

 此时,两边的路由就可以互相学习了!!!

 但是,两边的数据包依然是无法互通,原因:R2和R5建立邻居时所使用的回环口的路由条目,是没有标签的。

因为,这两个回环口的路由,是通过普通的IPV4的bgp协议来分配的。

无论是LDP,还是MP-BGP,都不会为IPv4的BGP路由分配标签。

为了能够让这两个路由都有标签,我们只能通过“人为的操作”,即使用路由策略。

比如:我们希望AS100的ASBR-R3 将路由10.10.2.2/32通过BGP传递给R4的时候,添加标签:

同时,R4传输给R5的时候,也可以添加标签。

 

 

 

 

 通过上面的配置,我们就可以在R5的IPV4的BGP的数据库中,查看到10.10.2.2/32

是有标签的。

然后,我们希望AS200的ASBR-R4将路由10.10.5.5/32通过BGP传递给R3的时候,添加标签的同时,R3传输给R2的时候,也可以添加标签。

 

 

 如果想查看10.10.2.2/32 和 10.10.5.5/32的BGP 路由的标签

可以在R2/R3/R4/R5上,通过以下命令查看:

display  bgp  routing-table  label ------->查看的数据库中带着标签的BGP路由条目

此时10.10.7.7 和10.10.8.8是可以互通的!

---------------------------------------Option-C2-------------------------------------------

 

 

在上述的Option-C1方案中,我们在两个AS的RR之间,建立vpnv4邻居关系

关键的问题是:

       我们需要在AS之间,通过普通的ipv4 BGP,互相传递双方的 RR 的回环口路由。

      但是,为了最终的 VPN 客户数据通信,我们需要确保这两个回环口的路由,得是有“标签”的。

      因为,传递这个路由的时候,使用的是BGP协议;所以默认情况下,没办法为 BGP路由产生标签。

      所以,我们在IPv4 BGP 邻居之间传递路由的时候,通过策略的方式,为路由产生,并且发送标签信息。

       那么,如此一来,就必须有一个前提:

              AS内部以及AS之间,存在大量的 ipv4 BGP邻居关系。

        如果,我们将上述方案中“AS内部都使用BGP”来简化一下,即:仅仅在AS之间使用BGP,在AS内部没有BGP。

        在AS内部,仅仅是通过 IGP 协议通信,在AS 之间依然通过BGP通信。

         所以,我们在 AS 之间,依然是通过对BGP协议使用策略的方法,产生并传递标签;

         但是,我们在AS内部,通过 LDP 为 ASBR之间传递的 BGP路由分配标签,就可以了

          当然,LDP 默认情况下,是不会为BGP路由分配标签的。

           但是,我们可以额外开启 LDP 为 BGP 分配标签的功能。

这种解决方案,叫做:Option-C2

配置命令:

 

 

 

 @每个 ASBR 从对端的 AS 收到路由以后,引入到IGP 协议中,确保自己的AS的RR可以收到路由。

 

 

 

 @通过上述的操作, RR-R2 和 RR-R5 都可以学习到对方的路由,但是这些路由是没有标签的。

 

 此时,通过BGP协议,从R4学习过来的10.10.5.5/32,就可以发送给R2 ,并且都有标签信息了。

ASBR-R4:

        mpls

            lsp-trigger  bgp-label-route ---> 让 LDP 协议,为那些曾经带着标签的BGP路由产生标签信息;

 此时,通过 BGP 协议,从R3 学习过来的 10.10.2.2/32,就可以发送给 R5 ,并且都有标签信息了。

-------------------------------------------------------------------------------------------------------------------------

PE-CE 之间的路由协议 之 OSPF

@ domain -id : 用来标识和区分不同的域;影响不同的VPN站点之间的路由是通过几类LSA表示的;

                        默认情况下,我们在PE设备上的VPN-instance中启用的OSPF协议,是没有domain-id,也可以将其称为null,或者0.0.0.0;

PE-CE之间如果是OSPF协议的话,VPN客户站点的OSPF路由属性信息,会携带到vpnv4 路由的BGP属性中,到了对端的PE,

就可以通过其中的一个参数 doamin-id来与自己本地的虚拟路由器中的OSPF进程设置的 domain-id来比较;

如果两者相同,则对端的VPN客户路由,以3类LSA的形式进入到本地虚拟路由器;

如果两者不相同,则会以5类LSA的形式进入到本地的虚拟路由器。

为了体现domain-id的作用下面我们在R8上将引入到OSPF 2中的静态路由的类型改为1 ,cost改为88:

    [R8-OSPF-2]import-route  direct  type  1 cost  88

然后在R6上查看链路的信息:display   ospf  lsdb  ase   88.1.1.0

    

 

 【R6】display  bgp vpnv4 all  routing-table  88.1.1.0

#domain-id,用于确定 不同站点之间传递路由时,LSA的类型;相同就是3类;不同就是5/7类

#OSPF RT ,表示的是该路由当前在自己的站点内是什么类型的LSA;

                       0.0.0.0,表示的是该路由当年所在的站点中的OSPF区域号;

 

                             5    ,表示的是该路由当年所在的站点中的LSA的类型,

                                        但是对于5/7类LSA而言,分为type 1 和 type  2;

                            1     ,表示的是该路由当年在自己的站点内是5类LSA中的type  2  ; 0表示type  1

#OSPF  ROUTER ID ,表示的是该路由所在的站点内的 PE 设备的 OSPF router-id ;

环路和次优路径

当PE-CE之间运行的协议为OSPF的时候,并且一个CE同时连接着同一个AS多个PE的时候,此时就有可能形成OSPF路由环路

为了防止路由环路的发生,我们在使用OSPF的两种属性来防止环路:

     1.DN  ,使用于 3/5/7类LSA;

                 当PE设备(ABR/ASBR)向CE产生LSA的时候,都会将DN设置为1 ;

                  那么,同时连接着CE的另外一个PE,一旦受到一个CE发送过来的LSA,并且发现其中的DN为1,

                 此时知道:这个LSA当时是由其他的PE刚刚从MPLS-VPN骨干网传递给CE的;

                 现在,PE为了防止CE的这个路由,再次通过自己返回到 MPLS-VPN骨干网,

                 所以,就不会使用这种DN为1 的LSA来计算路由。

      2.VPN  route , 仅仅适用于 5/7 类 LSA ,因为只有5/7 类的LSA才可以设置 tag 。

                             当PE 向 CE 发送OSPF 路由的时候,我们可以通过以下三种方法为 5/7类的LSA设置 tag:

                                  -import-route  后面直接跟 tag 字段,设置tag值

                                 -route-tag   后面跟tag值

                                 -default  tag ,后面跟tag值

                             那么这种带着tag数值的LSA,就会通过CE 传递到另外一个PE设备上。此时的PE就会使用本地的 vpn-instance 中运行的 OSPF协议中

                            设置的 route-tag 数值和收到的 LSA 中的tag数值比较:

                                       -如果相同,则直接不使用这个LSA来计算路由,从而防止环路

                                       -如果不同,则可以使用这个LSA来计算路由。

------------------------------------------MCE----------------------------------------

MCE:(multi-vpn-instace CE)

      通常情况下,我们是在PE设备上创建多个vpn-instance,为的是区分不同的VPN客户的路由。

     但是,这种技术,我们也可以使用在vpn客户公司的边缘设备-----CE上。

       目的就是为:在节省设备开销的情况下,通过一个设备区分不同的业务流量,从而实现对数据的保护。
      一旦在CE设备上,也使用了vpn-instance,并且,我们再CE 和 PE之间使用的路由协议依然是OSPF。

       那么此时的PE和CE就都变成了ABR。

        所以,运营商的PE设备,再将路由发送给CE的时候,将DN设置为1.

         但是,MCE此时也是ABR,那么久会检查这个DN bit,从而不能使用该LSA计算路由。

         结果,PE和CE 之间,能够正常传递LSA, 但是没办法计算路由。

        为了解决该问题,我们可以在MCE设备上,使用以下命令:

       

PE-CE 之 OSPF 次优路径 

案例:

 

背景描述:

       当PE-CE 之间是OSPF协议的时候,一定要确保在VPN客户的公司网络中,区域0,一定要是连续的。

       即,如果我们在PE-CE之间使用了 OSPF区域中,那么在VPN客户的公司内部,就不建议再次使用区域0了。

       如果我们PE-CE之间使用的不是区域0,是其他的非骨干区域。

       那么,如果我们在VPN客户公司内部存在的区域0,那么就必须得通过PE-CE之间的区域建立一个虚链路,

        确保:

               vpn客户的公司内部网络中,仅仅允许存在一个区域0,并且是连续的。

         如果,在一个vpn客户的不同站点的分公司内,我们使用的OSPF区域都是相同的,

         并且,为了增加vpn站点之间的通信的可靠性,我们在VPN站点之间建立一个“备份链路/后门链路”

         这样一来,当MPLS-VPN 业务出现故障以后,站点之间的流量,就可以通过后门链路进行通信。

         但是,

                当我们在VPN站点之间建立后门链路以后,站点之间的通信流量,后优先选择“后门链路”。

          因为,

                  站点之间的 OSPF 路由,一旦通过 MPLS-vpn 超级骨干区域传递,到了对端的站点后,这些OSPF 路由,就会分别为3/5/7

                  类LSA的形式,进入到其他站点。

           但是,

                  站点之间如果通过 后门链路 建立了OSPF邻居,那么站点之间传递的就直接是 1 类 LSA,

             而,在OSPF协议中,不同类型的LSA 的优先级是不同的,优先级如下(一次降低):1>3>5>7

           所以,

                  如果我们想让站点之间的链路真的作为“备份链路”出现,

                  那么我们必须经过MPLS-VPN 骨干网,也能学东西到 1类LSA

           那么,

                 此时我们必须通过MPLS-VPN骨干网,也建立一个属于vpn客户网络中的相同的OSPF区域的邻居关系

                 在该案例中,我们在VPN客户网络中,使用的OSPF区域是 区域0.

          所以,我们也需要跨越mpls-vpn 网,建立一个虚拟的链路,并且是属于OSPF区域0.这种跨越MPLS-VPN骨干网建立虚拟链路的技术,

                 称之为 sham-link 

配置方法:

    @在PE设备上,专门建立一个稳定的接口,用于OSPF sham-link 的建立

    @在PE设备上,将回环口宣告进入到MP-BGP,确保回环口之间是可以互通的。

    @在PE设备上,通过VPN-instance 中的OSPF 进程,建立OSPF sham-link;

    @在VPN站点之间的后门链路的设备上,修改后门/备份链路的接口的cost(开销),改大;

配置命令:

     

    

 

 此时,两个回环口,是可以互相ping通的。

<R1> ping  -vpn-instace  A -a  10.10.16.1   10.10.16.6

 

查看 sham-link的状态:

    display   ospf  sham-link

 

 此时,我们再次在R10上查看去往R11接口的IP地址,使用的路由下一跳IP地址是R7,不是R11。

<R10>display  ip   routing-table 10.10.11.11 

posted @ 2021-06-28 17:37  园来是伱  阅读(886)  评论(0编辑  收藏  举报