Chinaunix首页 | 论坛 | 博客
  • 博客访问: 219118
  • 博文数量: 36
  • 博客积分: 743
  • 博客等级: 中士
  • 技术积分: 846
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-26 01:02
文章分类

全部博文(36)

文章存档

2014年(3)

2013年(4)

2012年(29)

分类: 网络与安全

2012-09-17 12:12:03

NAT

网络地址转换(NAT,Network Address Translation)属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型Internet接入方式和各种类型的网络中。原因很简单,NAT不仅完美地解决了lP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。

原理

NAT

1. client的网关设定为NAT主机,所以当要连上Internet的时候,该封包就会被送到NAT主机,这个时候的包头的source IP 为 192.168.111.1 ;

2. 而透过这个 NAT 主机,它会将 client 的对外封包的sourceIP (192.168.111.1) 伪装成 NAT设备所具有的公网IP ,因为是公网IP了,所以这个封包就可以连上 Internet 了!同时NAT主机会记忆这个联机的封包是由哪一个 ( 192.168.111.1 ) client 端传送来的;

3. 由 Internet 传送回来的封包,当然由 NAT 主机来接收了,这个时候,NAT 主机会去查询原本记录的路由信息,并将目标IP由NAT的公网IP 改回原来的 192.168.111.1;

4. 最后则由 NAT 主机将该封包传送给原先发送封包的Client

分类 基础NAT

将私网主机的私有IP地址转换成公网IP 地址,但并不将TCP/UDP端口信息进行转换。基础NAT一般用在当NAT拥有很多公网IP地址的时候,它 将公网IP地址与内部主机进行绑定, 使得外部可以用公网IP地址访问内部主机。

网络地址和端口转换(NAPT)NAT

这是最普遍的情况,网络地址、端口转换器检查、 修改包的IP地址和TCP/UDP端口信息,这样,更多的内部主机就可以同时使用一个公网IP地址。

根据私有(IP_i:Port_i)和公网(IP_e:Port_e)的映射关系,NAT分为以下几类:

完全圆锥型(Full cone NAT) 条件

一旦一个内部地址(ip_i:port_i)映射到外部地址(ip_e:port_e),所有发自(ip_i:port_i)的包都经由(ip_e:port_e)向外发送。

结果

任意外部主机都能通过给(ip_e:port_e)发包到达(ip_i:port_i)。

IP受限圆锥型(Address-Restricted cone NAT) 条件

一旦一个内部地址(ip_i:port_i)映射到外部地址(ip_e:port_e),所有发自(ip_i:port_i)的包都经由(ip_e:port_e)向外发送。如果(ip_i:port_i)之前发送过包到(IP)。

结果

(IP)都能通过给(ip_e:port_e)发包到达(ip_i:port_i)。

端口受限圆锥型(Port-Restricted cone NAT) 条件

一旦一个内部地址(ip_i:port_i)映射到外部地址(ip_e:port_e),所有发自(ip_i:port_i)的包都经由(ip_e:port_e)向外发送。如果(ip_i:port_i)之前发送过包到(IP:PORT)。

结果

(IP:PORT)能通过给(ip_e:port_e)发包到达(ip_i:port_i)。

对称型NAT(Symmetric NAT) 条件

每一个来自相同内部IP与port的请求到一个特定目的地的IP地址和端口,映射到一个独特的外部来源的IP地址和端口。即使通过同一个内部的IP和port发往不同的目的IP和端口,都将映射一个独特的外部来源的IP地址和端口。

结果

同一个内部主机使用不同的映射地址发出一个信息包到不同的目的端,外部主机收到了一封从一个内部主机发来的包后可以送一封包回来。

NAT穿透(Traverse)

说白了,NAT穿透就是:NAT内部的主机虽然没有外网的IP,但是任然可以通过一定的方法被访问到,这种访问NAT后面主机的方法统称为“NAT穿透”。NAT穿透的方式有多种:打洞(hole punching)、TURN中转、ICE协商。其中,打洞有分多种:UDP、ICMP、TCP等。

打洞

所谓打洞,就是NAT后面的两台主机,在第三方服务器的帮助下,可以实现直接通信。

UDP打洞/STUN

UDP打洞,仅仅适用于圆锥型的NAT,下面我们以最严谨的端口受限圆锥型,描述一下UDP打洞的过程。

NAT穿透-圆锥型

