CCIE V5.0 TS 之 MPLS VPN网络Traceroute问题分析

更新时间:2023-10-22 18:57:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

CCIE V5.0 TS

MPLS VPN网络Traceroute问题分析

一、 实验背景

在CCIE V5.0的TS中,第8题关于MPLS VPN的题目中,当HUB网络(如R7)没有发布默认路由给SPOKE(如R9)的时候,仅发布172.16.0.0/16路由,SPOKE网络(如R9)通过该路由也可以和HUB网络中相应的网段通信,但是在Traceroute的时候会出现一个现象,如下所示,第3跳显示的是星号;

R9# traceroute 172.16.0.1

Type escape sequence to abort. Tracing the route to 172.16.0.1

VRF info: (vrf in name/id, vrf out name/id) 1 123.45.67.29 9 msec 9 msec 9 msec

2 123.45.67.17 [MPLS: Labels 19/17 Exp 0] 9 msec 10 msec 9 msec 3 * * *

4 123.45.67.22 9 msec * 9 msec 当HUB网络(如R7)发布默认路由给SPOKE(如R9)的时候,则Traceroute的结果中,不会显示星号,原因是什么?

二、 实验目的

本实验目的旨在模拟TS中的MPLS VPN网络,解答上述提到的疑问,并分析遇到的新问题。网络拓扑如下,其中R1和R5为CE,R2和R4为PE,R3为P;使用GNS3进行模拟实验。

骨干网运行在ospf area0中,PE和CE之间运行EBGP;PE上的VRF配置也模拟TS网络中的情况,R2和R4的VRF配置如下所示: R2

ip vrf A rd 1:1

route-target export 1:3 route-target import 3:1 R4

ip vrf B rd 2:2

route-target export 3:1 !

ip vrf C rd 3:3

route-target import 1:3

完成配置后,可以重现TS网络中出现的问题,如下所示:

R1#traceroute 5.5.5.5 sou 1.1.1.1

Type escape sequence to abort. Tracing the route to 5.5.5.5

1 12.1.1.2 28 msec 44 msec 28 msec

2 23.1.1.3 [MPLS: Labels 17/19 Exp 0] 104 msec 120 msec 128 msec 3 * * *

4 45.1.1.5 [AS 3] 136 msec 104 msec 140 msec

以下将针对遇到的问题,逐个阐述和分析

三、 ping包的标签层数和标签值

在R1上以1.1.1.1为源地址ping 5.5.5.5,在R2和R3之间抓包,request和reply数据包的如下所示:

request(R1-->R5)的mpls标签有两层,外层标签值为17,内层标签值为19; reply(R5-->R1)的mpls标签只有一层,标签值为19;

如果仅仅从抓包软件界面上看,可能会感觉疑惑,为何来回数据包的mpls标签层数会不同,但只要观察网络拓扑上,不难发现reply(R5-->R1)数据包,R3是其在mpls网络中的倒数第二跳,所以R3上默认弹出外层标签,仅剩下内层标签,所以导致reply数据包只有一层标签,也就是说标签值为19,这个标签应该是bgp所分配的;而request数据包的外层标签值17是mpls分配的,内层标签值19是bgp分配的,下面通过命令来进行验证。

R2上去往PE R4(4.4.4.4)的mpls出标签为17,去往CE R5(5.5.5.5)的出标签为19(bgp),如下所示:

R2#sho mpls forwarding-table

Local Outgoing Prefix Bytes tag Outgoing Next Hop tag tag or VC or Tunnel Id switched interface 16 Pop tag 3.3.3.3/32 0 Fa0/1 23.1.1.3 17 Pop tag 34.1.1.0/24 0 Fa0/1 23.1.1.3 18 17 4.4.4.4/32 0 Fa0/1 23.1.1.3 19 Untagged 1.1.1.1/32[V] 3246 Fa0/0 12.1.1.1 R2#sho bgp vpnv4 uni all label

