华三-NAT
NAT概述
NAT(Network Address Translation,网络地址转换)是将IP数据报文头重的IP地址转换为另一个IP地址的过程。在实际应用重,NAT主要应用在连接两个网络的边缘设备上,用于实现允许内部网络用户访问外部公共网络以及允许外部公共网络访问部分内部网络资源(例如内部服务器)的目的。
NAT基本概念
NAT基本概念如下:
NAT设备:配置了NAT功能的连接内部网络和外部网络的边缘设备
NAT接口:NAT设备上应用了NAT相关配置的接口。
NAT规定:用于进行地址转换的NAT配置称为NAT规则。NAT规则的位置决定了匹配的优先级,位置越靠前的NAT规则,其匹配优先级越高。
NAT地址:用于进行地址转换的公网IP地址,与外部网络路由可达,可静态指定或动态分配。
NAT表项:NAT设备上用于记录网络地址转换映射关系的表项。
Easy IP功能:NAT转换时直接使用设备上接口的IP地址作为NAT地址。设备上接口的地址可静态指定或通过DHCP或PPPoE等协议动态获取。
NAT工作机制
当内部网络访问外部网络的报文经过NAT设备时,NAT设备会用一个合法的公网地址替换原报文中的源IP地址,并对这种转换进行记录;之后,当报文从外网侧返回时,NAT设备查找原有的记录,将报文的目的地址再替换回原来的私网地址,并转发给内网侧主机。这个过程对于私网侧或公网侧设备透明。

一台NAT设备连接内网和外网,连接外网的接口为NAT接口,当有报文经过NAT设备时,NAT的基本工作过程如下:
- 当内网用户主机(192.168.1.3)向外网服务器(1.1.1.2)发送的IP报文通过NAT设备时,NAT设备查看报文的IP头内容,发现该报文是发往外网的,则其源IP地址字段的内网地址192.168.1.3转换成一个可路由的外网地址20.1.1.1,并将该报文发送给外网服务器,同时在NAT设备上建立表项记录这一映射。
- 外网服务器给内网用户发送的应答报文到达NAT设备后,NAT设备使用报文信息匹配建立的表项,然后查找匹配到的表项记录,用内网私有地址192.168.1.3替换初始的目的IP地址20.1.1.1
上述的NAT过程对终端(如图种的Host和Server)来说是透明的。对外网服务器而言,它认为内网用户主机的IP地址就是20.1.1.1,并不知道存在192.168.1.3这个地址。因此,NAT"隐藏"了企业的私有网络。
NAT应用
传统NAT
报文经过NAT设备时,在NAT接口上仅进行一次源IP地址转换或一次目的IP地址转换。对于内网访问外网的报文,在出接口上进行源IP地址转换;对于外网访问内网的报文,在入接口上进行目的地址IP地址转换。
两次NAT
报文入接口和出接口均为NAT接口。报文经过NAT设备时,先后进行两次NAT转换。对于内网访问外网的报文和外网访问内网的报文,均在入接口进行目的地址转换,在出接口进行源IP地址转换。这种方式常用于支持地址重叠的VPN间互访。
双向NAT
报文经过NAT设备时,在NAT接口上同时进行一次源IP地址转换和一次目的IP地址转换。对于内网访问外网的报文,在出接口上同时进行源IP地址和目的IP地址的转换;对于外网访问内网的报文,同时在入接口上进行目的地址IP地址和源IP地址的转换。这种方式常用于支持内网用户主动访问与之地址重叠的外网资源。
NAT hairpin
NAT hairpin功能用于满足位于内网侧的用户之间或内网侧的用户与服务器之间通过NAT地址进行访问的需求。开启NAT hairpin的内网侧接口上会对报文同时进行源地址和目的地址的转换。它支持两种组网模式:
- P2P:位于内网侧的用户之间通过动态分配的NAT地址互访。内网各主机首先向外网服务器注册自己的外网地址信息,该地址信息为外网侧出方向地址转换的NAT地址,然后内网主机之间通过使用彼此向外网服务器注册的外网地址进行互访。
- C/S:位于内网侧的用户使用NAT地址访问内网服务器。NAT在内网接口上同时转换访问内网服务器的报文的源和目的IP地址,其中,目的IP地址转换通过匹配某外网接口上的内部服务器配置来完成,源地址转换通过匹配内部服务器所在接口上的出方向动态地址转换或出方向静态地址转换来完成。
NAT DNS mapping
一般情况下,DNS(Domain Name System,域名系统)服务器和访问私网服务器的用户都在公网,通过在NAT设备的公网接口上配置内部服务器,可以将公网地址、端口等信息映射到私网内的服务器上,使得公网用户可以通过内部服务器的域名或公网地址来访问内部服务器。但是,如果DNS服务器在公网,私网用户希望通过域名来访问私网的Web服务器,则会由于DNS服务器向私网用户发送的响应报文中包含的是私网服务器的公网地址,而导致收到响应报文的私网用户无法利用域名访问私网服务器。通过在设备上配置DNS mapping可以解决该问题。

