我花了一些时间在这个话题上,但很多事情我仍然不清楚。
基本上我不明白在现代 IOS 机器上应该如何配置预分片(它必须完全配置吗?)以及“ip mtu”、“加密前的加密 ipsec 片段”之间的关系是什么和“crypto ipsec df-bit”命令。
想象一下最简单的场景:H1 ---- R1 ----- R2 ---- H2。R1 和 R2 之间存在 IPsec over VTI 隧道。VTI 上的 IPsec 自动考虑 ESP 开销。当隧道建立时,MTU 自动降低到 1432 字节。
在这种情况下,可能会发生两件事。
- 数据包进入 R1。R1 意识到数据包的大小 + 开销超过了出口接口 MTU,因此将其分片并加密。终端主机 H2 将负责组装数据包。
- 数据包进入 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”命令的目的是什么?任何最佳实践?
