当前位置:Linux教程 - Linux业界 - IPsec与NAT和平共处的解决之道

IPsec与NAT和平共处的解决之道

  现在,网络安全和网络地址转换的应用已经十分广泛。单就其中任何一种技术来说,都是很不错的。如何将两个好技术共用但又使它们相安无事,是很多人正在思考的问题。

  网络安全IPsec(IP Security)和网络地址转换NAT(Net Address Translation)应用已经十分广泛了,但是要使它们运行在一起,却不是一件容易的事。从IP的角度来看,NAT对IP的低层进行了修改,对IP是一种背叛;而从应用的角度来看,网络管理人员必须要处理网络地址的问题,NAT使用户可以采取多种方式把自己的网络和主机对外部公共网络隐藏起来,是一种好的工具,现在,无论是大企业还是中小企业都在使用它。与NAT类似,IPsec也是一种好工具,它使用户可以安全地通过Internet联接到远程终端。然而,由于IPsec协议架构本身以及缺乏支持IPsec的NAT设备,当IPsec和NAT在一起运行时就会出现很多问题。解决这些问题最简单的办法,就是再增加一个路由器来运行NAT和虚拟专用网VPN。可是,对于多数情况来说并没有多余的路由器来执行这一功能,因此,要解决两者共存的问题,就必须对IPsec和NAT有一定的了解。

  ■NAT的基本原理和类型
  NAT能解决令人头痛的IP地址紧缺的问题,而且能使得内外网络隔离,提供一定的网络安全保障。它解决问题的办法是:在内部网络中使用内部地址,通过NAT把内部地址翻译成合法的IP地址在Internet上使用,其具体的做法是把IP包内的地址域用合法的IP地址来替换。

  NAT功能通常被集成到路由器、防火墙、ISDN路由器或者单独的NAT设备中。NAT设备维护一个状态表,用来把非法的IP地址映射到合法的IP地址上去。每个包在NAT设备中都被翻译成正确的IP地址,发往下一级,这意味着给处理器带来了一定的负担。但对于一般的网络来说,这种负担是微不足道的。

  NAT有三种类型:静态NAT、动态地址NAT、网络地址端口转换NAPT。其中静态NAT设置起来最为简单,内部网络中的每个主机都被永久映射成外部网络中的某个合法的地址。而动态地址NAT则是在外部网络中定义了一系列的合法地址,采用动态分配的方法映射到内部网络。NAPT则是把内部地址映射到外部网络的一个IP地址的不同端口上。根据不同的需要,三种NAT方案各有利弊。

  动态地址NAT只是转换IP地址,它为每一个内部的IP地址分配一个临时的外部IP地址,主要应用于拨号,对于频繁的远程联接也可以采用动态NAT。当远程用户联接上之后,动态地址NAT就会分配给他一个IP地址,用户断开时,这个IP地址就会被释放而留待以后使用。

  网络地址端口转换NAPT(Network Address Port Translation)是人们比较熟悉的一种转换方式。NAPT普遍应用于接入设备中,它可以将中小型的网络隐藏在一个合法的IP地址后面。NAPT与动态地址NAT不同,它将内部连接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NAT设备选定的TCP端口号。

  在Internet中使用NAPT时,所有不同的TCP和UDP信息流看起来好像来源于同一个IP地址。这个优点在小型办公室内非常实用,通过从ISP处申请的一个IP地址,将多个连接通过NAPT接入Internet。实际上,许多SOHO远程访问设备支持基于PPP的动态IP地址。这样,ISP甚至不需要支持NAPT,就可以做到多个内部IP地址共用一个外部IP地址上Internet,虽然这样会导致信道的一定拥塞,但考虑到节省的ISP上网费用和易管理的特点,用NAPT还是很值得的。(如图示)

  ■IPsec的工作模式
  IPsec是一个能在Internet上保证通道安全的开放标准。在不同的国度中,跨国企业面临不同的密码长度进出口限制。IPSec能使网络用户和开发商采用各自不同的加密算法和关键字长,从而解决令跨国机构头痛的安全问题。

  IPsec生成一个标准平台,来开发安全网络和两台机器之间的电子隧道。通过IPsec的安全隧道,在数据包可以传送的网络中生成像电路那样的连接。IPsec在远地用户之间和在本地网中生成这样的隧道,它也把每个数据包包封在一个新的包中,该新包包含了建立、维持和不再需要时拆掉隧道所必需的信息。

  经常利用IPsec来确保数据网络的安全。通过使用数字证明和自动认证设备,来验证两个来回发送信息的用户身份。对需要在很多设备之间安全连接的大型网络中确保数据安全,IPsec是一个理想的方法。

  部署了IPsec的用户能确保其网络基础设施的安全,而不会影响各台计算机上的应用程序。此套协议是用作对网络基础设施的纯软件升级。这既允许实现安全性,又没有花什么钱对每台计算机进行改造。最重要的是,IPsec允许不同的网络设备、PC机和其他计算系统之间实现互通。

  IPsec有两种模式—─传输模式和隧道模式。传输模式只对IP分组应用IPsec协议,对IP报头不进行任何修改,它只能应用于主机对主机的IPsec虚拟专用网VPN中。隧道模式中IPsec将原有的IP分组封装成带有新的IP报头的IPsec分组,这样原有的IP分组就被有效地隐藏起来了。隧道主要应用于主机到网关的远程接入的情况。

  IPsec协议中有两点是我们所关心的:鉴定报头AH(Authentication Header)和封装安全载荷ESP(Encapsulation Security Payload)。

  鉴定报头AH可与很多各不相同的算法一起工作。AH应用得很少,它要校验源地址和目的地址这些标明发送设备的字段是否在路由过程中被改变过,如果校验没通过,分组就会被抛弃。通过这种方式AH就为数据的完整性和原始性提供了鉴定。

  封装安全载荷(ESP)信头提供集成功能和IP数据的可靠性。集成保证了数据没有被恶意网客破坏,可靠性保证使用密码技术的安全。对IPv4和IPv6,ESP信头都列在其它IP信头后面。注意两种可选择的IP信头,段到段信头在每个段被路由器等立即系统处理,而终端信头只被接收端处理。ESP编码只有在不被任何IP信头扰乱的情况下才能正确发送包。ESP协议非常灵活,可以在两种加密算法下工作。建立IPSec的两个或者更多系统之间可以使用其他转换方式。现在,可选择算法包括Triple-DES、RC5、IDEA、CAST、BLOWFISH和RC4。

  ■NAT和IPsec之间的“矛盾”
  NAT和AH IPsec无法一起运行,因为根据定义,NAT会改变IP分组的IP地址,而IP分组的任何改变都会被AH标识所破坏。当两个IPsec边界点之间采用了NAPT功能但没有设置IPsec流量处理的时候,IPsec和NAT同样无法协同工作;另外,在传输模式下,ESP IPsec不能和NAPT一起工作,因为在这种传输模式下,端口号受到ESP的保护,端口号的任何改变都会被认为是破坏。在隧道模式的ESP情况下,TCP/UDP报头是不可见的,因此不能被用于进行内外地址的转换,而此时静态NAT和ESP IPsec可以一起工作,因为只有IP地址要进行转换,对高层协议没有影响。

  ■解决争端,和平共处
  为了解决ESP IPsec和NAPT共用的问题,设备生产商提出了多种解决方法。简单的办法是专门用一个工作站来运行IKE,以处理所有的IPsec分组,但这样只允许一个IPsec VPN通过NAPT。客户端可以一开始通过端口号500传送数据进行协商,将所有进入到NAPT设备的IPsec分组传送到指定的主机,同时使NAPT设备将所需的IPsec数据送回到客户端。为了使NAPT正常工作,必须保证内部网络和外部网络之间转换的源端口号是惟一的。因此,我们可以使用IKE来进行协商,IKE采用UDP的500端口,所以不需要任何的特殊处理。为了在两个主机之间传送IPsec流量,我们需要使用SPI。每个SA都有SPI,在VPN安装过程中进行IKE协商时,它们互相交换SPI。NAPT设备将这一对SPI数字映射到NAT内的相关的VPN终端。IPsec 客户端选择的SPI要映射到一个内部IP地址,因为NAPT设备要通过它来确定将流入的流量传送到哪里。

  几点值得注意:1.这种解决争端的方法只适用于位于NAPT设备之外的IPsec 客户端来初始化IPsec VPN;2.必须要设置IPsec网关,用NAPT网关给出的某个IP地址进行IKE协商。ESP用SPI、目的地址和协议号来查找IPsec分组所属的SA,因为IPsec网关只是通过NAPT地址来确定IPsec客户端,它必须使用这个地址进行协商;3.许多IKE鉴定是通过IP地址相关的预先设定或者与密码来进行处理的,因此必须设置IPsec网关与NAPT IP地址之间的协商。