我有两个路由器A(Cat6500 w / SUP720-3BXL,IOS 12.2(33)SXH4)和B(Nexus 7K w / SUP1,NX-OS 5.2(4)),它们在MPLS核心上经过几跳分开,每跳VRF ABC。路由器A在此VRF中具有两个直接连接的路由和四个静态路由。

RouterA# show ip bgp vpnv4 vrf ABC labels
   Network          Next Hop      In label/Out label
Route Distinguisher: 65000:123 (ABC)
   10.30.10.0/24    10.30.200.1     154/nolabel
   10.30.20.0/24    10.30.200.1     88/nolabel
   10.30.30.0/24    10.30.200.1     38/nolabel
   10.30.40.0/24    10.30.200.1     147/nolabel
   10.30.200.0/24   0.0.0.0         IPv4 VRF Aggr:95/nolabel(ABC)
   10.90.90.0/24    0.0.0.0         IPv4 VRF Aggr:95/nolabel(ABC)
   10.133.242.0/25  192.168.255.3   nolabel/17
   10.133.242.128/26
                    192.168.255.3   nolabel/18
   10.255.255.224/29
                    192.168.255.3   nolabel/492474


两个路由器上的此VRF使用每个前缀标记。请注意,两个直接连接的路由收到一个共享的聚合标签(95),而四个静态路由每个都收到一个唯一的标签。

路由器B同意使用VPN标签:

RouterB# show bgp vpnv4 unicast labels vrf ABC
BGP routing table information for VRF default, address family VPNv4 Unicast
BGP table version is 17042469, local router ID is 192.168.255.3
Status: s-suppressed, x-deleted, S-stale, d-dampened, h-history, *-valid, >-best
Path type: i-internal, e-external, c-confed, l-local, a-aggregate, r-redist
Origin codes: i - IGP, e - EGP, ? - incomplete, | - multipath

   Network            Next Hop            In label/Out label
Route Distinguisher: 65000:123     (VRF ABC)
*>i10.30.10.0/24      172.26.64.1         nolabel/154
*>i10.30.20.0/24      172.26.64.1         nolabel/88
*>i10.30.30.0/24      172.26.64.1         nolabel/38
*>i10.30.40.0/24      172.26.64.1         nolabel/147
*>i10.30.200.0/24     172.26.64.1         nolabel/95
*>i10.90.90.0/24      172.26.64.1         nolabel/95
*>l10.255.255.224/29  0.0.0.0             492474/nolabel (ABC)


从路由器B,我可以跟踪路由到路由器A上的两个直接连接的网络,而没有任何问题:

RouterB# traceroute 10.30.200.10 vrf ABC
traceroute to 10.30.200.10 (10.30.200.10), 30 hops max, 40 byte packets
 1  192.168.254.97 (192.168.254.97) (AS 65000)  19.226 ms  19.369 ms  19.079 ms
      [Label=63 E=0 TTL=1 S=0, Label=95 E=0 TTL=1 S=1]
 2  192.0.2.151 (192.0.2.151) (AS 65000)  23.309 ms  28.027 ms  18.977 ms
      [Label=39 E=0 TTL=1 S=0, Label=95 E=0 TTL=2 S=1]
 3  192.168.251.62 (192.168.251.62) (AS 65000)  21.576 ms  24.265 ms  21.503 ms
      [Label=59 E=0 TTL=1 S=0, Label=95 E=0 TTL=1 S=1]
 4  10.30.200.10 (10.30.200.10) (AS 65000)  19.155 ms *  19.414 ms


但是,到所有静态学习路由的traceroutes会在MPLS路径上超时,并且仅在它们的最后一跳才恢复:

RouterB# traceroute 10.30.10.10 vrf ABC
traceroute to 10.30.10.10 (10.30.10.10), 30 hops max, 40 byte packets
 1  * * *
 2  * * *
 3  * * *
 4  10.30.200.10 (10.30.200.10) (AS 65000)  19.065 ms  19.281 ms  18.68 ms
      [Label=154 E=0 TTL=1 S=1]
 5  10.30.10.10 (10.30.10.10) (AS 65000)  19.420 ms  19.377 ms  19.73 ms


