随着internet的网络迅速发展,IP地址短缺已成为一个十分突出的问题。为了解决这个问题,出现了多种解决方案。下面几绍一种在目前网络环境中比较有效的方法即地址转换(NAT)功能。


一、NAT简介

    NAT(Network Address Translation)的功能,就是指在一个网络内部,根据需要可以随意自定义的IP地址,而不需要经过申请。在网络内部,各计算机间通过内部的IP地址进行通讯。而当内部的计算机要与外部internet网络进行通讯时,具有NAT功能的设备(比如:路由器)负责将其内部的IP地址转换为合法的IP地址(即经过申请的IP地址)进行通信。

二、NAT 的应用环境:

情况1:一个企业不想让外部网络用户知道自己的网络内部结构,可以通过NAT将内部网络与外部Internet 隔离开,则外部用户根本不知道通过NAT设置的内部IP地址。

情况2:一个企业申请的合法Internet IP地址很少,而内部网络用户很多。可以通过NAT功能实现多个用户同时公用一个合法IP与外部Internet 进行通信。

三、设置NAT所需路由器的硬件配置和软件配置:

    设置NAT功能的路由器至少要有一个内部端口(Inside),一个外部端口(Outside)。内部端口连接的网络用户使用的是内部IP地址。

内部端口可以为任意一个路由器端口。外部端口连接的是外部的网络,如Internet 。外部端口可以为路由器上的任意端口。

  设置NAT功能的路由器的IOS应支持NAT功能(本文事例所用路由器为Cisco2501,其IOS为11.2版本以上支持NAT功能)。

四、关于NAT的几个概念:

  内部本地地址(Inside local address):分配给内部网络中的计算机的内部IP地址。

  内部全局地址(Inside global address):对外进入IP通信时,代表一个或多个内部本地地址的合法IP地址。需要申请才可取得的IP地址。


    外部本地地址(Outside local address):非私有主机在自有网络内表现出来的IP地址。该地址是自有网络的管理员为本网络以外的设备所准备的用于在自有网络内使用的 IP地址。outside local地址的特点是只会出现在自有网络内但是是供给非私有主机使用的。


    外部全局地址(Outside global address):非私有主机在自有网络以外的区域使用的IP地址,是非私有主机所在网络的管理员负责管理个分配的。outside global地址的特点是不会出现在自有网络中而且不是给私有主机使用,不归自有网络的管理员负责。

wKiom1U3IsHh0cWQAAEDfIOfLoc303.jpg

    注:内部用的源nat,外部用于目的nat


五、NAT的工作原理:

wKioL1U4Z_fg1lM3AAHsh782a6g072.jpg


    在图 13-2 所示的示例中,为向因特网发送分组,主机 10. 1.1.1将其发送给配置了 NAT 的边界路由器。该路由器发现分组的源 E 地址为内部本地IP地址,且是前往外部网络的,因此对源地址进行转
换,并将这种转换记录到 NAT 表中。
    然后,该分组被转发到外部接口,它包含转换后的源地址。收到外部主机返回的分组后, NAT 路
由器根据 NAT 表将分组包含的内部全局 E地址转换为内部本地 IP 地址。
    下面来看一个更复杂的示例,它使用了 NAT 重载(也叫端口地址转换, PAT )。 这里将使用图13-3来说明 PAT 的工作原理。
使用重载时,转换后的所有内部主机都使用同一个 P 地址,术语重载因此而得名。 这里再重申
一次,可用的因特网 IP地址之所以没有耗尽,都是拜NAT重载 (PAT) 所赐。

wKioL1U3NjyBhfcEAAKjobMPJfs138.jpg

请看图 13-3 所示的 NAT 表,除内部本地IP地址和外部全局IP地址外,它还包含端口号。这些端
口号让路由器能够确定应该将返回的数据流转发给哪台主机。



    在这个示例中,使用传输层端口号来标识本地主机。 如果必须使用注册IP地址来标识本地主机,
