ASA-NAT/PAT

一、NAT/PAT概述

1、NAT/PAT技术背景

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

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地址。

地址转换技术不仅提高了IPV4地址的利用率,同时还能隐藏内部网络编址。基于上述两种原因使得地址转换技术在现网中的应用非常广泛。

2、NAT&PAT

地址转换技术分为NATPATNATNetwork Address Translation网络地址转换)主要用于内部网络(私网不可路由)的主机访问外部网络(全局可路由)的技术,或者简单称之为一种将公网地址和私网地址相互映射以达到通信的技术。NAT是一种地址转换技术,但是NAT并不能实现提高IPv4地址利用率的效果。NAT分为静态NAT动态NAT静态NAT就是一对一静态映射,将一个公网地址和一个私网地址进行关联转换。动态NAT就是多对多动态映射,通过从公网IP地址池中随机对私网网段的IP地址进行动态映射。

PATPort Address Translation端口地址转换)主要用于内部网络(私网不可路由)的主机访问外部网络(全局可路由)的技术。PAT可以定义一种一对多的地址映射关系。PAT在NAT的基础上增加了端口映射,而一个IP地址理论上具备65536个端口,因此PAT能够将一个公网地址的端口映射到一个内部网络的一台主机的一个端口。例如公网地址100.100.100.100可以把81和82端口映射到内部网络中的192.168.1.1 80和192.168.2.1 80。PAT相比NAT的优势就是PAT能够提高IPv4地址利用率。

二、防火墙NAT/PAT

1、防火墙NAT/PAT

ASA在路由模式透明模式下均支持NATPAT两种类型的地址转换。ASA的地址转换技术相比较路由器地址转换技术有些区别。地址转换不再和接口关联,而是根据源目关键字进行关联(source,destination),对于地址转换所要匹配的数据流方向则是通过接口对定义,例如内到外NAT可以写成(inside,outside)也叫Inside NAT/source NAT;外到内NAT可以写成(outside,inside),也叫Outside NAT/destination NAT;对于即有内到外也有外到内的NAT叫做Twice NAT,换句话说对源和目的都进行转换的NAT。总结:

  • Object NAT:主机在安全接口间互访的数据包源或者目的对象做转换的NAT。

    • Inside NAT:主机位于高安全级别端口,访问低安全级别端口。数据包源地址从私网地址转换成全局地址,返回流量则采用Outside NAT处理方式。国内部分厂商将其称为源NAT

    • Outside NAT:主机位于低安全级别端口,访问高安全级别端口。数据包目的地址从全局地址转换成私网地址。国内部分厂商将其称为目的NAT

  • Twice NAT:主机在安全接口间互访的数据包源地址和目的对象均需要做转换的NAT。

PAT是一种动态地址转换,定义了一种一对多的地址映射关系。ASA会查看数据包首部的4层报头并创建一个转换表,以区分使用同一全局IP地址的内部主机。思科ASA支持静态PAT和动态PAT两种PAT技术,静态PAT常用于服务器端口映射,动态PAT常用于内部主机上网

2、对象

无论是Object NAT/PAT还是TwiceNAT/PAT都需要用到Object。IP地址、IP子网、域名、端口/服务等在ASA中都可以被定义为Object。Object Group则是将具有相同属性的Object都放到一个组中,以方便NAT和ACL调用。Object分为网络对象(IP地址对象、IP子网对象、域名对象)和服务对象(端口/服务)。同理Object-group分为网络对象组和服务对象组。

创建对象

object network object-name
  description object-test
  {host x.x.x.x | subnet x.x.x.x netmask | range x.x.x.x x.x.x.y | fqdn}

网络对象支持主机、子网、主机范围、FQDN。

object service object-name
  service {icmp | icmp6}[icmp-type [icmp-code]]
  service {tcp | udp}[source operator port][destination operator port]

operator可以选择lt小于、gt大于、eq等于、neq不等于、range范围(range 100 200)

对象命名规范:网络_前缀

创建对象组

object-group network object-group-name
  description object-group-test
  network-object {host x.x.x.x | x.x.x.x netmask | object object-name}

网络对象组支持主机、子网、现有对象

