首页 > 其他 > 详细

NAT穿越

时间:2014-09-25 15:42:31      阅读:357      评论:0      收藏:0      [点我收藏+]

NAT 的实现分为四大类:

1. Full ConeNAT                        完全锥形 NAT

2.   Restricted ConeNAT            限制锥形 NAT (可以理解为 IP 限制)

3. Port RestrictedCone NAT    端口限制锥形 NAT ( IP+Port 限制)

4.   SymmetricNAT                    对称 NAT,把每个内部主机“地址端口对”和外部主机“地址端口对”完全相同的报文看作一个连接

其中完全锥形的穿透性最好,而对称形的安全性最高

bubuko.com,布布扣


假设:

  1. NAT 内的主机 A : IP 记为 A ,使用端口 1000

  2. NAT 网关     :   IP 记为 NAT ,用于 NAT 的端口池假设为( 5001-5999 )

  3. 公网上的主机 B : IP 记为B ,开放端口 2000

  4. 公网上的主机 C :   IP 记为C ,开放端口 3000

假设主机 A 先后访问主机 B 和 C

1 )如果是锥形 NAT :

那么成功连接后,状态必然如下:

A ( 1000 ) —— >  NAT ( 5001 )—— >  B ( 2000 )

A ( 1000 ) —— >  NAT ( 5001 )—— >  C ( 3000 )

也就是说,只要是从 A 主机的 1000 端口发出的包,经过地址转换后的源端口一定相同。

2 )如果是对称形 NAT :

连接后,状态有可能(注意是可能,不是一定)如下:

A ( 1000 ) —— >  NAT ( 5001 )—— >  B ( 2000 )

A ( 1000 ) —— >  NAT ( 5002 )—— >  C ( 3000 )

两者的区别显而易见。

三种CONENAT之间的区别

仍然以上面的网络环境为例, 假设 A 先与 B 建立了连接:

A ( 1000 ) —— >  NAT ( 5001 )——— >  B ( 2000 )

1) PortRestricted Cone NAT:

只有 B ( 2000 )发往 NAT ( 5001 )的数据包可以到达 A ( 1000 )

===========================================================

B ( 2000 ) —— >  NAT ( 5001 ) ——— >   A ( 1000 )

B ( 3000 ) —— >  NAT ( 5001 ) — X — >   A ( 1000 )

C ( 2000 ) —— >  NAT ( 5001 ) — X — >   A ( 1000 )

2) RestrictedCone NAT

只要是从 B 主机发往 NAT ( 5001 )的数据包都可以到达 A ( 1000 )

==========================================================

B ( 2000 ) —— >  NAT ( 5001 ) ——— >   A ( 1000 )

B ( 3000 ) —— >  NAT ( 5001 ) ——— >   A ( 1000 )

C ( 2000 ) —— >  NAT ( 5001 ) — X — >   A ( 1000 )

3) FullCone NAT

任意地址发往 NAT ( 5001 )的数据包都可以到达 A ( 1000 )

==========================================================

B ( 2000 ) —— >  NAT ( 5001 ) ——— >   A ( 1000 )

B ( 3000 ) —— >  NAT ( 5001 ) ——— >   A ( 1000 )

C ( 3000 ) —— >  NAT ( 5001 ) ——— >   A ( 1000 )


多层NAT穿透原理

bubuko.com,布布扣

在客户端A向服务器发送的登陆消息中,包含有客户端A的内网地址二元组信息,即10.0.0.1:4321;服务器会记录下客户端A的内网地址二元组信息,同时会把自己观察到的客户端A的外网地址二元组信息记录下来,即155.99.25.11:62000。同理,服务器也会记录下客户端B的内网地址二元组信息为10.1.1.3:4321和由服务器观察到的客户端B的外网地址二元组信息,155.99.25.11:62005。无论A与B二者中的任何一方向服务器发送P2P连接请求,服务器都会将其记录下来的上述的外网和内网地址二元组发送给A或B。由公网服务器观察到的A,B的公网地址二元组进行“打洞”操作,用于“打洞”的数据包将由NAT C进行转发。

当客户端A向客户端B的公网地址二元组{155.99.25.11:62005}发送UDP数据包的时候,NAT A首先把数据包的源地址二元组由A的内网地址二元组{10.0.0.1:4321}转换为“伪”公网地址二元组{10.0.1.1:45000},现在数据包到了NAT C,NAT C应该可以识别出来该数据包是要发往自身转换过的公网地址二元组,如果NAT C可以给出“合理”响应的话,NAT C将把该数据包的源地址二元组改为{155.99.25.11:62000},目的地址二元组改为{10.0.1.2:55000},即NAT B的“伪”公网地址二元组,NAT B最后会将收到的数据包发往客户端B。同样,由B发往A的数据包也会经过类似的过程。

 

综合P2P可实现的条件需要:

1、中间服务器保存信息、并能发出建立UDP隧道的命令

2、网关均要求为Cone NAT类型。Symmetric NAT不适合。

3、 full cone nat网关可以无需建立udp隧道,但这种情况不安全,而且要双方均为这种类型的网关。

4、假如x1的A网关为Symmetric NAT, y1,y2的网关B为AddressRestricted Cone NAT 或Full Cone NAT型网关,各自建立隧道后,x1可通过A发送数据报给B到y1(因为B最多只进行IP级别的甄别),但y2发送给A的将会被丢弃(因为发送来的数据报中端口与A上存在会话的端口不一致,虽然IP地址一致),所以这样没有什么意义。

5、假如双方均为Symmetric NAT的情形,新开了端口,对方可以在不知道的情况下尝试猜解,也可以达到目的,但这种情形成功率很低,且带来额外的系统开支,不是个好的解决办法。

6、考虑到同一内网不同用户同时访问同一服务器的情形,如果此时网关采用AddressRestricted Cone NAT或Full Cone NAT型,有可能导致不同用户客户端可收到别人的数据包,这显然会出现问题。


P2P连通性条件检测: NAT检查工具:http://cc.rtmfp.net/

bubuko.com,布布扣


Restricted Cone

Port Restricted Cone

symmetric single IP

symmetric multiple IP

Restricted Cone

Yes收发可能混乱

Yes

Yes但不建议

No

Port Restricted Cone

Yes

Yes最佳

No

No

symmetric single IP

Yes

No

No

No

symmetric multiple IP

No

No

No

No



NAT穿越

原文:http://sw5720.blog.51cto.com/8812314/1558085

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!