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返