目录
NAT背景
因为IPv4地址的不足,公网地址资源地址池耗尽,所以公司、学校等局域都是用私网地址
A类:10.0.0.0 ~ 10.255.255.255
B类:172.16.0.0 ~ 172.31.255.255
C类:192.168.0.0 ~ 192.168.255.255
NAT可以单独转换IP报文的源地址或目的地址,也可以同时转换IP报文的源地址和目的地址,所以,NAT可以分为源NAT、目的NAT和双向NAT。
NAT地址池:防火墙在进行地址转换时就是从NAT地址池中挑选一个IP地址,作为转换后的IP地址。挑选哪个IP地址是随机的,和配置时的是顺序、IP地址大小等因素没有关系。
防火墙上的NAT策略是配置NAT策略来实现的,NAT策略由转换后的地址(地址池地址或者出接口地址)、匹配条件和动作三部分组成。
源NAT
常用于将私网地址转换为公网IP地址,当私网用户访问互联网的报文到达防火墙时,防火墙将报文的源地址由私网地址转换为公网地址,当回程报文返回至防火墙时,防火墙再将报文的目的地址由公网地址转换为私网地址。
整个过程对于内部网络中的用户和互联网上的主机来说是完全透明的。
动态一对一 No-PAT
PAT即Port Address Translation端口地址转换,只转换报文的IP地址,不转换端口
搭建一个拓扑图,如图所示,client为内网用户,防火墙作为出口连接运营商ISP,Server是外网的服务器。
No-PAT模式下,一台主机会消耗掉一个IP地址,当地址池中IP地址都被使用以后,剩下的内部主机无法实现地址转换了。
实验配置
防火墙基础配置,配置两个接口的IP地址。作为出口防火墙需要配置一条默认去往外网的路由。
连接内网用户的端口是trust,连接外网的端口是untrust。
# 配置IP地址
interface GigabitEthernet1/0/0
ip address 192.168.1.1 255.255.255.0
#interface GigabitEthernet1/0/1
ip address 192.168.100.1 255.255.255.0
#
# 静态默认路由
ip route-static 0.0.0.0 0.0.0.0 GigabitEthernet1/0/1 198.51.100.10
# 添加端口到trust区域
firewall zone trust
add interface GigabitEthernet1/0/0
# 添加端口到untrust区域
firewall zone untrust
add interface GigabitEthernet1/0/1
配置防火墙安全策略,是trust到untrust区域
security-policy
rule name user_internet
source-zone trust
destination-zone untrust
source-address 192.168.1.0 mask 255.255.255.0
service http
action permit
配置地址池,模式选择no-pat和local模式。
本地(Local)NO-PAT:本地NO-PAT生成的Server-Map表中包含安全区域参数,只有此安全区域的Server可以访问内网Host。
全局(Global)NO-PAT:全局NO-PAT生成的Server-Map表中不包含安全区域参数,一旦建立,所有安全区域的Server都可以访问内网Host。
nat address-group addgroup1
mode no-pat local
section 0 198.51.100.2 198.51.100.3
配置NAT策略 命名为user_internet,指定源区域trust、目的区域untrust,这两个是大范围,我又添加了两个规定:源地址为192.168.1.0的网段,不指定就是允许全部的IP;并且服务只允许http服务,不指定就是允许全部的服务
rule name user_internet
source-zone trust
destination-zone untrust
source-address 192.168.1.0 mask 255.255.255.0
service http
action source-nat address-group addgroup1
测试结果
抓包结果
sever-map表
可以查看防火墙的Server-map,Server-map会记录地址转换情况。
No-Pat表示正向Server-map,即指从内网IP发起的连接,保证特定私网用户访问互联网时,快速转换地址,提高了设备处理效率,
No-Pat Reverse表示反向Server map,允许互联网上的用户主动访问私网用户,将报文进行地址转换。
[FW1]display firewall server-map
2023-09-01 06:39:29.100
Current Total Server-map : 4
Type: No-Pat Reverse, ANY -> 198.51.100.2[192.168.1.2], Zone: untrust
Protocol: ANY, TTL:---, Left-Time:---, Pool: 0, Section: 0
Vpn: public
Type: No-Pat Reverse, ANY -> 198.51.100.3[192.168.1.3], Zone: untrust
Protocol: ANY, TTL:---, Left-Time:---, Pool: 0, Section: 0
Vpn: public
----------------------------------------------------------------------------------------
Type: No-Pat, 192.168.1.2[198.51.100.2] -> ANY, Zone: untrust
Protocol: ANY, TTL:360, Left-Time:264, Pool: 0, Section: 0
Vpn: public
Type: No-Pat, 192.168.1.3[198.51.100.3] -> ANY, Zone: untrust
Protocol: ANY, TTL:360, Left-Time:285, Pool: 0, Section: 0
Vpn: public
设备接收到报文并完成基础处理后,仍然会先查找会话,如果匹配了会话,则按照会话信息处理和转发报文,不需要查找Server-map表。
但是如果未匹配会话,则会先查找Server-map表,找到后再进入会话创建流程。Server-map表生成的不止这个No-Pat还有ASPF也会生成Server-map表。
黑洞路由
地址池如果和出接口地址不在相同网段会造成路由环路,比如有人ping你的NAT地址池中的地址,防火墙根据默认路由向ISP发送,但是ISP知道这是你分配的公网IP又会发给你。
在同一个网段时又会发送arp请求报文,寻找该地址的MAC地址,但是并没有设备配置这个地址,肯定不会响应,导致一直广播,最终报文会因为TTL变为0被丢弃。
配置方式:1.route enable 2.手写静态路由
#
nat address-group addgroup1
mode no-pat local
#开启黑洞路由,防火墙会将NAT地址池中的地址生成UNR(User Network Route用户网络路由) ,其作用与黑洞路由的作用相同,可以防止路由环路
route enable
section 198.51.100.2 198.51.100.3
路由表中会出现一条UNR路由
# 也可以手工写黑洞路由
ip route-static 198.51.100.2 255.255.255.255 NULL0
ip route-static 198.51.100.3 255.255.255.255 NULL0
# 路由表会出现这两条路由
198.51.100.2/32 Static 60 0 D 0.0.0.0 NULL0
198.51.100.3/32 Static 60 0 D 0.0.0.0 NULL0
动态多对一 NAPT
NAPT表示同时转换IP地址和端口,PAT不只是转换端口的意思,而是IP地址和端口同时转换,不同于No-PAT的是,NAPT在转换时不会生成Server-map表。
这个拓扑图是FW1所在网络是主公司,FW2是分公司,还有一个Client公网用户。
前提条件:
防火墙和路由器接口地址已配置
防护墙配置静态默认路由
路由器配置去往各个网段的静态路由
实验配置
配置NAT地址池和黑洞路由
#FW1(FW2据此参考)
nat address-group addgroup1
#指定转换方式为PAT
mode pat
#开启黑洞路由
route enable
section 11.1.1.100 11.1.1.102
NAT策略
#FW1(FW2据此参考)
nat-policy
rule name user_internet
source-zone dmz
destination-zone untrust_fen
source-address 10.1.1.0 mask 255.255.255.0
action source-nat address-group addgroup1
#
配置安全策略
#FW1
rule name user_internet
source-zone dmz
destination-zone untrust
destination-zone untrust_fen
source-address 10.1.1.0 mask 255.255.255.0
service http
service https
action permit
rule name fen_zhu
source-zone untrust_fen
destination-zone dmz
source-address 12.1.1.100 mask 255.255.255.255
source-address 12.1.1.101 mask 255.255.255.255
source-address 12.1.1.102 mask 255.255.255.255
action permit
##(FW2据此参考)
PC3 ping PC2,在FW1和FW2都查看会话表,NAPT没有Server-map表
[FW1]dis firewall session table
2023-09-11 04:00:57.110
Current Total Sessions : 1
icmp VPN: public --> public 10.1.1.2:62096[11.1.1.100:2064] --> 10.1.2.1:2048
[FW2]dis firewall session table
2023-09-11 04:01:06.360
Current Total Sessions : 1
icmp VPN: public --> public 11.1.1.100:2064 --> 10.1.2.1:2048
Easy-IP出接口方式
出接口地址方式指的是利用出接口的公网IP地址作为转换后的地址的NAT方式,也是同时转换地址和端口,可以看为NAPT方式的一种变体,所以也没有Server-map表。
应用场景是防火墙的公网端口通过拨号方式动态获取公网IP地址,公网的IP地址是动态变化的,此时可以使用出接口地址方式,即使出接口地址发生变化,也可以按照新的公网IP地址进行地址转换。
不需要配置地址池和黑洞路由,只需要有NAT策略即可。
实验配置
#在上个NAPT实验的基础上配置
nat-policy
rule name easy_ip
source-zone dmz
destination-zone untrust
source-address 10.1.1.0 mask 255.255.255.0
action source-nat easy-ip
PC3 ping 公网用户client 会话表查看
[FW1]dis firewall session table
2023-09-11 04:26:18.480
Current Total Sessions : 5
icmp VPN: public --> public 10.1.1.2:59030[202.1.1.2:2051] --> 202.1.1.1:2048
icmp VPN: public --> public 10.1.1.2:58262[202.1.1.2:2048] --> 202.1.1.1:2048
icmp VPN: public --> public 10.1.1.2:59286[202.1.1.2:2052] --> 202.1.1.1:2048
icmp VPN: public --> public 10.1.1.2:58518[202.1.1.2:2049] --> 202.1.1.1:2048
icmp VPN: public --> public 10.1.1.2:58774[202.1.1.2:2050] --> 202.1.1.1:2048
Smart NAT
“聪明的NAT”,融合了NAT No-PAT方式和NAPT方式的特点,其中m个预留地址,这m个地址用来NAPT,n-m个地址构成地址段1(Section1)进行No-PAT方式的一对一转换,Section1中的地址用尽之后,使用m个地址NAPT。
(地址池 n个地址 n-m 做 No PAT m个地址做 NAPT)。
实验配置
# 因为在FW2上做过smart nat,地址池addgroup1被nat-policy使用,所以必须先停掉nat-policy才能再修改地址池配置
# 停止引用地址池
[FW2]nat-policy
[FW2-policy-nat]rule name user_internet
[FW2-policy-nat-rule-user_internet]undo action source-nat
# 修改地址池
nat address-group addgroup1
mode no-pat global
route enable
smart-nopat 12.1.1.101
#这个12.1.1.101规定为预留地址,section地址池中就不能再包含预留地址
section 0 12.1.1.100 12.1.1.100
# NAT策略重新使用地址池
[FW2]nat-policy
[FW2-policy-nat]rule name user_internet
[FW2-policy-nat-rule-user_internet]action source-nat address-group addgroup1
分公司两台PC ping 主公司的PC之后查看会话表,no-pat的12.1.1.100没有转换端口,12.1.1.101端口发生了转换
#查看会话表
[FW2]display firewall session table
2023-09-11 05:58:27.780
Current Total Sessions : 7
icmp VPN: public --> public 10.1.2.2:29612[12.1.1.101:2061] --> 10.1.1.2:2048
icmp VPN: public --> public 10.1.2.1:30380[12.1.1.100:30380] --> 10.1.1.2:2048
#查看server-map表
[FW2]dis firewall server-map
2023-09-11 08:22:49.400
Current Total Server-map : 2
Type: No-Pat Reverse, ANY -> 12.1.1.100[10.1.2.1], Zone:---
Protocol: ANY, TTL:---, Left-Time:---, Pool: 0, Section: 0
Vpn: publicType: No-Pat, 10.1.2.1[12.1.1.100] -> ANY, Zone:---
Protocol: ANY, TTL:360, Left-Time:360, Pool: 0, Section: 0
Vpn: public
三元组NAT
为了解决P2P业务和NAT共存的问题,就要用到三元组NAT,三元组NAT是USG900系列防火墙才支持这个功能。
PC1和PC2是两台运行P2P业务的客户端,它们运行P2P应用时首先会和P2P服务器进行交互(登录、认证等操作),P2P服务器会记录客户端的地址和端口。当PC2需要下载文件时,服务器会将拥有该文件的客户端的地址和端口发送给PC2(例如PC1的地址和端口),然后PC2会向PC1发送请求,并从PC1上下载文件。
为了保持联系,PC1会定期向P2P服务器发送报文。NAPT方式决定了转换后的端口并不是固定的,会动态变化。这样的话,P2P服务器记录的PC1的地址和端口的信息也要经常刷新,会影响P2P业务正常运行
其次,根据防火墙的转发原理,只有P2P服务器返回给PC1的报文命中会话表后才能通过防火墙,其他主机如PC2不能通过转换后的地址和端口来主动访问PC1。默认情况下,防火墙上的安全策略不允许这一类的访问报文通过。三元组NAT可以完美地解决上述两个问题,因为三元组NAT方式在进行转换时有以下两个特点。
①对外呈现端口一致性
②支持外网主动访问
与NAT No-PAT一样,三元组NAT也可以生成Server-map表,也分为本地(Local)三元组NAT和全局(Global)三元组NAT两种。本地三元组NAT生成的Server-map表中包含安全区域参数,只有此安全区域的用户可以访问内网用户。全局三元组NAT生成的Server-map表中不包含安全区域参数,一旦建立,所有安全区域的用户都可以访问内网用户。
没有实验环境,不再进行演示,NAT策略和安全策略正常配置,只介绍一下地址池命令。
[USG6000V1]nat address-group sanyuan
[USG6000V1-address-group-sanyuan]mode full-cone local # 指定模式为三元组模式
[USG6000V1-address-group-sanyuan]section 1 202.1.1.2 202.1.1.3
三元组NAT会生成Server-map表,但是防火墙针对三元组NAT有一个“端点无关过滤”,默认是开启的
[USG6000V1]firewall endpoint-independent filter enable
开启端点无关过滤功能后,报文只要命中目的Server-map表就可以通过防火墙,不受安全策略控制。关闭端点无关过滤,报文即使命中目的Server-map表项也要进行安全策略的检查。