第17章 网络地址转换(NAT)

第17章 网络地址转换(NAT)完成本章内容以后,您将能够: ①了解地址转换(NAT)的作用和工作原理②了解各种NAT 术语③理解NAT 的各种应用:负载均衡和处理地址交叉 ④掌握NAT 的配置和排

第17章 网络地址转换(NAT)

完成本章内容以后,您将能够: ①了解地址转换(NAT)的作用和工作原理

②了解各种NAT 术语

③理解NAT 的各种应用:负载均衡和处理地址交叉 ④掌握NAT 的配置和排错

441

,

第17章 网络地址转换(NAT)

随着接入因特网的计算机数量的不断猛增,IP 地址资源也就愈加显得捉襟见肘。事实上,一般用户几乎申请不到整段的公网C 类地址。在ISP 那里,即使是拥有几百台计算机的大型局域网用户,也不过只有几个或十几个公网IP 地址。显然,当他们申请公网IP 地址 时,所分配的地址数量远远不能满足网络用户的需求,为了解决这个问题,就产生了网络地址转换NAT(Network Address Translation)技术。

NAT技术允许使用私有IP 地址的企业局域网可以透明地连接到像因特网这样的公用网络上,无需内部主机拥有注册的并且是越来越缺乏的公网IP 地址,从而节约公网IP 地址资 源,增加了企业局域网内部IP 地址划分的灵活性。

之前学习的交换和路由技术使我们能够组建企业网络,在本章,我们就将学习有关NAT 的概念和配置方法。学习完本章之后,将能够理解NAT 的工作原理和对NAT 进行配置,使企业网络能够在申请不到足够的合法公网IP 地址的情况下,也依然能够连接到因特网上,并对一般的NAT 故障进行检查与排除。

17.1 NAT 概念和术语

17.1.1 NA T 概述

1.NA T 的应用

网络地址转换(Network Address Translation,NAT) 通过将内部网络的私有IP 地址翻译成全球唯一的公网IP 地址,使内部网络可以连接到互联网等外部网络上,广泛应用于各种类型因特网接入方式和各种类型的网络中。原因很简单,NAT 不仅解决了IP 地址不足的问题,而且还能够隐藏内部网络的细节,避免来自网络外部的攻击,起到一定的安全作用。

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

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

NAT将自动修改IP 包头中的源IP 地址和目的IP 地址,IP 地址校验则在NAT 处理过程中自动完成。有一些应用程序将源IP 地址嵌入到IP 数据包的数据部分中,所以还需要同时对数据部分进行修改,以匹配IP 头中已经修改过的源IP 地址。否则,在包的数据部分嵌入了IP 地址的应用程序不能正常工作。令人遗憾的是,Cisco 的NAT 虽然可以处理很多应用,但它还是有一些应用无法支持。

2.NA T 的实现方式

NAT 的实现方式有3种:

◇静态转换(Static Translation)

◇动态转换(Dynamic Translation)

◇端口多路复用(Port Address Translation,PAT)

442

,

第17章 网络地址转换(NAT)

静态转换就是将内部网络的私有IP 地址转换为公有合法的IP 地址时,IP 地址的对应关系是一对一的,是不变的,即某个私有IP 地址只转换为某个固定的公有IP 地址。借助于静态转换,能实现外部网络对内部网络中某些特定设备(如服务器) 的访问。

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

端口多路复用是改变外出数据包的源IP 地址和源端口并进行端口转换,即端口地址转换采用端口多路复用方式。内部网络的所有主机均可共享一个合法外部IP 地址实现因特网的访问,从而可以最大限度地节约IP 地址资源。同时,又可以隐藏网络内部的所有主机,以有效地避免来自因特网的攻击。因此,目前网络中使用最多的就是端口多路复用方式。

17.1.2 NA T 的术语

前面曾经说明,目前IP 地址缺乏是公用网络所面临的一个关键问题,为能最大限度地利用用户的合法IP 地址,产生了NAT 技术。

NAT 功能可以让使用私有(保留) 地址的网络与公用网络(如因特网) 进行连接。使用私有地址的“内部”网络通过NAT 路由器发送数据包时,私有地址被转换成合法的IP 地址,因此,这些数据包可以发送到诸如因特网这样的公用网络上。以前只有防火墙拥有这些功能,现在,路由器基本都拥有该功能。

图17.1展示了一个用NAT 处理地址交叉的实例,从这个例子可以很好地说明NAT 的工作过程和所使用的各种地址术语。在这个实例中,原来两个独立的网络要合并,如图17.2所示,A 公司和B 公司进行合并,组成了AB 公司。遗憾的是,当初建设A 公司和B 公司的网络时,网络设计者都使用了10.1.1.0这个地址空间。因此,会存在很多A 公司的网络设备与B 公司网络设备配置有相同IP 地址的情况,即发生了地址的交叉。

