你不一定真正理解的NAT基本结构和分类
NAT就像一个大办公室的接线员。假设你已告诉了接线员,除了你希望的来电(相当于源IP地址必须是所配置的全局地址的数据包),其它来电一律不要转进来。一天,你打了一个客户电话,而恰好客户当时不在,你就把你们公司的前台电话信息告诉了对方接电话的人员,请她转告给那个客户,并让她回电话给你。然后你告诉你们公司的前台,说如果该客户打电话给他,请她把电话转进来。该客户在获知了你打电话找他,并且获知你要他找电话找你时,在某一时间直接打电话到你留言下的公司前台电话(这是他所知道的你的唯一电话,相当于NAT中的全局地址)。当该客户告诉前台他要找你时,前台验证了了客户身份,确认是你想要接的电话后把电话转给了你。
如图6-1所示的是NAT地址转换网络结构,在其中起关键作用的当然是提供NAT服务的网络设备,通常是路由器(也可以是其他三层设备,如三层交换机和防火墙等)。它通过两个接口连接内、外两个网络。内部网络(Inside Network)就是用户当前所在网络,通常是指用户私有局域网,而外部网络(Outside Network)是指内部网络以外的其他所有网络,一般是指Internet。
图6-1 NAT基本网络结构
下面是与Cisco NAT技术密切相关的几个术语描述,这对理解NAT技术工作原理非常重要。
l 内部网络(Internal Network)
“内部网络”通常是指一个边缘局域网,使用内部网络IP地址,尽管它也可以是注册的公网IP地址,但更多的是非注册的私网IP地址。使用非注册IP地址的所有计算机都必须使用NAT转换后再与公网(如互联网)进行通信的;在内部网络中使用注册的公网IP地址的主机,也是需要经过NAT转换后才能对互联网进行访问的。所以,内部网络的IP地址都必须经过路由器的NAT转换才能访问外部网络。
把NAT路由器上连接内部网络的接口,称之为“内部接口”(Inside Interface)。
l 外部网络(External Network)
“外部网络”是除本地私有网络以外的所有其他网络,通常是指互联网。当然,外部网络也可以是其他私有网络,如两个局域网通过路由器相连的情况下。所以外部网络上的用户使用IP地址同样既可以是注册的,也可以是非注册的。
把NAT路由器上连接外部网络的接口,称之为“外部接口”(Ouside Interface)。
【经验之谈】其实“内部网络”与“外部网络”只是相对定义的,它是相对你当前所在的网络的而言的,如果你换到另一方网络去配置(在路由器连接的是两个局域网的情况下),这时内、外部网络的角色就要互换了。
在Cisco设备NAT技术中定义了“本地地址”(local address)和“全局地址”(global address)两大类。“本地地址”又可以分为“内部本地地址”(Inside local address)和“外部本地地址”(Outside local address)两类,但是它们都是针对本地内部网络而言的,也就是都是位于内部网络一侧;同样,“全局地址”也分为“内部全局地址”(Inside global address)和“外部全局地址”(Outside global address)两类,但它们都是针对外部网络而言的,也即都是位于外部网络一侧。这里要特别注意!
这四类IP地址在NAT上的转换基本过程(仅考虑“源IP地址转换”时)是:从内部网络访问外部网络时,是把“内部本地地址”转换成“内部全局地址”,而由外部网络访问内部网络时,是把“外部全局地址”转换成“外部本地址”。它们在内、外部网络中的位置,以及转换方式如图6-1所示。下面具体介绍这四类IP地址。
图6-2 Cisco设备中四种NAT IP地址的位置示意图
l 内部本地地址(Inside local address)
内部本地地址是指分配给内部网络主机的IP地址。这个IP地址是计算机操作系统,或诸如DHCP之类的服务进行分配的,但既可以是仅限于内部局域网使用的私有非注册IP地址,也可以是由ISP统一分配的注册IP地址,但它们都是在内部网络使用的。通常是指专用网络使用的非注册IP地址。
l 内部全局地址(Inside global address)
“内部全局地址”是内部网络主机对外部网络用户呈现的外部网络IP地址(可以是分配给路由器连接外部网络的接口的IP地址),是内部主机访问外部网络的合法IP地址,位于外部网络一侧。通常它是由ISP分配给内部网络用户使用的公网注册IP地址(连接互联网时),但也可以是服务提供商分配、在本地注册的私网IP地址(连接其它非互联网的外部网络时)。通过NAT转换后,对于外部网络来说,它们扮演的是一个或多个内部本地址IP地址,以便与外部网络通信。
l 外部本地地址(Outside local address)
“外部本地地址”是外部网络主机对内部网络用户中呈现的内部网络IP地址(可以是分配给路由器连接内部网络的接口的IP地址),位于内部网络一侧。
l 外部全局地址(Outside global address)
“外部全局地址”是分配给外部网络主机的合法IP地址。如果是互联网,则它是互联网合法的公网IP地址;如果是其它局域网,则也可是私网IP地址。但NAT主要应用于企业内部局域网与互联网的连接,所以这里的“外部全局地址”通常是指公网IP地址。
【注意】以上介绍的内部全局地址可以与外部网络用户的外部全局地址不在同一网段,可以是NAT路由器上的一个虚拟子网地址,但多数情况下内部全局地址是与外部网络用户的外部全局地址在同一网段的。同样,外部本地地址也可以与内部网络用户的内部本地地址不在同一网段,也可以仅是NAT路由器上一个虚拟子网,但多数情况下外部本地地址是与内部网络用户的内部本地地址在同一网段的。如果不在同一网段,则需要配置由内部全局地址到外部全局地址,或者由外部本地地址到内部本地地址所在网段的路由。
6.1.4 Cisco NAT类型
NAT就是通过配置内、外部网络IP地址的映射关系来实现内、外部网络IP地址的相互转换。这种内、外部网络IP地址的映射关系可以是静态的,也就是固定的,一个对应一个,也可以是动态的,也就是所映射的IP地址不是固定的,但一定是所配置的映射IP地址池中的一个。只要你在NAT路由器上配置了某组IP地址映射关系,则当路由器接收到数据包后,就会把包中的对应IP地址转换成所映射的IP地址,可以是数据包中的源IP地址,也可以是目的IP地址,当然也可以源IP地址和目的IP地址同时转换,只要在NAT路由器中已配置了相应的IP地址映射即可。
在Cisco NAT路由器中可以配置多种形式的NAT地址转换,但总体来说就是两种:静态NAT和动态NAT。在动态NAT中又有一种特殊的NAT形式,那就是重载(Overloading)NAT,也就是通常所说的PAT(端口地址转换)。而还有一种针对内部网络中也使用公网注册IP地址的这种特定网络配置情形的NAT转换形式,也就是后面将要介绍的重叠(Overlapping)NAT。它既可以静态NAT方式部署,也可以动态NAT方式部署。下面具体介绍这种Cisco NAT类型。
l 静态NAT(Static NAT)
静态NAT是把非注册IP地址(如本地局域网IP地址)一对一地静态映射到公网注册IP地址(如互联网IP地址)。这在需要外网用户可以访问内网络设备(如位于内部网络中的各种服务器)时所必需配置的。这些服务器私网IP地址所映射的公网IP地址就是这些服务器发布到外部网络的IP地址,外网用户是直接通过这些公网IP地址对内部网络中的服务器进行访问的,只是最终会通过NAT的IP地址转换访问到位于内部网络中的服务器。
如图6-5显示的是一个静态NAT IP地址映射示例。路由器内、外两个网络,左侧内部网络中的192.168.32.10、192.168.32.12和192.168.32.15这三台服务器使用的私有网络IP地址,通过路由器的NAT功能最终对应转换成213.18.123.110、213.18.123.11和213.18.123.12这三个公网IP地址,让对方看到的也是这三个公网IP地址。这样外网用户只需要访问这三个公网IP地址就可以访问到这三台服务器了。
图6-5 静态NAT IP地址映射示例
l 动态NAT(Dynamic NAT)
动态NAT是把一个非注册IP地址动态地映射到一个注册IP地址池中的一个地址。具体映射是哪两组IP地址之间的映射关系,还要看所配置的具体公用IP地址池和通信时间。但最终非注册IP地址与注册IP地址还是一对一地进行映射。
图6-6是一个动态NAT IP地址映射示例。内网中的三个IP地址与一个范围为213.18.123.100 到213.18.123.150的公网IP地址池进行动态映射。最终的结果是,192.168.32.10映射为213.18.123.116,192.168.32.12映射为213.18.123.112,而192.168.32.15映射为213.18.123.125,……。
l 重载或复用(Overloading)NAT
重载NAT是动态NAT的一种形式。它是通过与IP地址的不同端口组合,把多个非注册IP地址映射到一个注册IP地址,也就是Cisco设备中通常所说的“PAT”(Port Address Translation,端口地址转换),在华为和H3C设备中称之为NAPT(Network Address Port Translation,网络地址端口转换)。通过PAT,则许多内网用户都可以仅通过一个公网IP地址访问Internet。这是宽带路由器和代理服务器通过NAT实现整个公司局域网用户共享上网的最典型应用。
图6-7是一个PAT的应用示例。示例中内部网络中的所有用户通过路由器访问公用网络时,都将映射成同一个公网IP地址——213.18.123.100,只是所使用的端口不同而已(分别为101、102、103号端口)。这同时对于那些公网IP地址比较紧张,而公司内部网络中又部署了多种应用服务器时特别有用,可以通过一个公网IP地址配置多个应用服务器,使外网用户通过一个公网IP地址加上对应的端口号就可以访问到内部网络的多个服务器。
图6-7 PAT IP地址映射示例
l 重叠(Overlapping)NAT
当内部网络和外部网络使用相同网段的IP地址(也就是通常所说的在重叠网络中,如都使用了公网IP地址,或者都使用了像192.168.10/24这一个网段的IP地址),如果仍采用前面说到的常规NAT IP地址转换方式,则转换后的IP地址可能潜在与对方网络中主机使用的IP地址相冲突。
为了解决这一问题,需要对内、外部网络中的IP地址同时进行转换,即把发往外部网络中的数据包中的“源IP地址”由原来的“内部本地地址”转换成与外部网络不在同一网段的IP地址作为“内部全局地址”,同时把来自外部网络的数据包中的“目的IP地址”则原来的“内部全局地址”转换成与内部网络不在同一网段的“内部本地地址”。也就是对“内部本地地址”和“内部全局地址”进行双向映射。但这个所映射的内部全部地址和外部全局地址所在网段也不是随意的,必须与网关处于同一网段。
重叠网络中的NAT转换既可以采用静态NAT的方式实现,又可以采用动态NAT的方式实现,但如果采用的是动态NAT转换方式,访问对方网络设备时必须通过DNS域名方式进行,不能直接采用原来的IP地址进行访问,这时必须借助于DNS服务器对访问对方网络设备所对应的域名进行IP地址解析,然后才可以使用转换后的IP地址访问对方网络设备。采用静态NAT转换方式时,可以不领先DNS服务器,直接使用转换后的IP地址对对方网络设备进行访问,因为静态NAT转换方式中,地址映射是固定的,可以事先知道对应设备转换后的IP地址。
【经验之谈】重叠NAT主要应用于使用公网IP地址的内部网络服务器的地址转换,这样的可以隐藏内部网络服务器的真实公网IP地址,有利于保护服务器的安全。因为经过NAT转换后,内部网络服务器对外呈现的是另一个公网IP地址,不是真实的服务器IP地址。
图6-8显示了一个企业内部网络中一服务器使用了公网IP地址237.16.32.10。为了确保互联网用户可以访问到这台服务器,需要在NAT路由器上做双向IP地址映射,即:把服务器内部本地地址237.16.32.10映射成另一个没有使用的公网IP地址(如213.18.123.103),当作服务器对外发布的IP地址;然后再把213.18.123.103映射成237.16.32.10。
图6-8 重叠NAT应用示例