第9章网络地址转换NAT张书源9.1NAT概述NAT是将一个IP地址转换为另一个IP地址的功能。通常,一个局域网由于申请不到足够多的IP地址,或者只是为了编址方便,在局域网内部采用私有IP地址为设备编址,当设备访问外网时,再通过NAT将私有地址翻译为合法地址。Internet192.168.1.10200.1.25.6私有地址注册地址NAT网关局域网专用IP地址局域网专用IP地址是Internet特别划分出来的,它们不会注册给任何组织。IP地址范围网络类型网络个数10.0.0.0~10.255.255.255A1172.16.0.0~172.31.255.255B16192.168.0.0~192.168.255.255C256实际上,用户可以使用任意IP作为私有地址,但有可能导致某些外网的站点无法访问。使用私有地址的注意事项:私有地址不需要经过注册就可以使用,这导致这些地址是不唯一的。所以私有地址只能限制在局域网内部使用,不能把它们路由到外网中去。R1E0S0192.168.*.*192.168.1.1/24200.1.1.1/24InternetR1是局域网和外网的边界路由器。局域网中使用私有IP地址进行编址。如果在R1上启用RIP协议,则:R1(config)#routerripR1(config-router)#network200.1.1.0R1(config-router)#network192.168.1.0×这里不应该在私有地址上启用路由,它会导致私有地址被外网路由器学习到,扩大了它的有效范围。NAT基本原理当一个使用私有地址的数据包到达NAT设备时,NAT设备负责把私有IP地址翻译成外部合法IP地址,然后再转发数据包,反之亦然。端口多路复用技术:NAT支持把多个私有IP地址映射为一个合法IP地址的技术,这时各个主机通过端口进行区分,这就是端口多路复用技术。利用端口多路复用技术可节省合法IP地址的使用量,但会加大NAT设备的负担,影响其转发速度。NAT类型1、静态NAT:将内部地址和外部地址进行一对一的转换。这种方法要求申请到的合法IP地址足够多,可以与内部IP地址一一对应。静态NAT一般用于那些需要固定的合法IP地址的主机,比如Web服务器、FTP服务器、E-mail服务器等。192.168.1.1192.168.1.2200.10.1.5200.10.1.62、NAT池(动态NAT):将多个合法IP地址统一的组织起来,构成一个IP地址池,当有主机需要访问外网时,就分配一个合法IP地址与内部地址进行转换,当主机用完后,就归还该地址。对于NAT池,如果同时联网用户太多,可能出现地址耗尽的问题。192.168.1.1192.168.1.2200.10.1.5200.10.1.6NAT池3、PAT(端口NAT):使用端口多路复用技术,将多个内部地址映射为一个合法地址,用不同的端口号区分各个内部地址。这种方法只需要一个合法IP地址。路由器支持的PAT会话数是有限制的,所以使用PAT的局域网,其网络的规模不应该太大。192.168.1.1192.168.1.2S0:200.1.1.1/244、复用NAT池(复用动态NAT):将多个合法IP地址构成一个NAT池,使用复用技术映射其中的地址,每个地址有可以对应多台主机,各主机用端口进行区分。复用NAT池是NAT池和PAT技术的结合,可用于大规模的局域网。说明:在端口复用技术中,用端口区分的不是一台主机,而是一个网络连接(会话),当一台主机同时建立了多个会话时,它的每个会话会占用一个端口映射。假如一台路由器支持4000个会话,那么它支持的主机数量会远少于4000台。5、TCP负载均衡:如果一个服务器的访问量非常大,我们通常会建立多台映像服务器对访问进行分流。从外部来看,这些服务器的IP地址相同,NAT设备会把多个对服务器的访问映射到不同的服务器上,实现负载均衡。192.168.1.1192.168.1.2S0:200.1.1.1/24TCP负载均衡与其它NAT的主要区别在于,它是把来自外网的同一合法IP地址翻译成不同的内网IP地址。常用NAT设备实现NAT可以使用不同的设备,它们的基本功能相同,但功能强弱有别,应根据需要进行选用。常用的设备有:1、路由器:功能强,支持多种NAT设置;2、防火墙:除NAT转换外,还提供多种保护功能;3、代理服务器:提供局域网接入功能;4、双网卡计算机:功能较弱,多用于小型网络。9.2NAT的配置静态NATNAT池PAT复用NAT池TCP负载均衡静态NAT把私有地址和合法地址作一对一地转换。192.168.1.1192.168.1.2200.10.1.5200.10.1.6E0S0配置命令:Router(config)#ipnatinsidesourcestatic内部地址外部地址另外,还需要把E0口指定为NAT内部接口,S0口指定为NAT外部接口。例:Router(config)#ipnatinsidesourcestatic192.168.1.1200.10.1.5Router(config)#ipnatinsidesourcestatic192.168.1.2200.10.1.6Router(config)#interfacee0Router(config-if)#ipnatinsideRouter(config-if)#interfaces0Router(config-if)#ipnatoutside配置完成后,从外网来看,PC1的IP地址是200.10.1.5,PC2的IP地址是200.10.1.6,各计算机都可用此IP地址访问PC1和PC2。用showipnattranslation命令可查看活跃的转换。(静态NAT始终是活跃的)用showipnatstatistics命令可查看转换的统计信息。静态NAT是一直存在的,管理员可以用“no”命令删除静态NAT条目。NAT池(动态NAT)192.168.1.1192.168.1.2200.10.1.5200.10.1.6NAT池主要工作:建立一个IP地址池。设定被转换的IP地址范围。建立转换关系。设定转换的入口和出口。1、建立IP地址池Router(config)#ipnatpool地址池名字起始IP结束IPnetmask子网掩码例:建立一个地址范围为200.1.1.1~200.1.1.10/24的IP地址池。Router(config)#ipnatpoolP1200.1.1.1200.1.1.10netmask255.255.255.0P1是地址池的名字。说明:地址池中的地址应该是经过注册的合法IP地址。2、设定被转换的地址范围:被转换的地址范围使用标准访问控制列表进行定义。比如:被转换的地址是形如192.168.*.*/24的地址,则可定义:Router(config)#access-list1permit192.168.0.00.0.255.255说明:这里定义的ACL不是用于数据过滤的,它只是用于指定参与NAT转换的私有地址范围的。所以,我们不必把它用在一个接口上。3、建立被转换的地址和地址池间的关系:Router(config)#ipnatinsidesourcelistACL表号pool地址池名字例:把1号ACL定义的地址与名为P1的地址池建立NAT转换关系。Router(config)#ipnatinsidesourcelist1poolP1说明:经此定义后,每当路由器收到一个数据包,就检测它的源地址,如果和1号ACL相匹配,就使用P1中的地址进行NAT转换。4、指定NAT转换的入口和出口:Router(config)#interface内部接口Router(config-if)#ipnatinsideRouter(config)#interface外部接口Router(config-if)#ipnatoutside说明:每种NAT都需要指定内部接口和外部接口。例:NAT池200.1.1.1~200.1.1.254/2410.0.0.0/8内部网络地址为10.0.0.0/8,注册的IP地址是200.1.1.1~200.1.1.254,用这些地址为内网的各个访问提供NAT翻译。R1f0/0s0/0R1(config)#ipnatpoolippool200.1.1.1200.1.1.254netmask255.255.255.0R1(config)#access-list30permit10.0.0.00.255.255.255R1(config)#ipnatinsidesourcelist30poolippoolR1(config)#interfacef0/0R1(config-if)#ipnatinsideR1(config-if)#interfaces0/0R1(config-if)#ipnatoutside复用NAT池当NAT池中的地址耗尽时,会导致后来的主机无法上网。所以当内网的主机数超过NAT池中的地址数时,通常应配置成复用NAT池,这样每个IP地址可对应多个会话,各个会话用端口号进行区分。理论上讲,一个IP地址可以映射约65000个会话,但实际的路由器往往只支持几千个会话(Cisco支持约4000个)。在复用NAT池中,Cisco首先复用地址池中的第一个地址,达到能力极限后,再复用第二个地址,依此类推。复用NAT池的配置方法与NAT池的配置方法基本相同,只是:Router(config)#ipnatinsidesourcelistACL表号pool地址池名字overload在上面的命令中加上overload关键字表示使用端口复用技术。PATPAT是复用NAT池的特例,它是通过端口复用技术用于一个合法IP地址映射内网的所有私有IP地址,这个地址往往就是路由器出口的IP地址。10.0.0.0/8R1f0/0s0/0:195.4.10.2上例中,把内网的私有IP地址都映射为R1的S0/0口的IP地址就是PAT。PAT的配置方法可以使用复用NAT池的配置方法,只要建立一个起始地址和结束地址相同的NAT池就行了。也可以不建立NAT池,用以下命令进行配置:R1(config)#access-list30permit10.0.0.00.255.255.255R1(config)#ipnatinsidesourcelist30interfaces0/0overloadR1(config)#interfacef0/0R1(config-if)#ipnatinsideR1(config-if)#interfaces0/0R1(config-if)#ipnatoutsidePAT可最大限度的节省IP地址用量,但由于它只能同时支持几千个会话,所以使用PAT易造成拥塞。为了避免PAT和复用NAT池的拥塞,一方面可以多申请一些IP地址,建立一个大些的NAT池,另一方面也应该限制用户使用那些占用会话数很多的应用(如BT)。TCP负载均衡TCP负载均衡是为了把一个外部的合法地址交替映射到多个内部地址上,这样可以使多台服务器使用同一个外部地址进行访问。192.168.1.1192.168.1.2S0:200.1.1.1/24E01、建立内部地址池,其中的地址必须是各服务器的真实地址(加上rotary关键字)。R1(config)#ipnatpoolp1192.168.1.1192.168.1.2netmask255.255.255.0rotary2、建立访问控制列表,定义转换的合法IP地址R1(config)#access-list1permithost200.1.1.13、用地址池和访问控制列表建立映射R1(config)#ipnatinsidedestinationlist1poolp14、指定NAT入口(E0口)和出口(S0口)R1(config)#interfacee0R1(config-if)#ipnatinsideR1(config-if)#interface