NAT是一种地址转换技术,可以将ipv4报文头中的地址做转换,通常情况下,利用nat技术将ipv4报文头中的私网地址转换为公网地址,实现了内网设备与公网设备的互访。
从实现上来说,NAT转换设备都维护一张地址转换表。地址转换的机制分为:
内部网络主机的ip地址和端口转换为nat转换设备外部网络地址和端口
外部网络主机的ip地址和端口转换位nat转换设备内部网路地址和端口
即私有地址+端口与共有地址+端口之间互相转换。
常见的nat转化设备由路由器、防火墙等。
NAT分类
SNAT
对报文中的源地址进行转换。通过源nat将私网ip地址转换为公网ip地址,使私网用户可以利用公网地址访问internet。
当私网用户访问公网时,报文到达fw,fw将报文的源ip地址由私网地址转换为公网地址
当回程报文返回fw时,fw再将报文的目的地址由公网地址转换位私网地址。
No-pat
只转换地址,不转换端口,实现私网到公网地址一对一转换,适用于上网人数少,公网地址多的常见使用。
分为local no-pat:生成的server-map表项中包含了安全区域参数,只有此安全区域的server可以访问内网host
global no-pat:生成的server-map表项中不包含安全区域参数,所有安全区域的server可以访问内网host
具体过程
参考报文转发流程
1、fw收到host发送的报文后,根据目的地址判断报文需要在trust和untrust区域之间流动,通过安全策略检查后继而查找nat策略,发现需要对报文进行地址转换。
2、fw根据轮询算法从nat地址池中选择一个空闲的公网ip地址,替换报文的源地址,并建立server-map表和会话表,然后将报文发送到公网。
正向server-map表项保证了特定私网用户访问公网时,快速地址转换,提高fw处理效率。
反向server-map表项允许公网用户主动访问私网用户,将报文进行地址转换。
3、fw收到公网回包后,匹配会话表中表项,将报文的目的地址替换为host的ip地址,然后将报文发送到私网。
4、如果地址池中地址分配光了,剩余内网主机的外网访问需求将无法满足,直到地址池中有空闲地址。
实验一:私网用户通过NAT NO-PAT访问internet(访问明确的目的server)
需求和拓扑
某工作室在网络边界处部署了FW作为安全网关。为了使私网中10.1.1.0/24网段的用户可以正常访问Internet,需要在FW上配置源NAT策略。由于需要上网的用户少且访问明确的目的Server,FW采用NAT No-PAT的地址转换方式,将匹配上NAT策略的私网地址进行一对一转换。工作室向ISP申请了6个IP地址(1.1.1.10~1.1.1.15)作为私网地址转换后的公网地址。其中Router是ISP提供的接入网关。
(扫码回复NAT1获取完整实验拓扑环境及配置)
配置步骤
1、配置终端设备及网络设备接口ip地址、划分安全区域
2、配置路由
fw1上配置
ip route-static 1.1.2.2 255.255.255.255 1.1.1.254
3、配置安全策略security-policy
rule name 1
source-zone trust
destination-zone untrust
source-address 10.1.1.0 mask 255.255.255.0//注意这里是nat前的地址,因为在进行源nat前要执行安全策略
destination-address 1.1.2.2 mask 255.255.255.255
service http
service icmp
action permit
security-policy
rule name 1
source-zone trust
destination-zone untrust
source-address 10.1.1.0 mask 255.255.255.0//注意这里是nat前的地址,因为在进行源nat前要执行安全策略
destination-address 1.1.2.2 mask 255.255.255.255
service http
service icmp
action permit
4、配置NAT
4.1 配置地址池
nat address-group 1
mode no-pat global//使用global不关联安全区域
section 1.1.1.10 1.1.1.15
4.2 配置NAT策略
nat-policy
rule name 1
source-zone trust
destination-zone untrust
source-address 10.1.1.0 mask 255.255.255.0
destination-address 1.1.2.2 mask 255.255.255.255
action source-nat address-group 1
//实现私网指定网段访问非目的server时不进行源地址转换
rule name 2
source-zone trust
destination-zone untrust
source-address 10.1.1.0 mask 255.255.255.0
destination-address any
action no-nat
测试和分析
在client1上ping server
ping 1.1.2.2
在fw的g1/0/0抓包
在fw的g1/0/1抓包
说明在fw对报文源地址nat前,其源地址是10.1.1.10,目的地址是1.1.2.2,经过fw源nat后,其源地址是1.1.1.10,目的地址是1.1.2.2。而回包的源地址是1.1.2.2,目的地址是1.1.1.10,回包被nat后,其源地址是1.1.2.2,而目的地址是10.1.1.10。
查看fw的会话表和sever-map表项
在client1上访问server的http服务
在fw的g1/0/0抓包
在fw的g1/0/1抓包
说明在fw对报文源地址nat前后,http的请求报文的源端口始终是随机端口2049,目的端口始终是http端口80,http的回应报文的源端口始终是http端口80,目的端口始终是随机端口2049。
查看fw的会话表和sever-map表项
可以看到no-pat默认生成reverse的表项,这在配置了粗糙的安全策略的情况下会造成安全隐患。如果配置了从untrust到trust方向的安全策略放行icmp报文,那么公网的ping包也可以直接被nat地址后被发送到私网并被响应。
NAPT
同时转化地址和端口,实现多个私网地址共用一个或者多个公网地址,适用于公网地址数量少,需要上网的私网用户数量大的场景。
具体过程
1、fw收到私网报文后,根据目的地址判断报文区域流向,通过安全策略检查后继而查找nat策略,发现需要对报文进行地址转换。
2、fw根据源地址 hash算法从nat地址池中选择一个公网地址,替换报文的源地址,同时使用新的端口号替换报文的源端口号,并建立会话表(没有建立server-map表),然后将报文转发到公网。
3、fw收到公网回包后,匹配会话表中表项,转换还原回包目的地址和目的端口,然后将报文转发到私网。
实验二:私网用户通过NAPT访问Internet(限制公网地址对应的私网地址数)
需求和拓扑
某公司在网络边界处部署了FW作为安全网关。为了使私网中10.1.1.0/24网段的用户可以正常访问Internet,需要在FW上配置源NAT策略。除了公网接口的IP地址外,公司还向ISP申请了6个IP地址(1.1.1.10~1.1.1.15)作为私网地址转换后的公网地址。当大量的内网用户上网时会导致NAT转换时端口冲突,因此需要限制公网地址对应的私网地址数,保证用户正常上网。其中Router是ISP提供的接入网关。
(扫码回复NAT2获取完整实验拓扑环境及配置)
配置步骤
1、配置终端设备及网络设备接口地址
2、配置路由
ip route-static 2.2.2.2 255.255.255.255 1.1.1.254
3、配置安全策略
security-policy
rule name 1
source-zone trust
destination-zone untrust
source-address 10.1.1.0 mask 255.255.255.0
destination-address 2.2.2.0 mask 255.255.255.0
service ftp
service icmp
action permit
4、配置NAT
//配置nat地址池
nat address-group 1 0
mode pat
section 0 1.1.1.10 1.1.1.15
srcip-car-num 256//私网与公网地址比例为256:1
//配置nat策略
nat-policy
rule name 1
source-zone trust
destination-zone untrust
source-address 10.1.1.0 mask 255.255.255.0
destination-address 2.2.2.0 mask 255.255.255.0
service ftp
service icmp
action source-nat address-group 1
测试和分析
在client1上ping server
在fw的g1/0/0口抓包(trust侧,nat前)
在fw的g1/0/1口抓包(untrust侧,nat后)
检查fw的会话表和server-map表项
在client1上访问server的ftp服务
在fw的g1/0/0口抓包(trust侧,nat前)
在fw的g1/0/1口抓包(untrust侧,nat后)
检查fw的会话表和server-map表项
发现没有生成server-map表项,并且nat前后的源端口发生了改变。
Smart NAT
no-pat和napt的结合,指定地址池中某个地址预留做napt,其余做no-pat。适用于上网用户突然激增的场景。fw优先采用no-pat的方式转换地址,当可被no-pat方式的公网地址用完时,新的用户连接将使用预留的这个ip地址做napt的转换。
区别于no-pat:如果地址池中地址分配光了,剩余内网主机的外网访问需求将无法满足,直到地址池中有空闲地址。
实验三:私网用户通过Smart NAT访问Internet
需求和拓扑
某公司在网络边界处部署了FW作为安全网关。为了使私网中10.1.1.0/24网段的用户可以正常访问Internet,需要在FW上配置源NAT策略。除了公网接口的IP地址外,公司还向ISP申请了6个IP地址(1.1.1.10~1.1.1.15)作为私网地址转换后的公网地址。网络环境如图,其中Router是ISP提供的接入网关。
通常情况下,同一时刻需要访问Internet的私网用户数量很少,使用No-PAT方式即可;为了解决突发性私网用户数量增多的情况,预留一个公网IP地址进行NAPT方式的地址转换。
(扫码回复NAT3获取完整实验拓扑环境及配置)
配置步骤
1、配置终端设备及网络设备接口地址
2、配置路由
ip route-static 2.2.2.2 255.255.255.255 1.1.1.254
3、配置安全策略
security-policy
rule name 1
source-zone trust
destination-zone untrust
source-address 10.1.1.0 mask 255.255.255.0
destination-address 2.2.2.0 mask 255.255.255.0
service ftp
service icmp
action permit
4、配置NAT
//配置nat地址池
nat address-group 1 0
mode no-pat global
section 0 1.1.1.10 1.1.1.14
smart-nopat 1.1.1.15
//配置nat策略
nat-policy
rule name 1
source-zone trust
destination-zone untrust
source-address 10.1.1.0 mask 255.255.255.0
destination-address 2.2.2.0 mask 255.255.255.0
service ftp
service icmp
action source-nat address-group 1
测试和分析
使用client1-7同时登录ftp server,观察fw的server-map表和session table。
[f1]dis fire session table
2022-02-09 14:19:54.940
Current Total Sessions : 12
ftp VPN: public --> public 10.1.1.10:2057[1.1.1.10:2057] +-> 2.2.2.2:21
ftp VPN: public --> public 10.1.1.20:2053[1.1.1.11:2053] +-> 2.2.2.2:21
ftp VPN: public --> public 10.1.1.30:2055[1.1.1.12:2055] +-> 2.2.2.2:21
ftp VPN: public --> public 10.1.1.40:2055[1.1.1.13:2055] +-> 2.2.2.2:21
ftp VPN: public --> public 10.1.1.50:2055[1.1.1.14:2055] +-> 2.2.2.2:21
ftp VPN: public --> public 10.1.1.60:2055[1.1.1.15:2051] +-> 2.2.2.2:21
ftp VPN: public --> public 10.1.1.70:2050[1.1.1.15:2052] +-> 2.2.2.2:21
ftp-data VPN: public --> public 10.1.1.10:2058[1.1.1.10:2058] --> 2.2.2.2:2072
ftp-data VPN: public --> public 10.1.1.20:2054[1.1.1.11:2054] --> 2.2.2.2:2071
ftp-data VPN: public --> public 10.1.1.30:2056[1.1.1.12:2056] --> 2.2.2.2:2070
ftp-data VPN: public --> public 10.1.1.40:2056[1.1.1.13:2056] --> 2.2.2.2:2069
ftp-data VPN: public --> public 10.1.1.50:2056[1.1.1.14:2056] --> 2.2.2.2:2068
ftp-data VPN: public --> public 10.1.1.60:2051[1.1.1.15:2051] --> 2.2.2.2:2073
ftp-data VPN: public --> public 10.1.1.70:2054[1.1.1.15:2052] --> 2.2.2.2:2074
[f1]dis fire server-map
2022-02-09 14:21:02.510
Current Total Server-map : 10
Type: No-Pat Reverse, ANY -> 1.1.1.12[10.1.1.30], Zone:---
Protocol: ANY, TTL:---, Left-Time:---, Pool: 0, Section: 0
Vpn: public
Type: No-Pat Reverse, ANY -> 1.1.1.14[10.1.1.50], Zone:---
Protocol: ANY, TTL:---, Left-Time:---, Pool: 0, Section: 0
Vpn: public
Type: No-Pat Reverse, ANY -> 1.1.1.11[10.1.1.20], Zone:---
Protocol: ANY, TTL:---, Left-Time:---, Pool: 0, Section: 0
Vpn: public
Type: No-Pat Reverse, ANY -> 1.1.1.13[10.1.1.40], Zone:---
Protocol: ANY, TTL:---, Left-Time:---, Pool: 0, Section: 0
Vpn: public
Type: No-Pat Reverse, ANY -> 1.1.1.10[10.1.1.10], Zone:---
Protocol: ANY, TTL:---, Left-Time:---, Pool: 0, Section: 0
Vpn: public
Type: No-Pat, 10.1.1.40[1.1.1.13] -> ANY, Zone:---
Protocol: ANY, TTL:360, Left-Time:359, Pool: 0, Section: 0
Vpn: public
Type: No-Pat, 10.1.1.50[1.1.1.14] -> ANY, Zone:---
Protocol: ANY, TTL:360, Left-Time:356, Pool: 0, Section: 0
Vpn: public
Type: No-Pat, 10.1.1.10[1.1.1.10] -> ANY, Zone:---
Protocol: ANY, TTL:360, Left-Time:357, Pool: 0, Section: 0
Vpn: public
Type: No-Pat, 10.1.1.30[1.1.1.12] -> ANY, Zone:---
Protocol: ANY, TTL:360, Left-Time:358, Pool: 0, Section: 0
Vpn: public
Type: No-Pat, 10.1.1.20[1.1.1.11] -> ANY, Zone:---
Protocol: ANY, TTL:360, Left-Time:359, Pool: 0, Section: 0
Vpn: public
可见使用no-pat的1.1.1.10-14存在server-map表而使用napt的1.1.1.15没有server-map表。
Easy IP
利用出接口的公网ip作为NAT地址,进行napt转换。适用于企业没有公网地址池,甚至公网出接口都不固定的情况(如pppoe方式获得的公网地址)。
实验四:私网用户通过NAPT访问Internet(限制公网地址对应的私网地址数)
需求和拓扑
某公司在网络边界处部署了FW作为安全网关。公司只向ISP申请了一个公网IP地址用于FW公网接口和ISP的Router互联。为了使公司私网中10.1.1.0/24网段的用户可以正常访问Internet,需要在FW上配置出接口地址方式的源NAT策略,使用私网用户直接借用FW公网接口的IP地址来访问Internet。网络环境如图,其中Router是ISP提供的接入网关。
(扫码回复NAT4获取完整实验拓扑环境及配置)
配置步骤
1、配置终端设备及网络设备接口地址
2、配置路由
ip route-static 2.2.2.2 255.255.255.255 1.1.1.254
3、配置安全策略
security-policy
rule name 1
source-zone trust
destination-zone untrust
source-address 10.1.1.0 mask 255.255.255.0
destination-address 2.2.2.0 mask 255.255.255.0
service ftp
service icmp
action permit
4、配置NAT
//不配置nat地址池
//配置nat策略
nat-policy
rule name 1
source-zone trust
destination-zone untrust
source-address 10.1.1.0 mask 255.255.255.0
destination-address 2.2.2.0 mask 255.255.255.0
service ftp
service icmp
action source-nat address-group 1
测试和分析
在client1上ping server
在fw的g1/0/0口抓包(trust侧,nat前)
在fw的g1/0/1口抓包(untrust侧,nat后)
检查fw的会话表和server-map表项
在client1上访问server的ftp服务
在fw的g1/0/0口抓包(trust侧,nat前)
在fw的g1/0/1口抓包(untrust侧,nat后)
检查fw的会话表和server-map表项
发现没有生成server-map表项,并且nat前后的源端口发生了改变。
三元组NAT
允许公网用户主动连接私网的源NAT式的NAPT。适用于基于P2P的文件共享、语音通信、视频传输等。
三元组NAT的端口不能复用,保证了内部PC对外呈现的端口的一致性,不会动态变化,但是公网地址利用率低。
支持外部设备通过转换后的地址和端口主动访问内部PC,FW即使没有配置相应的安全策略,也允许此类访问报文通过。
同时维护会话表和sever-map 表。
实验五:私网用户通过三元组NAT访问Internet
需求和拓扑
某公司在网络边界处部署了FW作为安全网关。为了使私网中10.1.1.0/24网段的用户可以正常访问Internet,需要在FW上配置源NAT策略。除了公网接口的IP地址外,公司还向ISP申请了6个IP地址(1.1.1.10~1.1.1.15)作为私网地址转换后的公网地址。网络环境如图,其中Router是ISP提供的接入网关。
同时,要求私网用户与Internet上的主机之间能进行P2P业务交流,如文件共享、语音通信、视频传输等,Internet上的主机也能主动访问私网用户。
配置步骤
1、配置终端设备及网络设备接口地址
2、配置路由
ip route-static 2.2.2.2 255.255.255.255 1.1.1.254
3、配置安全策略
security-policy
rule name 1
source-zone trust
destination-zone untrust
source-address 10.1.1.0 mask 255.255.255.0
destination-address 2.2.2.0 mask 255.255.255.0
service ftp
service icmp
action permit
4、配置NAT
//配置nat地址池
nat address-group 1 0
mode full-cone global
section 0 1.1.1.10 1.1.1.14
//配置nat策略
nat-policy
rule name 1
source-zone trust
destination-zone untrust
source-address 10.1.1.0 mask 255.255.255.0
destination-address 2.2.2.0 mask 255.255.255.0
service ftp
service icmp
action source-nat address-group 1
5、开启端点无关过滤功能
firewall endpoint-independent filter
测试和分析
[f1]dis firewall session table
2022-02-09 15:31:27.140
Current Total Sessions : 1
ftp VPN: public --> public 10.1.1.30:2059[1.1.1.12:4096] +-> 2.2.2.2:21
[f1]dis firewall server-map
2022-02-09 15:31:35.090
Current Total Server-map : 2
Type: FullCone Dst, ANY -> 1.1.1.12:4096[10.1.1.30:2059], Zone: ---
Protocol: tcp(Appro: ---), TTL: 60, Left-Time: 58, Pool: 0, Section: 0
Vpn: public -> public, Hotversion: 1
Type: FullCone Src, 10.1.1.30:2059[1.1.1.12:4096] -> ANY, Zone: ---
Protocol: tcp(Appro: ---), TTL: 60, Left-Time: 58, Pool: 0, Section: 0
Vpn: public -> public, Hotversion: 1