NAT DNS mapping功能是指,通过配置"域名+公网IP地址+公网端口号+协议类型"的映射表,建立内部服务器域名与内部服务器公网信息的对应关系。在配置了NAT的接口上,设备检查接收到的DNS响应报文,根据报文中的域名查找用户配置的DNS mapping映射表,并根据表项内的"公网地址+公网端口+协议类型"信息查找内部服务器地址映射表中该信息对应的私网地址,替换DNS查询结果中的公网地址。这样,私网用户收到的DNS响应报文中就包含了要访问的内部服务器的私网地址,也就能够使用内部服务器域名访问同一私网内的内部服务器。
NAT转换控制
在实际应用中,用户可能希望某些内部网络的主机可以访问外部网络,而某些主机不允许访问;或者希望某些外部网络的主机可以访问内部网络,而某些主机不允许访问。即NAT设备只对符合要求的报文进行地址转换。
NAT设备可以利用ACL(Access Control List,访问控制列表)来对地址转换的使用范围进行控制,通过定义ACL规则,并将其与NAT配置相关联,实现只对匹配指定的ACL permit规则的报文才进行地址转换的目的。而且,NAT仅使用规则中定义的源IP地址、源端口号、目的IP地址、目的端口号、传输层协议类型和VPN实例这几个元素进行报文匹配,忽略其它元素。
NAT转换方式
- 静态方式
- 静态地址转换是指外部网络和内部网络之间的地址映射关系由配置确定,该方式适用于内部网络与外部网络之间存在固定访问需求的组网环境。静态地址转换支持双向互访;内网用户可以主动访问外网,外网用户也可以主动访问内网。
- 动态方式
- 动态地址转换是指内部网络和外网网络之间的地址映射关系在建立连接的时候动态产生。该方式通常适用于内部网络有大量用户需要访问外部网络的组网环境。动态地址转换存在两种转换模式;
- NO-PAT模式
- NO-PAT(Not Port Address Translation)模式下,一个外网地址同一时间只能分配给一个内网地址进行地址转换,不能同时被多个内网地址共用。当适用某外网地址的内网用户停止访问外网时,NAT会将其占用的外网地址释放并分配给其他内网用户使用。
- 该模式下,NAT设备只对报文的IP地址进行NAT转换,同时会建立一个NO-PAT表项用于记录IP地址映射关系,并可支持所有IP协议的报文。
- PAT模式
- PAT(Port Address Translation)模式下,一个NAT地址可以同时分配给多个内网地址共用。该模式下,NAT设备需要对报文的IP地址和传输层端口同时进行转换,且只支持TCP、UDP和ICMP(Internet Control Message Protocol,互联网控制消息协议)查询报文。
- PAT基础原理示意图
-

