【防火墙技术连载14】强叔侃墙 NAT篇 一墙当关,万夫上网——源NAT(下篇)

digest [复制链接]
发表于 : 2014-5-9 15:43:28 最新回复:2017-02-12 11:52:51
28924 36
强叔侃墙
强叔侃墙 官方号

大家好,强叔接着上回书继续和大家聊聊源NAT。除了NAT No-PAT、NAPT和easy-ip,华为防火墙还支持两种源NAT功能,如下所示:

  • Smart NAT(仅高端防火墙USG9000系列支持)
  • 三元组NAT(仅高端防火墙USG9000系列支持)

 

Smart NAT
Smart NAT为何称为“聪明的NAT”?这要从他和NAT No-PAT、NAPT的关联性说起:

我们假设Smart NAT使用的地址池中包含N个IP,其中一个IP被指定为预留地址,另外N-1个地址构成地址段1(section 1)。进行NAT转换时,Smart NAT会先使用section 1做NAT No-PAT类型的转换,当section 1中的IP都被占用后,才使用预留IP做NAPT类型的转换。

其实Smart NAT可以理解为是对NAT No-PAT功能的增强,他防止了用户数量激增导致大量用户不能上网的情况,即克服了NAT No-PAT的缺点??只能让有限的用户上网,当用户数量大于地址池中IP数量时,后面的用户将无法上网,只能等待公网IP被释放(会话老化)。Smart NAT预留一个公网IP做NAPT后,无论有多少新增用户需要上网,都能满足其需求。
由于eNSP不支持高端防火墙,所以我们通过一个实际的组网来看下Smart NAT的实现过程。

Smart NAT的配置和NAT No-PAT的配置几乎完全一致,区别只是在地址池中指定了一个IP作为预留IP,下面给出关键配置:

例1 配置Smart NAT
#
 nat address-group 1  
  mode no-pat     //模式要选择no-pat 
  smart-nopat  30.1.1.21      //预留一个IP做NAPT 
  section 1  30.1.1.20  30.1.1.20   //section中不能包含预留IP!

policy interzone trust untrust outbound 
 policy 1 
  action permit
  policy source 10.1.1.0 0.0.0.255  
  policy source 20.1.1.0 0.0.0.255    
#   
nat-policy interzone trust untrust outbound  
 policy 1  
  action source-nat 
  address-group 1  
  policy source 10.1.1.0 0.0.0.255  
  policy source 20.1.1.0 0.0.0.255  

先从PC2上ping PC3,再从PC1上ping PC3(请注意这个顺序),在USG9000上查看会话表(中括号[]内的是NAT转换后的IP和端口)。可以看到PC2(20.1.1.11)只转换了IP,没有转换端口,也就是说做了NAT No-PAT转换。而PC1(10.1.1.11)的IP和端口都进行了转换,且转换后的IP就是预留IP(30.1.1.21),所以说他做了NAPT转换。

我们再看Server-map表,结果也符合NAT No-PAT和NAPT功能的特点:只有NAT No-PAT类型的表项,NAPT转换没有Server-map表。

 

三元组NAT
元组NAT中的“三元”是指:源IP、源port和协议类型。

三元组NAT功能的产生基于这样一个事实:现今大部分网络主机都处在NAT设备后,而P2P应用(如QQ、BT)是人们最常用的软件之一。当NAT遇到P2P的时候,产生的不是完美的“NAT-P2P”,而是……你可能下载不了BT资源、无法和女神聊QQ了。T_T
事实上,当有NAT设备存在时,如果要保证内网用户正常使用P2P软件,往往还需要其他网络设备来配合。而华为高端防火墙USG9000系列可以完美地解决这个问题:通过使用三元组NAT功能,防火墙可以在做NAT网关的同时,支持P2P业务的正常交互,完全不需要其他设备!

为了引出三元组NAT的特点,我们先通过下图来看看P2P业务的一般交互流程。PC1和PC2是两台运行P2P业务的客户端,他们运行P2P应用时首先会和P2P服务器进行交互(登录、认证等操作),服务器会记录客户端的地址和端口。当PC2需要下载文件时,服务器会将拥有该文件的客户端的地址和端口发送给PC2(例如PC1的地址和端口),然后PC2会向PC1发送请求,并从PC1上下载文件。
如果PC1是内网主机,在防火墙上做NAT转换,此时P2P服务器记录的就是PC1做NAT转换后的地址和端口。也许有人会问:PC1做NAT转换后的地址和端口不会变化吗?答案是会变化,但是PC1会定期向服务器发送报文(用于认证等),服务器也就记录了最新的NAT后地址和端口,所以可以保证PC2能够成功访问PC1。

