ASAv 中配置 NAT(SNAT、DNAT).note
# 防火墙需要使用 acl 放行流量,否则ping不通
access-list ACL permit ip any any
access-group ACL global
show run policy-map
policy-map global_policy
class inspection_default
inspect icmp一、(不建议使用)配置 SNAT(使用host来指定内网IP):
不建议使用这种 指定host的来配置snat,因为这种方式会带有dnat(映射)效果,访问公网IP就相当于访问这个内网IP,假如防火墙本身需要配置 SSLVPN或者 IPSec VPN,这样都会导致它们无法建立(因为流量被转发给了内网IP)
1、静态 NAT:(静态 一对一 转换)
object network DMZ_pool
host 172.16.10.100 //指定要转换的主机(需要包含在下面定义的区域中)
nat (Dmz,Outside) static 100.1.1.100 配置SNAT,同时也有dnat的效果,访问100.1.1.100,就等同于访问 172.16.10.100
2、动态 NAT:
object network Dynamic_pool
subnet 192.168.10.0 255.255.255.0 //指定要转换的地址段(需要包含在下面定义的区域中)
# subnet 0.0.0.0 0.0.0.0 // 如果内网网段很多,也可以指定 0.0.0.0 0.0.0.0 来匹配内网网段
nat (Inside,Outside) dynamic interface //将Inside区域的地址动态转换成 Outside 区域的接口地址二、(建议使用)配置 SNAT(使用subnet来指定内网网段):
这种方式就不会带有dnat效果
建议使用这种snat方式,并使用下面的dnat方式,单独针对服务端口来进行映射
1、写法一(在object network下配置 nat):
(1)将单个内网IP转换:
object network Dynamic_pool
host 192.168.1.1
nat (Inside,Outside) dynamic interface //将Inside区域的地址动态转换成 Outside 区域的接口地址
# 或者转换成单个IP:
nat (Inside,Outside) static 98.76.54.1(2)将内网网段转换:
object network Dynamic_pool
subnet 192.168.10.0 255.255.255.0 //指定要转换的地址段(需要包含在下面定义的区域中)
nat (Inside,Outside) dynamic interface //将Inside区域的地址动态转换成 Outside 区域的接口地址
# 或者转换成单个IP:
nat (Inside,Outside) static 98.76.54.1(3)如果要匹配多个不连续的网站,那么就可以写多个 object:

2、写法二(在全局模式下配置nat):
(1)转换成公网接口地址:
object network nat //创建object
subnet 192.168.10.0 255.255.255.0
# subnet 0.0.0.0 0.0.0.0 // 如果内网网段很多,也可以指定 0.0.0.0 0.0.0.0 来匹配内网网段
nat (Inside,Outside) source nat dynamic interface //(在全局模式下配置)调用前面创建的object,将其转换为接口公网IP(2)静态转换(转换为指定公网IP地址):
object network INSIDE
subnet 192.168.10.0 255.255.255.0
exit
object network OUTSIDE
host 112.20.23.47
exit
nat (Inside,Outside) source static INSIDE OUTSIDE //将 INSIDE,转换为 OUTSIDE·(注意)如果有多个公网接口:

