张韬
摘要:网络中使用NAT技术实现企业和Internet连接是一种非常普遍的应用,此时通过NAT的数据包报头都将会被改写,而一旦企业内又有IPSec VPN系统部署的需求,由于IPSec从安全性方面不允许改变数据包内容,所以数据包在穿越NAT网络时,就会存在着困难。实践证明,在网络出口设备上使用NAT穿越技术可以很好解决以上问题。
關键词:NAT;IPSec VPN;NAT穿越;udp;esp
中图分类号:TP393
文献标识码:A
文章编号:1009-3044(2019)31-0017-02
1概述
在企业VPN网络的部署实施中,NAT和IPSec两种技术经常存在着矛盾。主要原因是NAT进行地址转换的时候,需要修改数据包报头中的源lP地址和源端口号部分,此时数据包将被改写。而经过IPSec保护后的数据包在中途传输时,如果使用传输模式,因为IPSec会将IP包头进行加密保护起来,并生成hash值,要更改IP包头是不可行的,如果随意改动IP包头,将使该数据包作废,所以普通IPSec数据包无法穿越NAT设备,这势必就会影响到企业IPSec VPN之间的正常通信。而使用隧道模式时,可以避免这样共存的问题,后面涉及的IPSec VPN场景都是基于隧道模式。
2解决方案
目前,为了解决NAT和IPSec VPN之间的共存问题,已形成了较为成熟的解决方案,主要有以下几种。
(1)基于特定域IP(Realm Specific IP,RSIP)的穿越技术嘲
因为在最初设计的时候就没有考虑到NAT与IPSec两种技术之间的兼容性,对于IPSec可以更改其协议设计从而在根源上解决冲突或者对于NAT则可以使用替代的RSIP协议,这种解决方案虽然能够全面解决兼容问题,但是实现相对复杂,需要对原有设备做较大改动。
(2)基于NAT-T的穿越技术
路由器探测网络路径中是否存在NAT的功能,称为NATTraversal(NAT穿越),简称NAT-T。它使用UDP协议封装ESP载荷,在ESP头部之前插入8个字节的UDP报头,由于这个新的传输层头部拥有未被加密的端口信息且被存放在PAT表中,因而可以成功地进行PAT转换。这种方式不需要对Internet密钥交换协议或者IPSec协议做修改,实现最为方便。
(3)基于NAT前置的穿越技术
对于在Site-to-Site中建立IPSec VPN的场景,可以在同一设备中实现IPSec和NAT,并且先进行NAT处理,后实现IPSec,就可以避免它们两者之间的矛盾。但是,这种解决方案有它的局限性,如果超出了它的适用范围,则这种方案就不再适用了。
在上述现有三种主流IPSec VPN的NAT穿越技术中,NAT-T技术由于实现相对简单因而得到广泛应用。本文基于NAT-T方式进行网络设计及实现。
2.1 NAT-T穿越技术原理概述
NAT-T技术首先在VPN中IKE协商的第一阶段时就通过双方发送Vendor ID载荷探测是否支持NAT穿越,通过检测双方地址和端口的变化探测网络路径中是否存在NAT,检测的方法是发送测试数据包,对数据包做Hash,如果收到的数据包的Hash没变化,就认为路径中没有NAT。测试时发送的数据包称为NAT discovery(NAT-D)包,源地址和端口与目标地址和端口是分开的,如果有多个,那么数据包也就有多个包。
当第一阶段发现存在NAT之后,IKE的第二阶段才会采用NAT-T,在ISAKMP中使用目的端口号为UDP4500来协商NAT-T,而源端口则使用下一个可用更高的端口号,如4501,在选择端口时,如果端口已经被占用了,则使用4501,4502,一直到可用为止。此时IPSec的数据包会被作为数据部分,再次封装在UDP包中进行传输,NAT技术也就影响不到IPSec数据包。
NAT-T只能使用ESP协议封装来穿越NAT,不能使用AH协议封装,因为AH头部不允许发生一点变化,不允许出现检验错误。当NAT-T将ESP协议头封装到UDP包中时,在ESP协议的IP报头外不仅会添加新的IP报头,还要添加新的UDP头部(源端口和目的端口均为UDP500),使之可以在NAT环境下被使用,NAT-T隧道封装格式见图1所示。
2.2 NAT-T技术设计与实现
当企业某个分支机构只有一个或很少的公网IP时,同时又要考虑安全性,会将VPN路由器放置在内网中,配置内网IP地址后,再通过出口路由器或防火墙等设备进行NAT地址转换后和总部建立VPN连接,如图2所示。但是建立VPN必须使用公网IP地址才可以和远端设备建立VPN隧道,这时就需要使用到NAT-T技术,使得IPSec数据包能够穿越NAT环境。
这里在GNS3模拟器上来进行验证。在以上所有路由器上配置好接口地址和到达Internet的默认路由,并在NAT路由器上开启NAT功能,将分部内网数据包源地址192.168.1.2转换为NAT路由器公网fa0/0口lP地址后,此时VPN设备之间可以实现互连,但无法访问对方的内网环回口地址,需要在路由器上配置IPSec VPN来保证内网环回口之间数据的安全传输,并验证NAT-T的效果。在当前大部分路由器中,NAT-T功能默认自动开启。
此时发现从NAT端本地路由器VPN-2的环回口可以ping通VPN-1的环回口,VPN连接建立成功。但如果首先从NAT远端路由器VPN-1上的环回口发起连接,测试到达VPN-2路由器环回口IP地址,却发现无法ping通。
2.2.3 NAT穿越实现和验证
当在VPN设备支持NAT-T时,如果IPSec VPN连接是从NAT本端设备发起的,不需要做任何配置,但如果IPSec VPN连接是从NAT远端设备发起的,由于VPN使用UDP端口500在对等体之间协商交换IKE信息,在连接一个安全网关对等体所涉及的所有IP接口上都必须允许UDP端口500的报文通过,就需要在NAT路由器上增加相关配置,将公网接口lP地址的UDP500和4500端口映射到内网VPN地址的500和4500端口,否则IPSec VPN无法通信,例如在上面的应用场景中,在NAT路由器上增加如下命令:
虽然IPSec不能穿越PAT,但静态地址NAT映射是可以的。此时可以看到路由器之间VPN连接已经建立成功,使用UDP500和4500端口来协商IKE的建立和NAT-T,如图3和图4所示。NAT远端路由器VPN-1上的环回口也可以ping通VPN-2路由器环回口lP地址。
3结论
NAT穿越技术解决了IPSec和NAT技术共存的问题,可以实现内网路由器和远端公网设备之间在穿越NAT的环境中建立VPN的要求,使得符合感兴趣流的数据包使用IPSec机制进行VPN隧道安全传输,不符合感兴趣流的只做NAT,从而满足更多的实际场景需求。