object-group service object-group-name
  service-object {icmp | icmp6}[icmp-type [icmp-code]]
  service-object {tcp | udp}[source operator port][destination operator port]
  service-object object object-name

3、NAT配置方式

NAT/PAT配置方式有两种。一种是Object NAT/Auto NAT(对象NAT/自动NAT),另一种是Twice NAT(两次NAT)。一般单向NAT(Inside NAT或Outside NAT)采用Auto NAT配置方式,双向NAT采用Twice NAT配置方式。

1)Auto NAT/PAT

Object NAT/Auto NAT常用于单向NAT配置,所谓单向NAT就是指将真实地址/地址池映射地址/地址池执行固定转换。真实地址和映射地址执行一对一转换叫静态NAT真实地址和映射地址执行多对多转换叫动态NAT

前面提到地址转换的数据流方向通过接口对关联。Inside接口到outside接口的静态地址转换就是静态inside NAT、outside接口到inside接口的静态地址转换就是静态outside NAT,同理还有动态inside NAT动态outside NAT。如果仅配置一种单向NAT,例如静态inside NAT,那么外到内数据流就会执行0.0.0.0/0到0.0.0.0/0转换,也就是说NAT表中存在两条NAT转换条目。

静态NAT

静态NAT执行的是真实地址和映射地址执行一对一转换。每当外部用户想要访问位于内部网络中的任何服务器时(通常提供服务的服务器采用静态私网IP),就需要将公网可路由IP转换为私网不可路由IP,换句话说静态NAT用于内部不可路由主机地址到全局可路由地址的转换。静态NAT允许发起双向连接,即真实内网主机和外网主机都可以主动发起连接。

实验路由环境为服务器192.168.1.101默认路由指向防火墙,防火墙默认路由指出去(回指路由为直连),外部主机有抵达防火墙Outside接口的路由,且外部主机存在Lo0(地址为10.10.10.1/32)。外部主机只有抵达全局映射地址的路由,这种情况也是符合当今互联网接入的场景。

定义服务器对象Inside-Host,IP地址为192.168.1.101。定义全局映射地址对象Map_Inside-Host,IP地址为20.20.20.1。定义Static Source NAT,将服务器对象映射到全局映射地址对象,使得ASA执行内到外流量源地址转换。此时对于流量的控制分为:

  • 服务器主动访问:内到外经过NAT源地址转换,ASA建立NAT转换表和连接,返回流量被直接放行。

  • 外部主机主动访问:外到内需要预先在ASA Outside接口定义并调用入向ACL放行,否则会被拒绝。

动态NAT

动态NAT执行的是真实地址池和映射地址池执行多对多转换。例如内部有100台主机需要进行地址转换,那么ASA就应该在全局地址池中设置100个全局可路由IP。动态NAT不允许发起双向连接,即只有真实内网主机才可以主动发起连接。

静态PAT

静态PAT是指将多个内部服务器映射给一个全局IP地址,通过将全局IP地址端口映射到内部服务器实现。当穿越流量从低安全级别到高安全级别接口时,设备就会对该流量应用端口重定向功能,外部主机会与全局IP地址的指定TCP/UDP端口建立连接,而ASA则会将该端口重定向给内部服务器。静态PAT允许发起双向连接,即真实内网主机和外网主机都可以主动发起连接。

静态PAT特点是允许双向发起连接,即源主机和目的主机都可以发起连接(前提是ACL放行)。

动态PAT

动态PAT是指将多台内部主机IP映射到全局可路由IP的端口上,以实现多对一映射上网。ASA会通过使用源IP、源端口、传输层协议来为内部主机执行转换。ASA支持单个全局可路由IP进行65535个PAT转换,同时为了挪出更多资源,如果转换闲置30s则转换条目就会清除,用于后续的活动转换(即出于活跃状态的转换条目)用。动态PAT不允许发起双向连接,即只有真实内网主机才可以主动发起连接。

2)Twice NAT/PAT

Twice NAT对数据包的源和目的分别进行地址转换。Twice NAT相比较Object NAT,对象可以调用多次,且show run nat的时候Twice NAT更加直观。Twice NAT同时取代了ASA 8.x之前的Policy NAT的功能,可以通过Twice NAT/PAT实现针对不同源或者不同目的映射到不同的全局可路由IP及端口上,这一点大大提高NAT/PAT的灵活性。

