孙光懿,缴 健
(1.天津音乐学院 网络安全和信息化办公室,天津市 300171;2.天津市教育委员会教育综合服务中心,天津市 300191)
随着一系列互联网应用的普及,IPv4(Internet Protocol Version 4)网络地址空间日益匮乏的问题也越发显现.针对这一问题,一方面网络技术人员可将现有IPv4网络升级为IPv6网络来解决(IPv4网络地址长度只有32位,而IPv6网络地址长度为128位,这样就可拥有巨大的网络地址空间);另一方面网络技术人员还可通过IPv4网络中使用网络地址转换(Network Address Translation,NAT)[1-5]技术来解决.借助该技术,网络技术人员只需拥有一个或少量合法公网IP地址,就可实现内部私有IP地址主机共享Internet连接.换句话说,工作在网络层的NAT技术是一种将内部私有IP地址(该类地址不能被路由转发),转换为合法公网IP地址的网络技术.它不仅可以有效缓解IPv4网络地址空间的不足,而且还可以隐藏内部真实网络(内部网络设备对公网来说为不可见),从而避免来自外网的攻击.通常来讲NAT技术共有以下三种转换类型:①静态NAT转换.静态NAT转换又可进一步细分为内部地址静态NAT转换和外部地址静态NAT转换.内部地址静态NAT转换多用来实现对外部网络发布内部服务器或少数内部主机通过共享内部全局地址来访问互联网.而外部地址静态NAT转换多用来实现外部网络用户对内部设备的特定访问.②动态NAT转换.该类型NAT总是以随机的方式,将内部私有IP地址转换为合法公网IP地址(当ISP提供的合法公网IP地址数量略少于内部私有IP地址数量时,可选择此种类型NAT).③端口地址转换(Port address Translation,PAT).该类型NAT通过对外出数据包的源端口进行端口转换,来最大限度地节省IP地址资源.与动态NAT不同,它可将内部多个本地地址都映射到同一个内部全局地址上,并且在该地址上加上NAT设备随机分配的端口号.这一点需要注意,在华为、华三等国内网络设备厂商称该转换类型的NAT为NAPT.
GNS3是一款可以运行在WINDOWS、LINUX及苹果系统中的图形化网络仿真软件, 目前最新版本为GNS3-2.2.11.相比其他网络仿真软件而言, GNS3由多款软件整合而成并且是开源的, 可以实现的功能更多.它不仅支持多种型号的思科交换机、路由器以及防火墙等设备的模拟仿真,还可以与现实中网络环境进行深度对接, 具有免费、真实可信、用户操作性强等特点, 适用于模拟各类型复杂网络环境.
NAT工作原理[6-9]:当内部私有IP主机与外部主机相互通信的IP数据包经过NAT设备时,IP数据包的源地址或目的地址在私有IP和合法公网IP之间转换.通常在启用NAT技术的网络设备上,至少存在一个内部(Inside)接口和一个外部(Outside)接口(内部接口负责连接内部网络,外部接口负责连接外部网络).当内部网络主机访问外部网络时,IP地址转换方向是从内部网络一侧向外部网络一侧进行的.NAT设备在收到内部主机发往外部网络的数据包时,源地址(SA)和目的地址(DA)分别为内部本地地址和外部本地地址.该数据包被转发到外部网络后,其源地址被转换为内部全局地址,目的地址被转换为外部全局地址.IP地址转换过程如图1所示.而当外部主机访问内部网络时,IP地址转换方向则从外部网络一侧向内部网络一侧进行.NAT设备在收到外部主机发往内部网络的数据包时,源地址(SA)和目的地址(DA)分别为外部全局地址和内部全局地址.该数据包被转发到内部网络后,其源地址被转换为外部本地地址,目的地址被转换为内部本地地址.IP地址转换过程如图2所示.从图1、图2我们可以清楚地看到,图1中的源地址和目的地址的转换过程,恰好是图2中目的地址和源地址转换的反过程.总的来说,NAT地址转换是在本地地址和全局地址之间进行的,无论数据通信方向如何.
图1 数据包从内部网络到外部网络时的IP地址转换过程
图2 数据包从外部网络到内部网络时的IP地址转换过程
需要明确:①内部网络中的主机和外部网络中的主机所使用的真实IP地址,分别被称为内部本地地址和外部本地地址.②当内部网络主机访问外部网络时,对外所呈现出的IP地址则被称为内部全局地址.通常该地址为互联网运营商分配给内部网络用户的合法公有IP地址,位于外部网络一侧.③对内部网络来说,外部主机所呈现的IP地址则被称为外部全局地址.通常该地址为互联网运营商分配给外部主机的合法公有IP地址.④NAT路由器的内部接口与外部接口是固定的,不会随着通信方向的变化而发生改变.
内部源地址静态NAT转换是在内部本地地址(内网IP地址)和内部全局地址(合法公网IP)之间进行的一对一转换,这种一对一的转换关系是固定的.也就是说即使当前内部用户无访问互联网的需求,其租用的内部全局地址也不会再被其他用户所租用.
为使读者能够清楚理解内部源地址静态NAT的工作原理并掌握其配置方法,可利用GNS3思科网络仿真平台搭建一个由2台思科3700路由器R1、R2和2台思科2950二层交换机SW1、SW2构成的小型网络(该网络共划分为两个网段,既服务器区所在的VLAN13网段和办公区所在的VLAN14网段).其中,R1为公司边界路由器,用来与互联网运营商中国联通边界路由器R2互联(该网络运营商为公司共分配了四个合法公网IP地址.地址范围从202.99.96.31~202.99.96.34).SW1为公司内部二层交换机,负责连接服务器区(VLAN13网段)和办公区(VLAN14网段)终端设备.SERVER1(在TCP 8080端口上进行监听通信,其隶属于VLAN13网段,IP地址为:192.168.13.2/24)为公司WEB服务器,用来为外部用户提供访问.PC1(隶属于VLAN14网段,IP地址为:192.168.14.2/24)为公司办公区终端计算机,用来为公司员工提供互联网检索服务.PC2(IP地址为:211.67.201.20)为外部用户终端计算机.网络拓扑如图3所示.由于公司内部网段均使用私有IP地址且SERVER1和PC1存在与互联网通信的需求,因此我们有必要在路由器R1中启用内部地址静态NAT转换技术,为上述设备配置从内部本地地址到内部全局地址的静态映射.相关具体配置过程如下.
图3 内部地址静态NAT转换
配置路由器R1
R1(config)#int f0/0.1
R1(config-if)#ip nat inside//将该子接口设置为NAT内部接口
R1(config)#int f0/0.2
R1(config-if)#ip nat inside
R1(config)#int e0/0
R1(config-if)#ip add 202.99.96.31 255.255.255.0
R1(config-if)#ip nat outside //将该接口设置为NAT外部接口
R1(config)#ip nat inside sourcestatic tcp 192.168.13.2 8080 202.99.96.32 80 //
为了保证公司WEB服务器能够监听到外部用户的访问,网络技术人员必须把外部用户对内部全局地址202.99.96.32 80端口的访问,重定向到192.168.13.2 WEB服务器的8080端口上.配置完成后,当路由器R1的外部接口收到目的地址为202.99.96.32:80的访问数据包时,该数据包的目的地址将转换为192.168.13.2:80.
R1(config)#ip nat inside source static 192.168.14.2 202.99.96.33 //将内部源地址192.168.14.2转换为202.99.96.33
R1(config)#ip route 0.0.0.0 0.0.0.0 202.99.96.35 //配置默认路由
上述配置完成后,我们以公司内部终端计算机PC1为例,使用Ping命令测试其与外部主机PC2的连通性(如图4所示).测试后可以看到,二者之间是可以相互通信的.
图4 使用Ping命令测试PC1与PC2的连通性
与此同时,我们通过Wireshark软件分别对终端计算机PC1、PC2进行抓包分析(如图5、图6所示).
图5 抓取的PC1数据包
图6 抓取的PC2数据包
在对抓取后的PC1数据包进行分析后我们不难发现,PC1发往PC2的数据包(例如图5中编号为50的数据包)和PC2发往PC1响应数据包(例如图5中编号为51的数据包),与配置内部源地址静态NAT转换前完全相同,即PC1发往PC2数据包的源地址为PC1内部本地地址192.168.14.2/24,目的地址为PC2的内部本地地址211.67.201 20/24.PC2发往PC1响应数据包的源地址为PC2的内部本地地址211.67.201 20/24,目的地址为PC1内部本地地址192.168.14.2/24.
在对抓取后的PC2数据包进行分析后发现:①从PC1发来的数据包(例如图6中编号为8的数据包)源地址经NAT转换后[10-12],已由其内部本地地址变为了内部全局地址(即公网地址202.99.96.33/24),而该数据包的目的地址未发生改变,依旧为PC2的内部本地地址211.67.201 20/24.②从PC2发往PC1响应数据包的源地址未发生改变,只是该数据包的目的地址已由PC1的内部本地地址192.168.14.2/24变为其内部全局地址211.67.201 20/24.这充分说明此次配置的基于内部源地址静态NAT转换是成功的.
与静态NAT不同,动态NAT[13-14]是通过数据流触发的方式来建立内部本地地址和内部全局地址的映射关系(路由器最初的NAT表中没有任何数据),并且这种映射关系也不是一成不变的.这是因为动态NAT存在一种与DHCP协议相类似的IP地址租约制度,即当内部主机不与外部网络通信时,与之映射的内部全局地址就会被重新放回地址池中,以供其他内部主机访问外部网络时使用.但需要注意几点:①在配置动态NAT前,网络管理者必须预先建立一个内部全局地址池.②动态NAT映射表中的 NAT地址转换条目均存在一个生存时间.如果超过了该时间,那么该条条目就会被自动删除.在默认情况下,一对一动态NAT条目的生存时间为600秒,而基于端口的动态NAT条目的生存时间只有60秒.
公司内只允许终端计算机PC1至PC3可对互联网资源进行访问,且公司拥有中国联通分配的十个合法公网IP地址.地址范围从202.99.96.31~202.99.96.40.网络拓扑及相关设备IP地址如图7所示.相关核心配置过程如下.
图7 网络拓扑及相关设备IP地址
配置路由器R1
R1(config)#ip nat pool cb 202.99.96.31 202.99.96.40 prefix-length 24 //定义名为“cb”的内部全局地址池
R1(config)#access-list 82 permit host 192.168.14.2//定义公司内允许访问互联网资源的终端计算机
R1(config)#access-list 82 permit host 192.168.14.3
R1(config)#access-list 82 permit host 192.168.14.4
R1(config)#ip nat inside source list 82 pool cb//将公司内部本地地址和地址池中的内部全局地址相关联
上述配置完成后,以公司内部终端计算机PC2为例,使用Ping命令测试其与中国电信资源服务器Server1的连通性.然后再在路由器R1的特权模式下分别使用Show ip nat trans命令和Debug ip nat命令,查看路由器R1的NAT表和NAT地址转换的详细过程(如图8、图9所示).测试证明,此次所配置的基于内部源地址动态NAT转换是成功的,公司内部终端计算机PC3与中国电信资源服务器Server1之间可以正常通信.
图8 路由器R1的NAT表
图9 NAT地址转换的详细过程
从图8中发现:①路由器R1的NAT表中存在一条协议类型为“---”的NAT地址转换条目,该条目对所有协议的动态地址转换均有效.②在终端计算机PC3中使用Ping命令后,路由器R1的NAT表中出现了三条协议类型为“icmp”的NAT地址转换条目,且每条NAT地址转换条目中的内部本地地址和内部全局地址分别为192.168.14.3(该地址为icmp数据包的源地址,即终端计算机PC3的IP地址)和202.99.96.32.需要特别注意的是:上述NAT地址转换条目中,外部本地地址和外部全局地址为同一地址211.67.201.20(该地址为icmp数据包的目的地址,即Server1的IP地址).之所以出现这种情况,是未配置外部网络的本地地址和全局地址NAT转换所造成的.
从图9中不难发现:①每条NAT会话都包含符号“*”.这说明NAT地址转换过程发生在快速交换路径.②整个NAT地址转换过程是在内部本地地址和内部全局地址之间进行的.当数据包由内部网络发往外部网络时(PC3发往Server1的ICMP数据包),只有数据包的源地址在经过路由器R1后发生改变(即由内部本地地址192.168.14.3,转换为内部全局地址202.99.96.32).目的地址(211.67.201.20)不变.而从外部网络发往内部网络的响应数据包,只有其目的地址在经过路由器R1后发生改变(即由内部全局地址202.99.96.32,转换为内部本地地址192.168.14.3),源地址不变(211.67.201.20).
反向NAT技术[15-16]是通过对数据包目的地址的不断循环转换(传统NAT技术是对数据包源地址进行转换),来实现服务器负载均衡的.利用该技术可把一台虚拟服务器映射到多台真实服务器上.每次外部网络向虚拟服务器发起的TCP连接请求,总会循环分发到内部网络各台真实服务器上(通过目的地址以地址池轮循方式实现).需要注意几点:①反向NAT技术只能对TCP协议实现负载均衡,这是因为其他协议类型的IP数据包无法实现循环分发(其他协议类型的IP数据包到达NAT路由器后,所生成的ARP报文会查询该IP所对应的MAC地址).②与静态NAT和动态NAT不同(配置后即可在NAT表中生成映射关系).反向NAT只有在TCP连接通过NAT设备时,NAT表中才会生成映射关系.③反向NAT服务器负载均衡不仅可通过软件方式来实现,还可通过硬件方式来实现.
3.3.1 仿真实验
利用GNS3思科网络仿真平台,搭建了一个由四台思科3700路由器R1(模拟公司内部资源服务器A)、R2(模拟公司内部资源服务器B)、R3(公司边界路由器) 、R4(模拟外网终端计算机PC1)和一台三层交换机SW1(主要用于连接公司内网服务器等网络设备)构成的小型网络.网络拓扑及相关设备IP地址如图10所示.为提高外网用户对公司内网资源服务器的访问质量,解决服务器访问量过大、网络负荷过重的问题,也为最大限度地提高内网资源服务器的安全性,制定了在公司边界路由器R3中应用反向NAT技术,从而实现两台内网资源服务器流量负载均衡的方案,即两台资源服务器A、B在逻辑上组成一台虚拟服务器,该虚拟服务器IP地址即为公司对外发布的资源服务器地址.当外网用户首次对公司资源服务器进行访问时,路由器R3会将数据包的目的地址(虚拟服务器IP地址)转换为公司内部资源服务器A的IP地址.当外网用户再次对公司资源服务器进行访问时,路由器R3则会将数据包的目的地址转换为公司内部资源服务器B的IP地址,依次循环从而实现服务器的负载均衡.考虑到文章篇幅,在这里只给出路由器R1、R3的详细配置过程,路由器R2、R4的配置过程与路由器R1类似.
图10 网络拓扑及相关设备IP地址
3.3.1.1 配置路由器R1
R1(config)#int f3/0
R1(config-if)#ip add 192.168.70.31 255.255.255.0
R1(config)#enable password zzen //设置用户密码
R1(config)#line vty 0 4 //设置VTY口令
R1(config-line)#login
R1(config-line)#password chenboo
R1(config)#ip route 0.0.0.0 0.0.0.0 192.168.70.1 //设置默认路由
3.3.1.2 配置路由器R3
R3(config)#int f0/0
R3(config-if)#ip add 192.168.70.1 255.255.255.0
R3(config-if)#ip nat inside //设置NAT内部接口
R3(config)#int e1/0
R3(config-if)#ip add 211.67.200.1 255.255.255.0
R3(config-if)#ip nat outside //设置NAT外部接口
R3(config)#access-list 16 permit host 211.67.200.32 //建立编号为16的标准访问控制列表,定义需要转换的目标地址为虚拟服务器地址
R3(config)#ip nat pool fwq 192.168.70.31 192.168.70.32 prefix-length 24 type rotary //建立名为fwq的公司内部目标NAT地址池,并将该地址池设置为循环模式
R3(config)#ip nat inside destination list 16 pool fwq //当目标地址与编号为16的访问控制列表相匹配时,转换目标地址为地址池中的IP地址.
上述配置完成后,我们以外网终端计算机PC1为例,首先使用Telnet命令分两次远程访问公司虚拟服务器(IP地址为:211.67.200.32/24) ,以查看公司内网资源服务器A、B之间是否实现流量负载均衡.其次,使用Show ip nat trans命令,查看路由器R3的NAT表.
1) 使用Telnet命令进行首次测试
R4#telnet 211.67.200.32
Trying 211.67.200.32 ... Open
User Access Verification
Password:
R1>exit //成功登录路由器R1
[Connection to 211.67.200.32 closed by foreign host]
2) 使用TELNET命令进行再次测试
R4#telnet 211.67.200.32
Trying 211.67.200.32 ... Open
User Access Verification
Password:
R2>exit //成功登录路由器R2
[Connection to 211.67.200.32 closed by foreign host]
3)路由器R3的NAT表
R3#show ip nat tran
Pro Inside global Inside local Outside local Outside global
tcp 211.67.200.32:23 192.168.70.31:23 211.67.200.3:42343 211.67.200.3:42343
tcp 211.67.200.32:23 192.168.70.32:23 211.67.200.3:27012 211.67.200.3:27012
通过上述测试可以得出以下结论:在路由器R3中应用反向NAT技术后,成功实现了公司内网资源服务器流量负载均衡,即当外网终端计算机PC1首次远程访问公司虚拟服务器时,由路由器R1负责响应PC1的访问请求(此时从路由器R3的NAT表中可以看到,存在一条协议类型为“tcp”,内部全局地址为虚拟服务器IP地址,内部本地地址为路由器R1地址的NAT地址转换条目).当其再次远程访问公司虚拟服务器时,则由路由器R2负责响应PC1的访问请求(此时从路由器R3的NAT表中可以看到,存在一条协议类型为“tcp”,内部全局地址为虚拟服务器IP地址,内部本地地址为路由器R2地址的NAT地址转换条目).
现今NAT技术在实践中已广泛应用,它不仅可以解决IPv4地址不足的问题,而且还可以使网络设计更为灵活便捷,有效减少配置过程.但是NAT技术也并非完美,例如NAT设备无法处理嵌入式的IP或端口、某些P2P程序在NAT后无法正常工作等不足.因此,网络技术人员在应用NAT技术时一定要深入细致地做好前期规划.