第4章:常见的IPsec VPN问题

思科出版社

123.456789 8页
第8页共9页

IPsec的对DiffServ和LLQ / CBWFQ影响

在本节中,我们将探讨在分支网络方案IP语音(VoIP)的配置。VoIP是延迟敏感的,也就是说数据包必须按顺序一致延迟(低抖动)接收。如图图4 -,两个路由器要在一系列不同带宽的广域链路彼此进行通信。在速度较低的链接,包有时可因可用带宽的超额下降。因此,QoS的要求,以确保当这种情况发生时的声音(RTP)数据包不被丢弃(其他数据包被丢弃,而不是)。由于这些原因,服务质量必须通过帧中继链路用于IP流量。

图4 -

图4 -

ip实现中的IPsec和DiffServ

区分服务是与LLQ / CBWFQ结合实施以提供用于语音业务的QoS和从分支。由于该公司的语音流量的安全政策要求保密,的IPSec VPN已经配置了企业前端路由器和所有分支路由器,摆几个设计考虑经过IPsec / DiffServ的要求之间:

  • 如果使用了AH,更改IP头是不允许的(AH MIC使它们在接收VPN端点无效)。这将防止在电话之间的网络设备上评论。因此,如果使用AH,必须在IPsec封装(路由器或电话上)之前相应地标记RTP流量。

  • 在AH和ESP中,如果数据包是在反重播窗口之外收到的,那么它们将被丢弃。因此,如果流量由于QoS决策而在队列中延迟,如果它是在IPsec VPN隧道另一端的反重播窗口外接收的,则可能会被丢弃。

  • 与ESP,原始IP首标和QoS信息被封装在和ESP与适当的加密变换。这有效地使所需的QoS由两个的IPsec VPN端点之间的中间网络节点不可读的Diffserv比特。除非这些位被成功地复制到外部IP头ESP封装,两个的IPsec VPN端点之间的网络节点可能无法适当地进行分类的IPsec的处理RTP分组。

IPsec对IntServ和RSVP的影响

除了与DiffServ和LLQ / CBWFQ所列的问题,RSVP实现与IPsec VPN提供进一步的设计问题需要解决。正如我们所如前所述,RSVP提供了一种信令方法,以给定的源和目的地之间主动地提供资源。RSVP通过交换一系列的源和目的地之间的RSVP PATH和RESV RSVP消息的这样做。如果RSVP源和目的地之间的中间网络节点是无法破译RSVP RESV消息,会出现这种情况,如果他们在一个IPsec VPN进行加密,中间网络节点不能使用源之间的RSVP-RESV消息来动态地预留资源目的地(在示出的图4 - 12)。

图4 - 12

图4 - 12

IPsec和RSVP信令不兼容

因此,为了在需要及时、有序地交付基于ip的应用程序流量的源和目的地之间的中间节点上动态地提供资源,RSVP信令消息必须被转发到加密路径之外。

在的IPSec VPN解决碎片问题

在IPsec VPN环境中,解决MTU和碎片问题至关重要。否则,整个VPN将面临性能和操作问题的风险。在本节中,我们将讨论碎片重组和MTU问题的影响,并提供在MTU可能被超过而导致碎片化的环境中进行适当IPsec设计的解决方案。

的加密设备之间的片段处理的效果在很大程度上集中正在执行分段的数据包的重新组装的加密装置上。虽然大多数网络设备和VPN端点当今可以在该片段中的加密数据包加密交换快速路径,该解密的IPsec端点必须解密所有片段在链中的数据包可以被重组之前。图42举例说明一个IPsec VPN部署,其中数据包在目的地IPsec VPN网关上解密之前重新组装。

图42

图42

分段处理加密设备之间

这种重新组装行为是在流程级别完成的,会极大地影响VPN的性能。在IPsec环境中,应该采取一切预防措施对数据包进行分段之前它们使用IPsec加密,以便管理员可以确保在具有适当计算资源的设备上进行分段和重新组装。

