ASAv 中配置 NAT(SNAT、DNAT).note

noteId: 8B697CF807A045CF9B76FA1E04871EA9 · 原始路径:/ALL/网络 - C模块/ASAv 防火墙/ASAv 中配置 NAT(SNAT、DNAT).note · 图片:8 · 附件待处理:0

 
 
# 防火墙需要使用 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    //进行PAT
 
 
 
2、将内网地址转换为地址池地址:
但是与路由器不同,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