-
如图所示,三个带有内网地址的报文到达NAT设备,其中报文1和报文2来自同一个内网地址但又不同的源端口号,报文1和报文3来自不同的内网地址但是具有相同的源端口号。通过PAT映射,三个报文的源IP地址都被转换为同一个外网地址,但每个报文都被赋予了不同的源端口号。因而仍保留了报文之间的区别。当各报文的回应报文到达时,NAT设备仍能够根据回应报文的目的IP地址和目的端口号来区别该报文应转发到的内部主机。
-
采用PAT方式可以更加充分地利用IP地址资源,实现更多内部网络主机对外部网络的同时访问。
- 目前,PAT支持如下地址转换模式:
- Endpoint-lndependent Mapping(不关心对端地址和端口模式):只要是来自相同源地址和源端口号的报文,不论其目的地址是否相同,通过PAT映射后,其源地址和源端口号都被转换为同一个外部地址和端口号,该映射关系会被记录下来并生成一个EIM表项;并且NAT设备允许所有外部网络的主机通过该转换后的地址和端口来访问这些内部网络的主机。这种模式可以很好的支持位于不同NAT网关之后的主机进行互访。
- Address and Port-Dependent Mapping(关心对端地址和端口转换模式):对于来自相同源地址和源端口号的报文,相同的源地址和源端口号并不要求被转换为相同的外部地址和端口号,若其目的地址或目的端口号不同,同PAT映射后,相同的源地址和源端口号通常会被转换成不同的外部地址和端口号。与Endpoint-independent Mapping模式不同的是,NAT设备只允许这些目的地址对应的外部网络的主机可以通过该转换后的地址和端口来访问这些内部网络的主机。这种模式安全性号,但由于同一个内网主机地址转换后的外部地址不唯一,因此不便于位于不同NAT网关之后的主机使用内网主机转换后的地址进行互访。
-
- 内部服务器
- 在实际应用中,内网中的服务器可能需要对外部网络提供一些访问,例如给外部网络提供Web服务,或是FTP服务。这种情况下,NAT设备允许外网用户通过指定的NAT地址和端口访问这些内部服务器,NAT内部服务器的配置就定义了NAT地址和端口与内网服务器地址和端口的映射关系。
- 如图所示,外部网络用户访问内部网络服务器的数据报文经过NAT设备时,NAT设备将报文的目的地址与接口上的NAT内部服务器配置进行匹配,并将匹配上的访问内部服务器的请求报文的目的IP地址和端口号转换成内部路由器的私有IP地址和端口号。当内部服务器回应应该报文时,NAT设备再根据已有的地址映射关系将回应报文的源IP地址和端口号转换成外网IP地址和端口号。
- 端口块方式
- 端口快方式是一种基于端口范围的PAT动态地址转换,即一个私网IP地址在一个时间段内独占一个公网IP地址的某个端口块。例如:假设私网IP地址10.1.1.1独占公网IP地址202.1.1.1的一个端口块10001~10256,则该私网IP向公网发起的所有连接,源IP地址都将被转换为同一个公网IP地址202.1.1.1,而源端口将被转换为端口块10001~10256之内的一个端口。
- 端口块方式包括静态映射和动态映射两种
- 端口块静态映射
- 端口块静态映射是指,NAT网关设备根据配置自动计算私网IP地址到公网IP地址、端口块的静态映射关系,并创建静态端口块表项。当私网IP地址成员中的某个私网IP地址向公网发起新建连接时,根据私网IP地址匹配静态端口块表项,获取对应的公网IP地址和端口块,并从端口块中动态为其分配一个公网端口,对报文进行地址转换。
- 配置端口块静态映射时,需要创建一个端口块组,并在端口块组中配置私网IP地址成员、公网IP地址成员、端口范围和端口块大小。假设端口块组中每个公网IP地址的可用端口块数为M(即端口范围除以端口块大小),则端口块静态映射的算法如下:按照从小到大的顺序对私网IP地址成员中的所有IP地址进行排列,最小的M个私网IP地址对应最小的公网IP地址以及端口块,端口块按照起始端口号从小到大的顺序分配;次小的M个私网IP地址对应次小的公网IP地址及其端口块,端口块的分配顺序相同;依次类推。
- 端口块动态映射
- 当内网用户向公网发起连接时,首先根据动态地址转换中的ACL规则进行过滤,决定是否需要进行源地址转换。对于需要进行源地址转换的连接,当该连接为该用户的首次连接时,从所匹配的动态地址转换配置引用的NAT地址组中获取一个公网IP地址,从该公网IP地址中动态分配一个端口块,创建动态端口块表项,然后从端口块表项中动态分配一个公网端口,进行地址转换。对该用户后续连接的转换,均从生成的动态端口块表项中分配公网端口。当该用户的所有连接都断开时,回收为其分配的端口块资源,删除相应的动态端口块表项。
- 端口块动态映射支持增量端口块分配。当为某私网IP地址分配的端口块资源耗尽(端口块中的所有端口都被使用)时,如果该私网IP地址向公网发起新的连接,则无法再从端口块中获取端口,无法进行地址转换。此时,如果预先再相应的NAT地址组中配置了增量端口块数,则可以为该私网IP地址分配额外的端口块,进行地址转换。
- 端口块静态映射
- NAT表项
- NAT会话表项
- NAT设备处理一个连接的首报文时便确定了相应的地址转换关系,并同时创建会话表项,该会话表项中添加了NAT扩展信息(例如接口信息、转换方式)。会话表项中记录了首报文的地址转换信息。这类经过NAT处理的会话表项,也称为NAT会话表项。
- 当该连接的后续报文经过NAT设备时,将与NAT会话表项进行匹配,NAT设备从匹配到的会话表项中得到首报文的转换方式,并根据首报文的转换方式对后续报文进行处理。后续报文方向与首报文相同时,源和目的的转换方式与首报文相同;方向相反时,转换方式与首报文相反。即,如果首报文转换了源地址,则后续报文需要转换目的地址;如果首报文转换了目的地址,则后续报文需要转换源地址。
- NAT会话表项的更新和老化由会话管理模块维护
- EIM表项
- 如果NAT设备上开启了Endpoint-Independent Mapping模式,则在PAT方式的动态地址转换过程中,会首先创建了一个NAT会话表项,然后创建一个用于记录地址和端口的转换关系(内网地址和端口<-->NAT地址和端口)的EIM三元组表项,该表项有以下两个作用;
- 保证后续来自相同源地址和源端口的新建连接与首次连接使用相关的转换关系。
- 允许外网主机向NAT地址和端口发起的新建连接根据EIM表项进行反向地址转换。
- 该表项在与其相关联的所有NAT会话表项老化后老化。
- 如果NAT设备上开启了Endpoint-Independent Mapping模式,则在PAT方式的动态地址转换过程中,会首先创建了一个NAT会话表项,然后创建一个用于记录地址和端口的转换关系(内网地址和端口<-->NAT地址和端口)的EIM三元组表项,该表项有以下两个作用;
- NO-PAT表项
- 在NO-PAT方式进行源地址的动态转换过程中,NAT设备首先创建一个NAT会话表项,然后建立一个NO-PAT表项用于记录该转换关系(内网地址<-->NAT地址)。
- NO-PAT表项有以下两个作用:
- 保证后续来自相同源地址和源端口的新建连接与首次连接使用相同的转换关系。
- 允许外网主机向NAT地址和端口发起的新建连接根据EIM表项进行反向地址转换。
- 该表项在与其相关联的所有NAT会话表项老化后老化。
- 端口块表项
- 端口块表项记录1个用户在网关转换前的私网IP地址、转换后对应的公网IP地址及其端口块。端口块表项分为静态端口块表项和动态端口块表项
- NAT会话表项
- NAT支持多VLAN实例
- 支持多VPN实例的NAT允许VPN实例内的用户访问外部网络,同时允许分属于不同VPN实例的用户互访。例如,当某VPN实例内的用户经过NAT设备访问外部网络时,NAT将内部网络主机的IP地址和端口替换为NAT地址和端口,同时还记录了用户的VPN实例信息(如VPN实例名称)。外部网络的回应报文到达NAT设备时,NAT将外部网络地址和端口还原为内部网络主机的IP地址和端口,同时可得知该回应报文应该转发给哪一个VPN实例内的用户。另外,NAT还可利用外部网络地址所携带的VPN实例信息,支持多个VPN实例之间的互访。
- 同时,NAT内部服务器也支持多VPN实例,这给外部网络提供了访问VPN实例内服务器的机会。例如,VPN1内提供Web访问的主机地址是10.110.1.1,可以使用202.110.10.20作为Web服务器的外部地址,Internet的用户使用202.110.10.20的地址就可以访问到VPN1提供的Web服务。
- NAT支持ALG
- ALG(Application Level Gateway,应用层网关)主要完成对应用层报文的解析和处理。通常情况下,NAT只对报文头中的IP地址和端口信息进行转换。不对应用层数据载荷中的字段进行分析和处理。然而对于一些应用层协议,它们的报文的数据载荷中可能包含IP地址或端口信息,这些载荷信息也必须进行有效的转换,否则可能导致功能不正常。
- 例如,FTP(File Transfer Protocol,文件传输协议)应用由FTP客户都与FTP服务器之间建立的数据连接和控制连接共同实现,而数据连接使用的地址和端口由控制连接协商报文中的载荷信息决定,这就需要ALG利用NAT的相关转换配置完成载荷信息的转换,以保证后续数据连接的正确建立。
实验
拓扑