object network NAT
subnet 172.16.0.0 255.255.255.0
nat (Inside,any) static 112.20.23.47三、单独针对服务端口进行DNAT(Auto NAT):
# 配置dnat:
object network NAT
host 192.168.100.1 //这里写内网服务器地址
nat (Inside,Outside) static interface service udp 53 53 //将内网udp 53端口映射到公网53端口
nat (Inside,Outside) static interface service tcp http http //将内网tcp 80端口,映射到外网80端口
或:
nat (Inside,Outside) static 123.1.1.254 service tcp http http# 格式:
nat ([内网区域],[外网区域]) static interface service [协议] [内网端口] [外网端口]四、二次NAT(用于SSLVPN)(manual NAT):
# 问题原因:
因为配置了snat,导致sslvpn客户端ping内网客户端时,内网客户端的回复包(因为源地址被snat匹配上)被进行了snat转换转换为了公网IP地址,因此当sslvpn接受到这个数据包时会无法识别直接丢弃,因为该数据包的源地址并不是内网客户端的地址,而是ASA DNAT后的公网地址# 解决方法:
object network INSIDE //匹配内网ip 或网段
host 192.168.1.1
或:
subnet 192.168.1.0 255.255.255.0
object network SSLVPN //匹配SSLVPN地址池网段
subnet 123.1.1.0 255.255.255.240
# 配置二次nat,匹配源地址为内网ip、目标地址为SSLVPN网段的数据包,将其进行snat(将源地址转换为源地址,等于不变)和dnat(将目标地址转换为目标地址,也等于没变),此时已经经过一次nat转换后,它就不会再经过snat进行转换了:
nat (Inside,Outside) source static INSIDE INSIDE destination static SSLVPN SSLVPN五、使用manual nat配置SNAT:
1、将内网地址转换为接口地址:
# 定义内网地址范围:
object network INSIDE
subnet 192.168.100.0 255.255.255.0
# 配置Manual NAT SNAT(PAT):
nat (inside,outside) source dynamic INSIDE interface## source dynamic == PAT
## source static //一个内网IP,固定映射一个公网IP
# 这里的SNAT和上面的DNS Doctoring配置很像,但是作用完全不同:
# source dynamic这里也能够调用dns(DNS Doctoring)参数,但是不会生效,从设计上就是与dynamic冲突的,最好不用加dns参数
nat (inside,outside) source static INSIDE interface dns //没有SNAT的功能,能够提前改写DNS数据包
nat (inside,outside) source dynamic INSIDE interface //进行PAT2、将内网地址转换为地址池地址:
但是与路由器不同,ASA不能在本地定义Null来接收该路由,这样会导致SNAT无法生效
如果这个地址范围是不存在的,那么不能在ASA本地定义Null路由,然后发布到公网,必须在ISP上写静态路由,指给ASA,然后在ISP上将这条路由发布到公网
# 定义内网地址范围:
object network INSIDE
subnet 192.168.100.0 255.255.255.0
# 定义地址池:
object network POOL
range 98.76.5.10 98.76.5.10
# 配置Manual NAT SNAT(PAT):
nat (inside,outside) source dynamic pat-pool INSIDE POOL如果不加 pat-pool,直接调用地址池,就不是pat了,而是一对一转换,将一个内网地址,转换为一个公网地址
3、Policy NAT:
定义条件,例如,只有目的为 123.1.1.0/29的流量,才SNAT为地址池的地址;其他目的地的流量,SNAT为接口地址
# ISP定义地址池回程路由,并发布到公网:
ip route 123.1.1.0 255.255.255.240 98.76.5.1
router bgp 65000
network 123.1.1.0 mask 255.255.255.240
# 匹配地址:
object network INSIDE //匹配内网地址范围
subnet 192.168.100.0 255.255.255.0
object network OUTSIDE //定义SNAT Pool 地址池
range 123.1.1.1 123.1.1.10
object network POLICY //定义Policy目的地址
subnet 8.8.8.0 255.255.255.0
# host 8.8.8.8
# 配置NAT规则:
nat (inside,outside) source dynamic INSIDE interface //普通流量转换为接口地址
nat (inside,outside) source static INSIDE OUTSIDE destination static POLICY POLICY //去往8.8.8.0/24的流量转换为123.1.1.0/29如果去掉普通的SNAT,就会变为:只有去往 8.8.8.0/24的流量才进行SNAT
# 查看NAT规则:
show xlate
show nat detial

六、(不生效)配置手动DNAT(Manual NAT):
下面能生效的只有那条 DNS doctoring,但是它是将outside接口的所有流量都映射到内网中,如果有的设备要跟outside接口建立VPN,就会无法建立
1、将DNS端口映射到外网,并自动将外网无法访问的dns自动转换为公网地址(DNS Doctoring):
如果是要DNAT DNS流量的话,建议使用 auto nat,因为下面的命令中nat (inside,outside) source static DC-SRV interface dns 会将整个outside接口的流量都映射到内网
# 匹配内网服务器地址:
object network DC-SRV
host 192.168.100.1
exit
# 匹配端口:
object service DNS-UDP
service udp destination eq 53
# 配置将 公网53端口映射到内网53端口:
nat (inside,outside) source static DC-SRV interface service DNS-UDP DNS-UDP
# 配置DNS重写(修改dns数据包,将内网地址改为公网接口地址):
nat (inside,outside) source static DC-SRV interface dns必须两条都配置才能转发DNS流量,否则外网客户端无法访问dns端口
source static 和 source dynamic 的区别:
static //固定nat映射,长期存在
dynamic //只在流量需要时才存在,不固定映射(无法使用DNS Doctoring)
# 查看 NAT表:
show nat detial
测试:
DNS本地解析为内网地址,并且没有配置 split-dns:


但是外网客户端解析时却直接解析为了ASA公网地址:

2、将80端口映射到外网:
# 匹配内网服务器地址:
object network DC-SRV
host 192.168.100.1
exit
# 匹配端口:
object service HTTP
service tcp destination eq 80
# 配置manual NAT:
nat (inside,outside) source static DC-SRV interface service HTTP HTTP