NAT穿越浅谈


自从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) http://www.nattraversal.com/

            2) http://en.wikipedia.org/wiki/NAT_traversal

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值