Network Next Hop In label/Out label Route Distinguisher: 1:1 (A)

1.1.1.1/32 12.1.1.1 19/nolabel 5.5.5.5/32 4.4.4.4 nolabel/19 Route Distinguisher: 2:2

5.5.5.5/32 4.4.4.4 nolabel/19

R3是P路由器,所以只交换mpls标签,不改变bgp标签(内层标签),而针对reply(R5-->R1)数据包,R3上的下一跳是4.4.4.4,其出标签为Pop,即弹出标签,所以数据包离开R3时,仅剩下bgp标签;针对request(R1-->R5)数据包也执行标签弹出。

R3#sho mpls forwarding-table

Local Outgoing Prefix Bytes tag Outgoing Next Hop tag tag or VC or Tunnel Id switched interface 16 Pop tag 2.2.2.2/32 16184 Fa0/1 23.1.1.2 17 Pop tag 4.4.4.4/32 18406 Fa0/0 34.1.1.4

R4上去往PE R2(2.2.2.2)的mpls出标签为16,去往CE R1(1.1.1.1)的出标签为19(bgp),如下所示:

R4#sho mpls forwarding-table

Local Outgoing Prefix Bytes tag Outgoing Next Hop

tag tag or VC or Tunnel Id switched interface 16 Pop tag 23.1.1.0/24 0 Fa0/0 34.1.1.3 17 16 2.2.2.2/32 0 Fa0/0 34.1.1.3 18 Pop tag 3.3.3.3/32 0 Fa0/0 34.1.1.3 19 Untagged 5.5.5.5/32[V] 4956 Fa0/1.1 45.1.1.5 22 Untagged 5.5.5.5/32[V] 0 Fa0/1.2 45.2.2.5 R4#sho bgp vpnv4 uni all label

Network Next Hop In label/Out label Route Distinguisher: 1:1

1.1.1.1/32 2.2.2.2 nolabel/19 Route Distinguisher: 2:2 (B)

5.5.5.5/32 45.1.1.5 19/nolabel Route Distinguisher: 3:3 (C)

1.1.1.1/32 2.2.2.2 nolabel/19 5.5.5.5/32 45.2.2.5 22/nolabel

所以,从以上命令结果的分析,与抓包结果显示的标签值是一致的。

如果在PE上增加一条命令:mpls ldp explicit-null,执行显示空标签模式,则R3不会将reply(R5-->R1)数据包的外层标签弹出,而继续保留,标签值为0,数据包仍然有两层mpls标签,如下抓包结果所示,数据包的长度均为122byte,reply包比原来多了一层mpls标签。

四、 R5发布默认路由前后的差异

在CCIE TS网络中,当HUB网络(如R7)发布默认路由给SPOKE(如R9)的时候,则Traceroute的结果中,不会显示星号;在本实验网络中,也模拟该情况,在CE R5上,通过bgp通告一条默认路由,配置如下:

R5(config)#router bgp 3

R5(config-router)#neighbor 45.1.1.4 default-originate R5(config-router)#exit

配置后,在R1上可以收到一条通过bgp学习来的默认路由,

R1#sho ip route

Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP

D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 E1 - OSPF external type 1, E2 - OSPF external type 2

i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2

ia - IS-IS inter area, * - candidate default, U - per-user static route o - ODR, P - periodic downloaded static route

Gateway of last resort is 12.1.1.2 to network 0.0.0.0

1.0.0.0/32 is subnetted, 1 subnets

C 1.1.1.1 is directly connected, Loopback0 5.0.0.0/32 is subnetted, 1 subnets

B 5.5.5.5 [20/0] via 12.1.1.2, 02:33:12 12.0.0.0/24 is subnetted, 1 subnets

C 12.1.1.0 is directly connected, FastEthernet0/0 B* 0.0.0.0/0 [20/0] via 12.1.1.2, 00:00:23

这时候,在R1再执行traceroute的时候,结果如下,不再出现星号,