图17.1 NA T 示例

443

,

第17章 网络地址转换(NAT)

图17.2 公司合并导致IP 地址冲突

对于这些情况,最好的解决办法就是重新规划这个合并的网络。不过,这个重新分配地址的过程相当麻烦。NAT 可以作为连接两个网络的过渡方案,对地址交叉的情况进行转换处理,直到IP 地址完成重新分配计划。

------------------------------------------------------------------------------- 提示:在上面这种应用中,NAT 被当作过渡方案。在一个网络中允许地址冲突是不得已的选择。这将给维护和配置带来很多麻烦。

-------------------------------------------------------------------------------

主机A 所在的内部子网和外部子网使用相同的IP 地址段,因此内部子网和外部子网通信时必须进行地址的转换。主机A 的内部局部地址10.1.1.1必须转换成内部全局地址192.2.2.1才能访问外部子网,而外部子网的主机B 的外部全局地址10.1.1.1也只有转换成外部局部地址193.3.3.1,才能够被主机A 所识别,两者之间的通信才能建立起来。

对于在内部主机A 和外部主机B 之间传输的每个数据包,边界路由器都会进行检查:

◇对于到内部区域的数据包,会用内部局部地址替换目的地址,外部局部地址替换源地址。

◇对于到外部区域的数据包,会用内部全局地址替换源地址,外部全局地址替换目的地址。

也就是说,边界路由器为了避免地址的重叠,在这里做了两个方向的地址转换。

结合这个实例,来介绍NA T 的一些相关术语:

◇内部局部IP 地址(inside local IP address):在内部网络中分配给主机的私有IP 地址。该地址是从RFC 1918(私有因特网空间地址分配) 所定义的私有地址空间中分配的,或者随机挑选的。

◇内部全局IP 地址(inside global IP address):一个合法的IP 地址(由NIC 或者网络服务提供商所分配) 。它对外代表一个或多个内部局部IP 地址。该地址通常是从全球统一可寻址的地址空间中分配的,一般由因特网服务提供商(ISP)提供。

◇外部全局IP 地址(outside global IP address) :由其所有者给外部网络上的主机分配的IP 地址。该地址通常也是从全球统一可寻址的地址空间中分配的。

444

,

第17章 网络地址转换(NAT)

◇外部局部IP 地址(outside local IP address):外部主机表现在内部网络的IP 地址。这一地址是从内部可寻址的地址空间中分配的,很可能是从诸如RFCl918中所定义的保留地址空间中分配的。

◇简单转换条目(simple translation entry) :将一个IP 地址映射到另一个IP 地址的转换条目。

◇扩展转换条目(extended translation entry) :映射IP 地址和端口到另一对IP 地址和端口的条目。

可以考虑这样一个例子,我们出门的时候穿皮鞋,回到家里就要换上拖鞋,而且家里还要专门为来访的客人准备一双拖鞋,客人来了也需要脱下皮鞋换上拖鞋。

其实,NAT 地址转换就好像这个过程,这些地址就是我们穿的鞋子。内部局部地址就是我们回家之后在家里穿的拖鞋,只能在家里穿不能穿出门,而内部全局地址则是我们出门要穿的皮鞋,出门换上进家脱下来;外部地址就是来家里拜访的客人所穿的鞋子,外部全局地址是客人穿来的皮鞋,到了我们家里要换上我们专门为他准备的拖鞋——外部局部地址,而客人离开的时候,就得换回他自己的皮鞋才能出门。其中,我们自己的皮鞋和客人的皮鞋不能混穿,我们自己的拖鞋和客人的拖鞋不能混穿。这就是4种类型的地址之间的关系。

17.1.3 NA T 的优势和缺点

NA T 的典型优势如下:

◇NAT 允许企业内部网使用私有地址,并通过设置合法地址集,使内部网可以与因特网进行通信,从而达到节省合法注册地址的目的。

◇NAT 可以减少规划地址集时地址重叠情况的发生。如果地址方案最初是在私有网络中建立的,因为它不与外部网络通信,所以有可能使用了保留地址以外的地址,而后来,该网络又想要连接到公用网络。在这种情况下,如果不做地址转换,就会产生地址冲突。

◇NAT 增强了内部网络与公用网络连接时的灵活性。它可以通过使用多地址集、备份地址集和负载分担/均衡地址集,来确保可靠的公用网络连接。对于网络设计者来说,内部网络的设计也会变得比较容易,因为做地址规划时可以有更多的灵活性。

◇NAT 支持地址重叠。将私有网络地址转换为公用网络地址,一般需要对原地址重新设置地址,所需的工作量与需要设置新地址的主机数有关。如果使用NAT 技术,就可以不对原私有网络内部的地址进行改动,同时,还可以对外部网络支持新的公用地址方案。

