文档库 最新最全的文档下载
当前位置:文档库 › NAT网络地址转换实验详解

NAT网络地址转换实验详解

NAT网络地址转换实验详解
NAT网络地址转换实验详解

一、原理回顾

网络地址转换(NAT,Network Address Translation)属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型Internet接入方式和各种类型的网络中。原因很简单,NAT不仅完美地解决了lP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。

虽然NAT可以借助于某些代理服务器来实现,但考虑到运算成本和网络性能,很多时候都是在路由器上来实现的。

随着接入Internet的计算机数量的不断猛增,IP地址资源也就愈加显得捉襟见肘。事实上,除了中国教育和科研计算机网(CERNET)外,一般用户几乎申请不到整段的C类IP地址。在其他ISP那里,即使是拥有几百台计算机的大型局域网用户,当他们申请IP地址时,所分配的地址也不过只有几个或十几个IP地址。显然,这样少的IP地址根本无法满足网络用户的需求,于是也就产生了NAT技术。

l.NAT简介

借助于NAT,私有(保留)地址的"内部"网络通过路由器发送数据包时,私有地址被转换成合法的IP地址,一个局域网只需使用少量IP地址(甚至是1个)即可实现私有地址网络内所有计算机与Internet的通信需求。

NAT将自动修改IP报文的源IP地址和目的IP地址,Ip地址校验则在NAT处理过程中自动完成(对于ICMP,NAT也自动完成地址转换)。有些应用程序将源IP地址嵌入到IP报文的数据部分中,所以还需要同时对报文进行修改,以匹配IP头中已经修改过的源IP地址。否则,在报文数据都分别嵌入IP地址的应用程序就不能正常工作。

2.NAT实现方式

NAT的实现方式有三种,即静态转换Static Nat、动态转换Dynamic Nat 和端口多路复用OverLoad。

静态转换是指将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址。借助于静态转换,可以实现外部网络对内部网络中某些特定设备(如服务器)的访问。

动态转换是指将内部网络的私有IP地址转换为公用IP地址时,IP地址对是不确定的,而是随机的,所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址。也就是说,只要指定哪些内部地址可以进行转换,以及用哪些合法地址作为外部地址时,就可以进行动态转换。动态转换可以使用多个合法外部地址集。当ISP提供的合法IP地址略少于网络内部的计算机数量时。可以采用动态转换的方式。

端口多路复用(Port address Translation,PAT)是指改变外出数据包的源端口并进行端口转换,即端口地址转换

Internet的访问,从而可以最大限度地节约IP地址资源。同时,又可隐藏网络内部的所有主机,有效避免来自interne t的攻击。因此,目前网络中应用最多的就是端口多路复用方式。

受到NAT影响的应用程序

一些高层协议(比如FTP,Quake,SIP,VPN)是在IP包的有效数据内发送网络层(第三层)信息的。比如,主动模式的FTP使用单独的端口分别来控制命令传输和数据传输。当请求一个文件传输时,主机在发送请求的同时也通知对方自己想要在哪个端口接受数据。但是,如果主机是在一个简单的NAT防火墙后发送的请求,那么由于端口的映射将会使对方接收到的信息无效。

一个应用层网关(Application Layer Gateway或ALG)可以修正这个问题。运行在NAT防火墙设备上的ALG软件模块可以更新任何由地址转换而导致无效的信息。显然,ALG需要明白它所要修正的上层协议,所以每个有这种问题的协议都需要有一个单独的ALG。

但是,除FTP外的大多数传统的客户机-服务器协议不需要发送网络层(第三层)信息,也就不需要ALG。

这个问题的另一个可能的解决方法是使用象STUN这样的技术,但是这只针对建立在UDP上的高层协议,并且需要它内建这种技术。这种技术对对称NAT也是无效的。还有一种可能的方案是UPnP,但它需要和NAT设备配合起来使用.

工作原理

当一台小型商务企业的内部网计算机用户连接到 Internet 资源时,该用户的 TCP/IP 协议产生一个 IP 数据包,该数据包包含以下值,这些值位于 IP 和 TCP 或 UDP 标头中:(粗体内容表示受 NAT 影响的项目):

?目标 IP 地址:Internet 资源 IP 地址

?源 IP 地址:私有 IP 地址

?目标端口:Internet 资源 TCP 或 UDP 端口

?源端口: 源应用程序 TCP 或 UDP 端口

请求源主机或者其它路由器将此 IP 数据包发送给 NAT, 然后由 NAT 将向外发送的数据包的地址解析如下:

?目标IP地址:Internet 资源 IP 地址

?源IP 地址:ISP 分配的公用地址

?目标端口:Internet 资源 TCP 或 UDP 端口

?源端口:重新映射的源应用程序TCP 或 UDP 端口

