IPSec穿越NAT

2012-12-27来源 : 互联网

在IPSec中,SA的管理既可手工进行,也可通过IKE自动协商来完成。如果采用IKE方式,需要IKE协商和UDP封装两种方法配合起来使用,以完成IPSec穿越NAT。

IKE协商:在IKE**阶段的协商中,需要针对NAT执行两种探测。一是探测是否支持NAT穿越,二是探测在通信路径中是否存在NAT。NAT可能会改变IKEUDP的源端口,因而接收方必须能处理源端口不是500的IKE报文。

(1)通过Vendor ID载荷交换来确定远程主机是否支持NAT穿越。如果协商双方支持NAT穿越,则协商双方在阶段1的前两条消息中应加入一个Vendor ID载荷,载荷的内容是对特定字串进行MD5运算得出的散列值。该字串需标明它所支持的NAT穿越方法应遵循的要求。

(2)NAT-D(NAT Discovery)载荷不仅用于探测两个IKE实体之间是否存在NAT,也用于探测NAT所处的位置。Keepalive消息能从位于NAT后面的实体发出。为了探测出两台主机之间的NAT,需要检查IP地址和端口是否沿着传输路径发生改变。协商双方只需各自向对端发送源方和目的方的IP地址与端口的散列值,就可以检测地址和端口在传输过程中是否发生改变。如果协商双方计算出的散列值与其收到的散列值相同,则表示它们之间没有NAT。反之,则是在传输中对地址或端口进行了转换,说明所通过的IPSec报文进行了NAT穿越的处理。如果发送者不能确定自己的IP地址,它可以在报文中包含多个本地IP地址的散列值。在这种情况下,仅当所有的散列值均不匹配时,才表明NAT的存在。

在**阶段完成后,协商双方都已明确,在它们之间是否存在NAT。至于是否使用NAT穿越,则由快速模式协商决定。NAT穿越的使用在快速模式的SA载荷中协商,协商双方可向对端传送IPSec报文的原始地址(传输模式情况下),从而使对端有可能在NAT转换之后,对TCP/IP进行校验和修正。为了执行增量TCP校验和修正,协商双方可能需要知道对端在构造报文时所使用的原始IP地址。对于发起方,其原始发起方地址定义为发起方的IP地址,而原始响应方地址定义为当前所知道的对端的IP地址。对于响应方,原始发起方地址定义为当前所知道的对端IP地址,原始响应方地址定义为响应方的IP地址。

UDP封装:

(1)在进行UDP封装时,要进行一些辅助处理。当使用隧道模式传送报文时,内部IP头中会包含不适合当前网络的地址。以下说明将其转换成适合当前网络地址的处理方法。根据本地策略,必须完成下列任务之一:

如果在策略中,已为对端的封装报文定义了一个有效的源IP地址空间,则应根据策略检查在内部报文中的IP源地址是否属于有效范围。

如果已经为远程对端分配了一个地址,则应检查内部报文中的IP源地址是否与该地址一致。对报文执行NAT转换,使其适合在本地网络中传输。

(2)当使用传输模式传送报文时,如果在传输中IP头部发生变化,TCP或UDP头部将包含错误的校验和。根据本地策略必须完成以下任务之一:

如果在ESP头部之后的协议头部是一个TCP/UDP头,并且已经获得对端的真实源/目的IP地址,则应增量计算TCP/UDP校验和,如果接收到的地址和真实地址是相同的,则取消相关操作。

(3)在实现中,可以对被NAT破坏的包含协议进行修正。

渝ICP备2024022750号-1

Copyright©2004-2024 3158.CN. All Rights Reserved 重庆市上台九悟酒销售有限公司 版权所有

3158招商加盟网友情提示:投资有风险,选择需谨慎