当然,NAT 也不是没有缺点。用于地址转换的处理过程会带来功能和性能上的一些损失,特别在IP 包头外包含着发送IP 地址信息的任何协议或者应用的情况下。

NA T 典型缺点如下:

◇NAT 会使延迟增大。因为要转换每个数据包报头中的IP 地址,自然就会增加包转发时延。又因为现在应用NAT 技术时,路由器只能用处理器交换方式进行包转发,所以,运

445

,

第17章 网络地址转换(NAT)

行性能也是要考虑的一个方面。CPU 必须查看每一个数据包,以决定是否要进行地址转换,然后改变IP 包头,甚至TCP 头,这一过程不太可能轻易地利用高速缓存。

◇NAT 增加了配置和排错的复杂性。使用和实施NAT 时,无法实现对IP 包端对端的路径跟踪。在经过了使用NAT 地址转换的多跳之后,对数据包的路径跟踪将变得十分困难。然而,这样却可以提供更安全的网络链路,因为黑客想要跟踪或获得数据包的初始来源或目的地址也将变得非常困难,甚至无法获得。

◇NAT 也可能会使某些需要使用内嵌IP 地址的应用不能正常工作,因为它隐藏了端到端的IP 地址。某些直接使用IP 地址而不通过合法域名进行寻址的应用,可能也无法与外部网络资源进行通信,这个问题有时可以通过实施静态NAT 映射来避免。

17.2 NAT 的应用

17.2.1 NA T 支持的数据流

对于通过NAT 发送数据包的终端系统来说,NAT 应该是半透明的。但很多应用(商业应用,或者作为TCP/IP协议集一部分的应用) 都使用IP 地址,数据字段的信息可能与IP 地址有关,或者数据字段中内嵌IP 地址。如果NAT 转换了IP 包数据部分中的地址,但不知道对数据将要造成的影响,该应用就有可能被破坏。

表17-1列出了Cisco NAT 设备所支持的应用。对应列出了在应用数据中携带IP 地址信息的应用,NAT 知道这些应用,并且会对这些应用的数据给予适当修改。

表17-1 NAT支持的数据流

17.2.2 转换内部LAN 的地址

使用NAT 转换内部局部地址,就是在内部局部地址和内部全局地址之间建立一个映射关系。在下面的例子中,内部局域网网段的地址10.1.1.0/24经过NAT ,转换成192.168.2.0/24的内部全局地址。

446

,

第17章 网络地址转换(NAT)

在图17.3中,NAT 用于将内部私有地址转换为外部合法地址,从中可以看到NAT 的 操作运行过程。

图17.3 内部地址转换过程

下面的步骤编号与图17.3中标出的NAT 操作步骤编号是一致的:

(1)网络内部主机10.1.1.1上的用户建立到外部主机B 的一条连接。

(2)边界路由器从主机10.1.1.1接收到第一个数据包时,将检查NAT 转换表。

(3)如果已为该地址配置了静态地址转换,或者,该地址的动态地址转换已经建立,那么,路由器将继续进行步骤4。否则,路由器会决定对该地址10.1.1.1进行转换;路由器将为其从动态地址集中分配一个合法地址,并建立从内部局部地址10.1.1.1到内部全局地址(例如192.168.2.2) 的映射。这种类型的转换条目称为一个简单条目。

(4)边界路由器用所选的内部全局地址192.168.2.2来替换内部局部IP 地址10.1.1.1, 并转发该数据包。

(5)主机B 收到该数据包,并且用目的地址192.168.2.2对内部主机10.1.1.1进行应答。

(6)当边界路由器接收到目的地址为内部全局地址的数据包时,路由器将用该内部全局地址通过NAT 转换表查找出内部局部地址。然后,路由器将数据包中的目的地址替换成10.1.1.1的内部局部地址,并将数据包转发到内部主机10.1.1.1。主机10.1.1.1接收该数据包,并继续该会话。对于每个数据包,路由器都将执行步骤2到步骤5的操作。

17.2.3 复用内部LAN 的地址(PAT)

复用内部的全局地址,就是通过准许对TCP 连接或UDP 会话的端口进行转换,从而节省内部全局地址集中的合法地址。前面已经介绍,当多个不同的内部局部地址映射到同一个内部全局地址时,使用各个内部主机的TCP 或UDP 端口号来区分它们。

447

,

第17章 网络地址转换(NAT)

在图17.4中,将一个内部全局地址用于同时代表多个内部局部地址,这里示意了NAT 的操作运行过程。图中,将内部局部地址1O.1.1.0/24复用到192.168.2.2这个地址上。在这种情况下,NAT 将采用扩展的转换条目表。在该表中,IP 地址和端口号的组合可以唯一地 区分各个内部主机。用端口来区分内部主机,实际上就是端口地址转换(PAT),PAT 是NAT 的一个子集。

