您好,欢迎访问三七文档
1、NAT原理1.1、概述RFC1631、RFC3022以及相关RFC定义的NAT(NetworkAddressTranslator)是一种将IP地址从一个编址域映射到另一个编址域的方法,典型的应用是把RFC1918定义的私有IP地址映射到Internet所使用的公有IP地址。NAT与网络中其它计算设备的关系如图1.1。虽然NAT技术已经得到广泛应用,但它是一把双刃剑,在带来节省IPv4地址空间等好处的同时,破坏了Internet最基本的“端到端的透明性”的设计理念,增加了网络的复杂性,阻碍了业务的创新。IETF一直主张利用IPv6技术解决地址短缺问题,因此IETF虽然出版了几个与NAT相关的RFC,但对NAT技术(尤其是穿越问题)一直没有系统的标准工作,如SIP和MobileIP就是NAT出现后设计的一些协议,都未考虑到NAT的穿越问题。现在业界意识到Internet在短期内不可能过渡到IPv6,IPv4和IPv6将长期共存,NAT以及NAT-PT(NetworkAddressTranslation-ProtocolTranslation)将继续得到长期应用,因此NAT相关问题开始引起IETF(InternetEngineeringTaskForce)和ITU-T(InternationalTelecommunicationUnion)等相关国际标准化组织的关注。中国通信标准化协会IP与多媒体工作委员会也正在积极参与ITU-TSG16组的相关活动,加紧制定中国多媒体业务NAT穿越标准[1]。1.2、分类从功能上看,主要有以下几种典型的NAT(RFC2663),如图1.2)。1.2.1、传统NATNAT传统NAT双向NAT两次NAT多宿主NAT静态NAT动态NAT基本NATNAPT说明:动态NAT也可以称作NAT池(pooledNAT)NAPT:NetworkAddressPortTranslation图1.2NAT的分类ICDH.323FTPNAT外网/InternetOCDH.323FTP图1.1NAT与计算设备的关系说明:ICD:InnerComputingDevice,内部计算设备,内部主机,内网主机OCD:OuterComputingDevice,外部计算设备,外部主机,外网主机ICD和OCD是相对而言的,OCD也可能在1个或多个NAT后面在多数情况下,传统NAT(TraditionalNAT)允许位于内部网络的主机(采用RFC1918地址)透明地访问外部网络中的主机,把从外部网络到内部网络的访问作为一种特例。有关传统NAT的详细描述见RFC1631和RFC3022。传统NAT包括基本NAT和NAPT两大类。(1)基本NAT基本NAT可以分为两类:静态NAT和动态NAT。静态NAT的工作原理是将内部网络中的每个IP地址(可以是私有IP地址、公有IP地址)永久映射成外部网络中的某个IP地址。动态NAT的工作原理则是在外部网络中定义了一系列的IP地址,采用动态分配的方法映射到内部网络中的IP地址。采用动态NAT意味着可以在内部网中定义很多的内部用户,通过动态分配的办法,共享很少的几个外部IP地址。而静态NAT则只能形成一一对应的固定映射方式。需要注意的是,动态NAT中动态分配的外部IP地址全部被占用后,后续的NAT申请将会失败,不过许多NAT有超时配置功能,可以在一定程度上提高外部IP的利用率和用户满意度。(2)NAPTNAPT(NetworkAddressPortTranslation)把基本NAT的概念延伸了一步,在翻译IP地址的同时也翻译传输层标识(如TCP/UDP的端口号,ICMP的查询ID),从而把多个内网主机的传输层标识映射到一个外部IP地址。NAPT可以使一组主机共享一个外部IP地址。在实际使用中可以把NAPT和基本NAT结合起来。对于从内部网络向外的数据包,NAPT翻译源IP地址、源传输层标识以及相关字段,如IP、TCP、UDP和ICMP头校验和。对于进入内部网络的数据包,翻译目的IP地址、目的传输层标识以及相关字段。传输层标识可以是TCP/UDP端口号或ICMP查询ID中的任意一种。1.2.2、双向NAT双向NAT(Bi-directionalNat、Two-wayNAT)支持从内部网络向外部网络发起会话请求,也支持从外部网络向内部网络发起会话请求。当在外出或进入任何一个方向上建立连接时,把内部网络IP地址静态或动态地映射到一个外部IP地址上。这里假设位于内部网络和外部网络之间的名字空间(FQDN,FullyQualifiedDomainNames)是端到端唯一的,因为只有这样才能使得位于外部编址域的主机能利用域名系统(DNS)访问内部网络的主机。在双向NAT上必须部署DNS-ALG(DNS-ApplicationLevelGateway,参阅RFC2694),以处理名字到地址的映射。当一个DNS包需要穿越内部和外部编址域时,DNS-ALG必须能够将DNS查询和响应消息中的内部地址翻译成外部地址,或把外部地址翻译成内部地址。1.2.3、两次NAT两次NAT(TwiceNAT)是NAT的一个变种,它同时修改源和目的IP地址。这与传统NAT和双向NAT不同(二者仅翻译源或目的地址/端口)。当位于同一NAT之后的两台内网主机之间以各自的公网地址进行连接时,这时NAT要做两次转换,先将包中来源主机的内网地址转换为公网地址,再将包中目的主机的公网地址转换为内网地址,最后将包转发给目的主机,上述的NAT转换过程也称之为回环转换(LoopbackTranslation)。两次NAT在内部编址域和外部编址域存在冲突时非常有用。典型例子之一是当一个站点(不恰当地)使用已分配给其它机构的公有IP地址对其内网主机进行编址时;例子之二是当一个站点从一家运营商换到另一家运营商,同时希望在内部保留前一家运营商分配的地址时(而前一家运营商可能在一段时间后将这些地址重新分配给其它人使用)。在这些情况下,非常关键的一点就是外部网络的主机可能会分配得到以前已经分配给内网主机的同一地址。如果该地址碰巧出现在某个数据包中,则应该将它转发给内网主机,而不是通过NAT转发给外部编址域。两次NAT通过同时翻译IP包的源和目的地址,试图桥接这些编址域,解决了地址冲突的问题。1.2.4、多宿主NAT使用NAT会带来很多问题(RFC2993)。如,NAT设备要为经过它的会话维护状态信息,而一个会话的请求和响应必须通过同一NAT设备做路由,因此通常要求支持NAT的域边界路由器必须是唯一的,所有的IP包发起自或终结在该域。但这种配置将NAT设备变成了可能的单点故障点。为了让一个内部网络能够在某个NAT链路出故障的情况下也可以保持与外部网络的连通性,通常希望内部到相同或不同的ISP具有多条连接(多宿主的,MultihomedNAT),希望经过相同或不同的NAT设备。共享相同的NAT配置能够为多个NAT相互之间提供故障备份。在这种情况下,有必要让备份NAT设备交换状态信息,以便当主NAT出现故障时,备份NAT能够担负起透明地保持会话的能力。1.3、工作机理目前市场上使用最多的是传统NAT设备,尤其是NAPT设备,基本NAT可以看成NAPT的特例,下面以NAPT为例子论述NAT的工作机理。NAPT的映射方式主要有以下几种典型类型(RFC3489)[2],如图1.3。1.3.1、FullConeNAT这种NAT的特点是由内网同一地址及端口发出的数据包,不论目的地是外网的哪个主机,在NAT设备的出口均映射到相同的外网地址和端口;而外网的任何主机发送到此外网地址和端口的数据包,也都会被转发到内网相同的地址和端口,具体过程如图1.4所示。内网主机向外网主机A发送数据包,数据包的源地址(192.168.12.2:1111)被NAT改为外网地址(202.117.15.5:2222)并转发到主机A,此后不仅主机A,其它主机(B)发往外网地址(202.117.15.5:2222)的数据包也都可以被转发给内网主机(192.168.12.2:1111)。1.3.2、RestrictedConeNAT此NAT与FullConeNAT相似,唯一的区别是只有收到内网主机发出的数据包的主机才可以返回数据包到此内网主机。如图1.5,NAT仅将主机A发往NAT入口点内网主机192.168.12.2:1111NAT内网接口192.168.12.1外网接口202.117.15.5外网主机A202.117.16.6:3333外网主机B202.117.17.7:4444→:源地址改为202.117.15.5:2222←:目的地址改为192.168.0.2:1111图1.4FullConeNAT图1.3NAPT的分类NAPTFullConeNATRestrictedConeNATPortRestrictedConeNATSymmetricNATConeNAT(202.117.15.5:2222)的数据包转发给内网主机,而将主机B的数据包丢弃。1.3.3、PortRestrictedConeNAT此NAT比RestrictedConeNAT限制更为严格,只有收到内网主机发出的数据包的主机端口才可以返回数据包到此内网主机。如图1.6,NAT仅将主机A(端口为3333)发往NAT入口点(202.117.15.5:2222)的数据包转发给内网主机,而将主机A的其它端口(非3333)和主机B的数据包丢弃。1.3.4、SymmetricNATCone类型的NAT映射与外网目的地址无关,即内网中同一主机IP地址和端口发出的数据包均会被NAT设备映射到相同的外网地址和端口,而SymmetricNAT(对称NAT)发往不同目的主机或端口的数据包会被映射到不同的外网地址和端口。图1.7说明了这种情况,发往主机A和主机B的数据包被映射到不同的外网地址和端口,主机A返回给内网主机的数据包不能由关联主机B的NAT入口进入,同样,主机B的数据包不能由关联主机A的NAT入口进入。仅限于端口3333图1.7SymmetricNAT内网主机192.168.12.2:1111NAT内网接口192.168.12.1外网接口202.117.15.5外网主机A202.117.16.6:3333外网主机B202.117.17.7:4444→:源地址改为202.117.15.5:2222←:目的地址改为192.168.0.2:1111→:源地址改为202.117.15.5:5555←:目的地址改为192.168.0.2:1111仅限于端口4444仅限于端口3333图1.6PortRestrictedConeNAT内网主机192.168.12.2:1111NAT内网接口192.168.12.1外网接口202.117.15.5外网主机A202.117.16.6:3333外网主机B202.117.17.7:4444→:源地址改为202.117.15.5:2222←:目的地址改为192.168.0.2:1111图1.5RestrictedConeNAT内网主机192.168.12.2:1111NAT内网接口192.168.12.1外网接口202.117.15.5外网主机A202.117.16.6:3333外网主机B202.117.17.7:4444→:源地址改为202.117.15.5:2222←:目的地址改为192.168.0.2:11111.3.5、抽象原理从上述分析可以抽象出NAT的一般原理,NAT的工作基础在于建立内网主机地址(端口)和外网主机地址(端口)映射表,数据包的转发均依赖于此映射表,映射表的一行是9元组:{协议,持续时间,描述,内网主机IP,内网主机Port,NAT外网IP,NAT外网Port,外网主机IP,外网主机Port},其中协议指TCP、UDP等,持续时间指映射存活时间,描述是对映射的文字解释,而后6项是此9元组的核心,它们决定了NAT的类型,在后面的论述中主要参考6元组:{内网主机IP,内网主机Port,NAT外
本文标题:NAT详细描述
链接地址:https://www.777doc.com/doc-1402265 .html