NAT是对IP分组报头中的地址进行操作的过程,它将IP报头中的目的地址、源地址或这两个地址替换为管理员分配的不同地址。

NAT的多对一特性叫做静态PAT(Static PAT),在Cisco IOS配置中PAT也被称做超载(overload)。PAT使用全球IP地址中的惟一源端口号来区分不同的转换。源端口号是16位编码。

静态NAT:一对一映射

Router(config)#ip nat inside source static 本地地址 全局地址

Router(config)#interface s0

Router(config-if)#ip nat outside

Router(config)#interface e0

Router(config-if)#ip nat inside

动态NAT:动态转换是临时的,它们最终会超时

(1)定义地址池

     Router(config)#ip nat pool 名字 起始地址 结束地址 netmask 地址掩码

(2)创建访问控制列表

Router(config)#access-list 列表号 permit 源地址 通配符

(3)配置基于源地址的动态转换

     Router(config)#ip nat inside source list 列表号 pool 名字

(4)指定内部接口

(5)指定外部接口

超载PAT:

(1)创建访问控制列表

     Router(config)#access-list 列表号 permit 源地址 通配符

(2)建立动态源转换

     Router(config)#ip nat inside source list 列表号 interface 接口 overload

或指定用于超载的全球地址(作为一个池)

Router(config)#ip nat pool 名字 全局地址 netmask 地址掩码 

Router(config)#ip nat inside source list 列表号 pool 名字 overload

(3)指定内部接口

(4)指定外部接口

注:(2)中一个是接口的超载,另一个是地址池的超载。

 
验证NAT转换:

debug ip nat 

debug ip nat detailed
随着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地址。 

五、NAT的设置方法: 

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

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

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

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

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

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

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

     ip nat inside 

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

     ip nat outside 

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

实例1: 

本实例实现静态NAT地址转换功能。将2501的以太口作为内部端口,同步端口0作为外部端口。其中10.1.1.2,10.1.1.3,10.1.1.4的内部本地地址采用静态地址转换。其内部合法地址分别对应为192.1.1.2,192.1.1.3,192.1.1.4。 

路由器2501的配置: 

Current configuration: 

version 11.3 

no service password-encryption 

hostname 2501 

ip nat inside source static 10.1.1.2 192.1.1.2 

ip nat inside source static 10.1.1.3 192.1.1.3 

ip nat inside source static 10.1.1.4 192.1.1.4 

interface Ethernet0 

ip address 10.1.1.1 255.255.255.0 

ip nat inside 

interface Serial0 

ip address 192.1.1.1 255.255.255.0 

ip nat outside 

no ip mroute-cache 

bandwidth 2000 

no fair-queue 

clockrate 2000000 

interface Serial1 

no ip address 

shutdown 

no ip classless 

ip route 0.0.0.0 0.0.0.0 Serial0 

line con 0 

line aux 0 

line vty 0 4 

password cisco 

end 

配置完成后可以用以下语句进行查看: 

show ip nat statistcs 

show ip nat translations 

  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 

实例2: 

   本实例中硬件配置同上,运用了动态NAT地址转换功能。将2501的以太口作为内部端口,同步端口0作为外部端口。其中10.1.1.0网段采用动态地址转换。对应内部合法地址为192.1.1.2~192.1.1.10 

Current configuration: 

version 11.3 

no service password-encryption 

hostname 2501 

ip nat pool aaa 192.1.1.2 192.1.1.10 netmask 255.255.255.0 

ip nat inside source list 1 pool aaa 

interface Ethernet0 

ip address 10.1.1.1 255.255.255.0 

ip nat inside 

interface Serial0 

ip address 192.1.1.1 255.255.255.0 

ip nat outside 

no ip mroute-cache 

bandwidth 2000 

no fair-queue 

clockrate 2000000 

interface Serial1 

no ip address 

shutdown 

no ip classless 

ip route 0.0.0.0 0.0.0.0 Serial0 

access-list 1 permit 10.1.1.0 0.0.0.255 

line con 0 

line aux 0 

line vty 0 4 

password cisco 

end 

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

  复用动态地址转换首先是一种动态地址转换,但是它可以允许多个内部本地地址共用一个内部合法地址。只申请到少量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 

实例:应用了复用动态NAT地址转换功能。将2501的以太口作为内部端口,同步端口0作为外部端口。10.1.1.0网段采用复用动态地址转换。假设企业只申请了一个合法的IP地址192.1.1.1。 

2501的配置 

Current configuration: 

version 11.3 

no service password-encryption 

hostname 2501 

ip nat pool bbb 192.1.1.1 192.1.1.1 netmask 255.255.255.0 

ip nat inside source list 1 pool bbb overload 

interface Ethernet0 

ip address 10.1.1.1 255.255.255.0 

ip nat inside 

interface Serial0 

ip address 192.1.1.1 255.255.255.0 

ip nat outside 

no ip mroute-cache 

bandwidth 2000 

no fair-queue 

clockrate 2000000 

interface Serial1 

no ip address 

shutdown 

no ip classless 

ip route 0.0.0.0 0.0.0.0 Serial0 

access-list 1 permit 10.1.1.0 0.0.0.255 

line con 0 

line aux 0 

line vty 0 4 

password cisco 

end 
本文将讨论cisco ios 路由器上的NAT验证命令。读者可以用本文所讲述的命令来显示NAT转换信息和清除地址转换条目。
     一.验证NAT
    "show ip nat translation"命令可以用于显示当前存在的转换。代码1中屏幕输出显示有2个基本型转换存在。
    代码1 " show ip nat translation"命令的输出显示例。
    
