Internet 上的每台主机都需要有一个唯一合法的 IP 地址,随着网络技术的发展,接入 Internet 主机的数量越来越多,而可分配的 IP 地址越来越少,日益增多的 Internet 主机和日益减少的可分配 IP 地址之间的矛盾越来越突出。
NAT 技术解决了这些矛盾,NAT 全称是 Network Address Translation,中文意思是“网络地址 转换”。它解决问题的办法是在内部网络中使用内部地址(私有地址),通过 NAT 把内部地址翻译 成合法的 IP 地址(公网地址)在 Internet 上使用。
本节的拓扑环境如图 11-14 所示,10.x.x.x 为企业内部私有地址,172.16.x.x 为公网地址,企业 从 ISP 申请的公网地址范围是 172.16.1.11-13/24。
▲图 11-14 本节的拓扑环境 服务器 SW
Server11
Server1 内网区 SW
互联网 SW GW
ISP 企业申请的公网地址:
172.16.1.11-13/24
11Chapter
11.4.1 NAT 概述
NAT 就像办公室中的前台接待员,客户拨打你单位的总机号码给前台的接待员并告诉接待员 他找谁时,接待员会检查分机列表,该列表显示了与你的名字相对应的分机号,之后将它转接到你 的分机。当你使用分机打电话给外面的客户时,经过前台由单位的总机号码将呼叫信息传送出去,
呼叫接通后客户的电话也只显示你单位的总机号码。
启用 NAT 的设备保留一个或多个有效公网地址供网络外部访问使用。当客户端发送数据包到 网络外部时,NAT 将客户端的内部私有 IP 地址转换为外部公网 IP 地址。对于外部用户来说,所有 进出网络的流量均具有相同的 IP 地址或地址池。NAT 一般部署在企业网络边界的设备上,如路由 器或防火墙等。
NAT 有很多用途,但最主要的用途是让网络能使用私有 IP 地址以节省地址。NAT 将不可路 由的私有内部地址转换成可路由的公有地址。NAT 还能在一定程度上增加网络的私密性和安全性,
因为它对外部网络隐藏了内部地址。
11.4.2 NAT 术语
结合如图 11-15 所示的通信过程,本节在讨论 NAT 时使用下列术语:
▲图 11-15 NAT 通信过程
内部本地地址(Inside Local):企业内部主机使用的 IP 地址,公网上不可路由,一般使 用 RFC 1918 中定义的私有地址,图中 PC21 使用的是私有地址。
内部全局地址(Inside Global):当内部主机流量流出 NAT 路由器时分配给内部主机的 公有地址。当来自 PC21 的流量发往服务器 Server1 172.16.2.1 时,路由器 GW 必须进行 地址转换,GW 的公网地址池是 172.16.1.11-13,GW 会将其源地址转换为公网地址池中 的一个地址,如 172.16.1.12,这就是内部全局地址。
外部全局地址(Outside Global):分配给 Internet 上主机的可达 IP 地址,也是内部主机 访问 Internet 设备的目的地址,如图中 Server1 从内部网络的角度来看,外部全局地址为 172.16.2.1,它收到企业内部主机发送数据包的源地址是 172.16.1.12。
外部本地地址(Outside Local):分配给外部网络上主机的本地 IP 地址。大多数情况下,
此地址与外部设备的外部全局地址相同。
注意:本节中将使用内部本地地址、内部全局地址和外部全局地址,外部本地地 址的使用超出了本书的范围。
11.4.3 NAT 的类型和设置
下面介绍 NAT 的三种类型:静态 NAT、动态 NAT 和 PAT。
11 Chapter
GW#show ip nat translations
Pro Inside Global Inside Local Outside Local Outside Global --- 172.16.1.11 10.1.0.11 --- ---
也可以在 GW 上执行 debug ip nat 命令来观察 NAT 的转换过程,然后在 PC2 上 ping 172.16.1.11
(Server11 的内部全局地址),可以看到如下信息:
GW#debug ip nat IP NAT debugging is on
*May 18 20:16:21.355: NAT*: s=172.16.2.2, d=172.16.1.11->10.1.0.11 [23887]
---对 ICMP 请求报文的源地址进行 NAT 转换---
*May 18 20:16:21.415: NAT*: s=10.1.0.11->172.16.1.11, d=172.16.2.2 [23887]
---对 ICMP 响应报文的目的地址进行 NAT 转换---
GW(config)#access-list 2 permit 10.2.0.0 0.0.0.255
---通过 ACL 定义哪些内部本地地址可以用于 NAT 的转换---
GW(config)#ip nat pool TEST 172.16.1.12 172.16.1.13 netmask 255.255.255.0 ---用于 NAT 的公网地址池,即内部全局地址---
GW(config)#ip nat inside source list 2 pool TEST ---用于将内部本地地址和内部全局地址关联起来---
11Chapter
我们依次从 PC21、PC22、PC23 去访问 Internet 上的服务器 Server1(IP:172.16.2.1),会发现 PC21 和 PC22 能够正常访问,PC23 访问超时,使用 show ip nat translations 来验证 NAT 的表项,
显示如下:
GW#show ip nat translations
Pro Inside Global Inside Local Outside Local Outside Global
GW(config)#access-list 2 permit 10.2.0.0 0.0.0.255
---通过 ACL 定义哪些内部本地地址可以用于 NAT 的转换---
GW(config)#ip nat pool TEST 172.16.1.12 172.16.1.13 netmask 255.255.255.0 ---用于 NAT 的公网地址池,即内部全局地址---
GW(config)#ip nat inside source list 2 pool TEST overload
---将内部本地地址和内部全局地址关联起来,并在转换时记录会话端口---
我们依次从 PC21、PC22、PC23 去访问 Internet 上的服务器 Server1(IP:172.16.2.1),会发现 所有的主机都能正常访问,使用 show ip nat translations 来验证 NAT,显示如下:
GW#show ip nat translations
Pro Inside Global Inside Local Outside Local Outside Global
GW(config)#access-list 2 permit 10.2.0.0 0.0.0.255
11 Chapter
---通过 ACL 定义哪些内部本地地址可以用于 NAT 的转换--- GW(config)#ip nat inside source list 2 interface serial 1/0 overload
---将内部本地地址和外部接口关联,并将该接口地址作为 PAT 时的全局地址,同时在转换时记录会话端口--- GW(config)#interface fastEthernet 0/1
GW(config-if)#ip nat inside ---指定该接口为 NAT 的内网接口--- GW(config-if)#exit
GW(config)#interface serial 1/0
GW(config-if)#ip nat outside ---指定该接口为 NAT 的内网接口--- GW(config-if)#end
我们依次从 PC21、PC22、PC23 去访问 Internet 上的服务器 Server1(IP:172.16.2.1),会发现 所有的主机都能正常访问,使用 show ip nat translations 来验证 NAT,显示如下:
GW#show ip nat translations
Pro Inside Global Inside Local Outside Local Outside Global --- 172.16.1.11 10.1.0.11 --- --- icmp 172.16.1.1:1024 10.2.0.21:1135 172.16.2.1:1135 172.16.2.1:1024 icmp 172.16.1.1:1135 10.2.0.22:1135 172.16.2.1:1135 172.16.2.1:1135 icmp 172.16.1.1:1903 10.2.0.23:1903 172.16.2.1:1903 172.16.2.1:1903 GW#
11.4.4 使用 NAT 实现网络安全
NAT 不仅可以解决 IP 地址紧缺的问题,同时也能将内部网络和外部网络隔离,为网络提供一 定的安全保障,具体体现在以下两个方面:
静态 NAT 的安全特性:可以限定只有特定的服务才能进行 NAT 的转换,从外网来看只 能访问特定的网络服务,而内网访问不受限制,效果上相当于基本的防火墙。
PAT 的安全特性:对外屏蔽了内部网络,使外部网络不能直接对内部网络进行访问,起 到了安全隔离的作用。
如果在规划网络时想要将 172.16.1.11 作为企业服务器 Server11(IP:10.1.0.11)对外提供的 Web 服务,则需要在 GW 上设置静态 NAT,配置过程如下:
GW(config)#ip nat inside source static tcp 10.1.0.11 80 172.16.1.11 80 ---建立内部本地地址与内部全局地址之间的 Web 访问的静态映射--- GW(config)#interface fastEthernet 0/0
GW(config-if)#ip nat inside ---指定该接口为 NAT 的内网接口--- GW(config-if)#exit
GW(config)#interface serial 1/0
GW(config-if)#ip nat outside ---指定该接口为 NAT 的内网接口--- GW(config-if)#end
通过上面的配置,使得从 Internet 上的主机仅能通过 172.16.1.11 访问 Server11 提供的 Web 服 务,而从内网访问 Server11 的一切服务均可自由访问,保证了从外网访问时的安全。