思科路由器上 IPsec VPN 的预分片

网络工程 虚拟专用网 网络安全
2021-08-01 18:38:43

我花了一些时间在这个话题上,但很多事情我仍然不清楚。

基本上我不明白在现代 IOS 机器上应该如何配置预分片(它必须完全配置吗?)以及“ip mtu”、“加密前的加密 ipsec 片段”之间的关系是什么和“crypto ipsec df-bit”命令。

想象一下最简单的场景:H1 ---- R1 ----- R2 ---- H2。R1 和 R2 之间存在 IPsec over VTI 隧道。VTI 上的 IPsec 自动考虑 ESP 开销。当隧道建立时,MTU 自动降低到 1432 字节。

在这种情况下,可能会发生两件事。

  1. 数据包进入 R1。R1 意识到数据包的大小 + 开销超过了出口接口 MTU,因此将其分片并加密。终端主机 H2 将负责组装数据包。
  2. 数据包进入 R1。它不适合出口接口,所以它必须是碎片化的。路由器先加密再分片。这是不受欢迎的行为,因为 R2 需要在解密之前组装这些片段。这意味着进程切换、增加的 CPU 负载和一般的坏事。

现在,思科 DocCD 说:

当一个数据包的大小接近加密路由器的出站链路的 MTU 大小并封装了 IPsec 标头时,就有可能超过出站链路的 MTU。这会导致加密后的数据包碎片。然后解密路由器必须在处理路径中重新组装这些数据包,这会降低解密路由器的性能。

IPsec VPN 的预分片功能使解密路由器能够在高性能 CEF 路径而不是进程路径中运行,从而提高了解密路由器的性能。加密路由器可以根据转换集中可用的信息预先确定封装的数据包大小,这些信息被配置为 IPsec 安全关联 (SA) 的一部分。如果预先确定数据包超过输出接口的MTU,则在加密前对数据包进行分片。此功能可避免解密前的进程级重组,并有助于提高解密性能和整体 IPsec 流量吞吐量。

注意
默认情况下,隧道接口的预分片功能是关闭的。要获得预分片性能优势,请在确保隧道接口两端的 MTU 相同后开启预分片。加密映射不再用于定义加密前后发生的碎片行为。现在,IPsec 虚拟隧道接口(也称为虚拟模板接口)(VTI) 分段行为由 VTI 上配置的 IP MTU 设置决定。

我检查了较新的 IOS 中的默认设置是什么,它们如下:

crypto ipsec df-bit copy
crypto ipsec fragmentation before-encrypt

那么这如何反映上述陈述呢?预分片是否默认关闭?我们什么时候应该在接口上使用“ip mtu”,什么时候不?

如果我们将 cisco DocCD 中的图表添加到组合中,事情就会更加混乱。 http://www.cisco.com/c/en/us/td/docs/ios-xml/ios/sec_conn_dplane/configuration/15-mt/sec-ipsec-data-plane-15-mt-book/sec- pre-frag-vpns.html

图表描述了“crypto ipsec df-bit”和预分片之间的关系。如何使用相同的“crypto ipsec df-bit”设置和 IP 标头中的实际 DF 位打开关闭预分片(图表的最后 4 行)

如果预分片默认有效,“ip mtu”命令的目的是什么?任何最佳实践?

1个回答

我在使用静态 VTI IPSec 隧道时遇到了类似的问题。最初隧道接口 IP MTU 被设置为 1400 字节,并在全局配置下设置了“Crypto IPSec DF-bit clear”命令。预期行为是接收到的数据包(转发到 VTI)应该清除 DF 位并允许在需要加密之前对数据包进行分段。我们发现,任何到达的 DF 位设置超过隧道 IP MTU 的数据包都会被丢弃,并且没有切换到隧道接口。

经过与 Cisco TAC 的长时间讨论,有人解释说 VTI 隧道在加密前不支持分段(根据错误 ID CSCsr97396/CSCsh30577),这显然没有在任何公开可用的 Cisco 文档(包括配置指南)中记录......这个错误自 2007 年以来就已为人所知!!!

修复方法是确保隧道接口 IP MTU 足够大(将 IP MTU 更改为 1500)不会导致分段。在我们部署的解决方案中,出口接口是点对点 ATM 接口 (OC12/STM4 ATM SPA),默认 MTU 为 4470,因此不会发生加密后碎片。

顺便说一句,如果有帮助,我们正在使用带有 ESP-10 的 ASR1006 路由器、带有 IOS-XE 3.13 的 RP2。 Cisco Bug CSCsh30577