Technorati 标签: CCIE,MPLS ×××,故障排查,troubleshooting,MPLS

 

Troubleshooting主要从两个层面来进行:

clip_p_w_picpath002

1, 控制层面---路由(和LDP,CEF没有关系)

控制平面主要管的事情是CE之间能通过MPLS ×××相互能学习到路由.

No.1 : CE和CE之间,检查路由相互之间是否学习到。

在图中是R10和R2.

如果R10上面没有通过R8学习到对端R2的CE路由.

No.2 : 这个时候需要到R1的vrf路由表查询是否有学习到R2的路由.

因为路由是从R2往R10反方向传递的。所以本端CE没有路由,需要到对端的PE先进行查看. 在R1上面查看vrf Hank的路由表:

show ip route vrf Hank

如果,R1 vrf没有收到R2的路由,那么应该检查R1 vrf接口下面链接的CE,是否有进行网络的宣告.链路是否有问题等等。这个时候就是IGP的故障排查.R1到R2之间.

如果, R1的vrf学习到了R2宣告过来的路由.那么,

No.3 : 这个时候应该检查R1的MP-BGP中的***v4路由表中,是否有R2宣告的路由.

show ip bgp ***v4 all

如果没有,那说明可能问题存在于:在bgp中的address-family ipv4 vrf xxx中是否没有重分布vrf的IGP路由协议.导致***v4本地没有CE的路由.

那么对于IGP OSPF来说,重分布进入BGP的地址族vrf中,缺省是只重分布Internal的路由.

如果要重分布所有的。应该这样写:

router bgp xxx

address-family ipv4 vrf xxx

redistribute ospf 22 match internal external nssa-external //如果不加,R2上面如果重分布一个外部路由到ospf中,通告到R1 vrf,因为重分布只重分布内部,所以这个时候在R1上面show ip bgp ***v4 all 就绝对看不到那个外部路由.

exit

exit

如果R1上面show ip bgp ***v4能看到相关CE R2宣告的路由,说明重分布是没有问题的.这个时候:

No.4 : R1会通过MP-IBGP将这些×××V4路由传递给R8去.

在R8也是一样, show ip bgp ***v4 all查看***v4路由是否送过来了.

如果这个时候在R8上面看不到路由前缀,可能有下面问题存在:

1)R1和R8的IBGP没有建立邻居. 因为使用的是MP-BGP作为承载协议。

所以使用命令:show ip bgp ***v4 all summary

来查看***v4邻居是否UP起来. 如果没有UP起来,那么就用普通的BGP故障排查来进行查看。

       --本端PE的/32环回要ping到对端PE的/32环回口.

       --update-source 需要使用loopback x

       --在address-family ***v4中,是否有把neighbor acitve.

2)如果邻居起来了,可是依然没有***v4的路由信息在R8上面.

这个时候有可能的原因是:

      ---RT的EXPORT和IMPORT有问题. export和import不匹配.

           show ip vrf detail

在显示信息中,RT的export和import都有明确的说明.

如果两边的PE彼此RT的export和import都相互匹配,还是没有对端CE的路由信息.那么

       ---有可能R1根本就没有发送RT. RT是一个扩展的MP-BGP的团体属性.需要在R1上面检查,是否在address-family ***v4中,neighbor x.x.x.x send community extend.该项默认加载,有可能被人为手工删除.***的时候可能会被删除掉.这个时候虽然两边RT相互匹配,但是因为MP-BGP的扩展属性没有发送,所以RT是不能携带到路由前缀中的.

       ---如果上面说的都有了,那么在R8上面, show ip bgp ***v4 all应该是能看到R2宣告的CE的路由的.这个时候和重分布一点关系都没有.

No.5 : R8收到了×××V4的路由,也正确的重分布了,但是R10收不到.

