网络地址转换(NAT)

    网络地址转换(NAT,network address translation)被广泛应用于各种类型internet接入方式和各种类型的网络中。原因很简单,NAT不仅完美地解决了IP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。

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

     随着接入internet的计算机数量的不断猛增,ip地址资源也就愈加显得捉襟见肘。

     一般用户几乎申请不到整段的c类ip地址。在其他ISP那里,即使是拥有几百台计算机的大型局域网用户,当他们申请ip地址时,所分配的地址也不过只有几个或十几个ip地址。显然,这样少的ip地址根本无法满足网络用户的需求,于是也就产生了NAT技术。

下面就NAT做一些说明

 

一.NAT简介

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

      NAT将自动修改ip报文头申的源ip地址和目的ip地址,ip地址校验则在NAT处理过程中自动完成。有些应用程序将源ip地址嵌入到ip报文的数据部分中,所以还需要同时对报文进行修改,以匹配ip头中已经修改过的源ip地址。否则,在报文数据都分别嵌入ip地址的应用程序就不能正常工作。

二、NAT实现方式

      NAT的实现方式有三种,即静态转换static nat、动态转换dynamic nat 和 端口多路复用overload(我们平时上网用的,还有网吧等这此都是用的NAT重载overload)。

      1、静态转换是指将内部网络的私有ip地址转换为公有ip地址,ip地址对是一对一的,是一成不变的,某个私有ip地址只转换为某个公有ip地址。借助于静态转换,可以实现外部网络对内部网络中某些特定设备(如服务器)的访问。

我们平时在小型路由上做的端口映射也属于静态转换的一种,只不过在做静态转换时需要指明内部与外部端口号。

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

动态转换一般用的不多,毕竟公有IP是有限的。

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

端口多路复用是目前应用最多的NAT方式,如企业,网吧,学校等单位目前用的都是这种方式。

三、网络地址转换(NAT)的实现(实例讲解)

      在配置网络地址转换的过程之前,首先必须搞清楚内部接口和外部接口,以及在哪个外部接口上启用nat。通常情况下,连接到用户内部

网络的接口是nat内部接口,而连接到外部网络(如internet)的接口是nat外部接口。

 

1)、静态地址转换的实现

      地址转换:

      假设内部局域网使用的lp地址段为192.168.0.1~192.168.0.254,路由器局域网端口(即默认网关)的ip地址为192.168.0.1,子网掩码为255.255.255.0。网络分配的合法ip地址范围为61.159.62.128~61.159.62.135,路由器在广域网中的ip地址为61.159.62.129,子网掩码为255.255.255.248可用于转换的ip地址范围为61.159.62.130~61.159.62.134。要求将内部网止192.168.0.2~192.168.0.6分别转换为合法ip地址61.159.62.130~61.159.62.134。

      第一步,设置外部端口。

      int s0/0/0

      ip address 61.159.62.129 255.255.255.248

      no shut

      ip nat outside

      第二步,设置内部端口。

      int f0/0    

      ip address 192.168.0.1 255.255.255.0

      no shut

      ip nat inside

      第三步,在内部本地与内部合法地址之间建立静态地址转换。

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

      示例:

      ip nat inside source static 192.168.0.2    61.159.62.130
      //将内部网络地址192.168.0.2转换为合法ip地址61.159.62.130

      ip nat inside source static 192.168.0.3   61.159.62.131
      //将内部网络地址192.168.0.3转换为合法ip地址61.159.62.131

      ip nat inside source static 192.168.0.4   61.159.62.132
      //将内部网络地址192.168.0.4转换为合法ip地址61.159.62.132

      ip nat inside source static 192.168.0.5   61.159.62.133
      //将内部网络地址192.168.0.5转换为合法ip地址61.159.62.133

      ip nat inside source static 192.168.0.6    61.159.62.134
     //将内部网络地址192.168.0.6转换为合法ip地址61.159.62.134

      至此,静态地址转换配置完毕。

 

     端口映射:

      有时候我们只有一个合法的公网IP,而这个IP已经应用在路由器出口地址上,并且为了网络安全,我们并不希望内网中的某台服务器地址转换为此IP,那么我们可以利用端口映射的方法来解决此问题。

     端口映射就是把外网对路由器的访问根据端口转发到内网的某台主机上。

     例如:我们在ISP申请了一个地址222.12.202.11/24,把它应用在路由器的出口地址上,并且做NAT重载(详见下)来为内网主机提供internet服务,而内网有一台主机192.168.1.254需要为外网提供www服务。

    第一步:设置外部端口

    int s0/0/0

    ip add 222.12.202.11 255.255.255.0

    no shut

    ip nat outside

    第二步:设置内部端口

    int f0/0

    ip add 192.168.1.254 255.255.255.0

    no shut

    ip nat inside

    第三步:设置端口映射

    ip nat inside source static tcp 192.168.1.254 80 222.12.202.11 80
    //将外部地址222.12.202.11 通过80端口转发到内部地址192.168.1.254 80

 

2).动态地址转换的实现

       假设内部网络使用的ip地址段为172.16.10.1~172.16.10.254,路由器局域网端口(即默认网关)的ip地址为172.16.10.1,子网掩码为255.255.255.0。网络分配的合法ip地址范围为61.159.62.128~61.159.62.191,路由器在广域网中的ip地址为61.159.62.129,子网掩码为255.255.255.192,可用于转换的ip地址范围为61.159.62.130~61.159.62.190。要求将内部网址172.16.10.1~172.16.10.254动态转换为合法ip地址61.159.62.130~61.159.62.190。

      第一步,设置外部端口。

      设置外部端口命令的语法如下:

      ip nat outside

      示例:

      int s0/0/0 //进入串行端口s0/0/0

      ip address 61.159.62.129  255.255.255.248

      no shut