需求
- 按照图示配置IP地址
- 私网A通过R1接入到互联网,私网B通过R3接入到互联网
- 私网A内部存在Vlan10和Vlan20,通过R1上单臂路由访问外部网络
- 私网A通过NAPT使Vlan10和Vlan20都能够使用R1的公网地址访问互联网
- 私网B通过在R3上配置EASY IP访问互联网
- 私网A配置NAT Server把FTP服务发布到公网,使PCB可以访问
配置
IP地址配置
R1

R2

R3

SWA

PCA

PCB

FTP服务器

路由
R1

R3

NAPT配置
NAPT(网络地址端口转换):支持端口的映射并允许许多台主机共享一个公用IP地址,这样就可以支持同时多个位于NAT后面的机器和外部进行交互了。支持端口转换的NAT又可以分为两类:源地址转换(SNAT)和目的地址转换(DNAT)
R1

acl basic 2000 //创建ACL2000
rule 0 permit source 192.168.10.0 0.0.0.255 //匹配并且允许192.168.10.0段的IP地址
rule 5 permit source 192.168.20.0 0.0.0.255 //匹配并且允许192.168.20.0段的IP地址

nat address-group 1 //创建NAT组1
address 100.1.1.1 100.1.1.1 //配置公网IP地址

nat outbound 2000 address-group 1 //该接口是总部的出口,并且需要吧nat设置成出接口,出去的时候匹配acl2000和nat group1,来转换
结果
PCA

