Cisco PT模拟实验(19) 路由器的NAT功能配置

实验目的: 

        掌握NAT网络地址转换的原理及功能

        掌握NAT地址映射和端口映射的配置方法

        掌握广域网(WAN)接入技术的原理

实验背景

        情景一:A公司企业网计划接入互联网,向 ISP申请了一条专线并拥有足够的公有IP地址,现要求在路由器上配置动态NAT,从而实现公司内部主机都能访问外网。同时,为适应公司不断增长的业务需求,公司欲通过Web服务器发布网站,现要求将内网的服务器IP地址映射为固定的全局IP地址,实现外网访问该服务器www服务。 

        情景二:B公司同样计划接入互联网,但只申请了一个公有IP,不足以分配至内网所有主机,要求实现公司内部主机访问外网,且外网能够访问内网服务器的www服务。

技术原理

  • 在互联网中,公有地址用于不同外网之间通信,全球唯一并且能在公网上被路由;而私有地址用于网络内部,对于不同内网,私有地址可重用,但私有地址无法实现不同”外网-内网“或"内网-内网"之间通信,因为私有地址不能被路由。它要与外网通信,必须经过NAT设备(如网关,路由器)。

  • 网络地址转换(NAT,Network Address Translation)属于接入广域网(WAN)技术,是一种将私有IP地址转化为公有IP地址的转换技术,主要用于实现内部网络主机访问外部网络的功能。根据转换方式有基于地址映射(三层技术,双向通信)和基于地址端口映射(四层技术,单向通信)两种,常见NAT类型包括:

    • 静态NAT:将私网中的主机地址永久地、映射为公网中的固定合法IP地址(一对一)。

    • 动态NAT:通过定义一系列的合法公有地址池,将每个内部本地地址动态地、一一映射为合法的内部全局地址。

    • NAPT:将多个内部地址都映射到一个合法公网地址(外网接口或公有地址池),以不同的协议端口号与不同的内部地址相对应(多对一)。

    • 端口映射:通过静态配置,将私网中的主机地址及端口映射为一个固定的公有地址及端口(一对一)。

  • 根据NAT模型定义,可将路由器所连接的网络分别视为内部网络(内网)和外部网络(外网)。注意"内网与外网","私网与公网"的区别;

    • 内部地址和外部地址:分别对应于NAT定义的内部网络和外部网络的所有地址;

    • 本地地址:出现在“某个网络”内部的所有地址,包括内部本地地址(Inside Local)和外部本地地址(Inside Global);   

    • 全局地址:出现在“某个网络”外部的所有地址,包括内部全局地址(Outside Local)和外部全局地址(Outside Global);

  • NAT设备在公网和私网之间扮演代理的角色,其特点有:

    • NAT网关设置在私网到公网的路由出口位置,双向流量必须都要经过NAT网关;

    • 网络访问只能先由私网侧发起,公网无法主动访问私网主机;

    • NAT网关在两个访问方向上完成两次地址的转换或翻译,出方向做源信息替换,入方向做目的信息替换;

    • NAT网关的存在对通信双方是保持透明的;

    • NAT网关为了实现双向翻译的功能,需要维护一张关联表,把会话的信息保存下来

  • 与一般NAT不同,NAPT采用TCP端口多路复用方式,通过不同的协议端口号与不同的内部地址一一对应提供并发性,内网所有主机均可共享一个公有IP地址以实现对Internet的访问。NAPT能最大限度地节约IP地址资源,同时可隐藏内网主机,有效避免来自外网的***,因此被广泛应用于各种类型Internet接入方式和各种类型的网络中,是最常用的NAT类型。

    • NAPT也称“多对一”的NAT、端口地址转换(Port Address Translations, PAT)、地址重载(Address Overloading)

    • 与动态NAT的区别:NAPT相当于“开启了地址重载的动态NAT”,扩展了对TCP和UDP的端口号的转换

    • 优势:能够使用一个全球有效IP地址获得通用性

    • 缺点:其通信仅限于TCP或UDP协议

  • NAT配置基本步骤:①定义NAT内部和外部接口;②定义您想用NAT实现的目标;③配置NAT以实现您在步骤2中所定义的目标;④验证 NAT的运行情况。

      • Cisco命令命令描述
        ip nat inside|outside定义NAT内部接口或外部接口
        ip nat pool {name} {Start IP address} {End IP address}
        定义NAT地址池(内部全局地址)
        ip nat inside source 
        转换正从内部流往外部的 IP 数据包的源;
        转换正从外部流入内部的 IP 数据包的目的。
        ip nat outside source 
        转换正从外部流入内部的 IP 数据包的源;
        转换正从内部流往外部的 IP 数据包的目的。
  • Cisco NAT执行顺序(不同厂商则情况也不同):对于inside->outside,先路由后NAT;对于outside->inside,先NAT后路由;

  • Cisco ACL默认拒绝所有未匹配到规则的数据包,在流量控制方面一般会在规则后添加permit any一项,而在NAT允许列表中则不建议使用 permit any,NAT可能消耗过多路由器资源而引发网络故障。