有可能的原因:

            -----R8关掉基于RT值的过滤,这样的话即使RT不匹配,我这段也能收到相关的***v4路由,但是重分布的时候,即使做对了,也不能重分布进入.例如:

                   router bgp xxx

                      no bgp default route-target filter

                   exit

            检查命令,在R8上面:

             show ip bgp ***v4 all 22.1.1.1 //可以查看相关发送过来的RT export.

             show ip vrf detail //可以看到本端需要接收的RT import是多少.

              ------R8需要重分布bgp到vrf的IGP路由协议中.

                          否则的话, 在R8上面***v4的路由表有相关条目,但是show ip route vrf Hank中,是没有对端R2 CE宣告的路由的.

                           如果IGP是EIGRP的话,在做重分布的时候,需要将Metric的K1-5写进去,默认是无穷大.

                                   router eigrp 99

                                       !

                                      address-family ipv4 vrf Hank autonomous-system 10

                                       redistribute bgp 65000 metric 1000000 1 255 1 1500

                                       network 17.1.1.1 0.0.0.0

                                    exit-address-family

                  ------如果R8 vrf有相关的CE2的路由,那R8到R10之间就用基本的IGP故障排查思路进行故障排查.

2, 数据平面---报文转发(LDP,CEF,label)

当控制层面工作正常以后,数据平面的作用是CE之间相互能传递数据报文.

测试拓扑图,R2--发送数据包--->R10:

clip_p_w_picpath002[1]

当控制层面的问题解决完了,这个时候路由已经相互通告到对端的CE了.

现在是说R2 发送数据包,到R10,是否能正常转发的问题.

No.1 在R1上面看MPLS LDP label.

    对于R1来说,标签有两层,

    外层标签: LDP: 88.1.1.1

     ×××标签:CE的路由(R10的环回口).由MP-BGP进行标签的分发.

     所以,在R1上面,需要查询VRF HANK的cef表.

     show ip cef vrf Hank detail

clip_p_w_picpath004

外层标签,是为bgp路由的下一跳88.1.1.1分配的标签.

这里再说一下309这个公网标签是如何分配过来的.实际上是R3分配的标签通告给R1的.使用LDP协议分配的.为88.1.1.1(R8的环回口)分配的标签.通告给R1.

如果发现,R1只有***v标签(内层标签),没有外层的LDP标签,可能的问题有:

               ---LDP邻居是否有起来.在R1和R3上面show mpls ldp neighbor进行验证.

如果连LDP邻居都没有起来,可能的问题有:

            ----1)ISP域之间采用的标签协议不同导致. LDP && TDP,可能性比较小,***的时候不排除.

            ----2)LDP的transport地址相互不可达. (使能了LDP协议以后,默认的情况是会自动选举一个LDP router-id,默认用环回口,而transport IP默认也是环回口,如果transport IP不可达,LDP的邻居建立无法成功,因为是用transport IP TCP的方式来建立邻居.)------>检查路由器是否忘记宣告环回口进入IGP路由协议中.

R1和R8一般不容易出问题. 而R3很容易出该问题.

用扩展ping来检查即可在R1和R3上面.

如果LDP邻居R1和R3起来了,但是R1依然没有收到公网标签,原因如下:

         1)是否有一些标签的控制机制在作怪.

               R3通告标签的控制.

               R1接收标签的控制.

               show run | in mpls //推荐使用,直接看有没有策略.

              需要关注是否结果包含下面语句:

              发送:

               no mpls ldp advertise-labels //标签发送

               mpls ldp advertise-labels for x to y //标签发送

               标签接收:

               mpls ldp neighbor 55.1.1.1 label accept 1 //仅仅接收LDP neighbor 55.1.1.1所定义的ACL1的允许的标签.

          2)路由器没有启用CEF.

CEF是FIB表,如果没有cef,那么也就没有LFIB.所以对于cisco设备来说,CEF是一定要启用的.否则的话是全部的前缀状态都是no label.

          3) 对于标签,不能只看其中的某个点,而是端到端一路从PE到对端PE看过去.每个设备上面都要有标签。其实简单的办法就是在R1 PE1上面,traceroute 88.1.1.1,看结果是否全部都有标签.能从R1到R8的环回口,那么外层标签是没有问题了.

因为数据到R5出口的时候,因为PHP倒数第二跳弹出机制,已经pop label了,那么最后在R8上面收到数据包的时候只有一个***v4的标签,是mp-bgp分配的,其中可以看到, local=811,而且后面是[V],说明是一个***v4的标签:

clip_p_w_picpath006

最后数通通讯成功:

clip_p_w_picpath008

label=112, 是***v4的内层标签,R1通过MP-BGP分配给22.1.1.1的***v4标签.

506和306都是P设备通过LDP向11.1.1.1(BGP的下一跳)分配的标签.