思科NAT(PAT)转换的一些关键概念解析和实例

一般人的头脑中或多或少对NAT都有所了解,但是往往只了解一些表面化的地址转换思路,但是具体到一些NAT转换的细节和具体场景,例如NAT Control、NAT 豁免、等价NAT,内部、外部转换场景,以及各种NAT的区别、特点等等,可能就会发现思路并不那么顺畅,所以,adreaman特意整理了这篇NAT关键概念的解析文档,以思科ASA防火墙的NAT配置为实例,梳理一下相关概念和应用场景。

NAT(网络地址转换)是使用预定义的映射地址替换IP报文中的真实地址,达到修改或隐藏某些网络应用的地址的目的的一种方案。

  • Dynamic NAT

将报文的真实IP地址转换为预定义(地址池中)的映射IP地址,以达到在目的网络路由和隐藏真实地址的目的。只有来自真实地址一侧的报文才能建立这个转换连接。地址池中的地址可能少于需要转换的真实地址,一旦地址池中的地址用尽,Dynamic NAT就无法继续转换功能,此时可以配置后面介绍的PAT功能来完成(端口)地址转换。NAT将消耗一些目的网络的地址(就是地址池中那些),所以,如果目的网络的可路由地址有限,此方案难免捉襟见肘。

  • Dynamic PAT

PAT功能将IP不同的报文的地址转换为一个同一IP的报文,但是IP不同的报文的端口号也将转换为互不相同。同Dynamic NAT一样,只有来自真实地址一侧的报文才能建立这个转换连接。PAT相对NAT节约了目的网络的IP地址(PAT甚至可以直接使用目的网络出接口的接口IP作为转换后的IP地址)。但是,PAT使得一些对端口号有特殊敏感需求的协议无法正常工作。

  • Policy Dynamic NAT

当使用一般NAT时,所有匹配指定源地址的流将被该NAT规则转换,而策略Dynamic NAT不直接指定源地址,而是使用一个ACL匹配流量,则可以指定ACL策略(可指定源、目的地址和源、目的端口),匹配该ACL的流被指定的NAT转换。这样,就可以实现更高级和复杂的流量分类分别转换。例如,同样是来自A主机的IP,访问服务器X的流量会被某NAT规则转换,而访问服务器Y的流量会被另一条NAT规则转换。

  • 思科Dynamic NAT(PAT)的配置实现

Dynamic NAT(PAT)的配置需要NAT命令和Global命令两条命令配置完成。NAT命令中指定入接口、nat_id和真实IP地址范围,Global命令指定出接口、nat_id和转换IP地址范围(或单个IP做PAT)。转换时,先在匹配NAT配置中的入接口和真实IP,再根据转发策略(路由等)确定出接口,然后在Global配置中匹配出接口和nat_id,如果找到,则根据找到的global配置来转换。如果既找到了NAT也找到了PAT,优先使用NAT。NAT命令的接口、nat_id和IP三元组标识一个NAT配置,可以重复配置NAT只要两个NAT的三元组不完全相同。同样的,Global可重复配置,只要两条Global的三元组不完全相同。例如,同样接口同样nat_id的Gloabl PAT可以配置多个,只要使用的转换IP不同(这样就可以突破单个ip的IP只有大约64000个的数目限制了)。
举例(动态策略NAT):
access-list test-acl permit ip 10.1.2.0 255.255.255.0 209.165.201.0 255.255.255.224
nat (inside) 1 access-list test-acl
global (outside) 1 209.165.202.129-209.165.202.155
举例(动态NAT):
nat (inside) 1 10.1.1.0 255.255.255.0
global (outside) 1 209.165.201.10-209.165.201.20
global (outside) 1 209.165.201.5

  • Outside Dynamic NAT (bidirectional NAT) 外部NAT转换或称双向NAT

如果在某些网络应用拓扑中,需要NAT命令指定的接口的安全级别比对应(与之匹配)的Global命令指定的接口安全级别低,则需在配置NAT命令时,添加outside参数。这叫做outside NAT(外部NAT),或bidirectional NAT(双向NAT)。

  • static NAT (静态NAT)

动态NAT使用一组映射地址(地址池)动态地为真实地址做映射转换,与动态NAT不同,静态NAT是一种固定从真实地址到映射地址的转换。而且,静态NAT允许目的网络的主机发起连接的建立(当然,前提是从非安全网络到安全网络的流量还需acl的允许)。

  • 思科static Policy NAT(策略静态NAT)的配置实现

配置一条ACL(使用access-list命令),这条ACL的作用是制定匹配的流量,如果流量是从真实接口侧向转换地址侧的,则流量的源地址匹配这条acl命令中的第一个地址,目的地址匹配acl命令中的第二个地址,反之,如果流量是从转换接口侧的网络到真实接口侧的网络,则流量的目的地址匹配这条acl命令中的第一个地址,源地址匹配acl命令中的第二个地址。然后,在一个static命令中指定这个acl。例如:
access-list test-acl extended ip host 10.1.1.1 209.165.200.224 255.255.255.224
static (inside,outside)? 192.168.1.1 access-list test-acl
这两条命令就形成了一个policy static NAT,这个static命令指定inside接口所在网络为真实接口网络,ouside接口网络为转换目的网络,转换后的映射地址使用192.168.1.1。当流量从inside网络流向outside网络时,如果流量的源地址为10.1.1.1,目的地址为209.165.200.224(掩码255.255.255.224),则匹配了这个static命令的策略acl,就使用static命令指定的映射地址192.168.1.1修改源地址,将流量的源IP从10.1.1.1改为192.168.1.1;如果流量是从outside网络流向inside网络,且流量的目的IP为192.168.1.1,源地址匹配209.165.200.224(掩码255.255.255.224),则将流量的目的IP从192.168.1.1转换为10.1.1.1。

  • 思科static NAT的配置实现