MTU发现之路

IP PMTUD是用于动态技术发现两个端点之间的最大MTU尺寸,使得发端设备片段分组的最低MTU路径。这样,PMTUD防止分段分组和在接收IPsec开销引起过度CPU终结点做重组中间网络设备。考虑描述的场景学报》第4 - 14图,其中HOST_A希望跨越使用路由器A,B,和C的路由的IP网络打开一个TCP会话SERVER_B

学报》第4 - 14图

学报》第4 - 14图

PMTUD和IPsec

管理员已经在自己的工作站,并且使得碎片重组的问题可以在Router_B的避免服务器上启用IP PMTUD。HOST_A通过以下步骤执行PMTUD:

  1. HOST_A创建一个IP包尺寸以它的本地连接的链段的合适的MTU,并将DF其传送到SERVER_B前位。

  2. Router_A接收到数据包,注意到DF位被设置。Router_A的串行链路的MTU为1414。因为设置了DF位,而且从Host_A到Server_B的数据包超过了串行接口的MTU,所以它被删除。

  3. Router_A向Host_A发送一条ICMP不可到达的消息,并携带下一跳(Router_A和C之间的串行接口)的MTU(1414)。

  4. HOST_A发送的1414个字节的长度,以与SERVER_B DF位集合中的另一个ICMP消息。

  5. 而Router_A接收该分组并转发到Router_C。Router_C接收数据包,并指出,DF位设置。由于DF位设置和数据包大于Router_C的链接Router_B的(512)的MTU时,报文被丢弃。

  6. Router_C发送ICMP不可达的消息返回到HOST_A,携带下一跳跃的MTU(512)(Router_C和A之间的串行接口)。

  7. Host_A向Server_B发送另一条长度为512字节的ICMP消息,该消息设置了DF位。

  8. 512字节的ICMP消息低于路径中任何单个链路的MTU。因此,它被成功转发到Server_B。Server_B向Host_A发送一个ICMP回显响应,向Host_A表明512是路径的MTU。


注意:在上述情形中的路由器被用来说明PMTUD的一般操作。的IPsec和IPsec + GRE隧道使用PMTUD稍微不同的配置比以前的,被称为“隧道路径MTU发现。”的IPsec中和IPsec + GRE环境中使用PMTUD片段处理的具体操作在后面更详细本章中讨论。


Cisco IOS中的IPsec可以被配置为将esp处理的数据包中的DF位值复制到外部IP头中。因此,PMTUD正确操作所依赖的ICMP通信流不必被显式地排除在加密交换路径之外。

如果要将PMTUD作为设计策略的一部分,以减轻IPsec vpn中的碎片重组问题,那么必须解决几个问题。在这一节,我们将简要地强调一些最常见的:

  • 允许ICMP不可达报文

  • 限速ICMP消息

  • PMTUD不支持对终端主机

  • 调整TCP的最大段大小

  • 清理DF-Bit

允许ICMP不可达报文

正如我们已经在我们的PMTUD协议概述如前所述,PMTUD在很大程度上依赖于ICMP不可达报文的MTU通信段回了分段主机。它是安全设备,诸如防火墙很常见的,以拒绝ICMP不可达消息,因为它们在恶意扫描技术被黑客常用。因此,必须小心,以确保检查启用PMTUD端点之间的所有路径,以确保ICMP未达确实允许通过如果PMTUD是成为碎片避免沿着路径的优选消息。

限速ICMP消息

由于PMTUD依赖于收到源主机上的一个给定的重传窗口内ICMP不可达的回复,应给予应用于ICMP报文限速技术,因为它们会导致ICMP消息的过早重传中PMTUD环境。如果为了收出,在PMTUD环境ICMP不可达消息可能会导致对原始主机PMTUD MTU设置混乱。例如,ICMP不可达消息中的限速队列延迟可能预示如果一个有效的ICMP不可达之后接收了正确的IP MTU的是不可访问的消息始发PMTUD主机上的错误MTU设置。