图17.4 地址复用

下面所列的步骤与图17.3中的NAT 操作步骤编号是一致的:

(1)网络内部主机10.1.1.1上的用户建立到外部主机B 的一条连接。

(2)边界路由器从内部主机10.1.1.1接收到第一个数据包时,会检查其NAT 转换表。

(3)如果还没有为该内部地址建立地址转换映射,路由器会决定对该地址进行转换;路由器为该内部局部地址10.1.1.1建立到内部全局合法地址(如192.168.2.2) 的映射。

(4)如果启用了地址复用功能,而且已经有其他地址转换映射存在,那么,路由器将再次启用内部全局地址192.168.2.2,为该内部局部地址建立映射。同时会为该映射与其他转换条目进行区分而保留足够的信息。这种类型的转换条目(包含IP 地址和端口号) 称为扩展条目。

(5)边界路由器用所选的内部全局地址192.168.2.2来替换内部局部IP 地址1O .1.1.1, 并转发该数据包。

(6)主机B 收到该数据包,并用目的地址192.168.2.2来对内部主机1O.1.1.1进行应答。

(7)当边界路由器接收到目的地址为内部全局IP 地址的数据包时,路由器将用内部全局地址及协议端口号和外部地址及端口号,从NAT 转换表中查找出对应的内部局部地址和端口号。然后将目的地址转换成内部局部地址1O.1.1.1,并将数据包转发到该内部主机。主机1O.1.1.1接收数据包并继续该会话。对于每个数据包,路由器都将执行步骤2和5的操作。

448

,

第17章 网络地址转换(NAT)

17.2.4 TCP 负载均衡

TCP 负载均衡是指利用NAT 技术,用对外的IP 地址来代表多个同样的服务器,就如同它们是一个服务器一样。在图17.5中,外部设备需要连接一个地址为10.1.1.127的服务器,TCP 的数据包发送给一个服务器组,该服务器组由同一个IP 地址10.1.1.127所代表,NAT 通过循环方式轮流转换为3个相同服务器的实际地址。实际上,在内部有3个与之相对应的服务器,NAT 以循环方式轮流在它们之间分配会话。

在图17.5中,NAT 用来将一台虚拟主机映射到几台真实的主机上,利用NAT 实现TCP 负载均衡的操作运行过程。

下列步骤详细说明了如何利用NAT 来实现TCP 负载均衡。

(1)外部主机B(172.20.7.3)上的用户建立一条到虚拟主机10.1.1.127的连接。

图17.5 基于NA T 的TCP 负载均衡

(2)边界路由器接到这个连接请求,为其建立一个新的地址映射:为该内部全局IP 地址10.1.1.127分配下一个真实内部主机地址(如10.1.1.1) 。

(3)边界路由器用所选的真实内部主机地址替换原目的地址,并转发该数据包。

(4)内部主机10.1.1.1接收到该数据包,并做出应答。

(5)边界路由器接收到应答数据包,用内部局部地址及端口号和外部地址及端口号,从NAT 转换表查找出对应的内部全局地址(虚拟主机地址) 和端口号,然后将源地址转换成虚拟主机地址,并转发数据包。

(6)对于下一个连接请求,边界路由器将为其分配另一个内部局部地址,如10.1.1.2。

449

,

第17章 网络地址转换(NAT)

------------------------------------------------------------------------------- 提示:基于NAT 的负载均衡是不健壮的。NAT 没有办法知道一个服务器什么时候会停机。即使某台服务器已经停机,NAT 也是继续将数据包发送给那个地址。因此,当服务器出现故障或者离线时,就会导致发送给这个服务器的数据包出现黑洞效应。

-------------------------------------------------------------------------------

17.3 NAT 的配置

在配置网络地址转换过程之前,首先必须弄清楚内部接口和外部接口,以及在哪个外部接口上启用NAT 。通常情况下,连接到用户内部网络的接口是NAT 内部接口,而连接到外部网络(如因特网) 的接口是NAT 外部接口。

17.3.1 静态NA T 的配置

下面通过示例说明静态NAT 的配置。假设内部局域网使用的IP 地址为192.168.100.1~192.168.100.254,路由器局域网端口(默认网关) 的IP 地址是192.168.100.1,子网掩码为255.255.255.0。

网络分配的合法IP 地址范围是61.159.62.128--61.159.62.135,路由器在广域网的地址是61.159.62.129,子网掩码是255.255.255.248。

可用于地址转换的地址是61.159.62.130~61.159.62.134,如图17.6和图17.7所示。

图17.6 NA T 静态转换网络结构示意

450

标签: