• 产品与解决方案
  • 行业解决方案
  • 服务
  • 支持
  • 合作伙伴
  • 新华三人才研学中心
  • 关于我们

H3C防火墙NAT“无限次”转换

1 引入

NAT(Network Address Translation,网络地址转换)是将IP数据包报头中的IP地址转换为另一个IP地址的过程。最初,IP地址本身并没有私网和公网之分,只是我们人为的定义了一部分IP地址作为私网地址使用,区别于公网地址。NAT的使用场景是当私网用户访问Internet的报文经过NAT设备时,NAT设备会用一个合法的公网地址替换原报文中的私网源IP地址,并对这种转换进行记录;之后,当报文从Internet侧返回时,NAT设备查找原有的记录,将报文的目的地址再替换回原来的私网地址,并回送给发出请求的主机。这样,在私网侧或公网侧设备看来,这个过程与普通的网络访问并没有任何的区别,也并不感知NAT设备的存在。

NAT是一种私网地址与公网地址之间的一种转换,那么NAT设备就需要准备一定数量的公网地址,公网地址数的多少一方面取决于内网用户的多少,另一方面也取决于NAT设备的转换算法。如何最大化的利用IPv4地址资源,节约IPv4地址数量 ,本文就H3C防火墙的NAT无限次连接进行了说明。

2 有限次NAT转换

在阐述NAT无限次转换之前,我们先了解一下,一般的NAT转换对IPv4地址的需求。

参考本册大爬虫的《NAT 概述》,我们知道NAT按照端口映射方式分类,可以分为如下4种:全锥形NAT、限制锥形NAT、端口限制锥形NAT和对称型NAT。前三种NAT的模型都是锥形(Cone)NAT,有一个共同点:只要是从同一个内部地址和端口(LocalIP:LocalPort)出来的包,NAT都将它转换成同一个外部地址和端口(PublicIP:PublicPort),而不同的内部地址和端口(LocalIP:LocalPort)出来的包,都转换成不同的外部地址和端口(PublicIP:PublicPort),即转换后的外部地址和端口不能复用,导致NAT转换次数受限。

不同于锥形(Cone)NAT,对称(Symmetric)NAT的主要特点为从同一个内部地址和端口组合(LocalIP:LocalPort)发出的包,NAT可以将它转换成不同的外部地址和端口组合(PublicIP:PublicPort)。这样一来,一个内部地址和端口组合(LocalIP:LocalPort)可以对应多个公网地址和端口组合(PublicIP:PublicPort),如何标记一个(LocalIP:LocalPort)----多个(PublicIP:PublicPort)的对应关系呢?如果每个转换后的公网地址和端口组合(PublicIP:PublicPort)必须不同,则NAT转换数量仍然是有限的。

如下图所示,若地址池中有10个IP地址,内网主机访问外网服务器,每次访问经过防火墙做NAT,分配的(IP:Port)必须各不相同。此时,防火墙最多可以NAT转换的次数为地址池IP地址数乘以可以转换的端口数:10*(65536-1024)。

NAT转换原理图

3 H3C防火墙无限次”NAT转换

一般的设备用(LocalIP:LocalPort)---- (PublicIP:PublicPort)标识一次NAT转换,只能实现有限次的NAT转换。怎样才能实现无限次的NAT转换呢?H3C防火墙将NAT模块与会话管理模块相结合。每一个会话都有五元组,如果在(LocalIP:LocalPort)---- (PublicIP:PublicPort)的基础上再加上会话信息一起来记录一次NAT转换,那么每次转换记录的信息将变为(LocalIP:LocalPort)----(PublicIP:PublicPort) ----(Dest-IP:Dest-Port)及其协议类型,并用转换后的会话五元组唯一标识一次NAT转换。而公网中的(Dest-IP:Dest-Port)可以认为是无限多的,这时防火墙NAT转换的IP+端口(PublicIP:PublicPort)资源便可以根据(Dest-IP:Dest-Port)的不同而复用,所以防火墙的NAT转换次数也将是无限多的(公网中所有的(Dest-IP:Dest-Port)即表示了公网中所有基于IP的应用,从这个意义上说H3C防火墙的NAT转换是无限多次的)。