PMTUD不支持对终端主机

如果在网络中的主机上禁用了PMTUD,建议网络管理员采取步骤确保包在网络中的其他位置被分割之前发生加密处理。这可以通过启用IPsec的先行碎片在Cisco IOS和设置在IPsec的处理的分组的DF比特来实现。与IPsec先行碎片中,IOS的IPsec VPN端点将尝试确定所述封装的分组大小被加密之前。如果封装的分组大小被预定为比路径MTU大,则加密之前分段。当DF位设置,加密路由器将查找在它需要安装在其SADB路径MTU表项更新,接收到的任何ICMP不可达报文的信息。或者,如果VPN端点不支持类似的IPsec先行碎片或DF的明确设定功能外IP报头位时,IPSec VPN隧道的MTU可以手动定义,以避免碎片重组的问题。

调整TCP的最大段大小

发送IP数据包超过TCP最大段大小(MSS)的主机有碎片的风险。严格地说,TCP MSS是主机愿意接受的IP数据报中的最大数据量。主机将TCP MSS缓冲区大小与MTU进行比较,以确定其传输的MTU。其结果是TCP MSS或MTU中较低的小于40位(IP报头和TCP报头的分配,长度均为20位)。一旦确定,每个主机通过下文中描述的交换器将所选值通信给对方主机图4-15

图4-15

图4-15

TCP MSS,IP MTU和碎片

中所示的事件顺序如下图4-15上图:

  1. HOST_A具有20K的MSS缓冲器和1500的MTU它比较该MSS与链路的MTU缓冲器,少IP和TCP报头添加(1500至40年= 1460)40位的分配和选择的较低的值1460(1460 <20000)以发送到HOST_B。

  2. Host_B有一个16k的MSS缓冲区和一个2048的接口MTU大小。它与步骤1中的Host_A进行类似的比较,并选择2008(2048 - 40)。然后,它比较从Host_A接收到的值,并选择较低的值1460作为其MSS值(1460 < 2008)。

  3. Host_B将它的MSS为2008发送给Host_A。

  4. HOST_A 2008的所接收的值与在步骤1中选择的两个值越低,1460衍生它的TCP MSS值,因为它的TCP MSS进行比较。

TCP MSS值使用MTU值来帮助避免碎片。在上面的示例中,选择MTU值,因为它们比TCP MSS值小。但是,如果MSS值小于MTU,那么主机A和B将选择MSS + 40字节作为TCP流量的最大数据包长度。注意,在这种情况下,更大的MTU值仍将用于UDP通信。

清理DF-Bit

如果DF位被清零沿源和目的地之间的路径PMTUD某处,沿着该路径的网络节点将碎片化ICMP消息PMTUD而不是放弃它,并用一个ICMP不可达答复。这显然打破PMTUD的操作。今天市面上的大多数基于IP的设备能够清除DF在IP报头位。

思科IOS VPN端点碎片行为

与封装IPsec和IPsec+GRE的IP包相关的开销通常会导致分裂,这就是为什么PMTUD在IPsec VPN路由器上默认启用的原因。然而,片段处理和PMTUD的细节与非vpn环境略有不同。在本节中,我们将讨论在IPsec和IPsec+GRE隧道中处理片段,以及在IPsec VPN环境中避免片段的一些其他解决方案。

IPsec的VPN使用隧道路径MTU发现来解释的ICMP不可达报文的MTU信息,并更新相应的IPsec SA的链路MTU。典型PMTUD操作和的IPsec VPN的片段处理中示出了图4-16

图4-16

图4-16

片段处理和使用IPsec隧道的PMTUD操作

