浅谈网络地址转换(NAT)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈网络地址转换(NAT)相关的知识,希望对你有一定的参考价值。

随着网络的发展,公网IP地址的需求与日俱增。为了缓解公网IP地址的不足,并且保护公司内部服务器的私网地址,可以使用NAT(网络地址转换)技术将私网地址转化成公网地址,以缓解IP地址的不足,并且隐藏内部服务器的私网地址。
NAT通过将内部服务器的私网IP地址转换成全球唯一的公网IP地址,是内部网络可以连接到互联网等外部网络上。
NAT的实现方式有三种:
静态NAT(static translation)
动态转换(dynamic translation)
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,这很重要。

以上是关于浅谈网络地址转换(NAT)的主要内容,如果未能解决你的问题,请参考以下文章

浅谈Cisco ASA应用NAT

华为NAT网络地址转换

网络技术:NAT 网络地址转换及原理

网络地址转换(NAT)原理和功能是啥?

网络地址转换NAT

网络地址转换(NAT)