举例:
static (inside,outside) 209.165.201.12 10.1.1.3 netmask 255.255.255.5
当流量从inside网络流向outside网络,且流量的源地址为10.1.1.3,则将流量的的源地址转换为209.165.201.12;如果流量从outside网络流向inside网络,如果流量的目的地址匹配209.165.201.12,则将流量的目的地址转换为10.1.1.3。
特别注意:static NAT命令指定的掩码是同时指定真实网络地址和映射网络地址的掩码,例如:
static (inside,dms) 10.1.1.0 10.1.2.0 netmask 255.255.255.0
这里24位掩码是说inside接口的10.1.2.0/24网络和outside接口的10.1.1.0/24网络的地址一一对应转换。

因为静态NAT本身就可以支持两侧网络都可以发起连接的建立,所以,static NAT就不需要向outside Dynamic NAT那样的外部NAT(或双向NAT)了,已经天然支持了。

  • 思科static policy PAT的配置实现

举例说明:
access-list test-acl permit tcp host 10.1.1.15 eq telnet 10.1.3.0 255.255.255.0
static (inside,outside) tcp 10.1.2.14 telnet access-list test-acl
上面两条命令描述了一个这一的PAT转换:从inside流向outside的,来自真实地址10.1.1.15主机端口23(telnet)且去往10.1.3.0/24网络的流量转换为来自10.1.2.14:23的流量,将outside网络流向inside网络的,且来自10.1.3.0/24网络的,去往10.1.2.14:23端口的流量转换为真实地址10.1.1.15的端口23(telnet)的流量。

  • 思科static PAT的配置实现

举例说明:
static (inside,outside) tcp 10.1.2.45 80 10.1.1.6 8080 netmask 255.255.255.255
从inside网络流向outside网络的来自10.1.1.6:8080的流量,转换为来自10.1.2.45:80的流量;来自outside的去往10.1.2.45:80的流量,转换为去往10.1.1.6:8080的流量。

  • NAT的匹配顺序

1、NAT Exemption
2、Static NAT(PAT) 包括策略static
3、策略Dynamic NAT(PAT)
4、Dynamic NAT(PAT)
注意:上述前三条是按照配置顺序逐个尝试匹配,而第四条动态NAT的匹配,是根据最长掩码匹配的原则来匹配的。

  • NAT Control

一般情况下,如果没有NAT规则匹配,报文被直接转发,并不进行NAT转换,但是,当配置了NAT Control时:
1、从高安全级别的网络到低安全级别的网络的报文,必须匹配NAT后才能通过,如果没有匹配的NAT,则被丢弃
2、从低优先级网络到高优先级网络,或者同级网络之间,如果网络间未配置任何NAT,则报文可正常通过,如果网络间配置了NAT,则报文必须匹配NAT后经NAT转换后才可通过,否则被丢弃。
上述描述仅限Dynamic NAT,NAT Control并不影响Static NAT的原有行为。

在NAT Control下,对流量增加了安全限制,但是,在某些网络应用中,我们需要“稍微突破”一下这种限制,有以下三种方法:

  • 三种bypass方法

1、Identify NAT (NAT 0命令): Identify NAT实际是一种特殊的Dynamic NAT,即一条不进行地址转换的NAT表项(无需global命令与之对应)。nat_id必须为0。有了它,流量就突破了NAT Control的无NAT不转发的封锁。由于Identify NAT(等价NAT)并不指定出接口,所以, 所有来自Identify NAT指定网络(经由此接口进入)的流量,无论转发到哪个网络,都不会进行NAT转换,这一点无法进行高级配置,这是Identify NAT的一个弱点。
2、Static Identify NAT: 静态等价NAT,实际就是真实地址和转换地址相同的静态NAT,如果是静态策略等价NAT,则acl中的主机地址必须和转换地址(也就是真实地址)相同,。相比Identify NAT,它既可以指定目的网络(出接口),又可以使用策略ACL匹配流量进行分流匹配。
3、NAT Exemption: NAT豁免,看起来就是Identify NAT(等价NAT)加了一个ACL匹配,但实际上,除了它们都不能指定目的接口这个相同点外,二者有如下几处不同:
1、Identify NAT只能内向外建立连接,而NAT Exemption可以双向建立连接
2、可以用ACL策略匹配流量(但是ACL的源目的端口参数失效)
3、NAT Exemption不支持MAX Tcp连接数等连接参数的设置

好了,NAT的一些基本概念就是这些,但是在具体的配置中还可能有很多特殊的场景和特别的处理,如果有任何问题,欢迎与adreaman(adreaman.hans#gmail.com)交流,也欢迎你为本文留下评论。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>