分类:
2012-01-12 17:56:32
自从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, nat binding是 {z, 3001, xxx, xxx},也就是不限制从外面来的ip地址和端口,
匹配这个binding后,会把目的地址和端口映射成内部地址和端口。
ip restricted cone, binding是{z, 3001, b, xxx},也就是限制从外面来的源地址
port restricted cone, binding是{z, 3001, xxx, 90},也就是限定从外面来的端口
样的行为。所以传统NAT在支持穿越方面是不给力的,需要结合ALG来用。
NAT穿越需要完成两件事情
端口不固定的应用(voip, p2p, gaming),policy是没法事先配置的,所以一般是需要创建expect(netfilter),
这样通过expect来避免policy匹配。即使配置了全通过的策略,在NAT环境中可能还有问题,因为协议里面可能
包含私有地址,所以nat穿越是个必选项,而不是可选项。
STUN server),这样效率会差一些,所以ALG的性能一直是被诟病的地方。
引入NAT以后,相应的性能问题就很突出,performance和scaling,是nat穿越需要关注的两个重点,做的好了,开个
公司都不成问题。
参考资料:
1)
2)