上述过程看起来似乎没有问题,但是对于防火墙来说,这里有两个问题:
1、PC1没有主动访问过PC2,一般来说,防火墙不会允许PC2主动访问PC1。
2、PC1访问服务器时,NAT后的地址和端口只能被服务器用来访问PC1,其他主机(例如PC2)不能利用这个地址和端口访问PC1,请求报文在防火墙上将被丢弃。
三元组NAT可以完美地解决上述两个问题,依靠的正是以下两个特点:
1、支持外网主动访问
无论内网主机是否主动访问过某个外网主机,只要外网主机知道内网主机NAT转换后的地址和端口,就可以主动向该内网主机发起访问。
2、动态对外端口一致性
内网主机做NAT转换后的地址和端口将在一段时间内保持不变,在此时间内段,内网主机固定地使用此NAT后地址和端口访问任意外网主机,任意外网主机也可以通过此NAT后地址和端口访问内网主机。
从实现原理角度讲,三元组NAT是通过Server-map表使外网主机可以主动访问内网主机,并保证NAT转换关系在一段时间内保持不变。下面通过一个例子来说明会更容易理解(我们还是用实际设备来组网)。


三元组NAT和NAT No-PAT在配置上的区别仅在于选择不同的源NAT模式,下面给出关键配置:

例2 配置三元组NAT
#
 nat address-group 1 
  mode full-cone global   //做三元组NAT转换,global表示Server-map表不限制域间关系 
  section 1 30.1.1.20 30.1.1.20 

nat-policy interzone trust untrust outbound 
 policy 1
  action source-nat 
  address-group 1  
  policy source 20.1.1.0 0.0.0.255  

从PC1上ping PC2,在会话表中可以看到源IP和端口都做了NAT转换。

再看Server-map表,可以看到类型是FullCone(全圆锥),即三元组NAT的Serverv-map表(关于FullCone的内容,请见下面的附录内容)。在Server-map表没有老化前,三元组的源Server-map表项(FullCone Src)作用是:内网主机访问任意外网主机(ANY)时,NAT转换后的地址和端口都是30.1.1.20:3536。目的Server-map表项(FullCone Dst)的作用是:任意外网主机(ANY)都可以通过30.1.1.20:3536来访问内网主机20.1.1.11。通过这两条Server-map表项即实现了“外网主机可以主动访问内网主机,并保证NAT转换关系在一段时间内保持不变”的要求。

由于实验室环境限制,此处无法通过P2P应用来验证三元组NAT的另一个特点:PC1没有访问过的主机可以通过30.1.1.20:3536主动访问PC1。实际上,如果有一台P2P客户端PC3,他是可以通过30.1.1.20:3536成功访问PC1的。

 

至此,华为防火墙支持的源NAT功能都介绍完了,下次我们将介绍目的NAT相关内容,敬请期待!

强叔提问:
1、小伙伴们,你们还记得有哪几类源NAT功能会生成Server-map表吗?
2、各种源NAT功能都应用在什么场景下?
大家对源NAT还有什么疑问?欢迎留言~

 

附录:
根据RFC3489中的内容,Full Cone(全圆锥)是4种NAT端口映射方式中的一种,其他3种分别为:Restricted Cone(受限圆锥)、Port Restricted Cone(端口受限圆锥)和Symmetric(对称型)。
全圆锥NAT的模型是:内网主机做NAT转换后的地址和端口在一段时间内保持不变,不会因为目的地址不同而不同,所以内网主机可以使用相同的NAT后三元组(源IP、源端口、协议)访问不同外网主机。当NAT后三元组确定后,外网主机也都可以通过该三元组访问内网用户。(题外话:之所以叫“全圆锥”,应该就是根据“一对多”的模型命名的吧。)

对称型NAT的模型是:内网主机会根据不同的目的地址做NAT转换,NAT转换后的地址和端口一般是不相同的。由于对不同外网主机呈现不同的三元组(源IP、源端口、协议),所以外网主机只能通过访问对应的NAT后三元组才能进入内网,即需要限定目标用户和端口,因此对称型NAT也称为五元组NAT(源IP、源端口、目的IP、目的端口、协议)。
华为防火墙除了支持全圆锥NAT,也支持对称型NAT,NAPT功能即为五元组NAT。

 

 

上一篇 NAT篇 一墙当关,万夫上网??源NAT(上篇)

下一篇 NAT篇 NAT Server 基础篇

汇总贴】 

本帖被以下专题推荐:

  • x
  • 常规:

点评 回复

跳转到指定楼层
小信
小信   发表于 2014-5-28 14:46:24 已赞(0) 赞(0)

