摘 要 网络地址转换技术(NAT) 与IPSec在因特网上都是得到广泛应用的技术,但是它们之间却是不兼容的。该文首先分别介绍了NAT和IPSec两种协议的基本原理,分析了两者的不兼容性,然后讨论了解决该问题必须满足的要求,最后给出了利用UDP封装法实现NAT透明穿透的解决方案。 关键词 IPSec; NAT; IKE; UDP封装 1 引言 基于IP技术的虚拟专用网(Virtual Professional Network,简称VPN)是通过Internet平台将局域网扩展到远程网络和远程计算机用户的一种成本效益极佳的方法。随着网络安全技术的飞快发展,越来越多大型企业利用互联网采用IPSec技术建立VPN网络,IPSec已逐渐成为VPN构建的主流技术。IP安全协议(IP Security Protocol,简称IPSec)是由互联网工程工业组(Internet Engineering Task Force,简称IETF)1998年底规划并制定的网络IP层标准。IPSec不仅可以为IP协议层以上所有的高层协议和应用提供一致性的安全保护,而且除了可用于IPv4之外,也可用于下一代IP协议IPv6。 另外,NAT(Network Address Translation)技术通过改变进出内部网络的IP数据包的源和目的地址,把无效的内部网络地址翻译成合法的IP地址在Internet上使用。该技术一方面可以把私有IP地址隐藏起来,使外界无法直接访问内部网络,对内部网络起到保护作用;另一方面,它可以缓解由于IPv4先天设计上的不足,而导致的IP地址严重短缺的现状。 但是,被广泛使用的网络地址转换(NAT)设备却制约着基于IPSec技术的VPN的发展,这是因为IPSec 协议在VPN 中承担保护传输数据的安全性任务。在数据传输过程中,任何对IP 地址及传输标志符的修改,都被视作对该协议的违背,并导致数据包不能通过安全检查而被丢弃。但在VPN 中运用NAT技术,则不可避免地要将私网地址映射为公网地址,即对IP 地址要进行修改。因此,在VPN网络中如何使IPSec和NAT协同工作,实现NAT的透明穿透具有现实意义。2 协议介绍2.1 IPSec IPSec包括安全协议和密钥管理两部分。其中,AH和ESP是两个安全协议,提供数据源验证、面向无连接的数据完整性、抗重放、数据机密性和有限抗流量分析等安全任务。为了能够将相应的安全服务、算法和密钥应用于需要保护的安全通道,IPSec 规定两个通信实体进行IPSec 通信之前首先构建安全关联SA。SA 规定了通信实体双方所需要的具体安全协议、加密算法、认证算法以及密钥。IKE提供了用来协商、交换和更新SA 以及密钥的完整机制。 IPSec定义了两种类型的封装模式——传输模式和隧道模式。传输模式只对IP分组应用IPSec协议,对IP报头不进行任何修改,它只能应用于主机对主机的IPSec虚拟专用网VPN中。隧道模式中IPSec将原有的IP分组封装成带有新的IP报头的IPSec分组,这样原有的IP分组就被有效地隐藏起来了。隧道主要应用于主机到网关的远程接入的情况。2.2 NAT NAT能解决目前IP地址紧缺的问题,而且能使得内外网络隔离,提供一定的网络安全保障。它解决问题的办法是:在内部网络中使用内部地址,通过NAT把内部地址翻译成合法的IP地址在Internet上使用,其具体的做法是把IP包内的地址或用合法的IP地址来替换。NAT功能通常被集成到路由器、防火墙、ISDN路由器或者单独的NAT设备中。 NAT有三种类型:静态NAT、动态地址NAT、网络地址端口转换NAPT。其中静态NAT设置起来最为简单,内部网络中的每个主机都被永久映射成外部网络中的某个合法的地址。而动态地址NAT则是在外部网络中定义了一系列的合法地址,采用动态分配的方法映射到内部网络。NAPT则是把内部地址映射到外部网络的一个IP地址的不同端口上。根据不同的需要,三种NAT方案各有利弊。3 IPSec与NAT的不兼容性分析 根据协议的定义,我们知道IPSec 和NAT 两个协议之间存在一定的不兼容性。其不兼容性主要有以下几种形式:1) NAT对AH的影响 IPSec AH进行验证的时候,处理的是整个IP包,包括源地址和目的地址。如果IPSec通信双方存在NAT设备,NAT设备就会修改外层IP包头的源地址并修改其校验和,这样接收方会因认证失败而丢弃该包。2) NAT对ESP的影响 TCP/UDP校验和地计算涉及一个虚构的IP包头,该包头含有IP源和目的地址。因此,当NAT设备改变IP地址时也需要更新IP头和TCP/UDP校验和。如果采用ESP传输模式,IP包经过NAT设备时,NAT设备修改了IP包头,但是TCP/UDP校验和由于处于加密负载中而无法被修改。这样,该信包经过IPSec层后将因为TCP协议层的校验和的错误而被丢弃。 另外,由于TCP/UDP校验和只与内层原始IP包头有关,外层IP包头的修改并不对其造成影响,因此采用ESP隧道模式和仅静态或动态NAT的情况下不存在TCP校验和的问题。但是,在NAPT情况下,因为NAPT需要TCP/UDP端口来匹配出入信包,而端口号受到ESP加密保护,所以ESP分组通信将会失败。3) NAT对IKE的影响 IKE 主模式与快速模式中如果使用IP 地址作为身份信息,经过NAT 后,会导致IKE 协商的失败。 IKE 协议使用固定目的端口500,当NAPT 设备后的多个主机向同一响应者发起SA 协商时,为了实现多路分发返回的IKE 包,NAPT 修改外出的IKE 包的UDP 源端口。因此,响应者应该能处理端口号并非500 的IKE 协商请求,但往往NAPT 对UDP 端口的映射很快会被删除,再协商的过程就将出现一些不可预见的问题,很容易导致NAPT 设备无法将协商包送到正确的目的地。 综上所述,IPSec组件对NAT的支持能力如表1所示。表1 IPSec对NAT的支持能力 从表1中可以看出,只有在隧道模式和地址转换情况下才可以实现IPSec 数据流的NAT穿越。这一方法既降低了IPSec 协议的安全性,又限制了NAT 的工作方式,因此在实际应用中可行度较差。4 IPSec与NAT的兼容性要求 在现有的条件下,为了推动基于IPSec的VPN的发展,IPSec和NAT兼容性解决方案需要满足下列要求:1) 可部署性 IPSec和NAT兼容性解决方案作为一个过渡的解决办法必须比IPv6易于部署。应该只需修改主机,无需改变路由器,在短时间内能与现存的路由器和NAT产品协同工作。2) 远程访问 IPSec的一个重要应用是远程访问公司的内部网络。NAT穿越方案必须考虑远程客户端与VPN网关之间存在多个NAT的情况。3) 防火墙兼容性 IPSec和NAT兼容性方案应该避免对IKE或IPSec目的端口的动态分配,使防火墙管理员进行简单的配置,就可以控制穿越NAT的IPSec数据流。4) 可扩展性 IPSec和NAT兼容性方案应具有良好的扩展性,必须保证在大规模远程访问的环境中,在大量远程接入的环境下,同一时间段多个主机和远程安全网关建立连接。5) 后向兼容性 IPSec和NAT兼容性方案中必须能与已有的IPSec实现互操作。穿越方案应该能自动检测是否存在NAT,能判断通信对方的IKE实现是否支持NAT穿越。6) 安全性 IPSec和NAT兼容性解决方案的引入必须保证不得带来新的安全漏洞。5 利用UDP封装法实现NAT的穿透 本文中的解决方案是采用UDP 封装法实现NAT 的透明穿透,不需要修改现有的NAT 网关和路由器。所以该方案具有简单且易于实现的优点,缺点是由于添加了一个UDP 报文头,而加大了带宽开销,但相对于目前持续扩大的传输带宽来说,这个UDP 报文头的带宽开销可以忽略不计。下面详细讨论其原理和实现过程。5.1 封装格式 UDP封装法是在原有的IP包的IP头和AH/ESP的数据之间再封装一个UDP头,这样封装后的数据包端口值对NAT可见,就可以正确的实现端口转换。UDP封装格式如图1所示。图1 UDP封装格式 另外,由于IKE已经使用了UDP的500端口,为了简化配置和避免多个端口带来的安全隐患,UDP 封装的 ESP也使用该端口。这样就需要采取一定的方法来区分端口500的数据包是IKE消息还是UDP 封装的 ESP。为了区分两者,我们采用在IKE 报头添加Non-ESP 标记。 在确定存在一个中间 NAT 之后,支持 IPSec NAT-T 的对话方开始使用新的 IKE 报头。5.2 IKE协商过程 IPSec 通信实体双方是否采用UDP 封装取决于对话对方是否支持该方法以及是否存在NAT设备,这个过程通过IKE 协商来完成。在IKE协商过程中增添了新的 NAT-D 和 NAT-OA 有效载荷和以及UDP 通道类型。1) 新的 NAT-Discovery (NAT-D)