则称为静态 NAT,而可用IP地址早就耗尽了。 PAT 能够使用传输层端口号来标识主机,因此,从理
论上说,最多可让大约 65000台主机共用一个公有 IP 地址。


六、NAT的设置方法:

  NAT设置可以分为静态地址转换、动态地址转换、复用动态地址转换。

  1、静态地址转换适用的环境

     静态地址转换将内部本地地址与内部合法地址进行一对一的转换,且需要指定和哪个合法地址进行转换。如果内部网络有E-mail服务器或FTP服务器等可以为外部用户提供的服务,这些服务器的IP地址必须采用静态地址转换,以便外部用户可以使用这些服务。

  静态地址转换基本配置步骤:

  (1)、在内部本地地址与内部合法地址之间建立静态地址转换。在全局设置状态下输入:

     ip nat inside source static 内部本地地址 内部合法地址

  (2)、指定连接网络的内部端口 在端口设置状态下输入:

     ip nat inside

  (3)、指定连接外部网络的外部端口 在端口设置状态下输入:

     ip nat outside

  注:可以根据实际需要定义多个内部端口及多个外部端口。 


    2、动态地址转换适用的环境:

    动态地址转换也是将本地地址与内部合法地址一对一的转换,但是动态地址转换是从内部合法地址池中动态地选择一个末使用的地址对内部本地地址进行转换。

  动态地址转换基本配置步骤:

  (1)、在全局设置模式下,定义内部合法地址池

   ip nat pool 地址池名称 起始IP地址 终止IP地址 子网掩码

   其中地址池名称可以任意设定。

  (2)、在全局设置模式下,定义一个标准的access-list规则以允许哪些内部地址可以进行动态地址转换。

   access-list 标号 permit 源地址 通配符

   其中标号为1-99之间的整数。

  (3)、在全局设置模式下,将由access-list指定的内部本地地址与指定的内部合法地址池进行地址转换。

   ip nat inside source list 访问列表标号 pool 内部合法地址池名字

  (4)、指定与内部网络相连的内部端口在端口设置状态下:

   ip nat inside

  (5)、指定与外部网络相连的外部端口

   ip nat outside


    3、复用动态地址转换适用的环境:

  复用动态地址转换(也叫端口地址转换, PAT )首先是一种动态地址转换,但是它可以允许多个内部本地地址共用一个内部合法地址。只申请到少量IP地址但却经常同时有多于合法地址个数的用户上外部网络的情况,这种转换极为有用。

  注意:当多个用户同时使用一个IP地址,外部网络通过路由器内部利用上层的如TCP或UDP端口号等唯一标识某台计算机。  

  复用动态地址转换配置步骤:

  在全局设置模式下,定义内部合地址池

  ip nat pool 地址池名字 起始IP地址 终止IP地址 子网掩码

  其中地址池名字可以任意设定。

  在全局设置模式下,定义一个标准的access-list规则以允许哪些内部本地地址可以进行动态地址转换。

  access-list 标号 permit 源地址 通配符

  其中标号为1-99之间的整数。

  在全局设置模式下,设置在内部的本地地址与内部合法IP地址间建立复用动态地址转换。

   ip nat inside source list 访问列表标号 pool 内部合法地址池名字 overload

  在端口设置状态下,指定与内部网络相连的内部端口

  ip nat inside

  在端口设置状态下,指定与外部网络相连的外部端口

  ip nat outside


七、实例分析:

wKioL1U4ZpzQGGk-AACq_j9cDPk171.jpg

I:配置各路由器的IP地址,确保直连接口能Ping通。
II:KC-R1模拟企业网关路由器。


          KC-R1(config)#ip route 0.0.0.0 0.0.0.0 173.16.1.128 #指向外网的静态路由


IV:配置NAT。

方法一:静态NAT


KC-R1(config)#int f0/0

KC-R1(config-if)#ip nat inside #将f0/0设置为内网口

*Mar 1 00:05:49.875: %LINEPROTO-5-UPDOWN: Line protocol on Interface NVI0, changed state to up

