NAT技术白皮书
关键词:NAT,NAPT,ALG,EASY IP,DNS mapping
摘 要:本文对NAT技术产生的背景、原理以及实现方式等进行了整体介绍,其中包括各种NAT转换方式的使用方法、适用范围和组网方案等。
缩略语:
缩略语 | 英文全名 | 中文解释 |
ALG | Application Layer Gateway | 应用级网关 |
CIDR | Classless InterDomain Routing | 无类域间路由选择 |
DNS | Domain Name System | 域名系统 |
DHCP | Dynamic Host Configuration Protocol | 动态主机配置协议 |
FTP | File Transfer Protocol | 文件传输协议 |
HTTP | Hyper Text Transport Protocol | 超级文本传输协议 |
ILS | Internet Locator Server | 互联网定位服务 |
NAT | Network Address Translation | 网络地址转换 |
NAPT | Network Address Port Translation | 网络地址端口转换 |
SIP | Session Initiation Protocol | 会话发起协议 |
TCP | Transmission Control Protocol | 传输控制协议 |
UDP | User Datagram Protocol | 用户数据报协议 |
目 录
1 概述
1.1 产生背景
随着Internet的发展和网络应用的增多,IPv4地址枯竭已成为制约网络发展的瓶颈。尽管IPv6可以从根本上解决IPv4地址空间不足问题,但目前众多网络设备和网络应用大多是基于IPv4的,因此在IPv6广泛应用之前,一些过渡技术(如CIDR、私网地址等)的使用是解决这个问题最主要的技术手段。
其中,使用私网地址之所以能够节省IPv4地址,主要是利用了这样一个事实:一个局域网中在一定时间内只有很少的主机需访问外部网络,而80%左右的流量只局限于局域网内部。由于局域网内部的互访可通过私网地址实现,且私网地址在不同局域网内可被重复利用,因此私网地址的使用有效缓解了IPv4地址不足的问题。当局域网内的主机要访问外部网络时,只需通过NAT技术将其私网地址转换为公网地址即可,这样既可保证网络互通,又节省了公网地址。
& 说明:
l IANA保留以下三个网段中的地址作为私网地址:10.0.0.0/8、172.16.0.0/12和192.168.0.0/16。
l 使用私网地址的主机不能直接访问Internet,而在Internet上也不能直接访问使用私网地址的主机。
1.2 技术优点
作为一种过渡方案,NAT通过地址重用的方法来满足IP地址的需要,可以在一定程度上缓解IP地址空间枯竭的压力。它具备以下优点:
l 对于内部通讯可以利用私网地址,如果需要与外部通讯或访问外部资源,则可通过将私网地址转换成公网地址来实现。
l 通过公网地址与端口的结合,可使多个私网用户共用一个公网地址。
l 通过静态映射,不同的内部服务器可以映射到同一个公网地址。外部用户可通过公网地址和端口访问不同的内部服务器,同时还隐藏了内部服务器的真实IP地址,从而防止外部对内部服务器乃至内部网络的攻击行为。
l 方便网络管理,如通过改变映射表就可实现私网服务器的迁移,内部网络的改变也很容易。
2 NAT技术实现
NAT的基本原理是仅在私网主机需要访问Internet时才会分配到合法的公网地址,而在内部互联时则使用私网地址。当访问Internet的报文经过NAT网关时,NAT网关会用一个合法的公网地址替换原报文中的源IP地址,并对这种转换进行记录;之后,当报文从Internet侧返回时,NAT网关查找原有的记录,将报文的目的地址再替换回原来的私网地址,并送回发出请求的主机。这样,在私网侧或公网侧设备看来,这个过程与普通的网络访问并没有任何的区别。
2.1 NAT实现方式
2.1.1 Basic NAT方式
Basic NAT方式属于一对一的地址转换,在这种方式下只转换IP地址,而对TCP/UDP协议的端口号不处理,一个公网IP地址不能同时被多个用户使用。
图1 Basic NAT方式原理图
如图1所示,Basic NAT方式的处理过程如下:
(1) NAT设备收到私网侧主机发送的访问公网侧服务器的报文。
(2) NAT设备从地址池中选取一个空闲的公网IP地址,建立与私网侧报文源IP地址间的NAT转换表项(正反向),并依据查找正向NAT表项的结果将报文转换后向公网侧发送。
(3) NAT设备收到公网侧的回应报文后,根据其目的IP地址查找反向NAT表项,并依据查表结果将报文转换后向私网侧发送。
& 说明:
由于Basic NAT这种一对一的转换方式并未实现公网地址的复用,不能有效解决IP地址短缺的问题,因此在实际应用中并不常用。
2.1.2 NAPT方式
由于Basic NAT方式并未实现地址复用,因此并不能解决公网地址短缺的问题,而NAPT方式则可以解决这个问题。
NAPT方式属于多对一的地址转换,它通过使用“IP地址+端口号”的形式进行转换,使多个私网用户可共用一个公网IP地址访问外网,因此是地址转换实现的主要形式。
图2 NAPT方式原理图
如图2所示,NAPT方式的处理过程如下:
(1) NAT设备收到私网侧主机发送的访问公网侧服务器的报文。
(2) NAT设备从地址池中选取一对空闲的“公网IP地址+端口号”,建立与私网侧报文“源IP地址+源端口号”间的NAPT转换表项(正反向),并依据查找正向NAPT表项的结果将报文转换后向公网侧发送。
(3) NAT设备收到公网侧的回应报文后,根据其“目的IP地址+目的端口号”查找反向NAPT表项,并依据查表结果将报文转换后向私网侧发送。
2.1.3 NAT Server方式
出于安全考虑,大部分私网主机通常并不希望被公网用户访问。但在某些实际应用中,需要给公网用户提供一个访问私网服务器的机会。而在Basic NAT或NAPT方式下,由于由公网用户发起的访问无法动态建立NAT表项,因此公网用户无法访问私网主机。NAT Server(NAT内部服务器)方式就可以解决这个问题——通过静态配置“公网IP地址+端口号”与“私网IP地址+端口号”间的映射关系,NAT设备可以将公网地址“反向”转换成私网地址。
图3 NAT Server方式原理图
如图3所示,NAT Server方式的处理过程如下:
(1) 在NAT设备上手工配置静态NAT转换表项(正反向)。
(2) NAT设备收到公网侧主机发送的访问私网侧服务器的报文。
(3) NAT设备根据公网侧报文的“目的IP地址+目的端口号”查找反向静态NAT表项,并依据查表结果将报文转换后向私网侧发送。
(4) NAT设备收到私网侧的回应报文后,根据其“源IP地址+源端口号”查找正向静态NAT表项,并依据查表结果将报文转换后向公网侧发送。
2.1.4 EASY IP方式
EASY IP方式是指直接使用接口的公网IP地址作为转换后的源地址进行地址转换,它可以动态获取出接口地址,从而有效支持出接口通过拨号或DHCP方式获取公网IP地址的应用场景。同时,EASY IP方式也可以利用访问控制列表来控制哪些内部地址可以进行地址转换。
EASY IP方式特别适合小型局域网访问Internet的情况。这里的小型局域网主要指中小型网吧、小型办公室等环境,一般具有以下特点:内部主机较少、出接口通过拨号方式获得临时公网IP地址以供内部主机访问Internet。对于这种情况,可以使用EASY IP方式使局域网用户都通过这个IP地址接入Internet。
图4 EASY IP方式原理图
如图4所示,EASY IP方式的处理过程如下:
(1) NAT设备收到私网侧主机发送的访问公网侧服务器的报文。
(2) NAT设备利用公网侧接口的“公网IP地址+端口号”,建立与私网侧报文“源IP地址+源端口号”间的EASY IP转换表项(正反向),并依据查找正向EASY IP表项的结果将报文转换后向公网侧发送。
(3) NAT设备收到公网侧的回应报文后,根据其“目的IP地址+目的端口号”查找反向EASY IP表项,并依据查表结果将报文转换后向私网侧发送。
1.1.2 DNS Mapping方式
在某些应用中,私网用户希望通过域名访问位于同一私网的内部服务器,而DNS服务器却位于公网。由于通常DNS响应报文中携带的是内部服务器的公网IP地址,因此若不在NAT设备上进行处理,私网用户将无法通过域名访问到内部服务器。
这个问题可以使用DNS Mapping方式来解决,通过配置“域名—公网IP地址—公网端口—协议类型”映射表,建立内部服务器的域名与其公网信息间的对应关系。
图5 DNS Mapping方式原理图
如图5所示,私网用户Host希望通过域名方式访问Web服务器。当NAT设备收到DNS响应报文后,先根据其中携带的域名查找DNS Mapping映射表,再根据“公网IP地址—公网端口—协议类型”查找Web服务器,然后将DNS响应报文中的公网IP地址替换成Web服务器的私网IP地址。这样,Host收到的DNS响应报文中就携带了Web服务器的私网IP地址,从而可以通过域名来访问Web服务器。
2.2 ALG机制
2.2.1 ALG机制简介
通常情况下,NAT只改变IP报文头部地址信息,而不对报文载荷进行分析,这对于普通的应用层协议(如Telnet)来说,并不会影响其业务的开展;然而有一些应用层协议,其报文载荷中可能也携带有地址或端口信息,若这些信息不能被有效转换,就可能导致问题。譬如,某些应用层协议会在客户端与服务器之间协商端口号,然后服务器使用协商出的端口号向客户端发起连接。如果NAT设备对二者的协商过程一无所知,那么当服务器向客户端发起连接时,就会因为在NAT设备上找不到内部与外部的IP地址/端口号对应关系而造成连接失败。
这个问题可以通过应用级网关(ALG)机制来解决。ALG是特定应用协议的转换代理,它通过对IP报文的载荷进行解析,改变封装在其中的地址和端口信息,并完成其它必要的工作以使应用协议可以穿越NAT。ALG机制可处理的应用层协议包括DNS、FTP、H.323、ILS和SIP等,下面以FTP协议为例介绍ALG处理的过程。
2.2.2 FTP协议的ALG处理
在FTP工作过程中,客户端与服务器之间将建立两条TCP连接:一条为控制连接,负责传输诸如用户指令和参数等控制信息,其中包括发起数据连接时要用到的端口信息;另一条为数据连接,负责在服务器与客户端之间建立数据通道以传送文件。FTP可分为主动和被动两种模式,根据所采用的模式以及服务器/客户端的位置来决定是否需要进行ALG处理:
1. 主动模式
在主动模式下,在由客户端发起控制连接中,客户端将指定的端口通过PORT指令发送给服务器,然后由服务器向该端口发起数据连接,因此:
l 当客户端位于公网而服务器位于私网时,由于客户端向服务器通告的是公网地址和端口,服务器可直接向其发起数据连接,因此无需在控制连接中进行ALG处理;
l 当客户端位于私网而服务器位于公网时,由于客户端向服务器通告的是私网地址和端口,因此需在控制连接中通过ALG处理将其转换为公网地址和端口,以供服务器发起数据连接所用,其过程如图6所示。
(1) 首先,由客户端向服务器发送PORT指令,以向服务器通知发起数据连接所应使用的地址和端口(IP 1,Port 1);
(2) NAT设备收到该指令后,将其中所携带的私网地址和端口(IP 1,Port 1)替换为公网地址和端口(IP 2,Port 2),并据此创建相应的NAPT表项——此过程即为ALG处理;
(3) 服务器收到该指令后,主动向公网地址和端口(IP 2,Port 2)发起数据连接,并在通过NAT设备时被转化为私网地址和端口(IP 1,Port 1)。
2. 被动模式
在被动模式下,在由客户端发起控制连接中,客户端向服务器发送PASV请求来通知服务器它将发起被动模式,服务器再将指定的端口通过PASV响应发送给客户端,然后由客户端向该端口发起数据连接,因此:
l 当服务器位于公网而客户端位于私网时,由于服务器向客户端通告的是公网地址和端口,客户端可直接向其发起数据连接,因此无需在控制连接中进行ALG处理;
l 当服务器位于私网而客户端位于公网时,由于服务器向客户端通告的是私网地址和端口,因此需在控制连接中通过ALG处理将其转换为公网地址和端口,以供客户端发起数据连接所用,其过程如图7所示。
(1) 首先,由客户端向服务器发送PASV请求;
(2) 服务器收到该请求后,选择并打开服务器端数据通道的地址和端口(IP 1,Port 1),并通过PASV响应向客户端返回该地址和端口;
(3) NAT设备收到该响应后,将其中所携带的私网地址和端口(IP 1,Port 1)替换为公网地址和端口(IP 2,Port 2),并据此创建相应的NAPT表项——此过程即为ALG处理;
(4) 客户端收到该响应后,向公网地址和端口(IP 2,Port 2)发起数据连接,并在通过NAT设备时被转换为私网地址和端口(IP 1,Port 1)。
2.3 NAT多实例的实现
NAT多实例主要针对MPLS L3VPN用户访问公网或为公网提供服务而提出,可实现不同VPN内、使用相同私网地址的用户同时访问外部网络。NAT多实例在转换过程中增加了对VPN的识别和处理,把VPN作为区分会话的参数之一,以此实现了多实例同时访问公网的功能。
1. 多实例Basic NAT
与单实例一样,多实例的Basic NAT只对私网的IP地址进行转换,但不同的是多实例Basic NAT在原有私网IP地址转换的基础上增加了对VPN的识别和处理,即在NAT转换表项中增加了VPN信息,并将其作为转换依据之一,以确保将不同VPN内相同的私网IP地址转换成不同的公网IP地址。
2. 多实例NAPT
与单实例相比,多实例的NAPT在原有私网IP地址和端口号转换的基础上,增加了对VPN的识别和处理,即在NAPT转换表项中增加了VPN信息,并将其作为转换依据之一,以确保将不同VPN内相同的“私网IP地址+端口号”转换成不同的“公网IP地址+端口号”。
3. 多实例NAT Server
与单实例相比,多实例的NAT Server增加了私网侧对VPN的支持,即在所配置的静态NAT转换表项中增加了VPN信息,并将其作为转换依据之一,以确保将访问不同VPN的报文送达正确的VPN,其处理流程与单实例相同。
4. 多实例EASY IP
与单实例相比,多实例的EASY IP在原有私网IP地址和端口号转换的基础上,增加了对VPN的识别和处理,即在EASY IP转换表项中增加了VPN信息,并将其作为转换依据之一,以确保将不同VPN内相同的“私网IP地址+端口号”转换成不同的“公网IP地址+端口号”。
5. 多实例DNS Mapping
与单实例相比,多实例的DNS Mapping增加了私网侧对VPN的支持,即在所配置的DNS Mapping映射表项中增加了VPN信息,并将其作为转换依据之一,以确保将访问不同VPN的报文送达正确的VPN,其处理流程与单实例相同。
6. 多实例ALG处理
多实例的ALG处理流程与单实例基本相同,不同的是NAT设备在创建公网与私网的地址端口映射表项时,NAT多实例在私网侧地址和端口基础上增加了对VPN的识别与处理,即在映射表项中增加了VPN信息,譬如将私网侧的(VPN A,IP 1,Port 1)与公网侧的(IP 2,Port 2)进行映射。
3 典型组网应用
3.1 私网主机访问公网服务器
在许多小区、学校和企业网的内网规划中,由于公网地址资源有限,内部用户实际使用的都是私网地址,在这种情况下,可以使用NAT技术来实现内部用户对公网的访问。如图8所示,通过在NAT网关上配置NAT转换规则,可以实现私网主机访问公网服务器。
3.2 公网主机访问私网服务器
在某些场合,私网内部有一些服务器需要向公网提供服务,比如一些位于私网内的Web服务器、FTP服务器等,NAT可以支持这样的应用。如图9所示,通过配置NAT Server,即定义“公网IP地址+端口号”与“私网IP地址+端口号”间的映射关系,使位于公网的主机能够通过该映射关系访问到位于私网的服务器。
3.3 私网主机通过域名访问私网服务器
在某些场合,私网用户希望通过域名访问位于同一私网的内部服务器,而DNS服务器却位于公网,此时可通过DNS Mapping方式来实现。如图10所示,通过配置DNS Mapping映射表,即定义“域名—公网IP地址—公网端口—协议类型”间的映射关系,将DNS响应报文中携带的公网IP地址替换成内部服务器的私网IP地址,从而使私网用户可以通过域名来访问该服务器。
3.4 NAT多实例
当分属不同MPLS VPN的主机使用相同的私网地址,并通过同一个出口设备访问Internet时,NAT多实例可实现这些地址重叠的主机同时访问公网服务器。如图11所示,尽管Host A和Host B具有相同的私网地址,但由于其分属不同的VPN,于是NAT能够区分属于不同VPN的主机,允许二者同时访问公网服务器。
图11 NAT多实例组网图
4 参考文献
l RFC 1631:The IP Network Address Translator (NAT)
l RFC 2663:IP Network Address Translator (NAT) Terminology and Considerations
l RFC 3022:Traditional IP Network Address Translator (Traditional NAT)