出方向的NAT主要包括静态NAT、Basic NAT(no-pat)、NAPT、Easy IP。其中静态NAT是一对一的IP地址转换,转换次数与配置的地址数有关,是有限次的;Basic NAT不涉及端口的转换,其NAT转换后防火墙记录的会话数可以无限多次,但是防火墙NAT模块工作的部分只是IP地址的转换,端口并不需要防火墙处理,所以防火墙Basic NAT能够转换的最大次数只根据地址池的大小而定,也是有限次的。本文重点讨论H3C防火墙NAT无限次转换的原理,即NAPT和Easy IP方式的NAT转换,其因为转换后可以复用(PublicIP:PublicPort) 从而实现了NAT转换次数的无限次。

3.1 NAPT方式原理

NAPT方式属于多对一的地址转换,通过使用“IP地址+端口号”的形式进行转换,使多个私网用户可共用一个公网IP地址访问外网。因此是地址转换实现的主要形式。

防火墙NAPT地址转换原理如下:

NAPT方式原理图

如上图所示,防火墙NAPT方式的处理过程如下:

(1) 防火墙收到私网侧主机发送的访问公网侧服务器的报文,按照五元组建立会话表项(正

反向)。

(2) 防火墙从地址池中按照一定的规则选取一对空闲的“公网IP地址+端口号”,建立与私网侧报文“源IP地址+源端口号”间的NAPT转换关系(正反向),与(1)中建立的会话表项相结合,将转换后的地址+端口填充到会话表项中,并依据查找正向会话表项的结果将报文转换后向公网侧发送。

(3) 防火墙收到公网侧的回应报文后,根据其五元组查找反向会话表项,并依据查表结果将

报文转换后向私网侧发送。

下面我们通过三个实验来验证H3C防火墙NAPT的地址转换方式、无限次转换说明和无限次转换的应用限制。实验设计:测试仪Port A向Port B发送UDP报文,防火墙做NAPT,地址池中有100个IP地址20.1.1.11—20.1.1.110。实验基本组网图如下:

NAPT实验组网图

3.1.1 H3C防火墙NAPT地址转换IP、端口分配说明

H3C防火墙NAPT方式转换地址、端口分配规则如下:

(1) 地址分配:根据地址池中的地址个数,系统自动生成N个数值,每一个数值对应标识一个地址池中的IP地址。匹配上ACL的数据报文,根据报文的源IP地址,由hash算法算出一个值,其值一定会在系统自动生成的N个值之内产生,由这个值来决定用哪个IP地址。

(2) 端口分配:确定使用地址池中某个IP地址后,该IP对应的端口号按照从1024-65535之间从小到大,以1为步长分配。如果是两个不同源IP地址的数据报文匹配上ACL,而根据地址分配规则正好分配到同一个IP,其端口分配根据收到报文的先后顺序,第一个源IP的报文分配端口M,第二个源IP的报文分配端口M+1。

实验一:测试仪打流设置:测试仪A口使用4个IP地址10.1.1.10、10.1.1.11、10.1.1.20、10.1.1.110为源地址,源端口固定,目的IP固定,目的端口离散10000次。我们通过在测试仪接收端口抓包来分析防火墙NAPT地址转换IP、端口分配。

结果:测试仪Port A打入的报文经过NAT转换后IP都为20.1.1.21、20.1.1.22、20.1.1.31, 因为测试仪是按照轮询顺序打入四个源IP的报文,通过抓包可以发现源地址为10.1.1.10、10.1.1.110的报文转换后源地址都为20.1.1.21,同时10.1.1.11、10.1.1.20转换后源地址分别为20.1.1.22、20.1.1.31。说明防火墙在处理源地址时,两个私网源地址10.1.1.10、10.1.1.110 hash得到同一个值,所以转换后分配到同一个IP。此外,转换后的源端口根据每个转换后源IP地址各自单独分配,从1024开始,以1为步长增加。即20.1.1.21、20.1.1.22、20.1.1.31三个地址对应的端口都单独从1024开始分配,以1为步长增加,不管转换时(LocalIP:LocalPort)---- (PublicIP:PublicPort)的对应关系中有多少个源地址。

实验一 测试仪接收端口抓包

3.1.2 H3C防火墙NAPT无限次转换说明

实验二:测试仪打流设置:以10.1.1.10、10.1.1.110两个不同的IP为源地址,由实验一知,防火墙NAPT转换后分配的IP地址相同。此时,如果NAPT转换后的(PublicIP:PublicPort)组合不能复用,地址池中一个IP对应只有64512个端口可以用于转换,则一个地址只能转换64512次;如果可以复用,就可以转换无限多次。现设置源地址为10.1.1.10、10.1.1.110的流,源IP10.1.1.10的源端口离散50000次(从10001-60000),目的IP唯一为20.1.1.2,目的端口唯一为2001。源IP10.1.1.110的源端口离散50000次(从10001-60000),目的IP唯一为20.1.1.2,目的端口唯一为2002。

