为什么要配置目的NAT呢,试想,如果一个学校或者公司,需要对公网用户提供一些可访问的服务,这些服务器一般配置为私网地址,而公网用户不可能直接访问私网地址,而源NAT策略是对私网用户访问公网报文的源地址进行转换,没法用在此处。因此,当内网服务器要对外提供服务时,公网用户向私网(公网IP)发起访问,NAT的目标由源地址转变为目的地址,这就是目的NAT,对IP报文的目的地址进行转换,将公网IP地址转换为私网IP地址,使公网用户可以利用公网地址访问内部服务器。
一、基于策略的目的NAT
以下图为例,介绍目的NAT转换过程和基于策略的目的NAT配置方法。
当公网用户访问服务器时,防火墙处理流程如下:
①防火墙收到公网用户访问服务器198.51.100.2的首个报文,匹配NAT策略;
②匹配成功后从目的NAT地址池中选择一个私网IP地址,替换报文的目的地址,同时可以选择使用新的端口替换目的端口或者端口保持不变;
③通过安全策略,会在防火墙上建立会话表;
④防火墙收到服务器响应,匹配会话表,将响应报文的源地址转换为对外提供服务的公网地址;
⑤后续报文根据会话表转发。
基于策略的目的NAT不会生成server-map表。
//基础配置
[USG]interface g1/0/0
[USG-GigabitEthernet1/0/0]ip address 192.168.1.254 24
[USG-GigabitEthernet1/0/0]interface g1/0/1
[USG-GigabitEthernet1/0/1]ip address 203.0.113.254 24
[USG-GigabitEthernet1/0/1]q
[USG]firewall zone dmz
[USG-zone-dmz]add interface g1/0/0
[USG-zone-dmz]firewall zone untrust
[USG-zone-untrust]add interface g1/0/1
[USG-zone-untrust]q
//配置目的NAT地址池
[USG]destination-nat address-group addressgroup1
[USG-dnat-address-group-addressgroup1]section 192.168.1.2 192.168.1.2
//配置NAT策略
[USG-policy-nat-rule-policy_nat1]display this
2023-12-24 12:23:05.840
#
rule name policy_nat1
source-zone untrust
destination-address 192.51.100.2 mask 255.255.255.255
service icmp
action destination-nat static address-to-address address-group addressgroup1
#
return
//配置安全策略
[USG]security-policy
[USG-policy-security]rule name policy1
[USG-policy-security-rule-policy1]source-zone untrust
[USG-policy-security-rule-policy1]destination-zone dmz
[USG-policy-security-rule-policy1]destination-address 192.168.1.2 32
[USG-policy-security-rule-policy1]action permit
[USG-policy-security-rule-policy1]q
//配置黑洞路由
[USG]ip route-static 192.51.100.2 32 NULL 0
//结果
[USG]display firewall session table
2023-12-24 12:25:44.630
Current Total Sessions : 5
icmp VPN: public --> public 203.0.113.2:17187 --> 192.51.100.2:2048[192.168.1
.2:2048]
从会话表可以看出,服务器的公网IP已经被转换成对应的私网IP地址了,且端口不变。
四种转换:adress-to-address、adress-to-port、port-to-address、port-to-port
adress-to-address:公网地址与私网地址一对一转换
121.37.49.12 ------ 192.168.1.1
121.37.49.13 ------ 192.168.1.2
121.37.49.14 ------ 192.168.1.3
adress-to-port:公网地址与私网地址多个端口一对一转换
121.37.49.12:80 ------ 192.168.1.80
121.37.49.13:21 ------ 192.168.1.21
121.37.49.14:22 ------ 192.168.1.22
port-to-address:公网地址多个端口与多个私网地址一对一转换
121.37.49.12:80 ------ 192.168.1.1
121.37.49.12:21 ------ 192.168.1.2
121.37.49.12:22 ------ 192.168.1.3
port-to-port:公网地址的端口与私网地址的端口一对一转换
121.37.49.12:80 ------ 192.168.1.1:80
121.37.49.12:21 ------ 192.168.1.1:21
121.37.49.12:22 ------ 192.168.1.1:22
二、基于NAT Server的目的NAT
针对内网服务器对外提供服务,防火墙还提供更为灵活的配置,NAT Server。
①也需要公网地址;②不需要NAT地址池,可直接使用。
//一句话配置,最好指定特定的服务
[USG]nat server protocol tcp global 198.51.100.2 9980 inside 192.168.1.2 80
[USG]display firewall server-map
2023-12-24 12:56:40.900
Current Total Server-map : 2
Type: Nat Server, ANY -> 198.51.100.2:9980[192.168.1.2:80], Zone:---, protoco
l:tcp
Vpn: public -> public
Type: Nat Server Reverse, 192.168.1.2[198.51.100.2] -> ANY, Zone:---, protoco
l:tcp
Vpn: public -> public, counter: 1
[USG]
最好不要把防火墙的公网地址口IP配置为NAT server的公网IP,一定要配置的话最好指定协议以及端口,避免与访问防火墙的Telnet、WEB等管理协议相冲突。
反向Server-map表项,当私网服务器主动访问公网时,可以直接使用这个表项将报文的源地址转换为公网地址,不用单独为服务器配置源NAT策略。
[USG]firewall zone dmz
[USG-zone-dmz]add interface g1/0/0
[USG-zone-dmz]firewall zone untrust
[USG-zone-untrust]add interface g1/0/1
[USG-zone-untrust]q
[USG]security-policy
[USG-policy-security]rule name policy1
[USG-policy-security-rule-policy1]source-zone untrust
[USG-policy-security-rule-policy1]destination-zone dmz
[USG-policy-security-rule-policy1]destination-address 192.168.1.2 32
[USG-policy-security-rule-policy1]service http
[USG-policy-security-rule-policy1]action permit
[USG-policy-security-rule-policy1]quit
[USG]display firewall session table
2023-12-24 13:16:03.190
Current Total Sessions : 1
http VPN: public --> public 203.0.113.2:2058 --> 198.51.100.2:9980[192.168.1.
2:80]
开启黑洞如下,防环。
[USG]ip route-static 198.51.100.2 32 NULL 0
三、NAT Server场景下的黑洞路由
以此图为例
NAT Server的全局地址和公网端口的地址在同一个网段上,防火墙收到公网的ping报文,会发送ARP请求报文,寻找该地址的MAC地址,但是网络中没有其他设备配置了该地址,因此没有回应,防火墙最终丢弃该报文。
若不在同一个网段,分两种情况,第一种是简单的配置,第二种是精细化配置。
第一种:nat server global 198.51.99.2 inside 192.168.1.2
公网访问198.51.99.2的报文,全程根据路由,最后在防火墙目的地址被转化成192.168.1.2,然后访问私网地址,没问题。
第二种:nat server protocol tcp 198.51.99.2 9980 inside 192.168.1.2 80
若公网不访问对应配置的端口,而是使用ping操作,此时问题就出现了,报文到达防火墙无法匹配Server-map表以及会话表,只能根据路由转发,于是从原来端口发送出去,而路由器又根据路由发到防火墙,如此反复,就形成环路。
综上,最好就是都配置黑洞路由。
四、多出口场景下的NAT Server
让一个私网服务器向两个ISP发布两个不同的公网地址提供服务,有两种方法。
方法1:将防火墙的公网地址口划分到不同的安全区域,配置NAT Server时,带上zone参数即可。
[USG]firewall zone dmz
[USG-zone-dmz]add in
[USG-zone-dmz]add interface g1/0/0
[USG-zone-dmz]firewall zone name ISP1
[USG-zone-ISP1]set priority 10
[USG-zone-ISP1]add interface g1/0/1
[USG-zone-ISP1]firewall zone name ISP2
[USG-zone-ISP2]set priority 20
[USG-zone-ISP2]add interface g1/0/2
[USG]nat server zone ISP1 protocol tcp global 198.51.100.2 9980 inside 192.168.1
.2 80 unr-route
[USG]nat server zone ISP2 protocol tcp global 203.0.113.2 9980 inside 192.168.1.
2 80 unr-route
[USG]security-policy
[USG-policy-security]rule name policy1
[USG-policy-security-rule-policy1]source-zone ISP1
[USG-policy-security-rule-policy1]destination-zone dmz
[USG-policy-security-rule-policy1]destination-address 192.168.1.2 32
[USG-policy-security-rule-policy1]service http
[USG-policy-security-rule-policy1]action permit
[USG-policy-security-rule-policy1]q
[USG-policy-security]rule name policy2
[USG-policy-security-rule-policy2]source-zone ISP2
[USG-policy-security-rule-policy2]destination-zone dmz
[USG-policy-security-rule-policy2]destination-address 192.168.1.2 32
[USG-policy-security-rule-policy2]service http
[USG-policy-security-rule-policy2]action permit
[USG-policy-security-rule-policy2]q
[USG-policy-security]q
[USG]
[USG]display firewall server-map
2023-12-25 07:55:50.460
Current Total Server-map : 4
Type: Nat Server, ANY -> 203.0.113.2:9980[192.168.1.2:80], Zone: ISP2 , prot
ocol:tcp
Vpn: public -> public
Type: Nat Server, ANY -> 198.51.100.2:9980[192.168.1.2:80], Zone: ISP1 , pro
tocol:tcp
Vpn: public -> public
Type: Nat Server Reverse, 192.168.1.2[203.0.113.2] -> ANY, Zone: ISP2 , prot
ocol:tcp
Vpn: public -> public, counter: 1
Type: Nat Server Reverse, 192.168.1.2[198.51.100.2] -> ANY, Zone: ISP1 , pro
tocol:tcp
Vpn: public -> public, counter: 1
方法2:假如两个公网端口已经划分为同个区域untrust,且无法调整,此时可以用no-reverse,配置NAT server带上该参数即可。
[USG]nat server protocol tcp global 198.51.100.2 9980 inside 192.168.1
.2 80 no-reverse unr-route
[USG]nat server protocol tcp global 203.0.113.2 9980 inside 192.168.1.
2 80 no-reverse unr-route
配置完可以发现Server-map只生成了正向的,没有反向的,假如你不带no-reverse参数,是配置不成功的,试想,若成功了,会有两条去往untrust区域的反向Server-map,报文源地址可以转换成两个公网地址,此时防火墙就无法处理了。
双出口问题,还需要考虑一个问题,两个ISP中的公网用户要使用哪个公网地址访问私网服务器。
假如ISP1的公网用户使用了防火墙向ISP2发布的公网地址,去访问私网服务器,该访问基本很慢或者不能访问,因此,要求我们准确向两个ISP的公网用户告知公网地址。
还有一个问题就是源进非源出,即出口选路问题,从其中一个公网口进,响应报文却从另一个公网口出,报文很可能无法回到源ISP。
两个方法:①配置明细路由,不过这个方法不太现实,工作量太大;②配置源进源出策略功能;
[USG-GigabitEthernet1/0/2]redirect-reverse next-hop 203.0.113.4
[USG-GigabitEthernet1/0/2]gateway 203.0.113.4
参考资料:防火墙和VPN技术与实践 李学昭