NAT 将重新映射的 IP 数据包发送到 Internet 。响应计算机将向 NAT 返回一个响应。当 NAT 接收到此响应时,该数据包将包含以下地址信息:

?目标IP 地址:ISP 分配的公用地址

?源IP地址:Internet 资源 IP 地址

?目标端口:重新映射的源应用程序 TCP 或 UDP 端口

?源端口:Internet 资源的 TCP 或者 UDP 端口

当 NAT 完成映射和解析地址后,将向 Internet 客户端发送数据包,此数据包包含以下地址信息:

?目标 IP 地址:私有 IP 地址

?源 IP 地址:Internet 资源 IP 地址

?目标端口:源应用程序TCP 或者 UDP 端口

?源端口:Internet 资源 TCP 或 UDP 端口

对于向外发送的数据包,源 IP 地址和 TCP/UDP 端口号将被映射到一个公用源 IP 地址和一个可能变化的 TCP/UDP 端口号。对于接收的数据包,目标 IP 地址和 TCP/UDP 端口号将被映射到私有 IP 地址和初始 TCP/UDP 端口号。

那么,NAT转换表何时进行初始化呢,一般有三种方式:手工初始化,外发数据报时,传入名字查找。大多数NAT实现方式都使用外发数据报时初始化转换表,当内部主机通过NAT向外发送数据报时,NAT此时在转换表中创建一个表项

二、实验分析

一:拓扑图

二:使用dynamips完成实验

2:R6路由器S1/0端口ip地址:220.171.1.2 ,Fa2/0端口ip地址:192.168.1.1/24

3:模拟公网实际环境:R6实现ACL来阻止192.168.1.0网络从Fa2/0到达PC5的S1/1 4:在R6上使用NAT来实现192.168.1.0到PC5的访问

5:真实PC(ip:192.168.1.2/24 网关:192.168.1.1)

三:实验步骤

1:在R5上

Router>en

Router# configure terminal

Router(config)#hostname PC5

PC5 (config)#no ip domain-lookup /告诉Router不要对它不知道的字符串做DNS解析

PC5 (config)#line console 0

PC5 (config-line)#exec-timeout 0 0

PC5 (config-line)#logging synchronous

PC5 (config-line)#exit

PC5 (config)#no ip routing /去除路由器的路由功能来模拟成pc

PC5 (config)#interface s1/1

PC5 (config-if)#ip address 220.171.1.1 255.255.255.0 /配置ip地址

PC5 (config-if)#no shutdown

PC5 (config-if)#exit

PC5 (config)#ip default-gateway 220.171.1.2 /配置默认网关

PC5(config)#end

PC5#

2:在R6上:

使用ACL

Router>enable

Router#configure terminal

Router(config)#hostname R6

R6(config)#no ip domain-lookup

R6(config)#line console 0

R6(config-line)#exec-timeout 0 0

R6(config-line)#logging synchronous

R6(config-line)#exit

R6(config)#inter fa2/0

R6(config-if)#ip address 192.168.1.1 255.255.255.0

R6(config-if)#no shutdown

R6(config-if)#interface s1/0

R6(config-if)#ip address 220.171.1.2 255.255.255.0

R6(config-if)#no shutdown

R6(config-if)#ip access-group 1 out /加载ACL到s1/0的出口上以192.168.1.0的源包R6(config-if)#exit

R6(config)#access-list 1 deny 192.168.1.0 0.0.0.255 /标准ACL,阻止192.168.1.0来的包R6(config)#access-list 1 permit any /标准ACL,允许任何来包

R6(config)#

测试:PC(IP:192.168.1.2/24 网关:192.168.1.1)ping 220.171.1.1 不通

由于ACL阻止了192.168.1.0来的包,要实现内外访问,必须使用NAT转换

A:使用静态NAT:在内部本地地址和内部全局地址之间建立一对一的映射关系

R6#

R6#conf t

R6(config)#ip nat inside source static 192.168.1.2 220.171.1.3 /配置静态nat,内部本地地址和内部全局

地址做一对一对应

R6(config)#interface fa2/0

R6(config-if)#ip nat inside /设置fa2/0接口为内部网络

R6(config-if)#interface s1/0

R6(config-if)#ip nat outside /设置s1/0网络为外部网络

R6(config-if)#end

R6#

测试:PC(IP:192.168.1.2/24 网关:192.168.1.1)ping 220.171.1.1通

B:使用动态地址转换NAT:在内部本地地址和内部全局地址之间建立动态的映射关系。这是通过指定要转换的本地地址和全局地址池,并将它们之间关联起来来实现的。路由器在需要时创建转换条目

R6#

R6#conf t

R6(config)#access-list 2 permit 192.168.1.0 0.0.0.255 /设置ACL来设置可以被NAT的流量