结果:经过NAPT转换后,两个私网源地址经过NAT转换后的源IP都为同1个IP地址20.1.1.21,防火墙可以建立100000条会话,转换次数大于64512次,即说明转换后的IP+端口组合(PublicIP:PublicPort)可以根据目的IP+端口复用;转换后源端口按照端口分配规则,从1024开始分配,以1为步长增加。从实验二测试仪接收端口抓包中用UDP端口条件udp.port=3098进行筛选,可以看出,有2次NAPT转换都是使用相同公网IP+源端口(20.1.1.2+1024),说明如果某一个公网IP的端口号耗尽,只要(Dest-IP:Dest-Port)不同,转换后的源端口是会重新开始使用1024端口的,而且可以正常建立会话表项,即复用转换后的IP+端口组合(PublicIP:PublicPort),实现无限次转换。

实验二 防火墙会话数100000条

实验二 测试仪接收端口抓包

实验二 转换后(PublicIP:PublicPort)复用会话

3.1.3 H3C防火墙NAPT无限次转换的应用限制

无限次转换适用于是在NAT转换后五元组不重复的场合,有一种特殊的场景,当内网中存在大量的用户访问同一台服务器的同一服务(即同一端口)时,NAPT转换后的(PublicIP:PublicPort)组合不能复用,地址池中一个IP对应只有64512个端口可以用于转换,则一个地址只能转换64512次。因为当公网地址池中的一个IP已经转换了64512次访问同一个(Dest-IP:Dest-Port),再增第64513次访问时,该IP就不能再分配空余的端口,假设再次分配1024端口,则和就会存在两次(PublicIP:PublicPort) ----(Dest-IP:Dest-Port)的映射关系相同,返回的报文无法识别发往哪个内网用户,NAT转换连接数受限。所以H3C防火墙的NAT转换仍然存在转换数限制。

实验三:测试仪打流设置:以10.1.1.10、10.1.1.110两个不同的IP为源地址,由实验一可知,防火墙NAPT转换后分配的IP地址相同。现设置源地址为10.1.1.10、10.1.1.110的流,源端口都离散50000次(从10001-60000),目的地址都为20.1.1.2,目的端口固定为10000。流量设置测试仪brust方式发送100000个报文。

结果:经过NAPT转换后,转换后的源IP为1个IP地址20.1.1.21,查看防火墙会话总数,可以建立64514条会话(防火墙有其他local域等会话产生多余计数,查看测试仪抓包计数可知由于打流产生的会话数量应是64512),无法建立100000条有效连接,即说明由于目的IP+端口组合(Dest-IP:Dest-Port) 固定,导致(PublicIP:PublicPort)无法复用,最大连接数量受限;前64512个报文可以正常NAT转换,转换后源端口按照端口分配规则,从1024开始分配,以1为步长增加。第64513个报文开始, NAT转换不成功,无法建立新的连接。

实验三 防火墙会话

实验三 测试仪接收端口收包数为64512

实验三 测试仪接收端口抓包

3.2 EASY IP方式原理

EASY IP方式是指直接使用接口的公网IP地址作为转换后的源地址进行地址转换,它可以动态获取出接口地址,从而有效支持出接口通过拨号或DHCP方式获取公网IP地址的应用场景。同时,EASY IP方式也可以利用访问控制列表来控制哪些内部地址可以进行地址转换。

H3C防火墙EASY IP方式NAT转换的地址分配方式为固定为接口IP地址。端口分配方式与NAPT相同,虽然转换后的IP地址只有一个,可以做到根据目的IP+端口的不同复用转换后的IP+端口组合(PublicIP:PublicPort),所以可以实现无限次转换。可以认为EASY IP方式除了转换后IP地址固定为接口地址以外,其他处理方式基本与NAPT方式相同,在此不再详述。

4 小结

当然了,任何产品的表项规格,都会受限于产品的内存或芯片容量等因素,H3C的防火墙也不例外,本文主要描述原理上的无限次NAT转换连接。

H3C防火墙理论上支持NAT无限次转换,加上本身强大的会话处理能力,可以用极少的公网IP地址作为整个局域网的出口网关,可以很大程度上节约了公网IP资源,延缓IPv4地址的枯竭。

感谢您对本刊物的关注,如果您在阅读时有何感想,请点击反馈。
新华三官网
联系我们