中演示的操作如下所示图4-16:

  1. Host_A向Server_B发送一个1500字节(本地接口MTU的大小)的数据包。

  2. 而Router_A接收1发送上述分组,并且观察到了ESP封装的分组大小超过串行链路的MTU到B.因为HOST_A设置DF位分组的,而Router_A丢弃该数据包,并发送包含该MTU的ICMP不可达消息1442(1500bytes-58bytes最大ESP开销)回HOST_A大小。

  3. HOST_A接收ICMP不可达消息与MTU信息,并转发1442另一ICMP分组长度字节来而Router_A。而Router_A与封装ESP分组并将其转发横跨带有DF在VPN中的外报头位设置。

  4. Router_C从而Router_A接收在步骤3和说明该分组超过其串行接口Router_B的的MTU的ICMP消息。因为DF位被置位,Router_C丢弃该数据包并转发一个ICMP不可达到而Router_A具有嵌入的1440的MTU大小。

  5. 在步骤4中,Router_A从Router_C接收到ICMP不可到达消息。Router_A在用Router_B建立的SA的PMTU字段中标注了MTU大小为1440。Router_A确实在长度发送的1440新的ICMP消息,而是这是通过HOST_A在步骤6中进行处理。

  6. HOST_A长度重传的1442的ICMP消息,因为它从未收到从在步骤2中发送的原始ICMP消息的确认。

  7. Router_A比较上面步骤6中接收到的数据包的esp封装的数据包大小(1442+58)与其路径MTU(1440),然后删除该数据包。Router_A响应一个不可访问的ICMP,其MTU为1342 (1400 PMTU, ESP开销小于58字节)。

  8. Host_A将其MTU设置为1342,并将一条新的1342字节的消息转发给Server_B。消息和相关的ESP开销现在低于端到端路径MTU,从而成功地从Host_A传输到Server_B。

正如我们在本章的前几节和其他章节中所讨论的,有时有必要在使用IPsec处理某些流量类型之前将它们封装在GRE中。例如,多播流量的处理就是一个例子,在把纯文本流量封装在ESP之前,人们会先把它封装在GRE中。这通常被称为IPsec+GRE。这个过程包括额外的24字节开销,因为除了ESP或AH头之外,还应用了GRE头。更重要的是,它向隧道PMTUD操作添加了额外的步骤,同时试图避免碎片化。图4-17举例说明在IPsec+GRE场景中使用PMTUD的片段处理过程。

图4-17

图4-17

使用IPsec+GRE隧道进行片段处理和PMTUD操作

