带有聚合标签的前缀未完全跨 MPLS 核心跟踪路由

网络工程 聚光灯 故障排除
2021-07-15 20:53:20

我有两个路由器,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 内有两条直连路由和 4 条静态路由。

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

但是,到所有静态学习路由的跟踪路由在 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

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

1个回答

聚合标签和普通标签的区别在于,普通标签直接指向 L2 重写细节(接口和 L2 地址)。这意味着普通标签将被出口 PE 节点直接进行标签交换,无需进行 IP 查找。

相反,聚合标签可能代表许多不同的出口选项,因此 L2 重写信息与标签本身无关。这意味着出口 PE 节点必须为数据包执行 IP 查找,以确定适当的 L2 重写信息。

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

  1. 需要执行邻居发现(IPv4 ARP、IPv6 ND)
  2. 需要执行ACL查找(客户接口中的出口ACL)
  3. 在单个标签(表标签)下运行整个 VRF

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

在 MPLS VPN 环境中 traceroute 是如何受到传输 P 的影响的,当生成 TTL 超出消息时,将不知道如何返回它(它没有到发送方的路由表条目)。所以一个transit P节点会将带有原始标签栈的TTL exceeded消息一路发送到出口PE节点,希望出口PE注解知道如何将TTL超出消息返回给发送方。
此功能在 Cisco IOS 中自动启用,但需要在 Juniper JunOS 中配置“icmp-tunneling”。

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

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

一般来说,我不建议传播 TTL,尤其是在 VPN 环境中,至少在我们的案例中,客户对此感到困惑和焦虑。他们担心为什么他们的 VPN 会显示外国地址。

另一件让人们困惑的事情导致他们打开支持票,是当他们运行从英国到美国的 traceroute 时,因为他们看到英国的两个核心路由器之间的延迟超过 100 毫秒,而没有意识到整个路径具有相同的延迟一直到美国西海岸,因为所有的包裹都从那里绕道而行。

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