//将其ip地址指定为61.159.62.129,子网掩码为255.255.255.248

      ip nat outside    //将串行口serial 0设置为外网端口

      注意,可以定义多个外部端口。

      第二步,设置内部端口。

      设置内部接口命令的语法如下:

      ip nat inside

      示例:

      int  f0/0/0        //进入以太网端口f0/0/0

      ip address 172.16.10.1 255.255.255.0

      no shut

      // 将其ip地址指定为172.16.10.1,子网掩码为255.255.255.0

      ip nat inside      //将f0/0/0设置为内网端口。

      注意,可以定义多个内部端口。

      第三步,定义合法ip地址池。

      定义合法ip地址池命令的语法如下:

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

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

      示例:

      ip nat pool net 61.159.62.130 61.159.62.190 netmask   255.255.255.192
//指明地址缓冲池的名称为net,ip地址范围为61.159.62.130~61.159.62.190,子网掩码为255.255.255.192。需要注意的是,即使掩码为255.255.255.0,也会由起始ip地址和终止ip地址对ip地址池进行限制。

     或ip nat pool test 61.159.62.130 61.159.62.190 prefix-length 26

      注意,如果有多个合法ip地址范围,可以分别添加。例如,如果还有一段合法ip地址范围为"211.82.216.1~211.82.216.254",那么,可

以再通过下述命令将其添加至缓冲池中。

      ip nat pool cernet 211.82.216.1 211.82.216.254 netmask 255.255.255.0

      或

      ip nat pool test 211.82.216.1 211.82.216.254 prefix-length 24

      第四步,定义内部网络中允许访问internet的访问列表。

      定义内部访问列表命令的语法如下:

      access-list   标号 permit 源地址 通配符(其中,标号为1~99之间的整数)

      access-list  1 permit 172.16.10.0 0.0.0.255
      //允许访问internet的网段为172.16.10.0~172.16.10.255,主机掩码为0.0.0.255。需要注意的是,在这里采用的是主机掩码,而非子网掩码。子网掩码与主机掩码的关系为:主机掩码+子网掩码=255.255.255.255。例如,子网掩码为255.255.0.0,则主机掩码为0.0.255.255子网掩码为255.0.0.0,则主机掩码为0.255.255.255;子网掩码为255.252.0.0,则主机掩码为0.3.255.255;子网掩码为255.255.255.192,则主机掩码为 0.0.0.63。

      另外,如果想将多个ip地址段转换为合法ip地址,可以添加多个访问列表。例如,当欲将172.16.98.0~172.16.98.255和172.16.99.0~172.16.99.255转换为合法ip地址时,应当添加下述命令:

      access-list 1 permit 172.16.98.0~0.0.0.255

      access-list 1 permit 172.16.99.0~0.0.0.255

      第五步,实现网络地址转换。

      在全局设置模式下,将由access-list指定的内部本地地址与指定的内部合法地址池进行地址转换。命令语法如下:

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

      示例:

      ip nat inside source list 1 pool cernet

    如果有多个内部访问列表,可以一一添加,以实现网络地址转换,如

      ip nat insde source list 1 pool cernet

      ip nat insde source list 2 pool cernet

    如果有多个地址池,也可以一一添加,以增加合法地址池范围,如

      ip nat insde source list 2 pool cerneta

      ip nat insde source list 2 pool cernetb

      ip nat insde source list 2 pool cernetc

      至此,动态地址转换设置完毕。

      3)、端口复用动态地址转换

      内部网络使用的ip地址段为10.100.100.1~10.100.100.254,路由器局域网端口(即默认网关)的ip地址为10.100.100.1,子网掩码为255.255.255.0。网络分配的合法ip地址范围为202.99.160.0~202.99.160.3,路由器广域网中的ip地址为202.99.160.1,子网掩码为255.255.255.252,可用于转换的ip地址为202.99.160.2。将内部网址10.100.100.1~10.100.100.254 转换为合法ip地址202.99.160.2。

      第一步,设置外部端口。

      int s0/0/0

      ip address 202.99.160.1 255.255.255.252

      no shut

      in nat outside

      第二步,设置内部端口。

      int f0/0

      ip address 10.100.100.1 255.255.255.0

      no shut

      ip nat inside

      第三步,定义合法ip地址池。

      in nat pool one 202.99.160.2 202.99.160.2 netmask 255.255.255.252

      // 指明地址缓冲池的名称为onlyone,ip地址范围为202.99.160.2,子网掩码为255.255.255.252。 由于本例只有一个ip地址可用,所以,起始ip地址与终止ip地址均为202.99.160.2。如果有多个ip地址,则应当分别键入起止的ip直址。

      第四步,定义内部访问列。

      access-list 1 permit 10.100.100.0 0.0.0.255

      允许访问internetr的网段为10.100.100.0~10.100.100.255,子网掩码为255.255.255.0。需要注意的是,在这里子网掩码的顺序跟平常所写的顺序相反,即0.255.255.255。

      第五步,设置复用动态地址转换。

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

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

      示例:

      ip nat inside source list 1 pool one overload
      //以端口复用方式,将访问列表1中的私有ip地址转换为onlyone ip地址池中定义的合法ip地址。

      至此,端口复用动态地址转换完成。

注:1.软件平台:CISCO系列
      2.以上信息本人引用互联网,并做了相应改动,如有错误,请提出来,谢谢!