在我们企业在对外发布应用系统或网站系统及用户办公上互联网时,针对公网IP地址不够用的问题我们不知道如何解决,因为IPv4的数量只有2的32次方,大致42亿左右,但这完全不能满足我们用户全公网IP的使用问题,因此NAT的出现正好弥补了公网IP不够的问题,也间接的隐藏了企业内网,保护了内部网络,那具体NAT是什么原理呢?我们下面将简单介绍一下。
一.NAT技术
1.NAT:全名“Network Address Translation”,网络地址转换,它是一个IETF(Internet Engineering Task Force, Internet工程任务组)标准,允许一个整体机构以一个公用IP(Internet Protocol)地址出现在Internet上。顾名思义,它是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术,如下图所示。因此我们可以认为,NAT在一定程度上,能够有效的解决公网地址不足的问题。
2.私有IP地址:也叫内部地址,属于非注册地址,专门给企业或组织机构内部使用。因特网分配编号委员会(IANA)保留了3块IP地址做为私有IP地址:
10.0.0.0——10.255.255.255(10.0.0.0/8段)
172.16.0.0——172.16.255.255(172.16.0.0/16段)
192.168.0.0——192.168.255.255(192.168.0.0/16段)
以上三块私有地址,我们企业内部就可以合理规划使用。
3.公有IP地址:也叫全局地址,是指合法的IP地址,它是在网络运营商处登记备案分配的IP地址,对外代表一个或多个内部局部地址,是全球统一可寻的地址。
4.地址池:地址池是有一些外部地址(全球唯一的IP地址)组合而成,我们称这样的一个地址集合为地址池。在内部网络的数据包通过地址转换到达外部网络时,将会在地址池中选择某个IP地址作为数据包的源IP地址,这样可以有效的利用用户的外部地址,提高访问外部网络的能力。
直白来讲,地址池就是公网ip的组合,例如65.34.23.0/26等等。
5.NAT的分类:NAT有三种类型:静态NAT(Static NAT)、动态地址NAT(Pooled NAT)、网络地址端口转换NAPT(Port-Level NAT)。
二.NAT之简介
1.NAT源转换及源端口NAT:
内部地址访问互联网,互联网无法对私有IP进行回包的问题,导致无法完成网络通信,NAT是将内部地址转换为公司、组织机构或家庭的公网IP与外部通信的技术手段,具体如下图:
以简单的家庭网络为例(图有点丑见谅)
上图说明:
内网:192.168.1.0/24
网关:192.168.1.1
外网:PPPOE登录验证通过后,分配的地址为214.86.234.58,某互联网网站服务器地址为219.86.24.45。
源NAT,内部终端主机在访问219.86.24.45服务器时,
源地址为:192.168.1.100,源端口随机
目的地址为:219.86.234.45,目的端口80
目的地址在收到192.168.1.100的访问请求以后给源地址回包,结果找不到私网路由,因此回不来。
源NAT技术的做法是,在达到网关后,将源地址替换为WAN口地址,路由器建立会话表,数据包变为214.86.234.58 ,源端口为随机端口,目的地址为219.86.24.45,目的端口为80,然后在服务器收到此数据包后,回包时,将源为219.86.24.45,源端口80,目的地址为214.86.234.58,端口为之前的随机端口,回给互联网,WAN收到数据包之后,查看会话表:
192.168.1.100---->214.86.24.45 <--------> 214.86.234.58----->219.86.24.45。因此根据此对应关系将服务器返回的数据包回给192.168.1.100.因此内网机器就能够与外部通信。
但此时有一个问题,内网机器那么多,如果多个机器访问同一个Web网站将会怎么样呢?
因此PNAT,端口转换技术将从端口区别内网机器的访问会话记录,如下图所示,
NAT会话表将内网地址与外网ip的映射动态记录下来(会话时间过期,将会被清除),然后根据端口来为内网机器回复来自互联网服务的回包。
通过这样的会话表,利用一个公网IP的不同端口来解决企业几百人的上网问题,有个问题会在此出现,假如人数过多65535个端口利用光了,导致某部分人上不了网怎么办?但一般不会出现这样的问题,如果出现,那就利用2个公网ip进行源端口的转换,不行就3个,4个,直到够用为止,一般2-3个绝对够用了。
静态NAT,源转换的话就没必要了,因为一对一的映射根本解决不了内部终端上网的问题,主要应用在目的映射,或目的端口映射中,下面我们将简单叙述一下目的NAT,及目的端口NAT。
2.NAT目的转换及目的端口NAT:
目的NAT更多的是适用于公司或企业内部对外提供服务的情况,静态NAT可以为公司提供的多种服务进行映射,从而将内网服务通过目的映射的方式提供给互联网用户。假如IP地址不多的话,可以利用端口进行服务的区分。
互联网用户来访问我们提供的公网ip服务,我们将公网ip转换为内网实际提供服务的服务器IP,这就是目的NAT,当然分为目的NAT和目的端口NAT。
例如:124.17.26.252 50005 ------访问------->公网ip36.78.12.3:80端口,我们将公网ip36.78.12.3:80转换为内网ip 192.168.20.100:80,实际提供的真实服务的ip为内网机器的ip。
为什么要用目的端口NAT,而不用目的NAT呢?
原因一:减少攻击面,隐藏并保护内网。因为开放10个端口与开放100个端口的安全性是不一样的,如果做目的NAT,那么36.78.12.3这个ip即为192.168.20.100这台服务器,你们的服务操作系统有多少漏洞的补丁没打,这个我就不说了,哈哈!
原因二:提高外网IP利用率。
例如:假如你做了一个目的NAT映射,36.78.12.3 ---------------192.168.10.100 ,那么互联网用户访问36.78.12.3,就相当于访问了192.168.10.100的内网服务器,而且,操作系统漏洞那么多,别人一扫描,暴露了很多端口,然后探测系统版本,中间件版本,数据库版本,如此等等。当然,有人也许会说,那你在防火墙上做访问控制不就好了,这样做不就增加了工作量,增加了防火墙的负担了嘛,因此,目的端口NAT,是省事省心的安全简便的做法。而且,当运营商分配的IP地址较少时,你的内网对外发布的服务较多时,可以使用一个公网ip的不通端口来NAT不用的服务,如下所示:
如此等等。但为了服务安全,建议是服务尽量分离,因为某项服务的故障可能会影响其他服务,因此较为分散的服务是一种比较好的方式。
3.双向NAT
Client 1 : A 202.1.1.2 --------------------> B server 1.1.1.1
转换为
C:172.16.1.100 --------------> D server 172.16.1.2
这种双向转换,是将源ip及目的ip全部替换掉
源 202.1.1.2-------------访问---------> 目的 1.1.1.1
转换为
源 172.16.1.100 -------访问---------> 目的 172.16.1.2
表面上A---访问--->B ,实际上C----访问----->D
在服务提供方做,隐藏内部网络,只对外提供1.1.1.1即可,有人也许会问,那做目的NAT不就可以了嘛,为什么还要把源地址都要转换掉,我想可能是内部网络机密性较高,或者没有做目的NAT而是内部应用服务,不允许任意访问,而只允许172.16.1.100或者被转换的源地址访问吧。(此处感觉有点像VPN,从外部跳到内网访问内部服务器的感觉)。
4.总结:
NAT技术不可否认是在ipv4地址资源的短缺时候起到了缓解作用;在减少用户申请ISP服务的花费和提供比较完善的负载平衡功能等方面带来了不少好处。但是在ipv4地址在以后几年将会枯竭,NAT技术不能改变ip地址空间不足的本质。然而在安全机制上也潜在着威胁,在配置和管理上也是一个挑战。如果要从根本上解决ip地址资源的问题,ipv6才是最根本之路。在ipv4转换到ipv6的过程中,NAT技术确实是一个不错的选择,相对其他的方案优势也非常明显。