1.背景: |
随着Internet的飞速发展,越来越多的用户加入到互联网的使用中。目前全球上网人数已经超过4亿,到2005年将达到10亿,2010年达到30亿。而目前的4.8亿移动电话用户到2003年也会猛增到10亿。 |
如此惊人的增长速度,使得网络本身的发展遇到了障碍,最主要的两个问题是: |
一:路由表的快速增长。有数据表明,1990年,只有大约5000条路由被存放在路由表中,到1995年,这个数字达到了35,000,而2000年则达到了120,000条,而且这个数值会保持60%~100%的增长率。这使得大量的网络设备由于处理速度跟不上而很快被淘汰。 |
二: IP地址即将耗尽。现在广泛采用的IPv4设计于1981年,使用32位二进制数。从95年开始全球的IP地址以平均每年6000万~8000万的速度被消耗。直到目前,IPv4所提供的40亿个地址以被用去了一半。有专家预测,2005年,全球地址将全部用完。 |
面对这些问题,业界提供了大量的解决方案。对于路由表膨胀的问题,可以使用VLSM,CIDR等技术以及各种路由协议的特性来缓解。 |
而对于IP地址的耗尽问题,IPv6应该是最终的解决手段。但是,由于现有网络都是使用IPv4,几乎所有的现有设备都不支持IPv6,要升级设备需要大量的资金,而且改造整个网络也是一项浩大而且复杂的工程。同时,虽然亚太和欧洲地区的地址资源稀缺,但是美国拥有充沛的地址资源,所以很多大型美国厂商如cisco等并不急于推行IPv6。各种因素的作用,延缓了IPv6的实施。所以IPv6的全面实现还需要一段很长的时间。 |
这样,就需要一种过渡的解决手段,来暂时的解决IP地址耗尽的问题。 |
2.NAT技术的出现及简介 |
NAT(Network address translation)(RFC 1631中作出规定)作为这样一种过渡解决手段,可以用来减少对全球合法注册地址的需求。简单的说,NAT就是在内部专用网络中使用内部地址(不可路由),而当内部节点要与外界网络发生联系时,就在边缘路由器或者防火墙处,将内部地址替换成全局地址——合法地址(可路由),从而在外部公共网上正常使用。 |
这里需要解释一下,内部地址,是指在内部网络中分配给节点的私有IP地址,这个地址只能在内部网络中使用,不能被路由。虽然内部地址可以随机挑选,但是通常使用的是RFC 1918中定义的专用地址:10.0.0.0~10.255.255.255,172.16.0.0~172.16.255.255,192.168.0.0~192.168.255.255。全局地址,是指合法的IP地址,它是由NIC或者网络服务提供商分配的地址,对外代表一个或多个内部局部地址,是全球统一的可寻址的地址(可路由)。 |
NAT的主要作用是节约地址空间。在任一时刻,如果内部网络中只有少数节点与外界建立连接,那么就只有少数的内部地址需要被转化成全局地址,可以减少对合法地址的需求。同时,还可以使多个内部节点共享一个外部地址,使用端口进行区分(NAPT),这样就能更有效的节约合法地址。 |
除了节约地址,NAT还能简化配置,增加网络规划的灵活性。使用NAT,可以在规划地址时有更大的灵活性,从而简化内部网的设计。另外,当两个有地址重叠的私有内部网要连接在一起时,可以使用NAT来防止地址冲突,而避免逐个改变节点的地址这个繁杂的工作。 |
NAT地址转换有两种主要类型:静态转换(Static Translation),动态转换(Dynamic Translations)。 |
静态转换是最简单的一种转换方式,它在NAT表中为每一个需要转换的内部地址创建了固定的转换条目,映射了唯一的全局地址。内部地址与全局地址一一对应。每当内部节点与外界通信时,内部地址就会转化为对应的全局地址。 |
动态转换,增加了网络管理的复杂性,但也提供了很大的灵活性。它将可用的全局地址地址集定义成NAT池(NAT pool)。对于要与外界进行通信的内部节点,如果还没有建立转换映射,边缘路由器或者防火墙将会动态的从NAT池中选择全局地址对内部地址进行转化。每个转换条目在连接建立时动态建立,而在连接终止时会被回收。这样,网络的灵活性大大增强了,所需要的全局地址进一步的减少。值得注意的是,当NAT池中的全局地址被全部占用以后,以后的地址转换的申请会被拒绝。这样会造成网络连通性的问题。所以应该使用超时操作选项来回收NAT池的全局地址。另外,由于每次的地址转换是动态的,所以同一个节点在不同的连接中的全局地址是不同的,这会使snmp的操作复杂化。 |
图1 |
端口地址转换(NAPT—Network address port translatin),是动态转换的一种变形。它可以使多个内部节点共享一个全局IP地址,而使用源和目的的TCP/UDP的端口号来区分NAT表中的转换条目及内部地址。这样,就更节省了地址空间。比如说,假设内部节点10.1.1.3,10.1.1.2都用源端口1723向外发送数据包。NAPT路由器把这两个内部地址都转换成全局地址192.168.2.2,而使用不同的源端口号:1492,1723。当接收方收到的源端口号为1492,则返回的数据包在边缘网关处,目的地址和端口被转换为10.1.1.3:1723;而接收到的源端口号为1723的,目的被映射到10.1.1.2:1723。 |
图2 |
NAPT可以使整个局域网都使用一个IP地址来联入Internet,所以它常常用在小型办公室/家庭办公室(SOHO)中,作与外部公共网络的连接。 |
在以上的映射转换中,只使用了IP地址的转换条目被称为简单条目,而包含IP地址和TCP/UDP端口号的转换条目被称为扩展条目。 |
以上所有的地址转换功能,都是由防火墙或者边缘路由器(即连接内部网络和公用网络的路由器)完成的,而对于通信的各节点,无论是内部还是外部的,都是透明的。 |
那么NAT具体用在哪些地方呢? |
外向的NAT,常常用在共享一个IP地址发出流向外部网络的数据流,而不接受外部网络向内部网络发出的连接请求的地方,比如多节点用户、远程的工作点、小型商业用户等。具体的说,就是通过ISDN、DSL(Digital subscriber Line)、cable modem连接的小型局域网。双向的静态NAT/NAPT常被安装有防火墙的大型企业使用。另外,当ISP的地址发生变化,如果企业不想改变自己的地址规划,也会用到NAT技术。 |
3.NAT在CISCO路由器上的基本配置 |
CISCO是全球领先的网络设备厂商和网络互联解决方案供应商,产品包括路由器、局域网和ATM交换机、拨号访问服务器和管理软件。 |
为了最大限度的利用用户的合法注册IP地址,CISCO网络产品的操作系统 IOS(互联网操作系统)在11.2以及以上的版本都全面支持NAT功能。 |
以下简要介绍在cisco路由器上进行NAT配置的基本命令。 |
一.静态转换: |
当外出的数据包到达边缘网关时,从NAT表中查找相应的静态转换条目,检索出对应的全局地址,并替换数据包中的源地址(内部地址),而当外部的数据包要通过边缘网关的时候,目的地址(全局地址)被替换成相应的内部地址。(拓扑图见图1) |
ip nat inside source static 10.1.1.2 192.168.2.3 |
! /*将内部地址转化为外部地址*/ |
interface e0 /*连接内部网的接口,使用ip nat inside 定义*/ |
ip address 10.1.1.9 255.255.255.0 |
ip nat inside |
! |
interface s0 /连接外部公用网的接口,使用ip nat outside定义*/ |
ip address 172.16.2.1 255.255.255.0 |
ip nat outside |
二.动态转换 |
外出的数据包到达边缘网关的时候,首先检查NAT表,看是否已经建立映射。如果没有,则动态的从NAT池中映射一个全局地址,建立转换条目,并替换源地址。当连接终止时,转换条目被删除,全局地址被NAT池回收。(拓扑图见图2) |
ip nat pool out 192.168.2.1 192.168.2.254 netmask 255.255.255.0 |
ip nat inside source list 1 pool out /*定义外部地址为NAT池"out",并把内部地址映射到外部地址*/ |
! |
interface e0 |
ip address 10.1.1.9 255.255.255.0 |
ip nat inside |
! |
interface s0 |
ip address 172.16.2.1 255.255.255.0 |
ip nat outside |
! |
access-list 1 permit 10.1.1.0 0.0.0.255 /*用标准访问列表来定义内部地址*/ |
三.端口地址转换实现共享外部地址 |
当数据包到达边缘网关时,首先检查NAT表,看是否已经建立转换条目。如果没有,并且已经存在其他的转换条目,在配置了端口地址转换的情况下,则会再次使用此全局地址,并保存足够信息(IP地址和端口号)。 |
在配置时,只需要在“ip nat inside source list nunber pool name"命令后面加上“overload"的关键字就行了。 |
四.对发向内部网络的数据实现TCP负载均衡 |
当内部节点共享一个IP地址时,在外部看来就是一台虚拟的主机。如果外部节点要与内部节点建立连接,那么边缘路由器会使用TCP负载均衡的功能。 |
当边缘路由器接收到外部的请求时,会从NAT表中检查上一次的转换条目,并为本次连接分配下面一个条目进行映射,使用下面一个内部地址。本次连接结束后,下一次的外部请求将会被分配到接下来的一个转换条目。(Round-Robin算法) |
图3 |
ip nat pool internal 10.1.1.1 10.1.1.3 prefix-length 23 type rotary /*关键字type rotary 说明使用TCP负载平衡*/ |
ip nat inside destination list 2 pool internal /*将虚拟主机地址转化成由"internal"池定义的内部地址*/ |
! |
interface s0 |
ip address 192.168.1.129 255.255.255.224 |
ip nat outside |
! |
interface e0 |
ip address 10.1.1.254 255.255.255.0 |
ip nat inside |
! |
access-list 2 permit 10.1.1.127 /*用访问列表定义虚拟主机的地址——代表内部节点的全局地址*/ |
五.其他 |
清除NAT转换条目: clear ip nat translation * |
验证NAT: show ip nat translations/statics |
NAT排错: debug ip nat |
4.在使用NAT时需要考虑到的问题: |
首先,很明显,使用NAT地址转换会使路由器处理数据包延迟增大。路由器的CPU必须对每个数据包进行检查,对需要改变地址信息的数据包进行操作,因此会加大运行负载。同时,路由器要使用NAT技术,必须处于处理机交换(process swithing)的工作模式,可能会降低运行性能。 |
另一方面,NAT隐藏了端到端的ip地址,使得对数据包路径的跟踪变的比较困难。而且,正是由于这个原因,使得一些内嵌的ip地址在应用中会产生问题,比如ICMP协议,FTP,NBT,SNMP,DNS等。 |
还有,如果使用IPSec进行加密,则只能把NAT放在受保护的×××内部,或者使用具有NAT功能的IPSec设备。因为IPSec规定ip地址不能被改变。如果改变了ip地址,就会破坏×××的功能。如果确实需要对已用IPSec加密的数据进行地址改变,那就应该考虑使用RSIP技术作为代替了。 |
5.总结 |
总的来说,NAT带来了很大的优越性,可以节约地址空间、可以简化配置、使网络规划更灵活。但是,它对网络应用带来了一定的影响,也给网络管理带来了一定得复杂性,并且会潜在的影响网络安全性。所以在使用时一定要仔细的规划。 |
转载于:https://blog.51cto.com/452189178/112989