NAT将内部网络的私网IP地址转换成全球唯一的公网IP地址,使内部网络可以连接到外部网络中,我们平时上网都会使用到NAT这个技术,NAT一共三种实现方式:静态转换;动态转换;PAT(port-Base Address Translation 基于端口的地址转换),其中常用到的是静态转换和PAT,动态转换不太实用。因为动态转换的话,我们拥有的公网IP地址要和局域网要上网的ip地址一样多。这是不现实的。所以这里就不说动态ip了。
静态转换是一对一(一个公网IP地址对应一个私网IP地址)、一对多(一个公网IP地址对应多个私网IP地址)的转换,主要是用于我们内部需要让外网客户访问的服务器会做静态转换,简单的静态转换只能一对一,可以通过NAT端口映射来实现一对多的转换。 一对一转换的实现过程如下: Router(config)#ip nat inside source static 192.168.1.1 20.0.0.2 #将内网ip地址192.168.1.1在与外网通信时转换为20.0.0.2
Router(config)#in f0/0 #进入内部网络的接口 Router(config-if)#ip nat inside #在内部网络的端口启用NAT Router(config-if)#in f0/1 #进入连接外部网络的端口 Router(config-if)#ip nat outside #在连接外部网络的端口启动NAT(注意:和在内部网络的接口启用NAT的命令字有差别)
经过以上配置,静态转换(一对一)就生效了。
接下来我们使用NAT端口映射,实现静态转换的一对多转换(跟一对一的转换差别不大,只是多定义了下端口号)。命令如下:
Router(config)#ip nat inside source static tcp 192.168.1.1 80 20.0.0.2 80 extendable #将内网ip地址为192.168.1.1的web服务器在与外网通信时转换为20.0.0.2
Router(config)#ip nat inside source static tcp 192.168.1.2 25 20.0.0.2 25 extendable #将内网ip地址为192.168.1.2的SMTP服务器在与外网通信时转换为20.0.0.2
以上两条配置成功后(同样需要分别在内部端口和外部端口启动NAT),当外网用户访问web服务器时,路由器会对应NAT转换条目,并查看端口号,然后把数据包传送给192.168.1.1的web服务器;当外网用户访问SMTP服务器时,路由器同样会查看NAT转换条目,并查看端口号,然后把数据包传送给192.168.1.2的SMTP服务器。这样就实现了基于NAT端口映射的一对多的静态转换。(当然,若有两台服务器都是相同服务的话,就不太适用了,如果更改服务默认的端口号,就会不利于用户的访问了。)
PAT
PAT可以实现一对多(一个公网IP地址对应多个私网IP地址)、直接复用路由器外部接口地址,两种实现方式。
一对多的实现命令如下(需要借助ACL控制列表):
Router(config)#access-list 1 permit 192.168.1.0 0.0.0.255 #定义ACL控制列表,允许192.168.1.0/24网段的流量通过。
Router(config)#ip nat pool 123 20.0.0.2 20.0.0.2 netmask 255.0.0.0 #定义合法的公网IP地址池,其中“123”为地址池的名字。可以自行定义。第一段ip为起始ip地址,第二段ip地址为结束ip地址,因为只用一个公网IP,所以起始和结束相同
Router(config)#ip nat inside source list 1 pool 123 overload #overload是启用端口复用方式,这条命令实现的是:以端口复用方式,将ACL 1 中的局部地址转换为123地址池中定义的全局IP地址。
接下来分别在内部端口和外部端口启用NAT即可生效。
直接复用路由器外部接口地址的实现过程如下:
Router(config)#access-list 2 permit 192.168.2.0 0.0.0.255 #定义ACL控制列表,允许192.168.2.0/24网段的流量通过
由于直接使用外部接口地址,因此不用定义IP地址池。
Router(config)#ip nat inside source list 2 in f0/1 overload #在全局配置模式,设置复用动态IP地址转换,在内部的ACL 2 的地址与路由器上与外网连接的接口合法公网IP地址之间建立地址转换。
以上就是几种常用的地址转换方式。在配置完成后可以在特权模式下执行:Router#debug ip nat命令后,让内网和外网通信,来查看调试信息,以便验证地址转换是否达到了我们所要实现的要求,若要关闭此功能,输入Router#no debug ip nat 即可。也可执行Router#show ip nat translations来查看转换条目;执行:Router#clear ip nat translations *删除除静态转换条目以外的所有条目。
NAT的故障排查思路
若遇到NAT故障,基本上可以归于两类:配置错误和没有正确理解NAT的工作方式。 一般可以通过Router#i show run来查看配置,以便检查以下几个方面是否存在问题: 1、是否设置了ACL,阻塞了进行过NAT或没有进行过NAT的流量; 2、定义需要进行NAT的ACL是,漏掉了需要进行地址转换的网络; 3、在NAT语句中漏掉了overload关键字。为了建立PAT,在NAT配置命令的最后,必须使用overload关键字,漏掉这个关键字,将会导致无法进行PAT,最终将会导致只有数目有限的主机可以访问公用网或互联网,而不是期望中的所有主机。 4、不对称路由导致NAT失败,就是在外部端口(outside)和内部端口(inside)配置反了; 5、NAT地址池和静态NAT表项中有重叠地址。要确保NAT地址池中的IP地址也不能用于静态NAT,这很重要。