多看看多品味品味,肯定长见识
  • x
  • 常规:

点评 回复

强叔侃墙
强叔侃墙 官方号 发表于 2014-5-29 20:49:30 已赞(0) 赞(0)

回复 10 楼

对于三元组NAT转换,只要主机的IP不变且地址池相关配置不变,那么NAT后的IP就不变,即每次都固定转换为同一个IP。而端口号每次做NAT转换后都是不同的,设备会选择空闲的端口号作为NAT后的端口,且端口号依次增大。

  • x
  • 常规:

点评 回复

周中斌
周中斌   发表于 2014-9-10 11:35:02 已赞(0) 赞(0)

强叔,弱弱的请教个问题。一直没有搞清楚,policy与nat-policy的区别,这2个命令能不能混用?

如下配置能否可以实现?

policy interzone trust untrust outbound 
 policy 1 
  action permit 

  action source-nat 
  address-group 1 
  policy source 10.1.1.0 0.0.0.255  
  policy source 20.1.1.0 0.0.0.255    
#   

或者
nat-policy interzone trust untrust outbound  
 policy 1   

 action permit 
  action source-nat 
  address-group 1  
  policy source 10.1.1.0 0.0.0.255  
  policy source 20.1.1.0 0.0.0.255  

  • x
  • 常规:

点评 回复

l00184221
l00184221   发表于 2014-6-5 14:09:32 已赞(0) 赞(0)

咨询一个问题,一个公网ip,通常可以对应多少个私网IP?

另外,TCP和UDP的端口空间在计算的时候,是重叠的,还是独立的?

  • x
  • 常规:

点评 回复

强叔侃墙
强叔侃墙 官方号 发表于 2014-9-11 11:27:52 已赞(0) 赞(0)

回复 26 楼

在华为防火墙中,policy与nat-policy是两个不同的功能,policy表示安全策略,nat-policy表示NAT策略,两者是各自独立的模块。

policy中只能设置动作为permit或deny,也就是action permit/deny,其作用是允许/拒绝报文通过,不能设置source-nat动作也不能引用NAT地址池;nat-policy中的动作可以设置为source-nat或no-nat,其作用是进行/不进行地址转换,同时还可以设置NAT地址池address-group,但不能设置permit或deny动作。

简言之,policy和nat-policy是两个不同的功能,分为对应报文在防火墙转发流程中的两个环节:安全策略和NAT。配置的时候,需要先配置policy,即开启安全策略允许报文通过,然后根据需要配置nat-policy,对报文源地址进行转换。

  • x
  • 常规:

点评 回复

2018顶呱呱
2018顶呱呱 发表于 2018-7-24 15:18
讲解一步到位,直接接触疑惑。厉害  
周中斌
周中斌   发表于 2014-9-11 12:41:56 已赞(0) 赞(0)

回复 27 楼

原来是这样啊,终于清晰了。多谢强叔!我们是交付运营商的,原来都是endemon -u系列的防火墙,现在换成endemon -x系列的,都是用policy和nat-policy,刚开始还真有点不适应。哈哈
  • x
  • 常规:

点评 回复

Sophoni
Sophoni  版主 发表于 2014-5-9 16:45:42 已赞(0) 赞(0)

谢谢分享!

  • x
  • 常规:

点评 回复

DoubleDong
DoubleDong   发表于 2014-5-9 18:00:15 已赞(0) 赞(0)

强叔威武,学习了!
  • x
  • 常规:

点评 回复

周中斌
周中斌   发表于 2014-9-11 15:19:12 已赞(0) 赞(0)

强叔,例2中如下配置,没有看太懂,是关于全圆锥的配置吗?另外section的配置也没有看懂,求***:

例2 配置三元组NAT
#
 nat address-group 1 
  mode full-cone global   //做三元组NAT转换,global表示Server-map表不限制域间关系 
  section 1 202.30.1.1 202.30.1.1 

  • x
  • 常规:

点评 回复

发表回复
您需要登录后才可以回帖 登录 | 注册

警告 内容安全提示:尊敬的用户您好,为了保障您、社区及第三方的合法权益,请勿发布可能给各方带来法律风险的内容,包括但不限于政治敏感内容,涉黄赌毒内容,泄露、侵犯他人商业秘密的内容,侵犯他人商标、版本、专利等知识产权的内容,侵犯个人隐私的内容等。也请勿向他人共享您的账号及密码,通过您的账号执行的所有操作,将视同您本人的行为,由您本人承担操作后果。详情请参看“隐私声明
如果附件按钮无法使用,请将Adobe Flash Player 更新到最新版本!
登录参与交流分享

登录参与交流分享

登录