Twice NAT配置逻辑

Twice NAT的配置逻辑就是源区域的第一个对象是真实源,第二个对象是映射源,目的区域的第一个对象是映射目的,第二个对象是真实目的。无论是映射源还是映射目的,都可以不是内网网段或者ASA接口地址,可以“凭空造出来”,且Twice NAT仅支持配置Object或者Object-group。Twice NAT相比较Object NAT在数据流方向上并没有严格的限制,因此这里的(inside,outside)其实也就是规定后面的source和destination的配置顺序而已,上述Twice NAT可以等效为nat (outside,inside) source static Internet Map_Internet destination static Map_Inside-Host Inside-Host

Twice NAT数据流解释

当配置完上述Twice NAT后,通过触发访问流量来解释Twice NAT如何工作:

  • 内到外数据流:192.168.1.101访问192.168.4.1;数据流量到达防火墙inside接口,ASA查询conn table没发现连接,匹配中NAT并执行NAT未转换操作形成nat表项,流量抵达ACL Check(默认放行),建立连接,根据nat表项对数据包执行NAT转换(源192.168.1.101转换成20.20.20.1,目的192.168.4.1转换成10.10.10.1),查询到出接口为outside,查询outside相关L3路由,封装L2。最终发出去的数据包IP首部源为20.20.20.1,目的为10.10.10.1。返回流量到达防火墙outside接口,ASA查询conn table发现连接,根据nat表项对数据包执行NAT转换(源10.10.10.1转换成192.168.4.1,目的20.20.20.1转换成192.168.1.101),查询到出接口为inside,查询inside相关L3路由,封装L2。最终发出去的数据包IP首部源为192.168.4.1,目的为192.168.1.101。

  • 外到内数据流:10.10.10.1访问20.20.20.1;数据流量到达防火墙outside接口,ASA查询conn table没发现连接,匹配中NAT并执行NAT未转换操作形成nat表项,流量抵达ACL Check(必须提前定义放行10.10.10.1到192.168.1.101的ACE),建立连接,根据nat表项对数据包执行NAT转换(源10.10.10.1转换成192.168.4.1,目的20.20.20.1转换成192.168.1.101),查询到出接口为inside,查询inside相关L3路由,封装L2。最终发出去的数据包IP首部源为192.168.4.1,目的为192.168.1.101。

Twice NAT配置完成后,内主动访问外的流量不会有任何问题,因为内到外默认ACL全放,使得建立了连接,返回流量击中conn table中的连接,于是返回流量被放行,但是该返回流量不会触发Outside接口中调用的外主动访问内的ACL,还是因为conn table建立的连接。如果外主动访问内没有对应的安全策略则仍然无法通信,因为首包无法被ACL Check执行。可能通过内主动访问外所建立的连接来放行外主动访问内的流量呢?经过测试,这是不可行的。

Twice NAT相比较Object NAT在数据流方向上并没有严格的限制但是对源目IP有着严格限制。即数据包中的源目IP如果有任意一个不同,则就不会击中Twice NAT,也就不会发生地址转换。

4、地址转换绕过

存在一种常规访问场景就是内部用户尝试不执行NAT的情况下访问远程VPN/服务器、访问和ASA的任何其他接口连接的主机/服务器时以及旁路VPN流量,这种叫做地址转换绕过场景。ASA针对地址转换绕过的技术叫identity NAT

Identity NAT通过将数据包转换成相同地址以达到不转换的目的。相比较NAT Exemption,Identity NAT会在xlate表中新建一个条目。NAT前的数据包和NAT后的数据包看起来一样。

5、NAT执行顺序

实际会发现ASA需要部署多种NAT以满足业务要求,因为ASA需要为不同类型的NAT设置优先级。ASA中的NAT执行顺序:

  • Section 1:Twice NAT

遵循先匹配先服务原则(可以随意调整顺序)

  • Section 2:Object NAT

静态转换优于动态转换(静态NAT->静态PAT->动态NAT->动态PAT)

  • Section 3:Twice NAT