R1

display nat session verbose //查看NAT转换的表项
EASY ip
esay ip是一种特殊的NAPT,NAPT是多个私网地址使用一个公网地址的不同端口号去访问internet,也是需要配置地址池的,而esay ip是不需要配置地址池,私网地址直接使用公网出接口的不同端口号去实现访问;
分公司通过EASY ip来访问互联网
R3

acl basic 2000 //创建ACL 2000
rule 0 permit source 192.168.10.0 0.0.0.255 //匹配并且允许192.168.10.0地址段IP地址

nat outbound 2000 //算用接口出去通信
结果
PCB

R3

display nat session verbose //查看nat转换的表项
配置NAT Server把FTP服务器发布到公网上
公网设备想去访问处于私网的服务器
配置:把R1的公网地址的20和21端口映射到FTP服务器的私网地址

nat server protocol tcp global current-interface 20 21 inside 192.168.10.10 20 21 //配置nat server,映射端口为20和21,映射的地址是FTP私网i地址
结果
PCB

命令
配置命令
静态nat
内网用户访问外网
nat static outbound 192.168.10.10 100.1.1.1 //配置静态nat,将192.168.10.10映射为100.1.1.1
interface g0/1 //进入公网接口
nat static enable //开启静态nat功能
外网主动访问内网服务器
nat static outbound 192.168.10.10 100.1.1.88 //将内网192.168.10.10映射到公网的100.1.1.88
interface g0/1 //进入公网接口
nat static enable //开启静态nat功能
动态NAT
acl basic 2000 //创建ACL 2000
rule permit source 192.168.1.0 0.0.0.255 //匹配内网IP地址范围
nat address-group 1 //创建地址转换组1
address 100.1.1.1 100.1.1.100 //设置可以转换的公网IP范围
interface g0/1 //进入公网接口
nat outbound 2000 address-group 1 no-pat //匹配ACL以及地址转换组1
Easy IP
acl basic 2000 //创建ACL 2000
rule permit source 192.168.1.0 0.0.0.255 //匹配内网IP地址范围
interface g0/1 //进入公网接口
nat outbound 2000 //出接口配置easy ip转换
外网用户访问内网服务器
interface g0/1 //进入公网接口
nat server protocol tcp global 202.38.1.1 21 inside 10.110.10.3 ftp //允许外网主机使用地址202.38.1.1、端口号21访问内网FTP服务器
nat server protocol tcp global 202.38.1.1 80 inside 10.110.10.1 http //允许外网主机使用地址202.38.1.1、端口号80访问内网Web服务器1
内网用户通过NAT地址访问内网服务器
acl basic 2000 //创建ACL
rule permit source 192.168.1.0 0.0.0.255 //允许对内部网络中192.168.1.0/24网段的报文进行地址转换
interface g0/1 //进入公网接口
nat server protocol tcp global 202.38.1.2 inside 192.168.1.4 ftp //配置Easy IP方式的出方向动态地址转换,使得内网主机访问内网FTP服务器的报文可以使用接口G0/1的IP地址进行源地址转换
nat outbound 2000 //出去的时候匹配acl2000
interface g0/0 //进入内网接口
nat hairpin enable //开启hairpin功能
查看命令
display nat address-group //显示NAT地址组配置信息
display nat all //显示所有NAT配置信息
display nat inbound //显示NAT入方向动态地址转换的配置信息
display nat log //显示NAT日志功能的配置信息
display nat no-pat //显示NAT NO-PAT表项信息
display nat outbound //显示NAT出方向动态地址转换的配置信息
display nat server //显示NAT内部服务器的配置信息
display nat session //显示NAT会话
display nat static //显示NAT静态地址转换的配置信息


浙公网安备 33010602011771号