NAT基础
为解决IPv4地址日益枯竭,出现NAT(Network Address Translation,网络地址转换)技术。NAT可以将来自一个网络的IP数据报报头中的IP地址(可以是源IP地址或目的IP地址,或两者同时)转换为另一个网络的IP地址,主要用于实现私网用户和公网用户之间的互访。
一、NAT主要特性
在AR G3路由器中把支持的NAT特性分为三大类:动态NAT、静态NAT和NAT Server(NAT服务器),在实际应用中,分别对应配置动态地址转换、配置静态地址转换和配置内部服务器。
1、动态NAT
私网IP与公网IP之间的转换不是固定的。把需要访问公网的私网IP地址动态地与公网IP地址建立临时映射关系,将报文中的私网IP地址进行对应的临时替换,待返回报文到达设备时再根据映射表“反向”把公网IP地址临时替换回对应的私网IP地址,转发给主机,实现内网用户和外网的通信。
动态NAT的实现方式有Basic NAT和NAPT两种(Easy IP是NAPT的一种特例)。Basic NAT是一种“一对一”的动态地址转换;NAPT则通过引入“端口”变量,是一种“多对一”的动态地址转换(映射的公网端口不同)。
2、静态NAT
建立固定的一对一的公网IP地址和私网IP地址的映射。
3、NAT Server
内网向外网提供服务,内网服务器不能被屏蔽,这是一种由外网发起向内网访问的NAT转换情形。外网用户访问内网服务器,通过“公网IP地址:端口号”与服务器的“私网IP地址:端口号”的固定映射,从私网IP地址与公网IP地址的映射关系看,也是一种静态映射关系。
二、BasicNAT实现原理
Basic Nat方式属于一对一地址转换,但不是静态一对一,是动态。
内网向公网发起连接请求时,请求报文中的私网IP地址通过事先准备好的公网IP地址池动态建立私网IP与公网IP的NAT映射表项,利用映射的公网IP将报文中的源IP地址(即内网私网IP地址)进行替换。然后送达给外网的目的主机。外网主机收到请求报文后进行响应时,响应报文到达NAT设备,又将依据前面请求把我摁所建立的私网IP与公网IP映射关系反向将报文中的目的IP替换成对应的私网IP,然后送达给内部源主机。
①当内网侧Host要访问公网侧Server时,向Router发送请求报文(即Outbound方向),此时报文中的源IP为Host自己的10.1.1.100,目的IP为Server的IP:211.100.7.34。
②Router收到来自Host请求报文后,从公网地址池选取一个空闲公网IP,建立与内网侧报文源IP间的NAT转换映射表项,包括正(Outbound)、反(Inbound)两个方向,依据正向NAT表项将报文中的源IP地址转换为对应的公网IP后向公网侧发送。此时发送的报文的源IP地址是转换后的公网IP:162.105.178.65,目的IP不变,仍为Server的IP:211.100.7.34。
③当Server收到请求报文后,需向Router发送响应报文(Inbound方向),此时只须将收到的请求报文中的源IP和目的IP对调即可,即报文的源IP是Server自己的IP:211.100.7.34,目的地址是Host私网IP转换后的公网IP:162.105.178.65。
④当Router收到来自公网Server发送的响应报文后,会根据报文中的目的IP查找NAT映射表项,将报文中的目的IP转换为Host主机对应的私网IP地址(源地址不变)后向私网侧发送,此时报文中的源IP仍是Server的IP:211.100.7.34,目的IP地址转换为Host的私网IP:10.1.1.100。
Basic NAT中的请求报文转换的仅是其中的源IP地址(目的IP不变),即仅关心源IP地址;响应报文转换的仅是其中的目的IP(源IP不变),即仅关心目的IP。
三、NAPT实现原理
多对一地址转换,NAPT使用“IP地址+端口号”的形式进行转换。
NAPT请求报文中转换的仅是源IP地址和源端口号(目的IP和目的端口号不变),即仅关系源IP和源端口号;响应报文中转换的是目的IP和目的端口号(源IP和源端口号不变),即仅关心目的IP和目的端口号。不同私网主机可以转换成同一个公网IP,但转换后的端口号必须不一样。
四、EasyIP实现原理
实现原理与地址池NAPT转换原理类似,可以算是NAPT的一种特例,不同的是Easy IP方式可以实现自动根据路由器上WAN接口的公网IP地址实现与私网IP地址之间的映射(无需创建公网地址池)。主要用于将路由器WAN接口IP地址作为要被映射的公网IP地址的情形,特别适合小型局域网接入Internet情况。
五、NATServer实现原理
NAT Server用于外网用户需要使用固定公网IP地址访问内部服务器的情形。通过事先配置好的服务器的“公网IP+端口号”与服务器的“私网IP+端口号”间的静态映射关系来实现。(要先在Router上配置好静态的NAT Server转换映射表)。
①Router在收到外网用户发起的访问请求报文后(即Inbound方向),根据该请求的“目的IP:端口号”查找NAT Server转换映射表,找出对应的“私网IP:端口号”,然后用找到的结果直接替换报文的“目的IP:端口号”,最后想内网侧发送。上图外网发送的请求报文中目的IP是202.102.1.68,端口号80,经过Router转换后的目的IP和端口号为192.168.1.68:80。
②内网服务器收到由Router转发的请求报文后,向Router发送响应报文(即Outbound方向)。此时报文中的源IP、端口号与目的IP、端口号与收到的请求报文中的完全对调,即响应报文中的源IP和端口号为前面的192.168.1.68:80.
③Router收到内网服务器的响应报文后又根据该响应报文中的“源IP:端口号”查抄NAT Server转换表项,找出对应的“公网IP:端口号”,然后替换报文中的“源IP:端口号”。本例中内网服务器相应外网主机的报文的源IP和端口号是192.168.1.68:80,经Router转换后的源IP和端口号为209.102.1.68:80。
由外网向内网服务器发送的请求报文中转换的仅是目的IP和目的端口号(源IP和源端口号不变),即仅关心目的IP和目的端口号;从内网向外网发送的响应报文转换的仅是源IP和源端口号(目的IP和目的端口号不变),即仅关心源IP和源端口号。
综上总结:NAT中凡是由内网向外网发送的报文(不管是请求报文还是响应报文),在NAT路由器上转换的都是源IP地址(或同时包括源端口号),而凡是由外网向内网发送的报文(不管是请求报文还是响应报文),在NAT路由器上转换的都是目的IP地址(或同时包括源端口号)。
六、静态NAT/NAPT
静态NAT是指在进行NAT转换时,内部网络主机的IP与公网IP是一对一静态绑定的,且每个公网IP只会分配给固定的内网主机转换使用。与Basic NAT不同的只是这里先要在NAT路由器上配置好静态NAT转换映射表,而不仅是地址池。
静态NAPT是指“内部网络主机的私网IP+协议号+端口号”与“公网IP+协议号+端口号”是一对一静态绑定的,静态NAPT中的公网IP可以为多个私网IP使用。与NAPT不同的也是要先在NAT路由器上配置好静态NAPT转换映射表,而不仅是地址池。
七、NAT与路由器的本质区别
两种技术主要存在实现机制和主要应用两个方面的本质区别。
1、实现机制不同
NAT是通过解决两个网络间互访的“身份”问题来解决实现两个网络的主机的互访,即通过将报文中的源IP或目的IP转换为对方网络的IP地址来实现两个网络中的主机互访。这里报文中的IP地址转换相当于“身份”的转换,即使一个网络中的主机具有访问对方网络的合法“身份”。
路由器则是通过解决两个网络互访“渠道”问题来实现两个网络的主机的互访,即建立一条互访的“路径”(即路由表)来实现双方主机的互访,而双方传输报文中的源IP和目的IP都不变,也就是双方的“身份”并没有经过转换。
2、主要应用不同
NAT主要应用于内部局域网主机与Internet主机互访的情形(当然也可以实现两个局域网之间的互联,但这不是NAT的主要应用),解决公网IPv4不足的问题。另外,在局域网与Internet的互联中也不可能建立一个双向互访的具体路由表,一则是因为私网IP在Internet无法识别,再则因为Internet不是单一IP网段的网络。
路由之所以选择通过建立路径来实现两个网络的主机的互访,是因为路由主要都是使用私网IP,有明确IP网段的局域网之间的互联。
NAT扩展技术及主要应用
为满足一些特殊应用环境中的NAT应用,还提供几种扩展NAT技术,它们是NAT ALG(Application Level Gateway,应用层网关)、DNS Mapping(DNS映射)、NAT关联VPN、两次NAT、NAT过滤和NAT映射。这些NAT扩展技术也必须在以上静态NAT、动态NAT和NAT Server特性中应用,不能单独配置应用。
一、NATALG
NAT和NAPT只能对IP报文的头部地址和TCP/UDP头部的端口信息进行转换,没有对来自应用层数据中可能包括的IP和端口号信息(如FTP、DNS、SIP等数据报文中就包括了这些信息)进行对应转换,这样一来,当数据到达对方应用层后,所看到的仍然是没有经过相应转换的应用层地址和端口信息。这样在对端应用层发送相应报文时,采用的是没有经过相应地址转换的源端信息作为目的地址和端口信息(是私网IP地址和私网端口号),结果肯定是响应报文无法到达配置了私网IP和私网端口号的源端。
解决的方法就是在NAT的实现中使用ALG功能,ALG会对特定的应用层协议进行转换,在对这些特定的应用层协议进行NAT转换过程中,利用所形成的NAT映射表信息来同时改变封装在IP报文数据部分中的地址和端口信息,同时允许这些数据部分带有不可识别的私网地址和端口信息的应用层协议报文可以穿越NAT设备进行传输,相当于屏蔽了报文中的私网地址信息。
支持ALG功能的协议包括DNS、FTP、ICMP、SIP、PPTP和RTSP。
二、DNSMapping
某些应用中,私网用户希望通过域名访问位于同一私网的内部服务器,而此时用于解析内部服务器的DNS服务器却位于公网。当用户访问时首先通过NAT向位于公网的DNS服务器发出域名解析请求,公网中的DNS服务器发出响应报文时在数据部分携带的是内网服务器对应的公网IP(就是在NAT Server上配置的公网映射IP地址)。如果在NAT Server上没有将DNS服务器解析的公网IP替换成内部服务器对应的私网IP,私网用户将无法通过域名访问到内部服务器,因为此时私网用户访问的是公网IP地址,而实际上服务器是在私网中,ip地址是私网IP地址,自然访问不了。
这种问题可以使用DNS Mapping方式来解决,是DNS ALG技术的一种补充技术。在DNS ALG中,报文中的IP地址信息直接通过NAT映射表进行替换,而DNS Mapping在替换报文数据部分的地址信息时先要通过查找专门配置的“域名-公网IP地址-公网端口-协议类型”映射表,找到对应域名所映射的公网IP地址后使用NAT地址映射表对数据部分的地址信息(还可能包括端口、协议)用内部服务器的私网地址信息(同样可能包括端口、协议)进行替换。建立“域名-公网IP地址-公网端口号-协议类型”映射表的目录是建立内部服务器的公网域名与其公网地址信息间的对应关系。
NAT ALG与Mapping有较大不同,主要体现在用来替换的私网IP地址可能不一样。ALG功能还允许数据部分为私网信息的报文穿越NAT设备,在不同网络中传输,DNS Mapping本身没有这种功能。所以DNS Mapping必须同时结合ALG DNS才能最终生效,否则在数据部分为私网地址和端口信息的报文是不能穿越NAT设备进行传输的。当然,DNS Mapping是仅应用于DNS应用中,不能应用于ALG中还包括的FTP、RSTP等应用中。
在地址和端口信息转换方面,NAT ALG中是直接利用静态配置,或者动态形成的公网IP与私网IP地址NAT映射表中的私网IP地址同时替换报文中IP报头中的目的IP地址和数据部分中的公网IP地址,所以替换的私网IP地址与发生访问的主机的私网IP地址是绝对一致的。DNS Mapping中是通过事先配置的“域名-公网IP地址-公网端口-协议类型”映射表查找对应公网IP地址所对应的私网IP地址(或同时包括端口、协议)进行替换的;报文中的IP报头部分的目的IP地址是通过NAT地址映射表(在静态NAT或者NAT Server中配置的)进行替换的。这时数据部分替换的私网IP地址与IP报头部分替换的私网目的IP地址可能一样(在NAT Server应用中),也可能不一样(在静态NAT应用中)。
原理如上图,私网用户Host希望通过域名方式访问Web服务器,Router作为NAT Server,当Router被收到DNS服务器发出的响应报文后,先根据其中携带的域名(www.test.com)查找“域名-公网IP-公网端口-协议类型”映射表,找到对应域名所用的公网IP,然后根据NAT上配置公网IP地址与私网IP地址的静态映射关系,将报文中的目的IP地址和数据部分的服务器公网IP地址(或同时将端口)替换成为Web服务器的私网IP的地址10.1.1.200(或同时替换端口)。这样,Host收到的DNS响应报文中就携带了Web服务器的私网IP地址,从而可以通过域名来访问Web服务器了。
注:对于上面红字部分我有点不同看法,我觉的只是替换数据部分服务器公网IP地址,并且是根据NAT Server的配置,这个服务器公网IP就是域名www.test.com对应的公网IP,而报文中的目的IP地址应该替换为10.1.1.100,这个是根据NAT静态配置的NAT映射表来进行查找替换的,否则Host就收不到响应报文了。
DNSMapping仅可应用于静态NAT和NAT Server中。
三、NAT关联VPN
NAT还允许内部网络中分属不同VPN的用户通过同一个出口访问外部网络,解决内部网络中IP地址重叠的VPN同时访问外网主机的问题;NAT还支持VPN关联的NAT Server,允许外部网络中的主机访问内网中分属不同VPN的服务器,同时支持内网多个VPN地址重叠的场景。
1、VPN关联的源NAT
就是内部网络中分属不同VPN的用户通过同一个NAT出口访问外部网络,仅可应用于静态NAT中。
①VPN1内的主机A和VPN2内的主机B地址重叠,都要同时访问外部网络的一个服务器
②Router在做源NAT时,将内部VPN作为一个NAT的匹配条件,将主机A发出报文的源IP转换为202.1.1.1,将主机B发出报文的源IP转换为202.1.2.1,同时在建立的NAT转换表中,记录用户的VPN信息。
③当外部网络服务器回应内部网络主机A和B的报文经过Router时,根据已建立的NAT映射表,NAT模块将发往主机A报文的目的IP从202.1.1.1转换为10.1.1.1,然后发往VPN1的目的主机;将发往主机B报文的目的IP从202.1.2.1转换为10.1.1.1,然后发往VPN2的目的主机。
2、VPN关联的NAT Server
VPN关联的NAT Server是指外网主机通过NAT技术访问内网中分属不同VPN的服务器,仅可应用于NAT Server中。
四、两次NAT
两次NAT是指源IP地址和目的IP地址同时转换(前面的NAT技术都是一个方向仅转换源IP或目的IP),该技术应用于内部网络主机地址与外部网络上主机地址重叠的情况。设计思想就是通过一个中间的多个公网IP地址来分别对双向的源和目的IP进行转换。两次NAT可全面应用于静态NAT、动态NAT和NAT Server这三种NAT特性中。
分别位于内、外网的Host A和B的IP网段一样地址一样。
①A要访问地址重叠的B,首先A会向位于外部网路的DNS服务器发送访问外网B的DNS解析请求,DNS服务器应答B的IP地址为1.1.1.1。
②DNS应答报文在经过Router时,通过DNS ALG将DNS应答报文数据部分中的重叠地址1.1.1.1转换为唯一的临时地址3.3.3.1,然后转发给A
③A获取了B的IP地址(其实是转换后的IP:3.3.3.1)后,开始访问B,目的IP为临时地址3.3.3.1。
④请求报文在到达Router时,先进行正常的NAT Outbound转换,将报文中的源IP地址转换为源NAT地址池中的地址3.3.3.2;同时Router检查此时报文中的目的IP地址3.3.3.1与转换后的源IP地址3.3.3.2重叠,于是再进行目的IP地址转换,将报文的目的IP地址3.3.3.1转换为B的真实地址1.1.1.1,最后将报文转发到B。
⑤B回应A的访问请求后发出响应报文,其中的目的IP为A的NAT Outbound地址池地址3.3.3.2,源IP为B的地址1.1.1.1。
⑥响应报文在到达Router时,先进行正常的NAT Inbound转换,将报文中的目的IP从源NAT地址池地址中的地址3.3.3.2转换为A的内网地址1.1.1.1;同时,Router检查到此时报文中的源IP地址又与目的IP地址重叠,于是再进行源IP地址转换,将报文的源IP地址1.1.1.1转换为对应的临时地址3.3.3.1,再将报文转发到A。
考虑到内网有多个VPN的场景,且内网多个VPN的地址一样,还可在路由器配置DNS ALG的同时增加内网VPN信息作为重叠地址池到临时地址的映射关系匹配条件之一。
五、NAT过滤和NAT映射
NAT过滤功能可以让NAT设备对外网发到内网的流量进行过滤;NAT映射功能可以让内网中的一组主机通过NAT映射表映射到一个公网IP地址,共享这一个公网IP,不同的信息流看起来好像来源于同一个IP地址。NAT过滤和映射均可全面应用于静态NAT、动态NAT和NAT Server这三种特性中。
1、NAT过滤
根据过滤的条件,NAT过滤分为三种类型:
①与外部地址无关的NAT过滤行为
②与外部地址相关的NAT过滤行为
③与外部地址和端口都相关的NAT过滤行为。
在私网主机向某公网主机发起访问后,公网主机发向私网主机的流量经过NAT设备时需要进行过滤。数据报文2、数据报文3、数据报文4代表三种场景,分别对应上述三种NAT过滤类型。
①数据报文2代表公网主机PC-3(与报文1的目的地址不同,证明它不是PC-1要访问的对象)访问私网主机PC-1的报文,此时目的端口号为1111.这种情况下,只有在NAT设备上配置了外部地址无关的NAT过滤行为才会允许该报文通过(因为PC-3不是PC-1要访问的对象),否则被NAT设备过滤掉。
②报文3代表公网主机PC-2(与报文1的目的地址相同)访问私网主机PC-1的报文,此时目的端口为1111,源端口号为3333(与报文1的目的端口不同,证明PC-2是换了端口号对PC-1进行访问的),这种情况,只有配置了外部地址相关的NAT过滤行为,或者配置了外部地址无关的NAT过滤行为(均不涉及端口),才会允许该报文通过,否则被NAT设备过滤掉。
③报文4代表公网服务器PC-2(与报文1的目的地址相同)访问私网主机PC-1的报文,此时目的端口1111,源端口2222(与报文1的目的端口相同,证明PC-2没有更换端口,直接对PC-1进行访问)。这属于外部地址和端口都相关的NAT过滤行为,是缺省的过滤行为,不配置或配置任何类型的NAT过滤行为,都允许此报文通过,不会被过滤掉。
2、NAT映射
NAT映射是NAT设备对内网发到外网的流量进行的映射,可以使得一组内网主机共享唯一的外部地址对外进行通信。当位于内部网络中的主机通过NAT设备向外部主机发起会话请求时,NAT设备就会查询NAT表,看是否有相关会话记录,如果有相关记录,就会将内部IP地址及端口同时进行转换,再转发出去;如果没有相关记录,进行IP地址和端口转换的同时,还会在NAT表增加一条该会话的记录。
根据不同的映射条件,NAT映射包括三种类型:
①外部地址无关的映射:对相同的内部IP和端口号使用相同的公网IP和公网端口号进行映射,不考虑所访问的外部IP地址。
②外部地址相关的映射:对相同的内部IP和端口号,访问相同的外部IP地址时使用相同的公网端口进行映射。
③外部地址和端口相关的映射:对相同的内部IP和端口号,访问相同的外部IP和端口时使用相同的公网IP、端口号进行映射。
六、NAT的主要应用
1、私网主机访问公网服务器
小区、学校、企业私网访问公网,使用Easy IP。
2、公网主机访问私网服务器
通过NAT Server,私网服务器为公网主机提供服务。
3、私网主机通过域名访问私网服务器
DNS服务器位于公网情况下,通过NAT Server和DNS Mapping来实现。
4、NAT多实例
当分属不同MPLS VPN的主机使用相同的私网地址,并通过同一个出口设备访问Internet时,NAT多实例可使这些地址重叠的主机同时访问公网服务器。