Router#show ip nat translations
ror inside ip nat translations
pro inside global  inside local  outside local   outside global
 ---    192.2.2.1  10.1.1.1 ---   ---
 ---    192.2.2.1  10.1.1.2 ---   ---
Router#
     代码2是一个采用地址复用的NAT样例。2个不同的内部主机使用同一个IP地址显现在外部网络,这2个主机都要建立一个telent会话---到目的地的TCP端口23。唯一的源TCP端口号被用来区分这2个内部主机。
   代码2 应用地址复用时,"show ip nat translations"命令的输出示例。
   
Router#show ip nat translations
pro inside global         inside local      outside local   outside global
tcp 192.168.2.1:11003     10.1.1.1:11003    172.16.2.2:23    172.16.2.2:23
tcp 192.168.2.1:1067          10.0.1.1.1:1067    172.16.2.3:23    172.16.2.3:23
Router#
  我们可以用"show ip nat translations"命令来查看NAT的统计信息。
   动态NAT超时
   
   默认地,动态地址转换条目如果在一定时间后没有被使用后就因为会超时而会超时而被取消。如果必要的话,用户可以改变超时的默认值。在没有配置地址复用的情况下,简单转换条目的超时时间为24小时。
   
   如果培植了地址复用,因为没个条目都包含了使用它的数据流的更多内容,我们就可以对转换条目的超时值实施较细的控制。下面是采用地址复用默认的NAT超时值:
UDP超时值:     5分钟
DNS      :     1分钟
TCP      :     24小时
 结束和复未值:  1分钟
    译者注:"结束(finish)和复位(reset)"指的是TCP连接的结束和复位包。  
二NAT排错
    如果想要跟踪NAT的操作,可以用"debug ip nat"命令显示出每上被转换的数据包。
    代码2是一个内部到外部地址转换的调试示例。
    代码2  " debug ip net"命令显示
    Router#debug ip net
    NAT:S﹦10.1.1.1->192.168.2.1,d﹦172.16.2.2【0】
    NAT:S﹦172.16.2.2,d﹦192.168.2.1->10.1.1.1【0】
    NAT:S﹦10.1.1.1->192.168.2.1,d﹦172.16.2.2【1】
    NAT:S﹦10.1.1.1->192.168.2.1,d﹦172.16.2.2【2】
    NAT:S﹦10.1.1.1->192.168.2.1,d﹦172.16.2.2【3】
    NAT*:S﹦172.16.2.2,d﹦192.168.2.1->10.1.1.1【1】
    NAT:S﹦172.16.2.2,d﹦192.168.2.1->10.1.1.1【1】
    NAT:S﹦10.1.1.1->192.168.2.1,d﹦172.16.2.2【4】
    NAT:S﹦10.1.1.1->192.168.2.1,d﹦172.16.2.2【5】
    NAT:S﹦10.1.1.1->192.168.2.1,d﹦172.16.2.2【6】
    NAT*:S﹦172.16.2.2,d﹦192.168.2.1->10.1.1.1【2】
    我们可以按下面所述的要点对上面的输出进行分析:
    ·紧靠"NAT"的"*"号表示该转换是发生在高速通道上。每个会话的第一个数据包总是经由低速通首(按处理器 交换方式处理)。如果缓存条目存在的话,每个会话余下的数据包将经由高速通道;
    ·"S﹦10.1.1.1"表示源地址是10.1.1.1;
    ·"d﹦172.16.2.2" 表示目的地址是172.16.2.2;
    ·"10.1.1.1->192.168.2.1"表示将地址10.1.1.1转换为192.168.2.1;
    ·括号中的值是IP标识号。该信息会对调试有所帮助,因为它可以帮助你将同一个会话的数据包关联起来。  
  三清除NAT转换表中的条目
    可以用" clear ip nat translation*"命令来清除转换表中的所有条目,如例代码3所示。
    "*"号是一个通配符,代表所有任意值。在该例串," show ip nat translation"命令将当前活跃的转换都显示出来了。然后,输入" clear ip nat translation*"命令来清除所有的转换。再次输入" show ip nat translation*"命令时将看不到任何转换条目。
    代码3" clear ip nat translation*"命令的结果
    ROUTER#show ip nat translation
    Pro Inside global  Inside local  Outsids local  Outside global
    tcp 192.168.2.1:11003   10.1.1.1:11003  172.16.2.2:23  172.16.2.2:23
    tcp 192.168.2.1:1067       10.1.1.1:1067  172.16.2.2:23  172.16.2.2:23
    Router#
    Router#clear ip nat translation *
    Router#show ip nat translation
    Router#<nothing>
 
   "Translation"一字的具体拼法
    "translation"一字在"clear ip nat translation" 命令中是用单数形式,而它在"show ip nat translation"命令中是用复数形式。
    使用" clear ip nat translation inside global-ip locdl-ip【 outside locdl-ip global-ip】" 命令,我们可以清除包含一个内部转换或一个内部转换和一个外部转换的一个简单转换条目。
    使用" clear ip nat translation onside locdl-ip global-ip"命令,我们可以清除包含一个外部转换的一个简单转换条目。
    如果想要清除一个扩展转换条目,可以使用"clear ip nat translation protocl inside global-ip global-port locdl-ip locdl- port【outside locdl-ip locdl- port global-ip global-port】" 命令。
    下面该命令的一个使用例:
    
    Router#clear ip nat trans udp inside 192.168.2.2 1220 10.1.1.2 1220
     172.69.2.132 53 171.69.2.132 53
    注:如果已正确地配置了NAT但却不发生任何转换,可以试着先清一下NAT转换,然后再看是否发生转换。