R1#traceroute 5.5.5.5 source 1.1.1.1

Type escape sequence to abort. Tracing the route to 5.5.5.5

1 12.1.1.2 [AS 3] 20 msec 72 msec 32 msec

2 23.1.1.3 [AS 3] [MPLS: Labels 17/19 Exp 0] 124 msec 120 msec 148 msec 3 45.1.1.4 [AS 3] [MPLS: Labels 0/19 Exp 0] 132 msec 120 msec 124 msec 4 45.1.1.5 [AS 3] 124 msec 124 msec 140 msec R1#

设置traceroute的probe为1,抓包结果如下:

R5为发布默认路由时,traceroute出现星号,抓包结果如下:

对比以上两种抓包结果,则可以初步判断traceroute出现星号的情况里面,是R4没有回应TTL exceeded数据包。更具体的原因是什么?需要进一步分析。

五、 Traceroute数据包分析

在分析前,必须了解traceroute数据包交互的基本原理,R1对R5启动traceroute时,发送的icmp数据包,其IP层的TTL值设置为1,R1到R5路径上的第一跳路由器R2,收到该数据包,由于TTL值为1,将丢弃该数据包,并向R1返回一个TTL超时报错数据包,R1根据该报错数据包的源地址(即R2的接口地址12.1.1.2),打印显示出来,即我们可以看到traceroute的输出第一跳R2的IP地址为12.1.1.2,如果一定时间内,R1没有收到回应,即回应超时,则R1上traceroute的输出显示为星号,表示响应超时;然后再发送一个icmp数据包,其IP层的TTL值设置为2,重复上述的过程,直到该icmp数据包发送到了R5上,由于数据包已经到达目的地,R5不会将该数据包丢弃,而是送往icmp数据包指定的udp端口处理,由于traceroute程序中指定的目的端口号,在R5上是不存在的,所以R5将向R1返

回一个端口不可达的报错,R1收到该报错信息后,在traceroute的输出结果中显示R5的接口IP地址45.1.1.5。Traceroute详细原理建议参考其他资料。

为了确认traceroute的时候,数据包在各个路由器之间是如何交互的,需要在各个路由器之间进行抓包,分析数据包的特征,最终定位原因。

当R5发布默认路由后,在R1上traceroute R5(注:参数probe设置为1),可以输出中间各跳的IP地址信息,这时,在R1至R5之间的每个网段上进行抓包,收到的数据包截图如下所示, R1-R2

R2-R3

R3-R4

R4-R5

从以上抓包结果来看,网段R1-R2和R2-R3的抓包结果,直观上来说,应该是比较符合预期的,而网段R3-R4和R4-R5的抓包结果,则有点出乎意料,为什么23.1.1.3回应1.1.1.1的数据包会出现在这两个网段呢?同样,45.1.1.4回应1.1.1.1的数据包为什么会出现在网段R4-R5之间?

经过对数据包的观察,发现可以基于每个数据包的TTL值,分析每个数据包的在每台路由器上的转发行为,进而梳理出以下表格,来表示每个数据包会出现在哪些网段上,以及在每个网段上的TTL值信息。

说明:IP表示IP报头的TTL值,L1表示MPLS外层标签的TTL值,L2表示MPLS内层标签的TTL值,冒号后面的数字表示TTL值。

在整个traceroute过程中,实际上总产生了8个数据包,下面结合以上表格,描述每个数据包转发过程:

1、1.1.1.1-->5.5.5.5:R1产生,IP层TTL值为1,转发到R2上,R2丢弃该数据包; 2、12.1.1.2-->1.1.1.1:R2产生,对上一个数据包的回应,IP层TTL值为255;

3、1.1.1.1-->5.5.5.5:R1产生,IP层TTL值为2,转发到R2上;R2对其进行转发,IP层TTL值变为1;由于进入MPLS域,数据链路层有外层、内层MPLS标签,TTL值均为1;R3收到该数据包,执行丢弃;