为什么对称型NAT无法使用UDP穿透呢?根本原因在于:对称型NAT在内部主机使用相同的源IP和端口访问不同的外部主机时,NAT会绑定一个不同于以前绑定的外部IP和端口,下图详细描述对称型NAT打洞不成功的过程:

NAT穿透-对称型

优点

简单、易用;

满足圆锥型NAT需求

缺点

无法满足对称型NAT需求

ICMP打洞

ICMP打洞,其实就是ICMP欺骗机制,原理同tracert工具,下图演示了NAT后面的主机和第三方主机送和接受欺骗ICMP消息的过程。

1. NAT后面的主机发送Request(1.2.3.4)欺骗ICMP消息(蓝色实线)

2. Non-NAT主机在没有收到request的情况下,发送对应的欺骗reply消息(绿色虚线)

clip_image008

一旦完成第二步之后,那么NAT 主机就可以主动连接到Non-NAT 的主机了(可以采用public端口,或者是在reply消息的data区域传递数据)。

TCP打洞

用的较少,且成功率较低,不做过多解释,有兴趣都同学可以在网上查找相关资料。

TURN中转

全称Traversal Using Relays around NAT,其主要原理是客户机通过向位于公网的TURN服务器发送请求,使TURN服务器上为其分配一个中转地址。此后客户间的通信都通过这个中转地址转发

clip_image010

优点

可以穿越对称型NAT;

支持TCP;

不足

服务器负载太高,容易成为性能瓶颈。

ICE协商

全称Interactive Connectivity Establishment。综合利用STUN、TURN等技术,针对不同的NAT情景采用最合适的穿越方法。

假设有A、B两台主机,分别处于各自的NAT内部(此处假设为对称性NAT)。A的内部地址是10.0.1.9,外部地址是211.35.29.30。B的内部地址是192.168.1.6,外部地址是202.205.80.130。STUN/TURN服务器的地址是218.65.228.110。以A、B通信说明ICE主要的算法流程如下:

1. 集传输地址,会话发起者A要收集本地传输地址、向STUN服务器发送请求获得server reflexsive传输地址、向TURN服务器发送请求获得relay传输地址。A的地址收集时序图见图1。

2. 确定传输地址的优先级:优先级决定了在后续过程中测试各传输地址的顺序,为了保证最好的穿越效果,按优先级由高到低的顺序依次为:本地传输地址>server reflexsive传输地址>relay传输地址。主要原因是如果本地传输地址可行的话,则说明通话双方处于同一内网,不需要NAT穿越;STUN协议穿越优先于TURN协议穿越是因为使用TURN协议穿越服务器负载太大,丢包较严重。

3. 发起会话:会话发起者A通过某种方式(如SIP信令)向接收者B发起INVITE请求,同时将搜集的传输地址及其优先级发送给接收者B。

4. 响应处理:会话接收者B接到INVITE请求后,在本地同样执行①中的地址收集过程,时序图见图2。然后发送OK响应给会话发起者A,同时将搜集的传输地址及其优先级发送给会话发起者A。

5. 会话接受者连通性检查:会话接收者B按照优先级顺序依次使用自己收集的传输地址连接发起者A的对应传输地址,直到找到一个可以连通的传输地址。之后B就可以通过这个传输地址向A发送信息。B的连通性检查时序图见图3

6. 会话发起者的连通性检查:A也要进行与B类似的连通性检查过程。最后也找到B的relay地址作为以后向B发送信息的目的地址。

在本情景下,只有发往A的relay地址的检查收到了响应。因此此后B将通过A的relay地址向A发送数据。

clip_image012

图1

clip_image014

图2

clip_image016

图3

ALG

全称Application Layer Gateway。普通NAT实现了对UDP或TCP报文头中的的IP地址及端口转换功能,但对应用层数据载荷中的字段无能为力,在许多应用层协议中,比如多媒体协议(H.323、SIP等)、FTP、SQLNET等,TCP/UDP载荷中带有地址或者端口信息,这些内容不能被NAT进行有效的转换,就可能导致问题。而ALG技术能对多通道协议进行应用层报文信息的解析和地址转换,将载荷中需要进行地址转换的IP地址和端口或者需特殊处理的字段进行相应的转换和处理,从而保证应用层通信的正确性。

Voip领域解决NAT穿透

敬请期待。。。s

阅读(1679) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:Linux下备份分区表和MBR

给主人留下些什么吧!~~