1、简介

NAT回流是指服务器提供NAT映射,即满足公网用户通过公网地址访问;也满足内网用户通过公网地址访问,内网用户访问的数据能正常返回就是数据回流功能。在介绍NAT回流之前,先来回顾一个概念什么是NAT技术呢我们看一下它的定义:NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。另外,这种通过使用少量的全球IP地址(公网IP地址)代表较多的私有IP地址的方式,将有助于减缓可用的IP地址空间的枯竭。在RFC 2663中有对NAT的说明。(百度百科) NAT的实现方式有三种:

  1. 静态转换Static Nat 将内部IP一对一的转换为公有IP地址,某个私有IP只转换为某个公有IP
  2. 动态转换Dynamic Nat 将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的,可随机转换为任何指定的合法IP地址。动态转换可以使用多个合法外部地址集。
  3. 端口多路复用OverLoad 将内部多个私有IP共用一个公有IP,通过改变发出数据包的源端口实现端口转换。端口地址转换(PAT(napt),Port Address Translation)采用端口多路复用方式。从而最大限度地节约IP地址资源。

我们平时的工作环境中用到的就是端口多路复用NAT技术,实现局域网连接互联网。那么从端口映射的概念我们知道有SNAT与DNAT,此SNAT与NAT地址转换中的SNAT简写【Static Nat】不是一个概念不要混淆。

2、NAT回流

目前大多数企业网都存在nat回流现象,回流是为了让内网用户能通过公网地址访问服务器。此时还涉及到一个概念就是源进源出和非源进源出。非源进源出例如:设备的数据流从接口7进来但是从接口6出去,从A地址进从B地址出。 华为设备命令: nat server ops_3389_33891 zone untrust protocol tcp global 22x.xxx.xx.16 33891 inside 172.16.xxx.200 3389 no-reverse unr-route
【22x.xxx.xx.16为源进地址,带no-reverse不勾选[允许服务器使用公网地址上网]为源出地址,此时源进源出不一样,源出为默认出口地址】 nat server ops_3389_33891 zone untrust protocol tcp global 223.70.239.16 33891 inside 172.16.151.19 3389 unr-route 【22x.xxx.xx.16为源进地址,不带no-reverse勾选[允许服务器使用公网地址上网]为源出地址,此时源进源出一样,源出为22x.xxx.xx.16】

多次执行带参数no-reverse的nat server命令,可以为该内部服务器配置多个公网地址;未配置参数no-reverse则表示只能为该内部服务器配置一个公网地址。

  • 配置不带no-reverse参数的nat server后,当公网用户访问服务器时,设备能将服务器的公网地址转换成私网地址;同时,当服务器主动访问公网时,设备也能将服务器的私网地址转换成公网地址。
  • 配置参数no-reverse后,设备只将公网地址转换成私网地址,不能将私网地址转换成公网地址。当内部服务器主动访问外部网络时需要执行outbound的nat策略。 global地址可以为静态的IP地址global-address,也可以借用动态的接口,即interface对应的接口,以实现当公网IP发生变化时能进行正常的NAT转换。摘自(华为)

如果内网用户和内部服务器都是通过交换机汇聚后接入到设备上,那么就不能将内网用户和内部服务器划分到不同的安全区域中。所以此时只能通过配置域内NAT来实现内网用户通过公网IP访问内部服务器的需求。在实现域内NAT过程中,既要将访问内部服务器的报文的目的地址由公网地址转换为私网地址,又需要将源地址由私网地址转换为公网地址。

  • 注意:域内的源NAT的“目的地址”,是服务器的内网IP。

3、双向NAT技术

双向NAT两种应用场景:

 NAT Server + 源NAT  【域间双向NAT】
 域内NAT             【域内双向NAT】
  • 目的NAT将网关的Internet端口映射到网关NAT Server的intranet IP。
  • 源NAT将intranet主机的IP转换成网关的Internet IP,使intranet主机能够访问Internet。

双向NAT: 20190112145237221_.png

20190112145638657_.png

QQ浏览器截图20220324124047.png

QQ浏览器截图20220324125901.png

案例分析: FTP server和PC都属于 trust区域,PC希望通过域名访问FTP Server 如图所示: 1.jpg

流量走向: 1)请求流量:PC访问FTP Server的DNS域名,解析出FTP Server的公网地址(为防火墙的NAt Server映射地址)-------->PC的流量到达防火墙上,首先根据NAT Server映射完成目的地址的转换,转化为FTP Server的私网地址(记住,NAT server映射是最先匹配的)------->然后根据查找路由转发到FTP Server上。 2)回应流量(问题就出在这里):回应流量的源地址是FTP Server的私网地址,目的地址是PC的私网地址,流量到达交换机上就会查找路由直接转发给PC,不会再经过防火墙,也就不会进行NAT转换,导致PC上收到回应报文的源地址与自身发送请求报文的目的地址不是同一个,而丢弃了。

所以域内NAT的作用就是让回应报文也要经过防火墙,这就需要回应报文的目的地址是防火墙上的一个地址,所以请求报文要先经过NAT Server完成目的地址的转换后,又要做一个源地址NAT(也就是域内NAT)把PC的地址转换成防火墙上的一个地址。

如果不做域内NAT,则服务器对内网访问的回应的目标地址则是内网的地址,其数据流不会经过USG,其数据连接也不成功。所以要在USG的安全区域内做域内NAT。使得内网用户通过公网访问服务器,其数据在USG上的目标地址转换为私网服务器地址,源地址转换为公网地址。

4、总结

域内NAT的场景就是一个对外开放的web服务,即要满足内部用户通过公网的访问,还要满足外部用户通过公网的访问,用户和服务器部署在一个安全域内就是域内NAT,用户和服务器部署在不同的安全域内就是域间NAT,域间NAT想通信必须过防火墙做安全策略,但是浪费路由资源。

  • 内网的用户可以访问内网服务器,无需NAT,配置路由;
  • 外网用户可以访问内网服务器,需要NAT,配置目的NAT;
  • 内网用户可以访问Internet,需要NAT,配置源NAT;
  • 内网用户可以访问公网IP的内网服务器,在目前的NAT实现机制上,是无法访问的,需要配置端口回流(端口回流是soho级的路由器,中高端企业级路由器上则没有这么一说),中高端设备就是NAT配置完成,也就是域内NAT(双向NAT)。

或者使用DNS解析技术实现,在内网部署一个DNS服务器,同时在域名运营商的平台上公做A记录解析,内网用户解析则会使用内网的DNS服务器,因为当本地DNS服务器发现客户要访问的域名属于本地域,则不会再转发到其他的DNS服务器上做解析,使服务器即满足内网用户的访问需求,也能正常向外网用户提供服务。当内网用户解析服务器IP时,返回值为私网IP。外网用户访问域名解析的时候解析的是公网IP,然后通过公网IP访问到达NAT设备时再转换为私网IP。