网络地址译码器NAT是一个可以在转发数据包的同时进行IP地址和TCP/UDP端口号转换的IP路由器。为了更好地理解NAT以及NAT的功能,我们可以设想一家小公司,有好几台主机需要连到Internet上,在这种应用系统中,一种可能的解决办法是为每一台需要上网的主机申请一个公共IP地址,但这么做,一方面公司需要承受较高昂的费用,另一方面由于IP地址的匮乏,申请新地址也不容易。利用NAT,这家公司则可以不必申请那么多公共IP地址,而是在公司内部网段上使用内部私用地址,当通过NAT路由器发送数据时,再使用NAT将私用地址转换成由ISP分配的合法注册的公共IP地址。通过这种方式,可以实现多台内部主机共享一个公共IP地址。
举例来说,假设这家小型公司有多台主机,在其内部网络中使用私用保留IP地址10.0.0.0/8,同时该公司申请了四个公共IP地址:w、x、y、z。那么当通过NAT路由器发送数据时,NAT可以采用静态方式或动态方式将10.0.0.0/8网络上所有私用IP地址映射成w、x、y、z这四个公共IP地址。
当有数据包需要外发时,源端IP地址和TCP/UDP端口号被映射成w、x、y、z和经过转换的TCP/UDP端口号。相反,当接收数据包时,目标IP地址和TCP/UDP端口号再被映射回私用IP地址和源TCP/UDP端口号。
在缺省情况下,NAT仅进行IP地址映射和TCP/UDP端口转换。某些协议数据流,如HTTP,其IP地址和端口信息只出现在IP报头和TCP/UDP报头中, NAT可以对其IP地址和端口号完成透明的的转换映射。
但是,另外有部分协议出于某些因素,将IP地址和TCP/UDP端口信息封装在协议自身报头中,如FTP将IP地址封装在FTP报头中。在这种情况下,如果NAT不能对FTP报头中的IP地址进行正确转换的话,就会引起连接错误。更有甚者,还有一些协议根本不用TCP或UDP报头,而是使用其他报头的某些字段来标识数据流。
当NAT需要对以上使用非IP、TCP、UDP报头的负载进行地址和端口转换时,就要用到一个特殊的组件--NAT编辑器。NAT编辑器的作用是对使用非IP、TCP、UDP报头的数据流进行适当的修改,以便它们能通过NAT路由器,同时得到正确的路由转发。
以下就PPTP协议和基于IPSec的L2TP协议分析在VPN环境中,NAT的适用情况。
一、PPTP数据流
PPTP数据流包括一条维持隧道的TCP连接和由GRE封装的隧道数据。其中,TCP连接属于可转换部分,直接由NAT对源TCP端口号进行透明翻译;而由GRE封装的隧道数据则属于我们在上面分析过的,其地址转换需要用到特定的NAT编辑器。 在隧道数据中,隧道是通过被封装在GRE报头中的源IP地址和CALL ID字段来标识的。假设现在有某公司,当其内部网络中有多台主机同时需要作为PPTP客户机与远程同一台PPTP服务器建立隧道连接时,这多台PPTP客户机经过NAT路由器,其内部不同的私有IP地址将被转换成同一个公共IP地址。同时,由于这些PPTP客户机本身意识不到它们的地址需要被转换,它们还可能在建立PPTP隧道时,采用相同的CALL ID。由此引发的后果是经过NAT转换后,发自多台不同PPTP客户机的隧道数据流具有完全相同的IP地址和CALL ID。
为了防止此类错误发生,针对PPTP协议的NAT编辑器必须对PPTP隧道的建立进行全程监控,并在每一台PPTP客户机的私用IP地址、CALL ID和公共IP地址以及PPTP服务器接收的CALL ID之间建立单独的映射关系。 NAT路由协议包含了一个PPTP编辑器,具有进行GRE报头中CALL ID转换功能,从而使得NAT在完成多私用地址到单公共地址的转换时,能在多条PPTP隧道之间进行有效区分。
二、基于IPSec 的L2TP数据流
基于IPSec 的L2TP数据流,其地址无法经NAT转换,因为UDP端口号经过加密处理,端口号的值受密码校验和的保护。不仅如此,由于以下两个因素,基于IPSec 的L2TP数据流甚至无法象PPTP数据流一样,通过特定编辑器来转译:
1)无法区分多路IPSec
ESP数据流 ESP报头中包含一个SPI--"安全参数索引"字段,该字段连接明文IP报头中的目标IP地址和诸如ESP 或认证报头AH 等IPSec安全协议,以此来标识某个IPSec安全关联SA。
对于经过NAT路由器出站的隧道数据,目标IP地址无须改变。相反,对于需要通过NAT路由器进入企业内部网的数据流,其目标地址必须映射成某个确定的私用IP地址,但此时我们会看到,进站的所有IPSec ESP数据流,其目标IP地址都是相同的,是同一个公共IP地址。为了能将多路IPSec ESP数据流彼此区分开,必须将目标IP地址和SPI映射成私有目标IP地址和SPI。但是,由于ESP认证报尾包含对ESP报头和有效载荷进行校验的密码校验和,如果修改SPI的话,会造成该密码校验和的失效,而不改变SPI,则无以区分多路IPSec ESP数据流。
2)无法改变TCP和UDP校验和
同样,在基于IPSec 的L2TP数据包中,UDP和TCP报头中也各自包含一个校验和,用于校验明文IP报头中源端和目标端IP地址。类似的,如果改变明文IP报头中地址,也会造成密码校验和的失效。而且,由于这两个密码校验和位于ESP有效载荷加密部分,因此我们无法试图在修改IP地址的同时,更新密码校验和。
由于上述原因,我们看到,使用基于IPSec 的L2TP协议的 VPN环境中,无法采用NAT实现网络地址转译。
结束语
随着经济全球化进程的日益加快,如今越来越多的公司、企业纷纷在全国各地乃至世界各地建立分支机构开展业务,开拓市场。办公场地和分支机构的分散化趋势,以及日渐庞大的移动办公大军的出现,使得所有这类企业都必须考虑同样一个问题:即如何在远程分部与公司总部以及用户之间建立快捷,安全、可靠的信息通信。
虚拟专用网VPN作为上述问题一个切实可行又经济节约的解决方案已经得到越来越广泛的重视和应用,这个系列讲座,对VPN的各个方面分别做了较详细的介绍,希望对想了解VPN的读者能有所帮助。