面对IPV4地址危机,NAT技术真的是万能的吗?
2019年11月26日,负责英国、欧洲、中东和部分中亚地区互联网资源分配的欧洲网络协调中心(RIPE NCC)正式宣布:共计43亿个IPV4地址已经全部分配完毕!
关于IPV4地址枯竭的问题,人们对此并不感到意外。因为互联网一开始只是设计给美国军方使用的,可能当时谁也没有想到互联网发展的速度会如此之快。早在二十世纪初,IPv4地址稀缺的问题便已初现端倪,对此人们也早早的做好了准备措施——第六代网际协议IPV6。但是在二者的过渡工作尚未完成之前,IPV4地址的匮乏和爆炸式增长的入网需求矛盾日益加深。该怎么解决这个问题呢?
什么是NAT协议?NAT(Network Address Translator),网络地址翻译器,也称网络地址转换协议,NAT协议可以将一个由私有IP构成的局域网中所有的计算机,通过一台具有公网IP和NAT功能的设备来访问公网公网资源。因为局域网中的设备可以通过很少的公有IP(甚至一个)就能实现网上冲浪,很大程度上节约了地址资源,所以在实际场景中,NAT被应用的极其广泛。豪不夸张的说,哪里有网络,哪里就有NAT的身影。
私网是无法直接访问公网的,这是因为用户的私网地址会被公网的网关直接过滤掉,就算能通过公网网关,其响应包也无法返回正确的源地址。所以在内网的数据包进入公网之前,必须先将其转换成公有IP。NAT所提供的的就是一种“私到公”的过渡技术。除了翻译IP地址外,NAT同时还兼具着TCP/UDP端口的翻译功能,这也是NAT为什么常常被配置在网关计算机上的原因。那么,NAT协议究竟是如何实现公私地址转换的呢?
NAT协议的工作原理简单来说,用户发出一个请求后,NAT设备会检查该数据包,当它发现这是一个请求外网的数据包时,会进而检查是否存在映射关系,对源IP地址和端口进行翻译(修改),同时在映射表中添加新建的IP和端口的映射条目,然后再把修改的数据包转发出去。如下方逻辑图所示,左边部分是内网用户通过NAT访问公网的过程,右半部分是公网返回内网的过程(刚好是左边的逆过程)。
需要注意的是,在此过程中,发起连接请求的内网计算机对NAT设备的“翻译”过程是一无所知的,并不知道自己的目的地址已经发生了改变。
NAT解决了IP地址枯竭的燃眉之急,因为随着接入Internet的计算机数量的指数型怎张,IP地址资源也就显得捉襟见肘。以中国为例,除了中国教育和科研计算机网等少数组织外,普通用户想要申请整段的C类地址简直难如登天!即使是哪些拥有着上百台计算机的大型局域网用户,能够申请到的IP地址也不过数十个而已。显然,如此少的IP地址是根本无法满足现在的网络状况的。
NAT技术的弊端尽管在表面上看,NAT似乎真的没有缺点,除了节约公网IP资源外,它还可以保护我们内部网络的安全。但是,完美无缺的事物是不存在的。在享受了NAT所带来的便利后,NAT技术的缺陷也逐渐引起了人们的重视。
1.增加了网络的复杂性
从之前NAT的工作过程的描述中可以看出,内网主机和公网IP之间并没有建立真正的端对端连接!这就导致该过程无法参与高层网络的一些协议,比如说非常重要的传输层协议——TCP和UDP,体现在实际中,就是某些需要初始化后,从外部网络建立的链接服务会被非正常中断。你的网络可能会莫名其妙的断开,还检查不出原因。
这就对NAT路由器提出了更高的要求,否则送来的数据包有很大的可能根本无法找到正确的地址。但这又会导致另一个问题:NAT也会使安全协议变的更加复杂,网络整体结构变得脆弱。
2.NAT违背了网络分层模型的设计原则
根据OSI七层网络结构中,明确规定:第N层不容许修改第N+1层的爆头内容,但NAT报文中却违背了这一原则。
NAT是一个网络层的协议,却再报头中增添了TCP/UDP首部。这就诞生了一个尴尬的局面:一个配有NAT协议的路由器,逻辑上却工作在传输层(路由器属于网络层设备)。
除此之外,在传统的IP地址结构中,每个IP地址都对应一个网络连接,Internet的软件设计也是基于此前提之上,但使用NAT协议的网络中却可能存在多个主机使用相同的地址的情况。同时,因为NAT将IP协议从面向无连接变成了面向连接。路由器增加了一项新工作——维护专用IP地址与公用IP地址以及端口号的映射关系,大大增加了路由器的工作负担。在原先的TCP/IP协议体系中,假设一个路由器出现了故障,只要几秒收不到应答,就会执行超时重传处理,重新发送,不会影响整体过程。如果存在NAT路由器,TCP/IP协议过程就会发生变动,Internet将有可能变得非常脆弱。
3.不能处理嵌入式IP地址或端口
由于NAT设备只能修改正常位于IP头部,它只能翻译那些正常位于IP首部中的地址信息和TCP/UDP首部中的端口信息。不能翻译那些嵌入到应用数据部分的IP地址或端口信息。但在实际中,嵌入式的IP地址或端口是很普遍的。同时,NAT在P2P网络模式中的表现也令人堪忧。
如果通信双方都是使用的公网IP,这不会造成什么问题,但如果那个嵌入式地址和端口是内网的,链接就不可能成功建立,这样就导致了NAT设备后的客户端网络应用程序出现连接故障。虽说可以通过NAT编辑器来在一定程度上缓和此类问题,比如WINDOW就针对TCP,FTP等协议做了制作了各自的编辑器,但应用协议实在是太多了,根本不可能面面俱到。即便是使用NAT穿越的手段,依旧解决不了那种NAT设备位于另一个NAT设备之后的情况。
综上所述,NAT虽然能解决IP地址不足的问题,还能够有效地避免来自网络外部的攻击,但终归不是长久之计。
深究NAT技术诞生的缘由,正是因为IP地址不足。而IPV6能提供海量的IP地址,正中问题下怀。当然了,也不是说NAT技术在IPV6普及后就没有存在的意义了。“不使用NAT上网无异于在网上裸奔”,即便是在今后的IPV6场景中,在没有更加完善的方案解决安全性等诸多问题前,NAT技术在网络结构中依旧拥有举足轻重的位置!