KC-R1(config-if)#exit

KC-R1(config)#int s1/0

KC-R1(config-if)#ip nat outside #将s1/0设置为外网口

KC-R1(config-if)#exit

KC-R1(config)#ip nat inside source static 10.1.1.1 173.16.1.56 #静态NAT

KC-R1(config)#exit


Ping测试:

PC-1#ping 202.101.1.149 #测试证明能通

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 202.101.1.149, timeout is 2 seconds:

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 120/122/132 ms

此时PC-1能通,PC-2不能通。


KC-R2#debug ip packet #查看数据包

*Mar 1 00:09:59.487: IP: tableid=0, s=10.1.1.2 (Serial1/0), d=173.16.1.128 (Serial1/0), routed via RIB

*Mar 1 00:09:59.491: IP: s=10.1.1.2 (Serial1/0), d=173.16.1.128 (Serial1/0), len 100, rcvd 3

*Mar 1 00:09:59.495: IP: s=173.16.1.128 (local), d=10.1.1.2, len 100, unroutable

………………….

*Mar 1 00:23:51.243: IP: s=202.101.1.149 (local), d=173.16.1.56 (Serial1/0), len 100, sending

*Mar 1 00:23:51.447: IP: tableid=0, s=173.16.1.56 (Serial1/0), d=202.101.1.149 (Loopback0), routed via RIB

 

方法二:动态NAT


KC-R1(config)# ip nat pool kachy 173.16.1.58 173.16.1.126 netmask 255.255.255.0 #创建地址池

KC-R1(config)#access-list 1 permit 10.1.1.0 0.0.0.255 #创建ACL

KC-R1(config)#ip nat inside source list 1 pool kachy #二者关联

KC-R1(config)#exit

Ping测试


PC-1#ping 202.101.1.149 #测试证明能通

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 202.101.1.149, timeout is 2 seconds:

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 96/125/148 ms

PC-1#telnet 202.101.1.149 #测试证明能远程连接

Trying 202.101.1.149 … Open

Password required, but none set

[Connection to 202.101.1.149 closed by foreign host]

此时PC-2也可以ping通,telnet上。

查看当前KC-R1的NAT表。


KC-R1#sh ip nat translations #查看NAT表

Pro Inside global Inside local Outside local Outside global

— 173.16.1.58 10.1.1.1 — —

— 173.16.1.59 10.1.1.2 — —

KC-R1#


方法三:配置PAT


KC-R1(config)#access-list 100 permit ip 10.1.1.0 0.0.0.255 any #创建访问列表

KC-R1(config)#ip nat inside source list 100 interface s1/0 overload #二者关联,地址重载

KC-R1(config)#exit

测试


PC-1#ping 202.101.1.149

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 202.101.1.149, timeout is 2 seconds:

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 84/97/116 ms

PC-1#

PC-1#telnet 202.101.1.149

Trying 202.101.1.149 … Open

Password required, but none set

[Connection to 202.101.1.149 closed by foreign host]

同样,PC-2也能到达。


在路由器KC-R1上

KC-R1#debug ip nat #查看翻译过程

*Mar 1 00:19:32.843: NAT*: s=10.1.1.1->173.16.1.56, d=202.101.1.149 [46610]

*Mar 1 00:19:32.847: NAT*: s=10.1.1.1->173.16.1.56, d=202.101.1.149 [46611]

*Mar 1 00:19:33.083: NAT*: s=202.101.1.149, d=173.16.1.56->10.1.1.1 [31823]

在路由器KC-R2上


KC-R2#debug ip packet

*Mar 1 00:23:34.931: IP: tableid=0, s=173.16.1.56 (Serial1/0), d=202.101.1.149 (Loopback0), routed via RIB

*Mar 1 00:23:34.935: IP: s=173.16.1.56 (Serial1/0), d=202.101.1.149, len 100, rcvd 4

*Mar 1 00:23:34.939: IP: tableid=0, s=202.101.1.149 (local), d=173.16.1.56 (Serial1/0), routed via FIB