实验设备:Router-PT 3台;Switch_2960 2台;PC 4台,Server 3台;直通线,交叉线,串口线。

实验拓扑


blob.png

实验步骤:

        新建Cisco PT 拓扑图

        为各PC及Server设置IP及网关地址,其中网关地址分别为路由接口的IP地址

        对各Router进行相关配置(接口IP、默认路由等) —— 对应Router.Part1

        情景一(应用基本的静态、动态NAT技术)

            在Router0上定义内外网络接口

            在Router0上配置静态NAT  —— 对应Router0.Part2.1

            在Router0上配置动态NAT  —— 对应Router0.Part2.2

        情景二(应用静态、动态PAT技术)

            在Router2上定义内外网络接口

            在Router2上配置端口映射  —— 对应Router2.Part2.1

            在Router2上配置NAPT映射  —— 对应Router2.Part2.2

        测试各终端(PC、Server)之间的互通性


# PC0、PC1和Server0 设置
192.168.1.2
192.168.1.3
192.168.1.100
//子网掩码和网关
255.255.255.0
192.168.1.1

# Server1 设置
8.8.8.8
//子网掩码和网关
255.255.255.0
8.8.8.1

# PC2、PC3和Server2 设置
172.16.1.2
172.16.1.3
172.16.1.100
//子网掩码和网关
255.255.255.0
172.16.1.1
/*=Part1  Router0 基本配置  */
Router>enable
Router#conf t
Router(config)#hostname R0
R0(config)#inter f0/0
R0(config-if)#ip address 192.168.1.1 255.255.255.0    //配置f0/0接口
R0(config-if)#no shutdown
R0(config-if)#exit
R0(config)#interface serial 2/0
R0(config-if)#ip address 12.1.1.6 255.255.255.0       //配置s2/0接口
R0(config-if)#no shutdown
R0(config-if)#exit
R0(config)#ip route 0.0.0.0 0.0.0.0 12.1.1.6          //默认向出口下一跳转发
/*=Part2.1  静态NAT配置  */
R0(config)#inter f0/0
R0(config-if)#ip nat inside         //定义内部接口
R0(config-if)#exit  
R0(config)#inter s2/0              
R0(config-if)#ip nat outside        //定义外部接口
R0(config-if)#exit
R0(config)#ip nat inside source static 192.168.1.100 12.1.1.5             //配置静态NAT映射
/*=Part2.2  动态NAT配置  */
//由于各PC无需指定映射固定的公有地址,此处配置为动态NAT
R0(config)#ip nat pool no-pat 12.1.1.1 12.1.1.3 netmask 255.255.255.0     //创建公有地址池no-pat(3个IP)
R0(config)#access-list 7 permit 192.168.1.0 0.0.0.255                     //创建访问列表(应映射的内部网络)
R0(config)#ip nat inside source list 7 pool no-pat                        //将访问列表与公有地址池关联(未启用“地址重载”)
R0#show ip nat translations        //无记录显示
R0#show r
/*=Part1  Router1 基本配置  */
Router>enable
Router#conf t
Router(config)#hostname R1
R1(config)#inter f0/0
R1(config-if)#ip address 8.8.8.1 255.255.255.0     //配置f0/0接口IP
R1(config-if)#no shutdown
R1(config-if)#exit
R1(config)#inter s2/0
R1(config-if)#ip address 12.1.1.6 255.255.255.0    //配置s2/0接口IP
R1(config-if)#clock rate 64000                     //必须配置时钟才可通信
R1(config-if)#no shutdown
R1(config-if)#exit
R1(config)#inter s3/0
R1(config-if)#ip address 23.1.1.2 255.255.255.0    //配置s3/0接口IP
R1(config-if)#clock rate 64000                     //必须配置时钟才可通信
R1(config-if)#no shutdown
R1(config-if)#exit
...
//实际上,企业网管无法对ISP路由器进行配置,且运营商一般不做外部本地地址的路由转发,故此处不做其他相关配置。
/*=Part1  Router2 基本配置  */
Router>enable
Router#conf t
Router(config)#hostname R2
R2(config)#inter f0/0
R2(config-if)#ip address 172.16.1.1 255.255.255.0     //配置f0/0接口
R2(config-if)#no shutdown
R2(config-if)#exit
R2(config)#interface serial 2/0
R2(config-if)#ip address 23.1.1.1 255.255.255.0       //配置s2/0接口
R2(config-if)#no shutdown
R2(config-if)#exit
R2(config)#ip route 0.0.0.0 0.0.0.0 12.1.1.2          //默认向出口下一跳转发
/*=Part2.1  端口映射配置  */
R2(config)#inter f0/0
R2(config-if)#ip nat inside         //定义内部接口
R2(config-if)#exit  
R2(config)#inter s2/0              
R2(config-if)#ip nat outside        //定义外部接口
R2(config-if)#exit
R2(config)#ip nat inside source static tcp 172.16.1.100 80 23.1.1.1 80            //将Server2的内网IP80端口映射到外网IP80端口上
/*=Part2.2  NAPT映射配置  */    
//由于只有一个公网IP,此处将外部映射IP设置为外部接口上的IP
R2(config)#access-list 5 permit 172.16.1.0 0.0.0.255                              //创建访问列表(应映射的内部网络)
R2(config)#ip nat inside source list 5 interface Serial2/0 overload       //将访问列表与接口地址(单个IP)关联(开启“地址重载”)
//命令另一种形式:ip nat inside source list 5 pool xxx overload           //即配置地址池只含1个外网接口的IP地址
R2#show ip nat translations        //无记录显示
R2#show r
#  A企业网 - NAT测试
PC0:ping 8.8.8.8            //外网链路通
PC1:ping 8.8.8.8            //NAT地址映射均成功
访问 http://8.8.8.8         //访问成功,映射地址固定不变
# Router0 查看映射表
show ip nat translations          //有NAT映射记录显示,每台内网主机对应一个公有IP
#  B企业网 - NAT测试
PC2:ping 8.8.8.8            //外网链路通
PC3:ping 8.8.8.8            //NAT端口映射均成功
访问 http://8.8.8.8         //访问成功
# Router2 查看映射表
show ip nat translations          //有记录显示,所有内网主机对应公有IP的随机端口,内网主机被隐藏


后记:关于以上四种NAT类型,个人认为从功能实现上是一个相对合理的划分(即基于三层的地址映射、基于四层的端口映射两种,又分别再细分为静态和动态分配),但这种划分在国内文章并不多见,词条命名是杂乱不统一,甚至概念混淆,如部分文章将NAPT与端口映射(静态)区分开。如果对NAT技术有较为深入研究或有了解的权威文献,欢迎留言,谢谢




实验环境: Windows 10,Cisco PT 7.0

参考资料:CCNA学习指南(第7版)

RFC 3022 - Traditional IP Network Address Translator

NAT详解:基本原理、穿越技术(P2P打洞)、端口老化等