在IPsec+GRE隧道上的PMTUD操作,见图4-17是由以下事件顺序来描述的:

  1. Host_A发送一个设置为DF位的1500字节数据包到Server_B。

  2. Router_A接收到数据包,发现设置了DF位。GRE封装在ESP封装之前,所以当1500byte的数据包+ 24bytes的GRE开销超过GRE隧道MTU 1500时,路由器的GRE进程丢弃了数据包。Router_A将一个不可访问的ICMP发送回Host_A,其内嵌MTU值为1476 (1500-GRE头长度为24)。

  3. 与DF位设置为SERVER_B HOST_A发送一个1476字节的数据包。

  4. Router_A收到包,注意到DF位已经被设置。路由器将包封装在GRE中,然后尝试将它封装在ESP中。增加的ESP封装将MTU推到1414的串行接口MTU上,所以Router_A放弃了这个包。ESP向GRE发送一个ICMP错误消息,表示MTU为1376字节(ESP头的最大长度为38字节,减去1414)。GRE将此值记录为新的隧道IP MTU。

  5. Host_A在步骤3中重新传输1476字节的数据包,因为没有收到确认。Router_A在超过步骤4中导出的隧道IP MTU时丢弃此包。Router_A使用隧道IP MTU为1414的ICMP不可到达消息响应。

  6. Host_A向Server_B发送一条长度为1414字节的新的ICMP消息。Router_A封装在GRE中,然后封装在ESP中。DF位在通过IPsec VPN传输之前被复制到ESP包中的外部IP头中。

  7. Router_C接收到数据包,并注意到设置了DF位。现在数据包的大小是1414,因为GRE和ESP头已经添加到第6步发送的原始ICMP消息中。Router_C丢弃数据包,因为它超过了Router_B链接的MTU并设置了DF位。Router_C向Router_A发送一条ICMP不可到达消息,MTU为1400。

  8. 在上面的步骤7中,Router_A接收来自Router_C的ICMP不可到达消息,并将其IPsec SA的PMTU字段更新为具有1500字节值的Router_B。

  9. HOST_A重新发送在步骤6至SERVER_B的1414字节的ICMP消息,如没有确认已被接收。

  10. Router_A接收数据包,并将其封装在GRE中。一旦应用了ESP封装,包的长度就超过了步骤8中从Router_C获得的1400字节的IPsec SA PMTU。ESP向GRE发送ICMP消息,MTU为1342 (ESP头的最大长度为1400-58字节)。GRE使用此值更新其隧道IP MTU。

  11. 重发HOST_A在步骤6中1414字节的ICMP消息再次,因为没有确认从所述重传步骤中接收到的10。

  12. Router_A接收包并丢弃它,因为它超过了新的GRE隧道IP MTU 1342并设置了DF-bit。Router_A将一个不可访问的ICMP转发给Host_A,其MTU值为1318字节(1342 GRE MTU少于24字节GRE开销)。

  13. Host_A接收第12步中Router_A发送的ICMP不可到达消息,并向Server_B发送一条新的1318字节的ICMP消息,该消息设置了DF位。

  14. 而Router_A接收分组,封装在GRE,封装在ESP,设置在外部IP头的DF比特,并且转发给Router_C。这一次,Router_C转发ICMP消息源自HOST_A到Router_B的。

  15. Router_B的解封装ESP数据包,然后解封装GRE报文,并最终转发原始ICMP PMTUD消息SERVER_B。

  16. Server_B确认收到消息,确认Host_A将为该路径使用MTU大小为1338字节。

虽然PMTUD ICMP消息中的DF位总是被设置以便正确检测碎片区域,但对于这些消息的ICMP不可到达响应被设置为0。因此,务必注意,从源发送到目的地的ICMP PMTUD消息永远不会被分段,但是对这些消息的响应很可能沿着返回路径被分段。

防止碎片的解决方案

在前几节中,我们讨论了防止片段路径MTU发现的最常见方法。但是,正如我们所探讨的,对于网络设备来说,使用PMTUD执行起来有些费力。此外,PMTUD在需要在网络中不同位置过滤ICMP消息的网络中可能不是一个选项。因此,在设计IPsec VPN时,务必了解可以避免碎片的其他方法。在本节中,我们将讨论减少PMTUD之外的IP碎片的几种技术。

IPsec Prefragmentation

IPsec预碎片化是Cisco IOS的一项特性,如果加密包和额外头信息的大小超过端点之间路径的MTU,则加密的IPsec VPN端点可以在加密之前尝试碎片化。PMTUD可用于确定SA的路径和该路径的MTU。与IPsec Prefragmentation结合使用提供了一种非常可伸缩和可管理的方法,可以提高IPsec VPN的整体性能,在这种情况下,加密后碎片可能会出现。示例4-34演示了如何使用IPsec前向碎片配置IPsec crypto DF-bit overwrite,以便使用隧道PMTUD动态地确定SADB的路径MTU,并对大数据包进行分段(那些超过SADB中该SA的路径MTU的数据包)之前加密。

示例4-34使用PMTUD和加密DF-bit重写启用IPsec预碎片

而Router_A#配置而Router_A#配置终端输入配置命令,每行一个。与CNTL / Z结束。而Router_A(配置)#加密的IPsec DF位集而Router_A(配置)#加密IPsec的碎片之前加密而Router_A(配置)#

