网络地址转换技术
网络地址转换原理
NAT技术的基本原理
NAT是将IP数据报文报头中的IP地址转换为另一个IP地址的过程,主要用于内部网络(私有IP地址)访问外部网络(公有IP地址)的功能。一般的NAT转换设备(实现NAT功能的网络设备)都维护着一张地址转换表,所有经过NAT转换设备并且需要进行地址转换的报文,都会通过这个表做相应的修改。地址转换的机制分为如下两个部分:
内部网络主机的IP地址和端口转换为外部网络地址和端口。
外部网络地址和端口转换为内部网络主机的IP地址和端口。
<私有地址+端口>与<公有地址+端口>之间相互转换。
NAT转换设备处于内部网络和外部网络的连接处。常见的NAT转换设备有路由器、防火墙等。
NAT分类
NAT可以分为以下三类:
静态映射(NAT Server):公网地址和私网地址一对一进行映射,用于公网用户访问私网内部服务器的场景。
地址池方式:采用地址池中的公网地址为私网用户进行地址转换,适合大量的私网用户访问Internet的场景。
出接口地址方式(Easy IP):内网主机直接借用公网接口的IP地址访问Internet,特别适用于公网接口IP地址是动态获取的情况。
源NAT(Source NAT):用来使多个私网用户能够同时访问Internet。
服务器映射:用来使外网用户能够访问私网服务器。
源NAT技术
源NAT地址池方式
基于源IP地址的NAT:对发起连接的IP报文头中的源地址进行转换。它可以实现内部用户访问外部网络的目的。通过将内部主机的私有地址转换为公有地址,使局域网中的多台主机使用少数的合法地址访问外部资源,有效的隐藏了内部局域网的主机IP地址,起到了安全保护的作用。
不带端口转换的地址池方式通过配置NAT地址池来实现,NAT地址池中可以包含多个公网地址。只转换地址,不转换端口,实现私网地址到公网地址一对一的转换。如果地址池中的地址已经全部分配出去,则剩余内网主机访问外网时不会进行NAT转换,直到地址池中有空闲地址时才会进行NAT转换。
带端口转换的地址池方式通过配置NAT地址池来实现,NAT地址池中可以包含一个或多个公网地址。同时转换地址和端口,实现多个私网地址共用一个或多个公网地址的需求。
带端口转换是最常用的一种地址转换方式。
Easy IP
出接口地址方式也称为Easy IP:直接使用接口的公网地址作为转换后的地址,不需要配置NAT地址池。同时转换地址和端口,即可实现多个私网地址共用外网接口的公网地址的需求。
NAT ALG
很多协议会通过IP报文的数据载荷进行新端口甚至新IP地址的协商。协商完成之后,通信双方会根据协商结果建立新的连接进行后续报文的传输。而这些协商出来的端口和IP地址往往是随机的,管理员并不能为其提前配置好相应的NAT规则,这些协议在NAT转换过程中就会出现问题。
普通NAT实现了对UDP或TCP报文头中的的IP地址及端口转换功能,但对应用层数据载荷中的字段无能为力,在许多应用层协议中,TCP/UDP载荷中带有地址或者端口信息,这些内容不能被NAT进行有效的转换。
NAT ALG(Application Level Gateway,应用层网关)技术能对多通道协议进行应用层报文信息的解析和地址转换,将载荷中需要进行地址转换的IP地址和端口或者需特殊处理的字段进行相应的转换和处理,从而保证应用层通信的正确性。
例如,FTP应用就由数据连接和控制连接共同完成,而且数据连接的建立动态地由控制连接中的载荷字段信息决定,这就需要ALG来完成载荷字段信息的转换,以保证后续数据连接的正确建立。
为了实现应用层协议的转发策略而提出了ASPF功能。
ASPF:开放相应的包过滤规则。
NAT:进行地址转换。
由于两者通常都是结合使用的,所以使用同一条命令就可以将两者同时开启。
NAT ALG实现原理
图中私网侧的主机要访问公网的FTP服务器。NAT设备上配置了私网地址192.168.1.2到公网地址8.8.8.11的映射,实现地址的NAT转换,以支持私网主机对公网的访问。组网中,若没有ALG对报文载荷的处理,私网主机发送的PORT报文到达服务器端后,服务器无法根据私网地址进行寻址,也就无法建立正确的数据连接。整个通信过程包括如下四个阶段:
私网主机和公网FTP服务器之间通过TCP三次握手成功建立控制连接。
控制连接建立后,私网主机向FTP服务器发送PORT报文,报文中携带私网主机指定的数据连接的目的地址和端口,用于通知服务器使用该地址和端口和自己进行数据连接。
PORT报文在经过支持ALG特性的NAT设备时,报文载荷中的私网地址和端口会被转换成对应的公网地址和端口。即设备将收到的PORT报文载荷中的私网地址192.168.1.2转换成公网地址8.8.8.11,端口1084转换成12487。
公网的FTP服务器收到PORT报文后,解析其内容,并向私网主机发起数据连接,该数据连接的目的地址为8.8.8.11,目的端口为12487(注意:一般情况下,该报文源端口为20,但由于FTP协议没有严格规定,有的服务器发出的数据连接源端口为大于1024的随机端口,如本例采用的是wftpd服务器,采用的源端口为3004)。由于该目的地址是一个公网地址,因此后续的数据连接就能够成功建立,从而实现私网主机对公网服务器的访问。
服务器映射
NAT Server - 内部服务器
NAT Server,即内部服务器。NAT隐藏了内部网络的结构,具有"屏蔽"内部主机的作用。但是在实际应用中,可能需要提供给外部一个访问内部主机的机会,如提供给外部一台WWW的服务器,而外部主机根本没有指向内部地址的路由,因此无法正常访问。这时可以使用内部服务器(Nat Server)功能来实现这个功能应用。
使用NAT可以灵活地添加内部服务器。例如:可以使用202.202.1.1等公网地址作为Web服务器的外部地址,甚至还可以使用202.202.1.1 :8080这样的IP地址加端口号的方式作为Web的外部地址。
外部用户访问内部服务器时,有如下两部分操作:
防火墙将外部用户的请求报文的目的地址转换成内部服务器的私有地址。
防火墙将内部服务器的回应报文的源地址(私网地址)转换成公网地址。
NAT Server与Server Map表
通常情况下,如果在设备上配置严格包过滤,那么设备将只允许内网用户单方向主动访问外网。但在实际应用中,例如使用FTP协议的port方式传输文件时,既需要客户端主动向服务器端发起控制连接,又需要服务器端主动向客户端发起服务器数据连接,如果设备上配置的包过滤为允许单方向上报文主动通过,则FTP文件传输不能成功。
为了解决这一类问题,USG设备引入了Server-map表,Server-map基于三元组,用于存放一种映射关系,这种映射关系可以是控制数据协商出来的数据连接关系,也可以是配置NAT中的地址映射关系,使得外部网络能透过设备主动访问内部网络。
生成Server-map表之后,如果一个数据连接匹配了Server-map表项,那么就能够被设备正常转发,而不需要去查会话表,这样就保证了某些特殊应用的正常转发。
配置NAT Server成功后,设备会自动生成Server-map表项,用于存放Global地址与Inside地址的映射关系。
当不配置"no-reverse"参数时,每个生效的NAT Server都会生成正反方向两个静态的Server-map;当配置了"no-reverse"参数时,生效的NAT Server只会生成正方向静态的Server-map。用户删除NAT Server时,Server-map也同步被删除。
配置NAT No-PAT后,设备会为已配置的多通道协议产生的有实际流量的数据流建立Server-map表。
NAT应用场景
NAT典型应用场景配置举例
防火墙源NAT配置 (WEB)
源安全区域通常为转换前的私网IP地址所在的安全区域。在本例中为trust区域。目的安全区域通常为转换后的公网IP地址所在的安全区域。在本例中为untrust区域。
配置NAT Server时
外部地址:外部用户访问的公网IP地址。
内部地址:内部服务器在局域网中的IP地址。
在Web配置界面中,配置域间包过滤规则的步骤为:
选择"防火墙 > 安全策略 > 转发策略"。
在"转发策略列表"中,单击"新建"。
依次输入或选择各项参数。
防火墙源NAT配置 (CLI)
域间访问规则配置命令参考:
[USG6600]security-policy
[USG6600-policy-security]rule name natpolicy
[USG6600-policy-security-rule-natpolicy]source-address 192.168.0.0 24
[USG6600-policy-security-rule-natpolicy]action permit
配置源NAT,是为了实现内网对外部网络进行访问时进行NAT地址转换,数据流向是从高安全级别到低安全级别,因此源地址应该为内部网络的地址网段。而为内网用户分配的地址池,应该为外网地址网段用于对internet资源进行访问。
nat address-group address-group-name
section [ section-id | section-name ] start-address end-address
nat-mode { pat | no-pat }
USG上同时配置NAT和内部服务器时,内部服务器优先级较高,首先起作用。
NAT Server会生成server map表,防火墙检测顺序是:server map-->路由表-->安全策略-->NAT,所以安全策略中的目的地址应该是转换后的地址:192.168.20.2
多个不同内部服务器使用一个公有地址对外发布时,可以多次使用 nat server 命令对其进行配置。并使用协议进行区分。
双向NAT技术
双向NAT两种应用场景:
NAT Server + 源NAT:服务器不设施网关或到达防火墙的路由
域内NAT
双向NAT:同一数据流,同时转换源地址和目的地址。
域间双向NAT
当配置NAT Server时,服务器需要配置到公网地址的路由才可正常发送回应报文。如果要简化配置,避免配置到公网地址的路由,对外网用户的源IP地址也进行转换,转换后的源IP地址与服务器的私网地址在同一网段。
域内双向NAT
防火墙将用户的请求报文的目的地址转换成FTP服务器的内网IP地址,源地址转换成用户对外公布的IP地址。
防火墙将FTP服务器回应报文的源地址转换成对外公布的地址,目的地址转换成用户的内网IP地址。
若需要地址转换的双方都在同一个安全域内,那么就涉及到了域内NAT的情况。当FTP服务器和用户均在Trust区域,用户访问FTP服务器的对外的公网IP地址,这样用户与FTP服务器之间所有的交互报文都要经过防火墙。这时需要同时配置内部服务器和域内NAT。
域内NAT是指当内网用户和服务器部署在同一安全区域的情况下,仍然希望内网用户只能通过访问服务器的公网地址的场景。在实现域内NAT过程中,既要将访问内部服务器的报文的目的地址由公网地址转换为私网地址,又需要将源地址由私网地址转换为公网地址。
总结:
案例:
Easy IP
命令行:
EASY-NAT:
1. 设置NAT策略
[FW1]nat-policy
//进入nat-policy视图
[FW1-policy-nat]rule name to_web
//创建一条to_web策略
[FW1-policy-nat-rule-to_web]source-zone trust
[FW1-policy-nat-rule-to_web]destination-zone untrust
[FW1-policy-nat-rule-to_web]source-address 192.168.1.0 24
[FW1-policy-nat-rule-to_web]destination-address 6.6.6.6 32
[FW1-policy-nat-rule-to_web]service icmp
[FW1-policy-nat-rule-to_web]service http
[FW1-policy-nat-rule-to_web]action source-nat easy-ip
//这里和视频不一样。创建一个源nat,类型为easy-ip
标准的easyip策略:
rule name easyip
source-zone trust
egress-interface GigabitEthernet1/0/2
//指定出接口
source-address 192.168.1.0 mask 255.255.255.0
action source-nat easy-ip
安全策略:
easy-ip安全策略:
security-policy
rule name easy_ip
source-zone trust
destination-zone untrust
source-address 192.168.1.0 mask 255.255.255.0
destination-address 6.6.6.6 mask 255.255.255.255
service http
service icmp
action permit
修改会话时间:将icmp会话老化时间修改为100s
[FW1]firewall session aging-time service-set icmp 100
[FW1]dis firewall session table verbose
2020年05月04日 15:10:59.930
当前会话表总数:5
icmp ***: public --> public ID: c387f40d976e96055a5eb0307b
Zone: trust --> untrust TTL: 00:01:40 Left: 00:01:31
Recv Interface: GigabitEthernet1/0/0
Interface: GigabitEthernet1/0/2 NextHop: 202.1.1.2 MAC: 00e0-fc53-786d
<--packets: 1 bytes: 60 --> packets: 1 bytes: 60
192.168.1.100:56624[202.1.1.1:2075] --> 6.6.6.6:2048 PolicyName: easy_ip
查看NAT策略:
[FW1]display nat-policy rule all
2020-05-04 08:58:49.080
Total:2
RULE ID RULE NAME STATE ACTION HITS
-------------------------------------------------------------------------------
1 to_web enable src-nat 0
0 default enable no-nat 0
-------------------------------------------------------------------------------
NATP:
拓扑图如上
思路:
1. 基础配置
2. 配置NAT策略
a. 创建地址池
b. 创建NAT策略
3. 配置Security策略
命令行:
创建地址池:
nat address-group p1 0
//创建名为P1的地址池
mode pat
//模式为端口转换
section 0 202.1.1.100 202.1.1.100
//设置地址段
route enable
//防止路由黑洞,建议加上
创建NAT策略:
nat-policy
rule name napt
source-zone trust
destination-zone untrust
source-address 192.168.2.0 mask 255.255.255.0
destination-address 7.7.7.7 mask 255.255.255.255
service http
service icmp
action source-nat address-group p1
//绑定地址池p1
创建安全策略:
security-policy
rule name napt
source-zone trust
destination-zone untrust
source-address 192.168.2.0 mask 255.255.255.0
destination-address 7.7.7.7 mask 255.255.255.255
service http
service icmp
action permit
查看:
[FW1]display nat address-group
2020年05月04日 16:31:51.670
地址池的信息:
共 1 个地址池
nat address-group p1 0
reference count: 1
mode pat
status active
section 0 202.1.1.100 202.1.1.100
[FW1]display nat-policy rule all
2020年05月04日 16:41:38.580
Total:2
RULE ID RULE NAME STATE ACTION HITS
-------------------------------------------------------------------------------
2 napt enable src-nat 20
0 default enable no-nat 2
-------------------------------------------------------------------------------
[FW1]dis security-policy rule all
2020年05月04日 16:42:42.580
Total:2
RULE ID RULE NAME STATE ACTION HITS
-------------------------------------------------------------------------------
1 napt enable permit 20
0 default enable deny 7
-------------------------------------------------------------------------------
[FW1]dis firewall session table verbose
2020年05月04日 16:43:45.220
当前会话表总数:3
icmp ***: public --> public ID: c487f58087d34d810355eb04641
Zone: trust --> untrust TTL: 00:00:20 Left: 00:00:20
Recv Interface: GigabitEthernet1/0/0
Interface: GigabitEthernet1/0/2 NextHop: 202.1.1.2 MAC: 00e0-fc53-786d
<--packets: 1 bytes: 60 --> packets: 1 bytes: 60
192.168.2.100:20038[202.1.1.100:2070] --> 7.7.7.7:2048 PolicyName: napt
FW1]dis firewall statistics system discard
2020年05月04日 16:44:55.000
Discard statistic information:
未命中路由丢包统计: 13
入接口无效丢包统计: 8
默认包过滤策略丢包统计: 5
三层接口不支持的以太类型丢包统计: 2070
NAT NO-PAT:
拓扑图如上
思路:
1. 基础配置
2. 配置NAT策略
a. 创建地址池,mode为no-pat
b. 创建NAT策略
3. 配置Security策略
命令行:
创建地址池:
nat address-group no_pat 0
mode no-pat global
//global参数是指:对会话表中的zone没有限制
route enable
section 0 202.1.1.200 202.1.1.200
section 1 202.1.1.202 202.1.1.202
//可以自由添加地址池地址
创建NAT策略:动态产生server-map表
nat-policy
rule name no_pat
source-zone trust
destination-zone untrust
source-address 192.168.3.0 mask 255.255.255.0
service http
service icmp
action source-nat address-group no_pat
//和视频中配置不一样
创建安全策略:
rule name no_pat
source-zone trust
destination-zone untrust
source-address 192.168.3.0 mask 255.255.255.0
service http
service icmp
action permit
修改地址池:
nat-policy
rule name no_pat
source-zone trust
destination-zone untrust
source-address 192.168.3.0 mask 255.255.255.0
service http
service icmp
action no-nat
nat address-group no_pat 0
mode no-pat local
route enable
section 0 202.1.1.200 202.1.1.200
section 1 202.1.1.202 202.1.1.202
nat-policy
rule name no_pat
source-zone trust
destination-zone untrust
source-address 192.168.3.0 mask 255.255.255.0
service http
service icmp
action source-nat address-group no_pat
修改后根据NAT策略对目的地址进行限制
查看:
[FW1]display nat address-group
2020年05月04日 16:31:51.670
地址池的信息:
共 1 个地址池
nat address-group p1 0
reference count: 1
mode pat
status active
section 0 202.1.1.100 202.1.1.100
[FW1]display nat-policy rule all
2020年05月04日 16:41:38.580
Total:2
RULE ID RULE NAME STATE ACTION HITS
-------------------------------------------------------------------------------
2 napt enable src-nat 20
0 default enable no-nat 2
-------------------------------------------------------------------------------
[FW1]dis security-policy rule all
2020年05月04日 16:42:42.580
Total:2
RULE ID RULE NAME STATE ACTION HITS
-------------------------------------------------------------------------------
1 napt enable permit 20
0 default enable deny 7
-------------------------------------------------------------------------------
[FW1]dis firewall session table verbose
2020年05月04日 16:43:45.220
当前会话表总数:3
icmp ***: public --> public ID: c487f58087d34d810355eb04641
Zone: trust --> untrust TTL: 00:00:20 Left: 00:00:20
Recv Interface: GigabitEthernet1/0/0
Interface: GigabitEthernet1/0/2 NextHop: 202.1.1.2 MAC: 00e0-fc53-786d
<--packets: 1 bytes: 60 --> packets: 1 bytes: 60
192.168.2.100:20038[202.1.1.100:2070] --> 7.7.7.7:2048 PolicyName: napt
FW1]dis firewall statistics system discard
2020年05月04日 16:44:55.000
Discard statistic information:
未命中路由丢包统计: 13
入接口无效丢包统计: 8
默认包过滤策略丢包统计: 5
三层接口不支持的以太类型丢包统计: 2070
NAT Server:
配置思路:
1. 基本配置(完成)
2. NAT_Server配置
3. 安全策略
命令行:
NAT_Server配置:
[FW]nat server web protocol tcp global interface GigabitEthernet 1/0/2 www insid
e 172.16.1.100 www
nat server:关键字
web:名称
protocol:关键字,指定协议类型。这里是TCP协议。
global:关键字,转换后外网ip和端口,可以是ip或接口的形式,这里是接口形式。
inside:关键字,转换前内网的IP和端口。
创建成功后会生成静态Server-map
[FW]dis firewall server-map
2020年05月05日 07:30:03.250
当前Server-map总数:2
Type: Nat Server, ANY -> 202.96.1.1:80[172.16.1.100:80], Zone:---, protocol:
tcp
***: public -> public
Type: Nat Server Reverse, 172.16.1.100[202.96.1.1] -> ANY, Zone:---, protoco
l:tcp
***: public -> public, counter: 1
安全策略配置:
security-policy
rule name to_web
destination-zone dmz
destination-address 172.16.1.100 mask 255.255.255.255
//NAT_Server是静态Server-map,在经过安全策略检查之前已将公网IP地址转换为私网IP。
service http
service icmp
action permit
查看NAT-Server
[FW]display nat server
2020年05月05日 08:22:35.030
内部服务器的信息:
共映射了 1 个内部服务器
服务器名字 : web
服务器索引 : 0 安全域名 : ---
外部起始地址 : 202.96.1.1 外部结束地址 : 202.96.1.1
内部起始地址 : 172.16.1.100 内部结束地址 : 172.16.1.100
外部起始端口 : 80(www) 外部结束端口 : 80
内部起始端口 : 80(www) 内部结束端口 : 80
外部*** : public 内部*** : public
虚系统 : public 协议名称 : tcp
反向标识 : 0 接口名字 : GigabitEthernet1/0/2
路由 : 0 描述 : ---
下发不使能 : 0
删除NAT_Server:
[FW]undo nat server name web
双向NAT
拓扑图如上
双向NAT配置
什么是双向NAT:同一数据流的源目IP、端口同时改变。
为什么要使用双向NAT:可以解决内网(服务器)大批量修改网关的问题(不设置网关)。
使用场景:NAT-Inbound + NAT-Server,域内NAT + NAT-Server
概念:
1. NAT-Inbound: 从低优先级到高优先级才做地址转换。
2. 域内NAT:
a. 将同一安全区域内主机访问服务器,引流到防火墙。
b. 隐藏同一安全区域内服务器的IP地址。
配置NAT-Inbound + NAT-Server
配置思路:
1. 基础配置(完成)
2. NAT-Server
3. NAT-Inbound
a. 地址池
b. nat-policy
4. 安全策略
NAT-Server配置:
[FW]nat server web protocol tcp global interface GigabitEthernet 1/0/2 www insid
e 172.16.1.100 www no-reverse
NAT-Inbound配置:
1. 地址池的配置:
nat address-group nat_inbound 0
mode no-pat local
route enable
section 0 172.16.1.10 172.16.1.11
//将地址池中的IP地址设置为和服务器同一网段
思路:
1. 双向NAT需要解决服务器不设置网关的问题
2. 双向NAT是指转换同一数据流量的源目IP、端口
3. NAT-Inbound从优先级低的区域到优先级高的安全区域才进行地址转换。
终上所述:section应为172.168.1.0/24网段
2. nat-policy配置:
nat-policy
rule name nat_inboud
source-zone untrust
destination-zone dmz
source-address 201.1.1.100 mask 255.255.255.255
destination-address 172.16.1.100 mask 255.255.255.255
service http
service icmp
action source-nat address-group nat_inbound
思路:
目的地址为172.16.1.100 ,是因为server-map模块已经将
目的地址202.96.1.1转换为172.16.1.100。
原地址为202.1.1.100 ,server-map只做目的地址转换,
不做源地址转换。源地址转换要在生成会话表之后才转换。
3. 安全策略:
security-policy
rule name nat_inbound
source-zone untrust
destination-zone dmz
source-address 201.1.1.100 mask 255.255.255.255
destination-address 172.16.1.100 mask 255.255.255.255
service http
service icmp
action permit
思路:
1. source-address:201.1.100,server-map不转换源地址。只转换目的地址。
2. 安全策略是在server-map之后执行,所以目的地址为172.16.1.100
ASPF + NAT ALG
拓扑图如上:
ASPF:解决多通道协议的问题。
NAT-ALG:解决多通道协议应用层协商端口,私网IP地址不转换的问题。
配置思路:
1. 基础配置(完成,所有区域能ping通)
2. 配置Trust的EASY-IP
3. 配置安全策略
命令行:
2. 配置EASY NAT:
nat-policy
rule name to_ftp
source-zone trust
egress-interface GigabitEthernet1/0/2
source-address 10.1.1.0 mask 255.255.255.0
service ftp
service icmp
action source-nat easy-ip
3. 配置安全策略:
security-policy
rule name to_ftp
source-zone trust
destination-zone untrust
source-address 10.1.1.0 mask 255.255.255.0
destination-address 200.1.1.100 mask 255.255.255.255
service ftp
service icmp
action permit
FTP的ASPF默认是开启的。
[FW]firewall detect ftp
关闭ASPF的FTP功能,同时关闭了NAT-ALG功能:
[FW]undo firewall detect ftp
清空会话表:
<FW>reset firewall session table
执行该命令会影响系统的正常服务。
是否继续?[Y/N]:y
感谢腾讯课堂的Jacky老师:https://ke.qq.com/course/1586988?taid=7218581600745260