NAT

NAT

Scroll Down

一、NAT

1、NAT介绍

为了增加IPV4地址的利用率,而出现的节流型技术。我们都知道IP地址的演变,从分类到VLSM,再到CIDR。VLSM和CIDR打破地址分类的界限,从而提高IPV4地址利用率。而RFC1917定义了可供在局域网中重复使用的3个著名IP地址段——叫做私网地址,私网地址由于可以重复使用,所以是不可路由的,而在公网可路由的地址叫公网地址。NAT就是一种在私网地址和公网地址之间转换的技术。但是从根本上解决地址匮乏的问题,只能由IPV6解决。

用于局域网NAT的著名私网地址段:

  • A:10.0.0.0 – 10.255.255.255
  • B:172.16.0.0 – 172.31.255.255
  • C:192.168.0.0 – 192.168.255.255
  • 用于运营商NAT的私网地址段:100.64.0.0 – 100.127.255.255(100.64.0.0/10)

IPv4向IPv6过渡的过程涉及终端、网络和应用等多方面的改造,不可能一蹴而就,为此出现了多种过渡技术,如DS-LITE、NAT64、6RD、双栈和NAT444等,其中NAT444仅需在运营商侧引入二次NAT,对终端、服务的更改最小,所以成为了运营商的首选过渡方案。NAT444通过端口块分配方式来解决溯源问题、通过IRF实现性能扩展问题,从而为运营商提供完善的NAT444解决方案,运营商级别NAT也叫CGN。

宽带上网的用户所使用的光猫或者路由器需要先拨号,运营商下发的其实是100.64.0.0/10中的地址,所以宽带上网的用户实际上是做了多重NAT,第一重NAT是家用路由器,第二重NAT则是运营商的NAT。为什么采用这样方式?这是因为IPV6进展缓慢,IPV4消耗太快,所以提出了NAT444方案,该方案的目的就是将过去给每个宽带用户独立分配公网IP的方式改成了分配运营商NAT中的IP给用户,运营商对接入的用户同一部署了NAT设备,再由运营商NAT设备将100.64.0.0/10地址转换成公网IP,这样就能实现多个用户共享同一个IP地址。

1、NAT特点&转换规则

NAT(Network Address Translation, 网络地址转换)技术的作用就是在设备转发数据包时,执行私有地址与公有地址之间的转换!NAT的优点有节省IP地址空间、隐藏内部地址增加安全性、增加网络接入Internet的弹性、解决IP地址重叠问题。NAT的缺点就是会增加转发延迟,丧失端到端的寻址能力,需要一定的内存空间支持动态存储NAT表项,需要消耗CPU资源进行转换操作。

nat1.png
NAT转换规则需要从两个方向来讨论:

  • 数据包从outside到inside,先转换后查路由
  • 数据包从inside到outside,先查路由后转换

二、NAT模式

1、静态NAT

nat2.png
将私网地址与公网地址进行一对一的明确转换。静态NAT主要用在内部网络中有对外提供服务的服务器,如WWW、MAIL服务器时。该方法的缺点是需要独占宝贵的公网IP地址(当然,插一句,在IPV4网络中公网地址非常宝贵)。

定义转换策略:ip nat inside source static 公网IP 私网IP

指定公网接口:
int g0/0
ip nat outside

指定私网接口:
int g0/1
ip nat inside

查看NAT转换槽:sh ip nat translations

2、动态NAT

动态NAT也是将私网地址与公网地址进行多对多的转换。但是是从内部全局地址池中动态地选择一个未使用的地址对内部本地地址进行转换。该地址是由未被使用的地址组成的地址池中在定义时排在最前面的一个。当数据传输完毕后,路由器将把使用完的内部全局地址放回到地址池中,以供其它内部本地地址进行转换。但是在该地址被使用时,不能用该地址再进行一次转换。这种技术较少用,太浪费公网IP。

3、PAT

nat3.png

端口复用NAT也称为端口地址转换(Port Address Translation,PAT),是一种动态地址转换。路由器将通过记录地址、应用程序端口等唯一标识一个转换。通过这种转换,可以使多个私网地址同时与同一个公网地址进行转换并对外部网络进行访问。对于只申请到少量IP地址甚至只有一个公网IP地址,却经常有很多用户同时要求上网的情况,这种转换方式非常有用!

公网地址端口号映射不同的内网主机,理想状态下一个公网地址可以使用端口数为4k

nat4.png

匹配感兴趣流:access-list ACL号 permit 源地址
定义转换策略:ip nat inside source list ACL号 interface 公网接口

定义公网接口:
int g0/0
ip nat outside

定义私网接口:
int g0/1
ip nat inside

查看NAT转换槽:sh ip nat trans
清除NAT转换槽:clear ip nat trans *
查看NAT配置:sh run | s nat

三、NAT应用

1、TCP负载分担

当外部设备想要访问NAT 路由器的某项服务时,表面看NAT路由器会按照外部设备的要求为它们提供服务,但是实际上,只是根据索要服务的项目,把请求信息提交给了负责相应服务的内部设备而已。比如一台外部PC分别试图访问公网接口为50.1.1.1的路由器(开启NAT功能)的23和80号端口。但是这台路由器实际上并不为外部设备提供任何服务,它可以通过地址转换,将数据包转发给身后真正提供相应服务的设备,让他们为外部设备提供服务。可以通过NAT实现TCP负载分担。在这类环境下,一般采用静态NAT,以便将不同的服务转发给专门的设备。

一般情况,ISP会封锁低端口号(比如80、22、23),这时需要在我们在内部有台服务器提供了WEB服务,我们会在出口路由器上,将该服务器的80端口映射成公网上的8888(高端口ISP不可能封锁),其他公网上的主机,可以通过服务器加8888就可以访问内部服务器的WEB服务

现有外部设备A、内部设备B和C,中间有台NAT功能的路由器。A telnet 路由器公网接口的23端口时,实际由B对A提供远程服务。当A 访问路由器公网接口的80端口时,实际由C对A提供HTTP服务。那么拥有NAT功能的路由器需要设置静态NAT实现TCP的负载分担(全局):

ip  nat  inside  source  static   tcp  B  23  路由器公网接口地址 23
ip  nat  inside  source  static   tcp  C  80  路由器公网接口地址 80
  • 关键字static后面指明要进行转换的协议(tcp)
  • 在需要转换地址及转换后地址后面,指明相应的端口号

测试TCP 23端口的负载分担:telnet  27.1.1.2
查看TCP连接的建立情况:show  tcp  brief
查看TCP 负载分担的转换条目:show  ip  nat   translations

2、NAT轮询

外部用户对内部的真实主机访问时,NAT路由器会会截获得访问的数据包,把目的地址以循环方式把目的地址转换为对应的真实主机上,以实现内网服务器的负载均衡。比如,内网有2台服务器,分别是 192.168.1.1、192.168.1.2、这2台服务器对公网开放的内容都是一样的,为了避免公网的访问流量对单台服务器造成的负荷,可将公网的流量以负载均衡的方式,让每台服务器承担二分之一的访问量,用户第一次访问将跳转到192.168.1.1这台服务器,第二次访问将跳转到192.168.1.2,以此轮询。