NAT概述
随着网络的发展,公用IP地址的需求与日俱增。为了缓解公用IP地址的不足,并且保护公司内部服务器的私网地址,可以使用NAT(Network Address Translation,网络地址转换)技术将私网地址转化成为公网地址,缓解IP地址的不足,并且隐藏内部服务器的私网地址。
NAT的概述与现实方式
NAT概念
网络地址转换(NAT)通过将内部网络的私有IP地址翻译成全球唯一的公网IP地址,使内部网络可以连接到互联网等外部网络上,广泛应用于各种类型的互联网接入方式和各种类型的网络中。原因很简单,NAT不仅解决了IP地址不足的问题,而且还能够隐藏内部网络的细节,避免来自网络外部的攻击,起到一定的安全作用。
借助于NAT,私有保留地址的内部网络通过路由器发送数据包时,私有地址被转换成合法的IP地址,这样一个局域网只需要少量地址(甚至是一个),即可实现使私有地址网络中的所有计算机与互联网的通信需求。
NAT的实现方式
NAT的实现方式有以下三种:
静态转换(Static Translation)
动态转换(Dynamic Translation)
端口多路复用(Port AddressTranslation,PAT)
静态转换IP地址的对应关系是一对一且不变的,并没有节约公用IP地址,只是隐藏了主机的真实地址。动态转换虽然在一定情况下节约了公用IP地址,但是当内部网络同时访问Internet的主机数大于合法地址池中的IP地址数时就不适用了。端口多路复用可以使所有的内部网络主机共享一个合法的外部IP地址,从而最大限度的节约IP地址资源。
由于动态转换形成的IP地址的对应关系是不确定的、随机的;端口多路复用使用的是端口号的转换,也是不确定的,所以内网服务器不能使用这两种转换方式,这是由于外网用户无法确定服务器合法的公网IP地址,导致无法访问服务器。这时使用静态转换将私有IP地址转换为固定的合法的IP地址,这样服务器有了固定的合法的公网IP地址,才能实现外网的访问。
NAT的术语与转换表
内部局部IP地址(Inside Local IP Address):在内部网络中分配给主机的私有IP地址。该地址是从RFC1918(私有互联网空间地址分配)所定义的私有地址空间中分配的,或者随机挑选的。
内部全局IP地址(Inside Global IP Address):一个合法的IP地址(由NIC或网络服务提供商分配)。它对外代表一个或多个内部局部IP地址。该地址通常是从全球统一可寻址的地址空间中分配的,一般由互联网服务提供商(ISP)提供。
外部局部IP地址(Outside Global IP Address):由其所有者给外部网络上的主机分配的IP地址。该地址通常也是从全球统一可寻址的地址空间中分配的。
外部局部IP地址(Outside Local IP Address):外部主机表现在内部网络的IP地址。这一地址是从内部可寻址的地址空间中分配的,很可能是从诸如RFC1918中所定义的保留地址空间分配的。
简单转换条目(Simple TranslationEntry):将一个IP地址映射到另一IP地址的转换条目。
扩展转换条目(ExtendedTranslation Entry):映射IP地址和端口到另一对IP地址和端口的条目。
NAT的特性
NAT的典型优势如下:
NAT允许企业内部网使用私有地址,并通过设置合法的地址集,使内部网可以与互联网进行通信,从而达到节省合法注册地址的目的。
NAT可以减少规划地址时发生的地址重叠情况。
NAT增强了内部网络与公用网络连接时的灵活性。
NAT支持地址重叠。
当然,NAT也不是没有缺点。用于地址转换的处理过程会带来功能和性能上的一些损失,特别是在IP报文承载的数据中包含发送IP地址信息的情况下。
NAT的典型缺点如下:
NAT会使延迟增大。
NAT增加了配置和排错的复杂性。
NAT也可能会使某些需要使用内嵌IP地址的应用不能正常工作,因为它隐藏了端到端的IP地址。
NAT的配置
静态NAT配置
一个私有地址对应一个公有地址,向外网发布服务器。
在内部局部地址和内部全局地址之间建立静态地址转换。
Router(config)#ipnat inside source static local-ip global-ip [extendable]
其中,参数“extendable”(可选)表示允许同一个内部局部地址映射到多个内部全局地址。“inside”表示从inside口进入的流量将源地址(source)进行静态转换。
例如:将内部局部地址192.168.100.2转换为内部全局地址61.159.62.130
Router(config)# ip nat inside source static192.168.100.2 61.159.62.130
在内部和外部端口上启用NAT。
设置NAT功能的路由器需要有一个内部端口(inside)和一个外部端口(outside)。内部端口连接的网络用户使用的是内部IP地址,外部端口连接的是外部的网络,如互联网。要NAT发挥作用,必须在这两个端口上启用NAT。
Router(config)# int f0/0
Router(config-if)# ip nat inside
Router(config)# int f1/0
Router(config-if)# ip nat outside
NAT端口映射
需要使用NAT的端口映射功能,在内部局部地址和内部全局地址之间建立NAT端口映射的语法如下:
Router(config)#ip nat inside source static protocol local-ip UDP/TCP-port global-ipUDP/TCP-port [extendable]
此命令是将TCP或UDP协议中内部局部地址需要转换的端口号转换成为内部全局地址的端口号。
例如:希望外网通过8080端口访问公司内部的Web服务器192.168.100.2
Router(config)# ip nat inside source statictcp 192.168.100.2 80 61.159.62.131 8080 extendable
NAT端口映射还可以将不同服务器的不同服务(端口)映射到同一公网地址的不同端口,给人的感觉是通过一个地址访问了所有的服务。
动态NAT配置
多个私有地址对应多个公有地址,负责上网。
定义内部网络中允许访问外部网络的访问控制列表
定义合法IP地址池
Router(config)#ip nat pool pool-name start-ip end-ip{ netmask netmask | prefix-length prefix-length } [type rotary]
下面是对该命令相关参数的说明:
pool-name:放置转换后地址的地址池名称。
start-ip/end-ip:地址池内起始和终止ip地址。
netmasknetmask:子网掩码,以点分十进制数表示。
prefix-lengthprefix-length:子网掩码,以掩码中1的数量表示(如:prefix-length 24 等同于netmask 255.255.255.0)。两种掩码的表示方式等价,任意使用一个即可。
typerotary(可选):地址池中的地址为循环使用。
如果有多个地址池,可以重复使用此命令添加地址池。
注意:配置访问控制列表时,可以将其配置为标准访问控制列表,也可以将其配置为扩展访问控制列表。
实现网络地址转换
在全局配置模式中,将由access-list指定的内部局部地址与指定的内部全局地址池进行地址转换。命令语法如下:
Router(config)#ip nat inside source list access-list-name pool pool-name [overload]
其中,“overload”(可选)表示使用地址复用,用于PAT。
例如:将访问控制列表1中的局部地址转换为test0地址池中定义为全局IP地址。
Router(config)# ip nat inside source list 1pool test0
如果有多个地址池,可以一一添加,以增加合法地址池的数量范围。命令如下:
Router(config)# ip nat inside source list 1pool test1
Router(config)# ip nat inside source list 1pool test2
在内部和外部接口上启用NAT。
PAT
使用外部全局地址
配置内部访问控制列表
定义合法的IP地址池
设置复用动态IP地址转换
在全局配置模式中,设置在内部局部地址与内部全局地址之间建立动态地址转换。
例如:下面的命令表示,以端口复用方式,将访问控制列表1中的局部地址转换为onlyone地址中定义的全局IP地址。
Router(config)# ip nat inside source list 1pool onlyone overload
注意:以上NAT配置使用的是一段合法IP地址。有时ISP分配的是两端IP地址,一段子网掩码为30的接口地址和一段公网地址,其中接口地址可以是公网地址也可以是私网地址。如果ISP分配两端IP地址,则配置广域网接口时使用接口地址,配置NAT时使用公网地址,其配置与上述示例相同。
复用路由器外部接口地址
1)定义内部访问控制列表
2)设置复用动态IP地址转换
在全局配置模式下,设置在内部的本地地址与内部合法地址之间建立动态转换。命令如下:
Router(config)# ip nat inside source list 1interface FastEthernet 0/0 overload
上述命令表示,以端口复用方式,将访问控制列表1中的私有地址转换为路由器外部接口的合法IP地址。
3)在内部和外部端口上启用NAT
验证NAT配置
可以使用show ip nat translation命令显示当前存在的转换。
可以使用下面的命令对NAT进行监控
Router(config)# show ip nat translations [verbose]
该命令用来检查当前存在的转换,关键字verbose与该命令一起使用能够显示更多的信息,包括一个动态条目的保存时间。显示的详细信息中,create、use、timeout、left分别显示NAT转换条目的创建时间、使用时间、超时时间值、剩余时间,而静态NAT形成的转换条目的timeout为0,表示永远存在。
默认情况下,如果在一定时间内没有使用动态地址转换条目,就会因超时而被取消。在没有配置地址复用的情况下,简单转换条目的超时时间为24小时。
如果配置了地址复用,又因为每个条目都包含了使用它的数据流的更多内容,那么就可以对转换条目的超时值实施较细致的控制,下面是采用地址复用时默认的NAT超时值。
UDP超时值:5分钟
DNS超时值:1分钟
TCP超时值:24小时
结束和复位值:1小时
注意:“结束”和“复位”指的是TCP连接的结束包和复位包。
如果必要,用户可以改变超时的默认值,使用的命令如下:
Router(config)#ip nat translation { dns-timeout | icmp-timeout | tcp-timeout | udp-timeout |finrst-timeout | syn-timeout} {seconds
| never}
可以对不同的协议设置NAT转换超时时间,也可以设置为永远不超时。例如,命令ip nattranslation icmp-timeout 120 表示,将ICMP协议的NAT转换超时时间设置为120秒。
注意:每个NAT条目大概要占用160字节的内存,所以,65535条条目会占用多余10MB的内存和相当多的CPU资源。在实际工作中,若发现路由器的CPU和内存资源紧张,可以查看NAT配置和转换条目。
有时因为NAT转换条目过多导致设备性能下降,可以使用clear ip nattranslation * 命令来清除NAT转换表中的所有条目。*是一个通配符,代表任意值。首先使用show ip nat translations查看当前活跃的转换条目,然后,输入clear ip nat translation *命令来清除所有的转换。再次输入showip nat translations命令进行查看,NAT转换条目中只剩下静态转换条目。
使用clear ip nat translationinside local-ip global-ip,可以清除包含一个内部转换的一个简单转换条目。
使用clear ip nat translation outsidelocal-ip global-ip,可以清除包含一个外部转换的一个简单转换条目。
NAT的故障处理
如果理解了实施NAT要达到的目标,然后通过查看配置,检查下面的错误是否是问题的原因,一般可以将问题解决。
是否设置了访问控制列表,阻塞了进行过网络地址转换或者没有进行过网络地址转换的流量。配置时要牢记与访问控制列表相关的网络地址转换操作。如果针对没有进行网络地址转换的流量配置了ACL,而到达的流量实际上是进行了网络地址转换的流量,这就导致流量被丢弃。
定义需要进行NAT的访问控制列表时,漏掉了需要进行地址转换的网络。用来定义需要进行NAT操作的网络地址的访问控制列表,应该包括所有需要进行网络地址转换的网络。如果列表中缺少一个或很多个地址,都将导致无法对来自这些地址的流量进行网络地址转换。
在NAT语句中漏掉了overload关键字。为了建立PAT,在NAT配置命令的最后,必须使用overload关键字。漏掉这个关键字,将会导致无法进行PAT,最终将会导致只有数目有限的主机可以访问公用网络或者互联网,而不是期望中的所有主机。
不对称路由导致NAT失败。当分组进入一个使用ip nat inside命令进行配置的接口时,以及离开使用ip nat outside命令配置的接口时,就会发生网络地址转换。在由很多接口的路由器上,必须确保需要进行网络地址的流量进入路由器的所有接口都是用ip nat inside进行配置的,而这个流量离开的所有接口都使用ip natoutside命令进行配置。否则,流量在经过没有使用正确的NAT命令配置的接口时,无法进行网络地址转换。
NAT地址池和静态NAT表项中有重叠地址。确保NAT地址池中的IP地址也不能用于静态网络地址转换,这是很重要的,否则将导致间断性的NAT失败。如果将广播地址配置到NAT地址池中也会出现间断性的NAT失败。
Inside和outside接口配置错误,也会造成NAT失败。
比较有用的排错命令是show ip nat statistics,可以通过此命令查看NAT的各种信息。如果想要跟踪NAT的操作,可以使用debug ip nat 命令显示出每个转换的数据包。
针对debug ip nat 命令输出的结果分析,紧随NAT的*表示该转换是发生在高速通道上的。每个会话的第一个数据包总是经由低速通道(按处理器交换方式处理)。如果缓存条目存在,则每个会话余下的数据包将经由高速通道。
S:表示源地址
d:表示目的地址
*→*:表示将地址*转换为地址*
括号中的值是IP标识。该信息会对调试有所帮助,因为它可以帮助用户将同一个会话的数据包关联起来。
配置NAT实现网络访问
实验环境
Benet公司的网络拓扑结构如上图所示,网关路由器连接三层交换机组成公司的核心部分,按照部门划分VLAN并通过二层交换机连接到各部门主机。公司内部局域网中除普通访问Internet的员工外,还有几台服务器提供Web、Telnet等服务。
Benet公司的网络规划如下:
从ISP获取IP地址为145.50.23.0/24的公网地址。
普通员工,VLAN3,IP地址为192.168.3.0/24。
领导办公室,VLAN4,IP地址为192.168.4.0/24。
服务器,VLAN2,IP地址为192.168.2.0/24。
三层交换机和路由器之间的接口地址为192.168.100.0/30。
需求描述
要求公司内部服务器192.168.2.2采用静态NAT转换为145.52.23.7,将内部网络地址192.168.2.0/24和192.168.4.0/24采用PAT转换为合法的外部地址的范围为145.52.23.3-145.52.23.6。
具体步骤:
配置设备的接口地址和静态路由,实现网络互通。
配置PAT,实现公司内部能够访问Internet。
(1)内部访问控制列表
(2)定义合法的IP地址池
合法地址池的名字是t220,合法地址的范围是145.52.23.3-145.52.23.6,子网掩码是255.255.255.0。
(3)设置复用动态IP地址转换
在全局配置模式中,设置在内部局部地址与内部全局地址之间建立动态地址转换。
(4)在内部和外部端口上启用NAT
使用debugip nat命令显示出每个转换的数据包
(5)在客户端PC1上访问外网10.0.0.2,可以通信了。
在路由器上也能看到地址之间的转换。
(6)在客户端PC2上访问外网10.0.0.2,也可以通信了。
在路由器上也可以看到地址之间的转换。
配置静态NAT,使外网可以访问公司的服务器。
在内部局部地址和内部全局地址之间建立静态地址转换
R1(config)# ip nat inside source static tcp 192.168.2.2 80 145.52.2.7 80 extendable
R1(config)# ip nat inside source static tcp 192.168.2.3 23 145.52.2.7 23 extendable
(2)在内部和外部端口上启用NAT
(3)在外网PC机Internet上使用telnet命令访问公司内部Telnet服务192.168.2.3。
(4)在外网PC机Internet上使用telnet命令访问公司内部Web服务192.168.2.2。