?
网络地址转换(传统NAT)
http://91mail.51.net直接由外文翻译,只供交流使用
http://91mail.51.net/wz/NAT.pdf
前言
在这个文档中描述的IP地址转换操作扩展了RFC1631介绍的地址转换和包括了一类的网络地址和TCP/UDP端口转换。另外,这个文档更正了RFC1631的校验适用算法和试图详细讨论NAT操作和限制。
摘要:
基于基本NAT的基本网络地址转换是IP地址从一个组到另外一个组映射的一种方式,对终端用户是透明的。网络地址端口转换或NAPT是很多网络地址和它们的TCP/UDP(传输控制协议/用户数据报协议)端口转换成一个唯一的网络地址和它的TCP/UDP端口。同时,参考传统NAT这两个操作提供一种机制,这种机制用全球唯一注册地址连接私人地址领域到外部领域。
1.介绍
IP地址转换的需要的提出是因为一个网络的IP内部地址不能用在外部网不论是因为人原因还是因为它们在外部网不合法。在一个局域网的网络拓补学可以用很多方式改变,顾客可以改变他们的提供商,公司骨干可能重组或则提供商可能合并或分裂。不论外部网随着时间何时改变,局域网所在的节点被附以的地址肯定随着外部网的改变而改变。用户可能在这种方式的改变被隐藏在区域里,因为集中改变到单一地址转换路由器中。
基本地址转换将(在很多情况下,除了[NAT-TERM]和这个文档第6部分所有指的)允许在局域网中的主机可以透明的连接外部网和可以连接外部网中可选的主机。网络组织的建立首先是为了局域网内部的应用,还有和广域网的连接需要是这个规划的很好候补。
许多小公司,家庭办公室(SOHO)用户和电信员工在它们的办公室有多个网络节点运行TCP/UDP应用程序,但是服务提供商只有给他们在远程连通路由提供唯一的IP地址。
这个远程连接用户渐增的社区将从NAPT中获得好处,NAPT将允许在局域网中有多个节点同时用路由器附以的唯一IP地址连接远程网络。
用这种方式有许多局限性。属于一个会议的所有请求和应答强制路游通过相同的NAT路由器。一种确认的方式将是有一个基于唯一残缺网段路由的NAT,在那所有的IP包或者从那个起始或者以那个为目的地。还有其他方法用多NAT设备来确保这个规则。例如,一个单一能够拥有两个不同的出口到不同的提供者和局部网络的主机之间的会议能够穿过NAT设备到达外部主机的最好途径。当一个NAT路由器不正常,其他的路由器能够路由所有连接。但是在这中方法下有可能有一个警告,因为再次路由的流量可能在新的NAT路由交换时间里交换失败。一种解决这个问题的方法是路由器共享相同的NAT配置和交换状态信息一保证互相失败备份。
地址转换是独立的应用,经常伴随特殊应用网关(ALOGS)执行有效负荷检测和变换。FTP是NAT设备里最常用ALG功能。要求ALG干涉的应用一定不能有他们自己的有效负荷编码,因为那样可能影响到使ALG失笑,直到ALG有解密有效负荷的主键。
这个方法有个缺陷是取消了IP地址点对点的意义,和在网络中用增加的状态来补偿。总之,通过IPSec保证的点对点IP网络层安全不能适用于终端主机,如果有NAT设备路由。但是,这个方法的优点是它在不需要变换主机和路由器的情况下安装。
在这篇文章里一些概念的定义例如“地址域”,“透明路由”,“TV端口”,“ALG”和其它概念可以在NAT-TERM里找到。
2.传统NAT概述:
在这个文档里描述的地址转换操作是根据“传统NAT”。其它的NAT在这个文档里没有给以描述。在大部分情况下,传统NAT允许在局域网的主机透明的和外部主机连接。在传统NAT中,从局域网到广域网方式是单一方向的。相反方向的两个任务可能允许预选择主机状态地址影射的异常。基本NAT和NAPT是不同的两种传统NAT,因为基本NAT地址转换只是限于IP地址,然而NAPT的地址转换包括IP地址转换和传输认证(例如TCP/UDP端口或ICMP询问ID)。
2.1 基本NAT的概述:
基本NAT的操作如下。拥有一系列IP地址的残域能够和外部网络通讯,通过映射本地地址成全球统一地址。如果本地节点数量等于或小于有效通用地址的数量,每个本地地址都能保证映射到。另外,能够多个出口到广域网的节点数受通用地址的数量限制。单一本地地址应该映射成一个专门的全球通用地址来保证连通外部或者通过一个公共地址来与外部连接。多路同时任务可以从一个本地节点进行初始化,用相同的地址映射。
在一个残域里的地址只是在本地有效而在此域外却是无效的。但是,在一个残域里的地址可以被任何其他的残域从新使用。例如,一个单一类A地址能够被许多残域地址所使用。在每一个残域和主干网的出口点安装NAT。如果有多个出口,每个出口应该有相同的转换表。
2.2 NAPT概述:
有一种说法,一个组织有一个局域网和一个广域网连接到服务提供商。局域网络的残域路由器附议在广域网连接中的有效地址而此组织中剩余的节点拥有只是在本地有效的IP地址。在这种情况下,局域网的多个节点允许多个连接到广域网,在NAPT的帮助下用登记的唯一IP地址。NAPT允许映射两个类型(登记IP地址,TV端口数)到两个类型(? 登记IP地址,TV端口数)。这种模型符合大部分小公司家庭公司(SOHO)团体用服务提供商提供的登记IP地址连接广域网的要求。这个模型能够扩展趁允许内部连接通过映射登记IP地址的每一个服务TV端口的本地节点。
除了重定向信息类型,TCP/UDP任务和ICMP信息都可以通过NAPT路由器来控制。ICMP查询类型包和TCP/UDP包的转换类型一样,在于ICMP包头的标志域一对一地和登记IP地址的查询标志对应。在ICMP查询信息中的标志域由发送者设置并且从查询问答端毫无改变的反馈。所以,一对地址(本地IP地址,本地ICMP查询标志)通过NAPT路由器映射成一对(登记IP地址,附议的ICMP查询标志),这个过程保证从任何本地主机来的任何类型有唯一的标志。ICMP错误信息的更改在以后的章节中给以讨论,包括ICMP有效负荷的改变和IP和ICMP报头。
在NAPT设置中,任何登记IP地址和残域网路由器的广域网接口的IP地址一样的地方,路由器必须保证区分发生于自己的TCP,UDP或ICMP查询任务和那些发生于局域网节点的任务。所有内部任务(包括TCP,UDP和ICMP查询任务)被假设为直接到NAT路由器作为终节点,除非目标服务端口静态映射于局域网中的不同节点。
除了TCP,UDP和ICMP查询类型的任务不允许从本地节点由NAPT路由器传输。
3.0 任务传输过程
传统NAT的传输过程和[NAT-TERM]中描述的一样。下面的部分说明和传统NAT的特殊的内容。
3.1 地址绑定:
用基本NAT,当第一个外传任务从私有主机初始化时,一个内部私有地址绑定一个外部地址。后来,所有其它的外传任务从相同的私有地址初始化将用相同的地址绑定来传输包数据。
对NAPT而言,在许多私有地址映射一个全球唯一地址时,绑定是从成对地址(私有IP地址,私有TV端口)到另外一对地址(指派地址,指派TV端口)。和基本NAT一样,绑定是在第一个外传任务有一对地址(私有IP地址,私有TV端口)发动时决定的。由于不是一个普通实践,有可能同时多个任务初始化一对相同地址(私有地址,私有端口)在一个私有主机中建立是可能的。在这种情况下,一对地址(私有地址,私有TV端口)的一个唯一绑定可能用于所有从相同地址主机中的任务传送的包。
3.2 地址查询和转换:
在一个地址绑定或地址对绑定(假设NAPT以建立),一个软状态将用绑定来维持任何连接。属于相同任务的包将服从转换目的的任务查询。转换的确切属性将在接下去的章节中进行讨论。
3.3 解开地址
当基于单个地址或成对地址绑定的最后一个任务终止时,绑定自己将终止。
4.0 包传输
属于NAT管理任务的包经历任何方向的转换。对立包数据任务在接下去进行详细的描述。
4.1 IP,TCP,UDP 和ICMP报头操作:
在基本NAT模型,每个包的IP头必须改变,包括IP地址(外传包的源IP地址,往里传的目的IP地址)和IP校验和。
对TCP和UDP任务,改变包括TCP和UDP报头的校验和的更正。这是因为TCP/UDP校验和同时有一个假头包含源和目的IP地址。有一个例外,校验和为0的UDP报头不需要改变。至于ICMP查询包,由于在ICMP报头中不包含IP地址,所以不需要额外的变化。
在NAPT模型中,IP头的变化和基本NAT中的相同。对TCP/UDP任务,在报头中变化必须扩展成包含转换TV端口(外传数据的源TV端口和内传的目的TV端口)的转换。在ICMP查询包中ICMP报头必须改变来代替查询ID和ICMP报头校验和。私有主机查询ID必须转换成外传的指派ID和内传的相信转换。ICMP报头校验和必须更正来说明查询ID转换。
4.2校验和调整
NAT修正以每个包为准的,能够准确计算,因为除了简单域转换外,它们包括一个或多个校验和修正。幸运的是,我们有一个算法,它能简单有效地调整IP,TCP,UDP和ICMP报头校验和。因为所有这些报头用一个辅助校验和在转换时计算差距和把它加到校验和是足够的。
4.2?? ICMP包错误修正:
ICMP错误信息的变化包括在外层的IP和ICMP报头的变化和嵌入在ICMP错误信息有效负荷报头的改变。
为了使NAT对目的主机是透明的,嵌入在ICMP错误信息里的IP报头里的IP地址必须改变,嵌入IP报头的校验和域也必须改变,最后ICMP报头校验和也必须随着有效负荷的变化而变化。
在NAPT设置中,如果嵌入在ICMP里的IP信息和TCP,UDP或ICMP查询包同时发生,你必须改变在TCP/UDP报头里的相应的TV端口数或ICMP查询报头里的查询标志域。
最后,传输ICMP包的IP头必须改变。
4.3?? FTP支持
作为最通用的一种应用之一,FTP要求一个ALG来管理控制任务有效负荷来决定保证数据传输参数。FTP ALG是大部分NAT执行的一个整数部分。
FTP ALG表需要一个一个专门的表来纠正TCP系列和确认源FTP或目的FTP端口数。这个表里头应该有源地址,目的地址,源端口,目的端口,系列号和时间戳。新的内容只是在FTP端口命令或PASV反馈时才增加。对每一个FTP端口命令或PASV反馈系列数有可能增加或减少。系列数在外传时增加和确认数随往内传时减少。
对任何NAT,FTP有效负荷局限于私有地址和它们指派的外部地址(编码成ASCII码8进制)。但是对NAPT设置,这个转换必须同时包括TCP端口(ASCII)。
4.4?? DNS支持;
考虑传统NAT任务主要是从本地外传数据,DNS ALG可能避免和下面的传统NAT相关使用。在局域网内部的DNS服务器维持内部主机地址或有可能外部主机地址和名字的映射。外部DNS服务器只是维持外部主机地址和名字的映射,而不对内部主机进行映射。如果一个局域网没有内部DNS服务器,所有DNS请求直接到外部DNS服务器去找外部主机的映射。
4.6 IP选项处理
一个含有任何IP选项记录路由,严格源路由或松散源路由的IP数据包括记录和使用中间路由器的IP地址。NAT中间路由器可能不支持这些选项或者处理这些选项时不对地址进行转换。不对地址进行转换的结果将是在源路由中私有地址一直暴露出来。这个不会危害报文的传输路径,因为每个路由器只看下一跳的路由器。
5 混杂的问题
NAT局限性
广泛的说,[NAT-TERM]包括所有NAT类型的局限性。下面的部分说明传统NAT的局限性。
5.1??????????? 私有和安全
传统NAT被认为提供一种私有机制,因为任务是从主机出发的单向连接和私有主机地址的确切地址对外部网络是不可见的。增强私有性的相同特性使调试问题更加困难(包括安全问题)。如果私有网络里的一个主机用某种方式乱用因特网(例如试图攻击另外一台机器或甚至发送大的垃圾数据报),那么更加困难追击确实的原因因为主机隐藏在NAT服务器中)。
5.2在局域网中根据映射通用地址NAT的ARP接口
NAT必须只能在边缘路由器或残域中。在这个文档中提供的例子寿命了基本NAT和NAPT可以从NAT路由器维持一个广域网连接到外部路由器中。(如,服务提供商路由器)。
但是,如果广域网连接由局域网连接代替和如果所有NAT映射的通用地址属于局域网段有相同的IP子网,NAT路由器将提供属于相同子网的地址范围ARP支持。根据ARP要求NAT映射通用地址用它自己的MAC地址在基本NAT中是必须的设置。如果一个NAT路由器不适应这些要求,在网络中没有其它节点拥有这些地址然后没有反映。
这些设想不可能用NAPT设置除了当在NAPT映射中的单个地址不是NAT路由器的接口地址。(例如,在上面5。4中谈到的从基本NAT到NAPT 的交换一样)。用NAT地址映射直接连接的子网范围内的一个地址可以避免在服务提供商路由器的静态路由设置。
作者的意见是一个局域网连接到服务提供商路由器不是非常普通的。但是,销售商在这种情况下对支持代理ARP比较感兴趣。
5.3在NAPT设置中外发TCP/UDP数据报的转换
在NAPT设置中外发TCP/UDP数据报的转换(如,那些从私有主机发出的地址)注定要失败。它的原因如下:只有第一个数据片包含TCP/UDP报头,而这个数据报头对数据报的发送又是必须的。接下去的片段不包含TCP/UDP端口信息,但是包含其它第一个数据报中包含的一些标志信息。也就是说,两个私有主机发送TCP/UDP数据报到相同的目的主机。和,它们用相同的片标志。当目的主机收到这两个没有相关的数据报,它们有相同的片标志,和相同的指派主机地址,所以不可能决定数据报是属于哪个发送任务。相应的,两个任务同时崩溃。
6.0 当前实现
很多行业应用商业应用,这些商业应用和这个文档中描述的NAT紧密关联。LINUX公众软件在IP伪装下有NAT。FreeBSD公众软件用NAPT来运行用作邮件收发的后台程序。但是必须注意,LINUX源程序包含GNU声明,而FreeBSD软件包含UC Berkeley 声明。
7。0 安全考虑
在{NAT-TERM}描述中的对任何NAT的安全考虑对传统NAT也是适用的。
?