解救NAT网络地址匮乏的灵方

文章出处:Linux 宝库 作者:未知 发布时间:2006-09-21
  为了解决IP地址日渐不足的问题,RFC1918为私有和内部使用的网络留出了3个IP地址块(A类、B类和C类地址范围各一段),在此范围内的地址将不被Internet主干路由(如下表所示)。
  
  私有IP地址也有它的缺点,那就是使用私有IP地址的用户将无法访问Internet。这就需要使用到网络地址转换NAT(Network Address Translation),根据RFC1631的定义,这是将IP数据包包头中一个地址转换为另一个地址的过程,NAT让使用私有IP地址的主机能够访问Internet。利用NAT转换功能可以更有效地利用IP地址资源,进而解决IP地址短缺的问题。在将私有IP转换为合法IP的动作中,通常由防火墙或路由器担任IP转换的功能。
  
  认识NAT
  
  NAT有三种类型:静态NAT(Static NAT)、动态地址NAT(Pooled NAT)、地址复用(PAT)。
  
  静态NAT设置起来最为简单和容易,内部网络中的每个主机都被永久映射成外部网络中的某个合法的地址。
  
  动态地址NAT则只是转换IP地址,它为每一个内部的IP地址分配一个临时的外部IP地址,主要应用于拨号,对于频繁的远程联接也可以采用动态NAT。当远程用户联接上之后,动态地址NAT就会分配给它一个IP地址,用户断开时,这个IP地址就会被释放而留待以后使用。
  
  地址复用PAT(Port Address Translation)能使多个内部地址映射到同一个全球地址,也可称作“多对一”NAT。通过使用PAT可以让成百上千的私有地址节点使用一个全球地址访问Internet。PAT普遍应用于接入设备中,它可以将中小型的网络隐藏在一个合法的IP地址后面。PAT与动态地址NAT不同,它将内部连接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NAT设备指定的TCP端口号。
  
  理论上NAT复用可以支持65000多个内部地址映射到同一个外部地址,但实际上在一台Cisco NAT路由器上的每个全球地址只能有效支持大约4000个会话,其他厂商也很难超越这个数字。PAT经常与一个NAT池的动态映射一起使用,这样,NAT设备可以先用一对一的动态映射,直到可用的地址几乎被耗尽,然后NAT将复用剩余的地址。在Cisco路由器上,NAT将首先复用地址池中的第一个地址,直到达到能力极限,然后再移至第二个地址,依此类推。
  
  当然NAT也有其缺点:
  
  首先,很明显,地址转换的代价是功能的损失,特别是对那些在IP包数据包中也包含IP地址信息的协议或者应用。路由器的CPU必须对每个数据包进行检查,对需要改变地址信息的数据包进行操作,因此会加大运行负载。同时,路由器要使用NAT技术,必须处于处理机交换(Process Switching)的工作模式,也可能会降低运行性能。
  
  另一方面,NAT隐藏了端到端的IP地址,使得对数据包路径的跟踪变得比较困难。而且,正是由于这个原因,使得一些内嵌的IP地址在应用中会产生问题,比如ICMP、FTP、NBT、SNMP、DNS等。另外,如果使用IPSec进行加密,则只能把NAT放在受保护的VPN内部,或者使用具有NAT功能的IPSec设备,因为IPSec规定IP地址不能被改变,如果改变了IP地址,就会破坏VPN的功能。如果确实需要对已用IPSec加密的数据进行地址改变,那就应该考虑使用RSIP技术。
   
  配置动态NAT 
  
  1. 在全局配置模式下,根据需要分配全球地址池。
  
  Router(config)#ip nat pool name start-ip end-ip{netmask netmask|prefix-length prefix-length}[rotary]
  
  2. 在全局设置模式下,定义一个标准的Access-List。
  
  Router(config)#Access-listaccess-list-number permit source[source-wildcard]
  
  3. 在全局设置模式下,建立动态的源地址转换。
  
  Router(config)#ip nat inside source {list { access-list-number|name} pool name [overload]|static local-ip global-ip}
  
  4. 在全局配置状态下指定与网络相连的端口。
  
  Router(config)#interface type number
  
  5. 连接到指定的接口。
  
  Router(config)#ip nat outside
  
   配置静态NAT 
  
  1.在全局配置状态下,在内部本地地址与外部合法地址之间建立静态地址转换。
  
  Router(config)#ip nat inside source static local-ip global-ip
  
  2.在端口配置状态下,指定连接内部网络的内部端口。
  
  Router(config-if)#ip nat inside
  
  3.在端口配置状态下,指定连接外部网络的外部端口(可以根据实际需要定义多个内部端口及多个外部端口)。
  
  Router(config-if)#ip nat outside
  
  4.PAT(地址复用)
  
  关于地址复用可以用关键字“overload”来配置NAT复用:
  
  Router(config)#ip nat inside source list 24 pool natpool overload
  
  配置实例
  
  1.配置静态NAT转换
  
  (1)检查IOS版本是否支持0子网,根据需要输入命令“ip subnet-zero”。
  
  (2)按照下图给定的网络地址配置各个接口的地址。
  
  (3)为各接口分配自己在NAT中的角色:
  
  RTB(config)# ip nat inside source static 192.168.0.1 202.113.215.1 192.168.0.1
  
  RTB(config)# ip nat inside source static 192.168.0.2 202.113.215.1 192.168.0.2
  
  RTB(config)# int E0
  
  RTB(config-if)# ip nat inside
  
  RTB(config-if)# int E1
  
  RTB(config-if)# ip nat inside
  
  RTB(config-if)# int S0
  
  RTB(config-if)# ip nat outside
  
  2.配置动态NAT转换
  
  (1)设置NAT池。
  
  RTB(config)# ip nat pool netpool 168.168.0.1 192.168.0.20 netmark 255.255.255.0
  
  (2)建立访问控制列表。
  
  RTB(config)# access-list 1 permit 202.113.215.0 0.255.255.255
  
  (3)将访问控制列表应用在NAT池中。
  
  RTB(config)# ip nat inside source list 1 pool netpool overload