上面的两个traceroutes都应严格遵循相同的路径,并且没有沿途的过滤机制。同样的事情也发生在相反的方向。我想念什么?在MPLS /标签转发方面,通过直接连接学习到的BGP路由与静态配置之间有何区别?

评论

话题错了吗?看起来聚合标签traceroute很好,普通标签不是吗?这是什么平台?是否有关于TTL隐藏或其他任何特定命令的配置?在VPN中,traceroute总是在生成超出TTL的值之前转到出口PE,因此出于某种原因,对于非聚合标签,您实际上并没有生成超出TTL的值。

更新了问题以反映平台(IOS和NX-OS)。

硬件也应理解,在MPLS环境中处理TTL递减时sup720-3bxl具有硬件限制。您是双向还是双向都遇到问题?

静态学习的路由也会发生相反的情况。路由器A正在运行SUP720-3BXL;能否详细说明您提到的限制?

不幸的是,更多地思考sup720-3blx(或者确切地说是PFC3B,PFC3C是固定的)问题并不能解释这一点。从那时起,您将只完全错过traceroute中的出口PE(无星号)。而且在两个方向上都不会出现相同的问题,这让我最好奇,问题是从nexus7k到7600以及从76​​00到nexus7k是怎么回事。

#1 楼

聚合标签和普通标签之间的区别在于,普通标签直接指向L2重写详细信息(接口和L2地址)。这意味着普通标签将由出口PE节点直接切换出标签,而无需进行IP查找。相反,聚合标签可能表示许多不同的出口选项,因此L2重写信息不相关标签本身。这意味着出口PE节点必须对数据包执行IP查找,以确定适当的L2重写信息。

为什么使用聚合标签而不是普通标签的典型原因有:


需要执行邻居发现(IPv4 ARP,IPv6 ND)
需要执行ACL查找(客户界面中的出口ACL)
在单个标签(表标签)下运行整个VRF )

其中一些限制(尤其是2个)并非对所有平台都有效。

在生成TTL时,传输P如何影响MPLS VPN环境中的traceroute超过消息,将不知道如何返回它(它没有发送到发送者的路由表条目)。因此,传输P节点将始终将带有原始标签堆栈的TTL超出消息发送到出口PE节点,希望出口PE注释具有如何将TTL超过消息返回给发送者的想法。
此功能在Cisco IOS中自动启用,但需要在Juniper JunOS中配置“ icmp-tunneling”。

基于此,我怀疑当源地址为P时,您的CE设备可能不接受数据包。节点链接网络,并且由于他们不接受ICMP消息,因此无法将其返回给发送方。
对此理论的一种可能的测试方法是启用每个vrf标签:


IOS:mpls标签模式all-vrfs协议bgp-vpnv4 per-vrf
JunOS:设置路由实例FOO vrf-table-label

一般来说,我不建议传播TTL,特别是在VPN环境中,至少在我们这种情况下,客户对此感到困惑和焦虑。他们担心为什么他们的VPN会显示外部地址。

使人困惑的另一件事是使他们开通从英国到美国的跟踪路线,因为他们看到英国的两个核心路由器之间的延迟时间大于100毫秒,而不是意识到整个路径到美国西海岸的延迟都相同,因为所有数据包都从那里绕道而行。

这个问题在设计上通常是无法修复的,但是在IOS中,您可以确定在生成TTL时最多可以弹出多少个标签(mpls ip ttl-expiration pop N)。如果INET == 1标签,VPN ==> 1标签,这将为您提供一个不错的近似值,因此您可以对其进行配置,以使VPN流量通过隧道传输并且INET流量直接返回而无需出口PE节点绕行。但是正如我所说,这只是所需功能的近似值,因为运输途中维修之类的功能可能会导致同一服务的标签堆栈大小不总是相同。