经过前面几篇贴子的介绍,相信大家已经对源NAT和NAT Server有了相当了解。NAT功能就像一个武林高手,可内可外,游刃有余,那么这“一内一外”能否配合使用呢?答案当然是肯定的!
如果需要同时改变报文的源地址和目的地址,就可以配置“源NAT+NAT server”,华为防火墙称此类NAT配置为双向NAT。这里要注意:双向NAT不是一个单独的功能,他仅仅是源NAT和NAT Server的组合。这里“组合”的含义是针对同一条流(例如外网主机访问内网服务器的流量),在其经过防火墙时同时转换报文的源地址和目的地址。大家千万不能理解为“防火墙上同时配置了源NAT和NAT Server就是双向NAT”,这是不对的,因为源NAT和NAT Server可能是为不同流配置的。
之前介绍源NAT功能时,强叔为了更利于大家理解相关概念和原理,都是按照内网用户访问外网资源的思路进行组网设计和验证的。实际上,源NAT还可以根据报文的源地址和目的地址所在安全区域进行分类:

1、域间NAT

报文的源地址和目的地址属于不同的安全区域。按照转换报文的方向,又可以分为以下两类:

(1)NAT Inbound(外网访问内网)

报文由低安全级别的安全区域向高安全级别的安全区域方向传输时,基于源地址进行的转换。一般来说,NAT Inbound都会和NAT Server配合使用。

(2)NAT Outbound(内网访问外网)

报文由高安全级别的安全区域向低安全级别的安全区域方向传输时,基于源地址进行的转换。之前介绍的“内网用户访问外网资源”场景大多使用NAT Outbound。
2、域内NAT(内网访问内网)

报文的源地址和目的地址属于相同的安全区域。一般来说,域内NAT都会和NAT Server配合使用,单独配置域内NAT的情况较少见。
当域间NAT或域内NAT和NAT Server一起配合使用时,就实现了双向NAT。当然,上述内容的一个大前提就是:合理设置安全区域的级别并规划网络——内网设备属于Trust域(高级别),内网服务器属于DMZ域(中级别),外网设备属于Untrust域(低级别)。
双向NAT从技术和实现原理上讲并无特别之处,但是他和应用场景有着强相关性。究竟什么时候需要配置双向NAT?配置后有什么好处?不配置双向NAT行不行?这都是实际规划和部署网络时需要思考的问题,且听强叔一一道来。

1、NAT Inbound+NAT Server
下图示意了一个最常见的场景:外网PC访问内网服务器,防火墙做服务器的网关。这个时候我们一般会用到的NAT技术是…(画外音:“强叔,我知道,是NAT Server!这个场景不就是NAT Server的典型场景吗?”)没错,大家果然认真看了强叔之前的贴子!但是强叔下面要讲的是如何在这个场景中应用双向NAT,以及这么做的好处,大家接着看吧。

server以公网IP对外提供服务,防火墙上配置NAT Server,这个大家肯定没有疑问。同时,防火墙上配置NAT Inbound,令PC以私网IP访问server,这个大家可能有疑问,别着急,我们先来看看具体配置。
例1 配置NAT Inbound+NAT Server
#
 nat address-group 1 10.1.1.20 10.1.1.25  //地址池中的IP为私网IP ,且和server的私网IP同网段
 nat server 0 global 210.1.1.15 inside 10.1.1.3
#
nat-policy interzone dmz untrust inbound
 policy 1
  action source-nat
  policy destination 10.1.1.3 0  //由于防火墙先做NAT Server转换,再做源NAT转换,所以此处的目的IP是NAT Server转换后的IP
  address-group 1
这里NAT Server的配置和以前见过的类似,但是源NAT的配置和以前见过的不一样:以前地址池中配置的都是公网地址,而这次配置的却是私网地址。
我们通过下图再来看一下报文的地址转换过程:PC访问server的流量经过防火墙时,目的地址(server的公网地址)通过NAT Server转换为私网地址,源地址(PC的公网地址)通过NAT Inbound也转换为私网地址,且和server的私网地址同网段,这样就同时转换了报文的源地址和目的地址,即完成了双向NAT转换。当server的回应报文经过防火墙时,再次做双向NAT转换,报文的源地址和目的地址均转换为公网地址。

