目录
NAT概述
什么是NAT
NAT(NetworkAddressTranslation,网络地址转换)于1994年提出,顾名思义,其作用是将私网的设备IP转换为公网设备IP,使得私网的设备可以访问公网以获取相应的服务。
![](https://i-blog.csdnimg.cn/blog_migrate/e24e006743f6018b3df949e50896efcf.png)
NAT起源
NAT的起源主要是由于IPV4地址不足导致的。IPV4协议使用32位的整数表示一个地址,最多也支持2^32个设备,不足43亿。以IP创始时期可被联网的设备来看,这样的一个空间已经很大,很难被短时间用完。然而,事实远远超出人们的设想,计算机网络在此后的几十年里迅速壮大,网络终端数量呈爆炸性增长。
更为糟糕的是,为了路由和管理方便,43亿的地址空间被按照不同前缀长度划分为A、B、C、D类地址网络和保留地址(E类),如图 2所示。其中,A类网络地址127段,每段包括主机地址约1678万个。B类网络地址16384段,每段包括65536个主机地址。
![](https://i-blog.csdnimg.cn/blog_migrate/8934bc43f8ca9215ba5fe9b17fdd39d9.jpeg)
IANA(The Internet Assigned Numbers Authority,互联网数字分配机构)向超大型企业/组织分配A类网络地址,一次一段。向中型企业或教育机构分配B类网络地址,一次一段。这样一种分配策略使得IP地址浪费很严重,很多被分配出去的地址没有真实被利用,地址消耗很快。以至于二十世纪90年代初,网络专家们意识到,这样大手大脚下去,IPv4地址很快就要耗光了。于是,人们开始考虑IPv4的替代方案,同时采取一系列的措施来减缓IPv4地址的消耗。正是在这样一个背景之下,NAT(网络地址转换)应运而生。
对于私网而言,如果想要访问公网,那么其需要有一个公网IP,这样在进行网络通信的时候,双方才能相互收到对端的报文。
NAT作用
NAT通过将内部网络IP地址转换为出口的IP地址,使得私网设备可以正常访问公网,并且NAT对于私网及公网设备都是透明的。
NAT的工作模型和特点
NAT原理
NAT通过替换IP报文头部的地址信息而发挥作用。NAT通常部署在一个组织的网络出口位置,通过将内部网络IP地址替换为出口的IP地址提供公网可达性和上层协议的连接能力。那么,什么是内部网络IP地址?
RFC1918规定了三个保留地址段落:10.0.0.0-10.255.255.255;172.16.0.0-172.31.255.255;192.168.0.0-192.168.255.255。这三个范围分别处于A,B,C类的地址段,不向特定的用户分配,被IANA作为私有地址保留。这些地址可以在任何组织或企业内部使用,和其他Internet地址的区别就是,仅能在内部使用,不能作为全球路由地址。这就是说,出了组织的管理范围这些地址就不再有意义,无论是作为源地址,还是目的地址。对于一个封闭的组织,如果其网络不连接到Internet,就可以使用这些地址而不用向IANA提出申请,而在内部的路由管理和报文传递方式与其他网络没有差异。
如图 3所示,对于有Internet访问需求而内部又使用私有地址的网络,就要在组织的出口位置部署NAT网关,在报文离开私网进入Internet时,将源IP替换为公网地址,通常是出口设备的接口地址。一个对外的访问请求在到达目标以后,表现为由本组织出口设备发起,因此被请求的服务端可将响应由Internet发回出口网关。出口网关再将目的地址替换为私网的源主机地址,发回内部。这样一次由私网主机向公网服务端的请求和响应就在通信两端均无感知的情况下完成了。
![](https://i-blog.csdnimg.cn/blog_migrate/ca1d8cd2c071c46363a26d3e385a1905.jpeg)
虽然实际过程远比这个复杂,但上面的描述概括了NAT处理报文的几个关键特点:
1. 网络被分为私网和公网两个部分,NAT网关设置在私网到公网的路由出口位置,双向流量必须都要经过NAT网关;
2. 网络访问只能先由私网侧发起,公网无法主动访问私网主机;
3. NAT网关在两个访问方向上完成两次地址的转换或翻译,出方向做源信息替换,入方向做目的信息替换;
4. NAT网关的存在对通信双方是保持透明的;
5. NAT网关为了实现双向翻译的功能,需要维护一张关联表,把会话的信息保存下来。
NAT类型
NAT可以分为一对一的NAT以及一对多的NAT。
一对一的NAT
如果一个内部主机唯一占用一个公网IP,这种方式被称为一对一模型。此种方式下,转换上层协议就是不必要的,因为一个公网IP就能唯一对应一个内部主机。显然,这种方式对节约公网IP没有太大意义,主要是为了实现一些特殊的组网需求。比如用户希望隐藏内部主机的真实IP,或者实现两个IP地址重叠网络的通信。
一对多的NAT
NAT最典型的应用场景就如同图 3描述的,一个组织网络,在出口位置部署NAT网关,所有对公网的访问表现为一台主机。这就是所谓的一对多模型。这种方式下,出口设备只占用一个由Internet服务提供商分配的公网IP地址。面对私网内部数量庞大的主机,如果NAT只进行IP地址的简单替换,就会产生一个问题:当有多个内部主机去访问同一个服务器时,从返回的信息不足以区分响应应该转发到哪个内部主机。此时,需要NAT设备根据传输层信息或其他上层协议去区分不同的会话,并且可能要对上层协议的标识进行转换,比如TCP或UDP端口号。这样NAT网关就可以将不同的内部连接访问映射到同一公网IP的不同传输层端口,通过这种方式实现公网IP的复用和解复用。这种方式也被称为端口转换PAT、NAPT或IP伪装,但更多时候直接被称为NAT,因为它是最典型的一种应用模式。
在一对多模型中,按照端口转换的工作方式不同,又可以进行更进一步的划分。为描述方便,以下将IP和端口标记为(nAddr:nPort),其中n代表主机或NAT网关的不同角色。
全锥形NAT
其特点为:一旦内部主机端口对(iAddr:iPort)被NAT网关映射到(eAddr:ePort),所有后续的(iAddr:iPort)报文都会被转换为(eAddr:ePort);任何一个外部主机发送到(eAddr:ePort)的报文将会被转换后发到(iAddr:iPort)。
![](https://i-blog.csdnimg.cn/blog_migrate/5a3c2fd1266533a05493af47fc312367.png)
客户端及服务端均可直接发起请求。
限制锥形NAT
其特点为:一旦内部主机端口对(iAddr:iPort)被映射到(eAddr:ePort),所有后续的(iAddr:iPort)报文都会被转换为(eAddr:ePort);只有(iAddr:i