4、23.1.1.3-->1.1.1.1:R3产生,往R3-R4网段转发,MPLS内层标签值不变,外层标签变为0(显式倒数第二条弹出),三个TTL值均为255;R4收到后,执行IP转发,查看路由表(vrf B路由表),往R5方向纯IP转发,IP层TTL值为254;R5收到后,根据路由表,再转发给R4,IP层TTL值为253;R4收到后,往R3方向执行标签转发,IP层、MPLS内层标签、MPLS外层标签的TTL值均为252;R3收到后,往R2方向执行标签交换,IP层、MPLS内层标签的TTL值不变,均为252,MPLS外层标签变为251;R2收到后,往R1方向执行纯IP转发,IP层TTL值变为250;R1正常收到该数据包;

5、1.1.1.1-->5.5.5.5:R1产生,IP层TTL值为3,往R2方向转发;R2收到后,往R3方向执行标签转发,IP层、MPLS内层标签、MPLS外层标签的TTL值均为2;R3收到后,往R4方向执行标签交换,IP层、MPLS内层标签的TTL值不变,均为2,MPLS外层标签变为1;R4收到后,由于TTL值为1,执行丢弃;

6、45.1.1.4-->1.1.1.1:R4产生,目的IP为1.1.1.1,执行IP转发,查看路由表(vrf B路由表),往R5方向纯IP转发,IP层TTL值为255;R5收到后,根据路由表,再转发给R4,IP层TTL值为254;R4收到后,往R3方向执行标签转发,IP层、MPLS内层标签、MPLS外层标签的TTL值均为253;R3收到后,往R2方向执行标签交换,IP层、MPLS内层标签的TTL值不变,均为253,MPLS外层标签变为252;R2收到后,往R1方向执行纯IP转发,IP层TTL值变为251;R1正常收到该数据包;

7、1.1.1.1-->5.5.5.5:R1产生,IP层TTL值为4,往R2方向转发;R2收到后,往R3方向执行标签转发,IP层、MPLS内层标签、MPLS外层标签的TTL值均为3;R3收到后,往R4方向执行标签交换,IP层、MPLS内层标签的TTL值不变,均为3,MPLS外层标签变为2;R4收到后,执行IP转发,查看路由表(vrf B路由表),往R5方向纯IP转发,IP层TTL值为1;数据包正常到达R5;

8、45.1.1.5-->1.1.1.1:R5产生,目的IP为1.1.1.1,执行IP转发,查看路由表,往R4方向纯IP转发,IP层TTL值为255;R4收到后,往R3方向执行标签转发,IP层、MPLS内层标签、MPLS外层标签的TTL值均为254;R3收到后,往R2方向执行标签交换,IP层、MPLS内层标签的TTL值不变,均为254,MPLS外层标签变为253;R2收到后,往R1方向执行纯IP转发,IP层TTL值变为252;R1正常收到该数据包;

表格的最后一行“每个网段通过的数据包数量”和抓包截图的包数量进行对比,可以确认包数量一致。

六、 问题原因和解决

回到R5没有发布默认路由,R1 traceroute R5第三跳为星号的情况,观察各个网段的数据包情况,如下截图所示:

R1-R2

R2-R3

R3-R4

R4-R5

对比R5发布默认路由时,各网段经过的数据包的情况,可以发现区别在于:R5没有发布默认路由时,少了数据包6(即:45.1.1.4到1.1.1.1),即上面表格中,红色字体部分数据包,其他数据包不变;那么,也就可以认为,R4收到数据包5之后,没有成功发出数据包6,这是为什么?

首先想到的是,R4上有没有去往1.1.1.1的路由呢?

R4上有三个路由表,全局路由表、vrf B路由表和vrf C路由表,那么R4应该依照哪个路由表来转发呢?数据包6是用于对数据包5的回应,那么数据包5属于哪个VRF?数据包5源于1.1.1.1,目的为5.5.5.5,在R4上之后VRF B Export了路由,所以数据包5属于VRF B,数据包6也应该依据VRF B路由表来转发。