R6(config)#ip nat pool cisco 220.171.1.3 220.171.1.5 netmask 255.255.255.0

/设置NAT地址池220.171.1.3-5,名称为cisco

R6(config)#ip nat inside source list 2 pool cisco /设置NAT:只有符合ACL2的流量才可以被NAT,并使用地址池cisco的地址进行转换,后可以跟overload

R6(config)#interface fa2/0

R6(config-if)#ip nat inside /设置fa2/0接口为内部网络

R6(config-if)#interface s1/0

R6(config-if)#ip nat outside /设置s1/0网络为外部网络

R6(config-if)#end

R6#

测试:PC(IP:192.168.1.2/24 网关:192.168.1.1)ping 220.171.1.1通

C:使用地址重载(overload):通过转换TCP连接或UDP连接的端口号,可以节省内部全局地址池中的地址。将不同的内部本地地址映射到同一个内部全局地址,使用内部主机的tcp/upd端口号来区分它们R6#

R6#conf t

R6(config)#access-list 2 permit 192.168.1.0 0.0.0.255 /设置ACL来设置可以被NAT的流量

R6(config)#ip nat inside source list 2 interface s1/0 overload /使用接口的接口s1/0的地址220.171.1.2来做地址重载,内部pc地址使用共有的这个地址

R6(config)#interface fa2/0

R6(config-if)#ip nat inside /设置fa2/0接口为内部网络

R6(config-if)#interface s1/0

R6(config-if)#ip nat outside /设置s1/0网络为外部网络

R6(config-if)#end

R6#

测试:PC(IP:192.168.1.2/24 网关:192.168.1.1)ping 220.171.1.1通

D:实现端口映射

说明:用R4(pc4)模拟外网ip:220.171.1.2/24 网关:220.171.1.1

用R6(pc6)模拟内网ip:192.168.1.2/24 网关:192.168.1.1

Pc6开启telnet功能

目的:R5启用ACL不让内网访问外网,内外网访问用NAT端口映射

配置:

在R4上:

Router>enable

Router#conf t

Router(config)#hostname PC4

PC4 (config)#no ip domain-lookup

PC4 (config)#line console 0

PC4 (config-line)#exec-timeout 0 0

PC4 (config-line)#logging synchronous

PC4 (config-line)#exit

PC4(config)#no ip routing /去除路由器的路由功能

PC4 (config)#interface s1/1

PC4 (config-if)#ip address 220.171.1.2 255.255.255.0 /配置ip地址

PC4 (config-if)#no shutdown

PC4 (config-if)#exit

PC4 (config)#ip default-gateway 220.171.1.1 /配置默认网关

PC4(config)#end

PC4#

在R6上:

Router#conf t

Router(config)#interface s1/0

Router(config-if)#ip address 192.168.1.2 255.255.255.0

Router(config-if)#no shutdown

Router(config-if)#exit

Router(config)#hostname PC6

PC6(config)#no ip rouring

PC6(config)#no ip domain-lookup

PC6(config)#ip default-gateway 192.168.1.1

PC6(config)#enable password cisco

PC6(config)#line console 0

PC6(config-line)# logging synchronous

PC6(config-line)#exec-timeout 0 0

PC6(config-line)#exit

PC6(config)#line vty o 4

PC6(config-line)#password cisco

PC6(config-line)#login

PC6(config-line)#exit

PC6(config)#exit

PC6#

在R5上:

Router>enable

Router#conf t

Router(config)#hostname R5

R5(config)#interface s1/0

R5(config-if)#ip address 220.171.1.1 255.255.255.0

R5(config-if)#no shut

R5(config-if)#interface s1/1

R5(config-if)#ip address 192.168.1.1 255.255.255.0

R5(config-if)#no shutdown

R5(config-if)#end

R5#conf t

R5(config)#no ip domain-lookup

R5(config)#line con 0

R5(config-line)#logg sy

R5(config-line)#exec-timeout 0 0

R5(config-line)#exit

R5(config)#access-list 1 deny 192.168.1.0 0.0.0.255 /建立ACL不让内外网通讯R5(config)#access-list 1 permit any

R5(config)#interface s1/0

R5(config-if)#ip access-group 1 out

R5(config-if)#end

R5#conf t

R5(config)#ip nat inside source static tcp 192.168.1.2 23 interface s1/0 23 /实现端口映射,外网用户在访问220.171.1.1的23端口,即映射到内网中的192.168.1.2的23号端口

R5(config)#interface s1/0

R5(config-if)#ip nat outside

R5(config-if)#interface s1/1

R5(config-if)#ip nat inside

R5(config-if)#end

R5#

实现测试:

在pc4上telnet 220.171.1.1,则转向到192.168.1.2的23号端口

相关文档