Chinaunix首页 | 论坛 | 博客
  • 博客访问: 852245
  • 博文数量: 321
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 936
  • 用 户 组: 普通用户
  • 注册时间: 2013-02-23 11:25
文章分类

全部博文(321)

文章存档

2017年(1)

2016年(10)

2015年(61)

2014年(187)

2013年(62)

分类:

2014-06-24 19:31:42

原文地址:NAT穿越浅谈 作者:yepyang

自从internet引入NAT以后,围绕NAT的问题就是层出不穷。想当年,把NAT介绍进来,是为了解决

ipv4地址不够用(或者public ip太贵)的问题,顺带还增加了内网的安全性(隐藏网络拓扑)。但是

NAT本身是违背网络端到端的设计的,因为它需要在网关上做一些手脚。以至于很多应用由于NAT,会

出现问题,最突出的就是voip, p2p and p2p gaming。

先看个图:

为了解决应用穿越NAT的问题,IETF又发明了很多solution(从这一点上来看,IETF很体谅工程师,

总是能够搞出来点事,让ip工程师不至于失业,而且还能活得很滋润)。闲话不说,我们来看看两个

常见的方法:STUN和ALG。

说STUN,就需要谈谈nat cone,那么,什么是nat cone哪?看图

  • Full cone

    这是一个full cone, nat binding是 {z, 3001, xxx, xxx},也就是不限制从外面来的ip地址和端口,

    匹配这个binding后,会把目的地址和端口映射成内部地址和端口。

    • ip restricted cone
    • ip restricted cone, binding是{z, 3001, b, xxx},也就是限制从外面来的源地址

      • port restricted cone
      • port restricted cone, binding是{z, 3001, xxx, 90},也就是限定从外面来的端口

        • symmetric nat
        • symmetric cone, binding 是{z, 3001, b, 90},同时限定从外面来的源地址和端口。传统的NAT就是这

          样的行为。所以传统NAT在支持穿越方面是不给力的,需要结合ALG来用。

          NAT穿越需要完成两件事情

          • connection能够穿越gateway,也就是说,gateway上的policy必须允许connection穿过,但是对于

                  端口不固定的应用(voip, p2p, gaming),policy是没法事先配置的,所以一般是需要创建expect(netfilter),

                  这样通过expect来避免policy匹配。即使配置了全通过的策略,在NAT环境中可能还有问题,因为协议里面可能

                 包含私有地址,所以nat穿越是个必选项,而不是可选项。

          • payload里面的地址做转换(ALG需要这么做,因为ALG的方案只需要在gateway上部署,而不像STUN,需要

                  STUN server),这样效率会差一些,所以ALG的性能一直是被诟病的地方。

          引入NAT以后,相应的性能问题就很突出,performance和scaling,是nat穿越需要关注的两个重点,做的好了,开个

          公司都不成问题。

          参考资料:

            1) 

            2) 


阅读(560) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~