查看数据包5的MPLS内层标签,为19;

查看R4上bgp分配的标签,VRF B为5.5.5.5/32分配的标签是19,而VRF C为5.5.5.5/32分配的标签是20,证明了数据包5属于VRF B。

R4#show bgp vpnv4 uni all labels

Network Next Hop In label/Out label Route Distinguisher: 1:1

1.1.1.1/32 2.2.2.2 nolabel/19 Route Distinguisher: 2:2 (B)

5.5.5.5/32 45.1.1.5 19/nolabel Route Distinguisher: 3:3 (C)

1.1.1.1/32 2.2.2.2 nolabel/19 5.5.5.5/32 45.2.2.5 20/nolabel

既然确定数据包6要按照VRF B路由表来转发,那么查看一下该路由表,如下所示,VRF B路由表中,并没有1.1.1.1的路由,这就是数据包6没有正常发送的原因。

R4#show ip route vrf B

Routing Table: B

Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP

D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 E1 - OSPF external type 1, E2 - OSPF external type 2

i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2

ia - IS-IS inter area, * - candidate default, U - per-user static route o - ODR, P - periodic downloaded static route

Gateway of last resort is not set

5.0.0.0/32 is subnetted, 1 subnets

B 5.5.5.5 [20/0] via 45.1.1.5, 05:28:20 45.0.0.0/24 is subnetted, 1 subnets

C 45.1.1.0 is directly connected, FastEthernet0/1.1

为何VRF B路由表没有1.1.1.1的路由?这是VRF规划的原因,VRF B只执行Export路由,VRF C只执行Import路由,所以VRF B无法直接从vpnv4邻居学习到路由,只能通过CE侧R5学习路由。

解决方案一:CE侧R5发布默认路由,R4上VRF B路由表中,可增加一条默认路由指向R5,所以数据包6就可以正常转发,这也是CCIE TS中使用的解决方案。路由表如下所示:

R4#show ip route vrf B

Routing Table: B

Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP

D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 E1 - OSPF external type 1, E2 - OSPF external type 2

i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2

ia - IS-IS inter area, * - candidate default, U - per-user static route o - ODR, P - periodic downloaded static route

Gateway of last resort is 45.1.1.5 to network 0.0.0.0

5.0.0.0/32 is subnetted, 1 subnets

B 5.5.5.5 [20/0] via 45.1.1.5, 05:34:40 45.0.0.0/24 is subnetted, 1 subnets

C 45.1.1.0 is directly connected, FastEthernet0/1.1 B* 0.0.0.0/0 [20/0] via 45.1.1.5, 00:01:12

解决方案二:在R4的VRF B中增加一条静态路由,如下所示,同样可以使R4正常转发数据包6;这个方案不具备可扩展性,只是再一次证明数据包6需要通过VRF B的路由表在转发。

R4(config)#ip route vrf B 1.1.1.1 255.255.255.255 45.1.1.5

Routing Table: B

Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP

D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 E1 - OSPF external type 1, E2 - OSPF external type 2

i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2

ia - IS-IS inter area, * - candidate default, U - per-user static route o - ODR, P - periodic downloaded static route

Gateway of last resort is not set

1.0.0.0/32 is subnetted, 1 subnets S 1.1.1.1 [1/0] via 45.1.1.5

5.0.0.0/32 is subnetted, 1 subnets

B 5.5.5.5 [20/0] via 45.1.1.5, 00:01:09 45.0.0.0/24 is subnetted, 1 subnets

C 45.1.1.0 is directly connected, FastEthernet0/1.1

解决方案三:如果R4上,不分开两个VRF,分别执行Export和Import路由,而是在一个VRF中同时Export和Import路由,也不会出现本文所述的问题;当然,分开两个VRF,应该也是因特殊需求而规划的。

本文来源:https://www.bwwdw.com/article/va6f.html

Top