注意:虽然在实施例4-34的情况下,而Router_A将加密它们之前尝试片段大的数据包,有许多构造实例中的IPsec先行分段和DF位重写配置不正确。关键是要了解DF位设置和先行分段设置解决IPsec的碎片设计考虑的相互依存关系。对于与IPsec先行碎片设置DF位互操作的完整列表,请参阅CCO上以下网址:

http://www.cisco.com/en/US/partner/products/sw/iosswrel/ps1839/products_feature_guide09186a0080115533.html


图4-18说明不支持PMTUD的客户机服务器交换。请注意,即使没有交换ICMP消息,仍然会在Router_A的IPsec SADB中发现和更新路径MTU。

有三个关键的操作,使此功能:

  • 前向分段:在转发IPsec包之前,Router_A预先确定封装包的大小,并将其与SADB中的MTU进行比较。如果预先确定超过MTU大小,则数据包被分割之前将其加密。

  • 加密DF位重写:当不支持PMTUD,即而Router_A能够设置DF位的IP​​sec封装的数据包的外部IP报头是很重要的。这可以防止碎裂,并触发ICMP不可到达需要调整Router_AísSADB路径MTU。

  • 在ICMP中处理MTU信息是不可实现的:Router_A能够破译MTU信息ICMP不可达的tion(当DF=1的IPsec数据包被丢弃时接收)。它使用这些信息动态更新其SADB中的MTU路径。

中Router_A和Router_B之间的交换图4-18举例说明这三个特性如何协同工作,以最小化IPsec VPN部署中在端站启用PMTUD时的加密后片段效应:

图4-18

图4-18

IPsec片段处理没有启用pmtudo的端站

  1. Host_A发送一个1500字节的数据包,发送给Server_B。

  2. 而Router_A接收分组,和加密或转发分组之前估计所述ESP封装的分组大小。而Router_A比较与路径MTU估计封装的分组大小,并且确定大小比路径MTU和片段分组更大。

  3. Router_A对片段链中的片段应用适当的封装。在这样做的同时,它将每个封装包的DF位设置为1。

  4. Router_C从而Router_A接收分组,将它们与Router_C到Router_B的链路的MTU进行比较,注意到,DF = 1,并且相应降低较大分组。Router_C发送ICMP未达为被丢弃的数据包而Router_A。

  5. 而Router_A从Router_C接收ICMP未达,并相应地更新其SADB的MTU。

  6. HOST_A没有收到相应的超时窗口内其原始数据包的答复,因此重传。

  7. 而Router_A上重传的分组执行先行碎裂,碎片尺寸在其SADB新MTU。然后,它设置在每个加密分组DF位。

  8. 加密包的大小现在比路径中的任何单个链路MTU都要小(<1400字节),因此可以在Router_B上接收。Router_B现在能够在重新组装之前对链中的每个片段进行解密,这个过程在快速交换路径中完成。

手动调整MTU

我们已经讨论了可用的Cisco IOS内,以避免在的IPSec VPN碎片化,而不必手动调整网络内的MTU大小的许多工具。然而,该选项仍然存在,增加MTU大小之间的IPsec VPN端点,以便接收除MTU尺寸小的数据包的风险是很小的。如果一个人必须调整MTU大小,以适应网络中的端点之间的IPsec通信,应采取以下缺点这种方法考虑:

  • 可伸缩性和管理:记住,MTU的大小在每个分段的基础上都是不同的。因此,对于网络管理员来说,一致地确保每个段的MTU都得到了适当的调优可能会变得非常困难。网络设计者可以预料到,随着IPsec VPN连接和主机数量的增加,手动MTU调优的难度会增加。

  • 序列化延时:MTU属性存在减少对网络的串行延迟。在具有人为的高MTU大小的段,网络管理员可以期待作为较大分组在队列串行化延迟增加。这种时间和延迟敏感的应用,如语音和视频IP不利影响。

相关:
123.456789 8页
第8页共9页
IT薪资调查:结果在