从PC上ping server,通过防火墙上的会话表和Server-map表可以更清楚的看到双向NAT转换:PC的地址通过NAT Inbound转换为私网地址,而server的地址也按照NAT Server的Server-map表转换为私网地址。

好了,我们回过头来看为什么要配置NAT Inbound吧。如果不配置NAT Inbound,行不行?行!不配置NAT Inbound并不影响PC访问server。那配置NAT Inbound有什么好处?好处就是server上可以不用设置网关,当然,前提条件是地址池中的地址需要和server的私网地址同网段。当server回应PC时,server发现自己的地址和目的地址在同一网段,这时server就不会去查路由,而是发送ARP广播报文询问目的地址对应的MAC地址。由于目的地址是地址池中的地址,所以他没有对应的MAC地址,但是防火墙此时挺身而出,防火墙将自己与server直连接口的MAC地址发给server,告诉server“把回应报文给我吧”,所以回应报文将转发到防火墙上。由于server回应报文是通过二层转发,而不是三层转发,所以server上不用配置网关。也许有人说“配置网关还是挺方便的,不用配置NAT Inbound这么麻烦吧”如果只有一台服务器时,的确感受不到有什么好处,但是如果有几十台甚至上百台服务器需要配置或修改网关时,我们就会发现配置NAT Inbound是多么方便了。
如果对之前的组网做一点改变,增加一个Trust区域,该域内的PC2要访问server时,我们该如何配置双向NAT呢?和之前相比,报文的源地址所在安全域发生了变化,原来是Untrust域到DMZ域的报文(Inbound方向),现在变成了Trust域到DMZ域的报文(Outbound方向),所以双向NAT也变化为NAT Outbound+NAT Server,它的转换原理和NAT Inbound+NAT Server完全一样,只不过源NAT的转换方向发生了改变而已。

 

2、域内NAT+NAT Server
域内NAT的场景多见于小型网络,如下图中的PC和server通过交换机与防火墙相连,管理员在规划网络时“偷懒”,将PC和server置于同一安全区域,并分配相同网段地址。

此时,如果希望PC像外网用户一样通过公网地址访问server,就要在防火墙上配置NAT Server。到此就配置完了吗?我们通过下图来看看吧:如果只配置了NAT Server,报文到达防火墙后转换目的地址,server回应报文时发现自己的地址和目的地址在同一网段,这就和之前分析的组网是同样情况了——server通过二层转发报文,回应报文经交换机直接转发到PC,不会经过防火墙转发!

所以,如果希望提高内网的安全性,让回应报文也经过防火墙,就需要配置域内NAT。下面列出了关键的配置步骤。地址池中的地址可以是公网地址,也可以是私网地址,关键是不能和server的私网地址在同一网段。域内NAT的配置和域间NAT几乎完全一样,只不过前者应用在域内做NAT转换,后者应用在域间做NAT转换。
例2 配置域内NAT+NAT Server
#
 nat address-group 1 210.1.1.20 210.1.1.20
 nat server 0 global 210.1.1.15 inside 10.1.1.3
#
nat-policy zone trust  //注意是域内NAT
 policy 1
  action source-nat
  policy destination 10.1.1.3 0  //此处的目的IP是NAT Server转换后的IP
  address-group 1

从PC上ping server,通过防火墙上的会话表和Server-map表可以看到:PC的地址通过域内NAT转换为公网地址,server的地址按照NAT Server的Server-map表转换为私网地址。双向NAT转换后,server回复报文时发现自己的地址和目的地址不在同一网段,此时就需要查路由,通过三层转发报文,所以回应报文需经过防火墙转发。

如果在上面组网的基础上做一个变化,将PC和server分开,通过不同的接口和防火墙相连,此时应该如何配置双向NAT呢?在这个组网中所有报文都需要经过防火墙转发,只配置NAT Server是可以的。如果要配置双向NAT,那么就是域内NAT+NAT Server,具体配置方法和上面是类似的,此处就不再介绍了。

其实双向NAT的原理和配置并不复杂,关键是要想明白NAT转换的方向和转换后地址的作用,而不要纠结于转换后是公网地址还是私网地址。双向NAT并不是必配的功能,有时只配置源NAT或NAT Server就可以达到同样的效果,但是灵活应用双向NAT可以起到简化网络配置、方便网络管理的作用,也就达到了一加一大于二的效果!