NAT是什么
NAT作为一种已被广泛普及的网络通信技术,已被广泛用于生活之中,而我们也常会在虚拟机内部碰见NAT模式。
扩展: 虚拟机还会存在一个桥接模式,虚拟机软件会将一个虚拟网卡装在电脑中,而通过电脑的物理网卡和虚拟网卡桥同时架在"桥"上,运行程序让虚拟机所在的网卡中的所有数据包原封不动的流入电脑的网卡,反之亦然。这样就在链路层连接了起来。桥接工作在OSI网络参考模型的第二层数据链路层,是网桥对网络数据包进行转发的过程。
NAT是Network Address Translation(网络地址转换)的缩写,当有一部分专用网内部主机已经分配到了专用网的IP地址上,但又想和因特网上的主机在不加密的情况下通信时,就需要有NAT来完成这个操作。
传统的因特网(Internet)的TCP/IP模式自发布以来,基于IPV4(互联网通信协议第四版)的互联网在自1980年往后的数十年内,指数增长的主机接入极快的消耗着IP地址的数量,IPV4号码池在21世纪初便几乎耗尽。
IPV4的组成是4个8位的二进制,那么总数就是2的32次方,折合十进制大约42.28亿。也就是说IPV4共提供了42.28亿个地址,但部分IP地址有特殊的用途所以作为保留,真正分配的可使用地址只有36.47亿个。这么庞大数量的IPv4地址让人觉得永远都用不完。但在2011年2月3日,互联网号码分配局(IANA)宣布管理的IPv4即时可用分配地址已全部耗尽。而IPV6的普及速度非常缓慢,这意味着有成千上万的设备需要一种非直连IP地址的方式来访问互联网,NAT也因此走向了千家万户
为了保证新接入的主机能使用互联网,基于NAT的设计特性,仅仅需要一个有效的公网IP地址,所有使用私网IP地址的主机便能通过NAT和因特网连接。这大大缓解了IP池的枯竭。而NAT不仅能解决IP地址不足的问题,还能够有效地避免来自网络外部的攻击,将主机隐藏在私网来进行保护。
NAT的实现方式
静态转换Static NAT(SNAT)
概念
静态转换是内网地址向外访问时,发起访问的内网IP地址转换为指定的公共IP地址(可指定具体的服务以及相应的端口或端口范围),这可以使内网中分配地址的主机访问外部网络。
此IP地址的转换是一对一的,某个私有IP地址只转换为某个公有IP地址。如存在多个需要访问的内网地址,所需要的外网IP数量也是一致的。
注意: SNAT还能代表源地址转换,意义不同,勿混淆。
使用场景
主要用于单一内网主机需要具备对外访问能力时,例如可以实现外部网络对内部网络中服务器的访问。
动态转换Dynamic NAT(DNAT)
概念
动态转换时,所转换的私有IP地址是不确定的,所有被授权访问上Internet的私有IP地址均可随机转换。动态转换可以使用多个合法外部IP地址集。多个内网地址可动态的在外部IP地址集中映射转换。
注意: DNAT还能代表目的地址转换,意义不同,勿混淆。
使用场景
当ISP提供的合法IP地址略少于网络内部的主机数量时。可以采用动态转换的方式。
端口多路复用Port OverLoad NAT(PNAT)
概念
端口多路复用是指在不改变外网IP地址的情况下,通过改变内网的外出数据包的源端口并进行端口转换来实现外网通信。
采用端口多路复用方式。内部网络的所有主机均可共享一个合法外部IP地址实现对Internet的访问,从而可以最大限度地节约IP地址资源。同时,又可隐藏网络内部的所有主机,有效避免来自internet的攻击。因此,网络中应用最多的就是端口多路复用方式。
使用场景
公网IP紧缺,通过单个IP对大量的内网主机进行映射,多用于网络主机访问密集地区的主机网络管理。
静态地址转换+端口复用地址转换
在很多时候,网络中的服务器既为网络内部的客户提供网络服务,又同时为Internet中的用户提供访问服务。
因此,如果采用端口复用地址转换或动态地址转换,将由于无法确定服务器的IP地址,而导致Internet用户无法实现对网络内部服务器的访问。
此时,就应当采用静态地址转换+端口复用地址转换的NAT方式。也就是说,对服务器采用静态地址转换,以确保服务器拥有固定的合法IP地址。而对普通的客户计算机则采用端口复用地址转换,使所有用户都享有访问Internet的权力。
NAT弊端
由于NAT的广泛运用实质是一种对于互联网早期设计缺陷的弥补和转往IPV6的补救方案,其实质上绕过了IP协议原有的点对点初衷,在一个具有NAT功能的路由器下的主机并没有建立真正的端对端连接,并且不能参与一些因特网协议。
一些需要初始化从外部网络建立的TCP连接和使用无状态协议(比如UDP)的服务将被中断。除非NAT路由器作一些具体的努力,否则送来的数据包将不能到达正确的目的地址。(一些协议有时可以在应用层网关的辅助下,在参与NAT的主机之间容纳一个NAT的实例,比如FTP。)而且NAT也会使安全协议变的复杂。
NAT使得IP协议从面向无连接变成面向连接。这使得NAT必须维护专用IP地址与公用IP地址以及端口号的映射关系。在原有的TCP/IP协议体系中,如果一个路由器出现故障,不会影响到TCP协议的执行。因为只要几秒收不到应答,发送进程就会进入超时重传处理。但存在NAT时,TCP/IP协议过程将发生变化,Internet可能变得非常脆弱。
而NAT还会使得P2P应用实现出现困难,因为P2P的文件共享与语音共享都是建立在IP协议的基础上的。多层级的NAT转换会让P2P难以进行。
和客户/服务器通信不同,由于服务器具有稳定的IP和端口,使得客户机连接服务器非常方便,而P2P通信模式是客户端与客户端通信。
双方客户端的IP地址、端口是动态变化的,因此如何让IP地址、端口动态改变的客户端A找到同样IP地址、端口动态改变的客户端B是P2P的基本过程,如果能找到,那么A就可以与B完成通信。
在原有的TCP/IP模式中,每台主机间的通讯本就是IP与IP间的通信,每个主机能很简单的连接到想要连接主机的IP,但是在NAT引入后,大量的NAT转换和动态映射造成每个主机都很难保持固定的连接IP和端口,并且NAT技术还会隐藏在背后的主机信息,P2P也就无法完成了。
NAT类型
随着NAT的使用场景遍布互联网,NAT也被分类了几种不同的类型,它们直观的描述了NAT的几种限制模式。其中全锥形NAT限制最少,对称NAT限制最高,安全性来讲的话,对称NAT最高,全锥形NAT最低。也越容易被外部探查。P2P的便捷性方面,全锥形最方便,由此往下变得困难,而对称形无法P2P。
Full cone NAT(全锥形NAT)
所有从同一个内网的(IP,端口)发送出来的请求都会被映射到同一个外网(IP,端口),且任何一个外网主机都可以通过访问映射后的公网地址,实现访问位于内网的主机设备功能。外网主机可以主动连接内网主机。此主机和服务器的性质类似。
Restricted Cone NAT(地址受限锥形NAT)
所有从同一个内网的(IP,端口)发送出来的请求都会被映射到通过一个外网(IP,端口),但与全锥形不同点在于:生成的映射表项与目的IP有关,只有符合要求的公网服务器IP才可以通讯。外网IP不能主动连接内网中的主机IP,连接必须由内网发起。
Port Restricted Cone NAT(端口受限锥形NAT)
在地址受限锥形NAT基础上增加了端口的限制。除了之前主动连接了主机的IP+端口可以通讯,其他的都不可以与之通讯。
Symetric NAT(对称形NAT)
对称型对于端口映射的限制增加,每一次连接都对应外网的访问,将会建立新的端口映射,而使用过的端口将会在连接断开时被抛弃。