人之将死之一:穿透

abloz 2006-02-27
2006-02-27

1.NAT穿越

NAT分两大类,一类是对称的(Symmetric NAT),5元组(源端口,IP,目的端口IP,协议)限制更加严格,很大一部分企业的NAT是对称的;一类是非对称的(Cone NAT,锥型),非对称的。非对称Cone包括完全锥形(穿透后任何IP和端口都可以往私网发送包),限制锥型(穿透后,同一IP的程序可以往私网发送包),和端口限制锥形(只有接到私网内部包的IP和端口可以往私网发送包)。

1.1 STUN Simple Traversal of User Datagram Protocol (UDP)  Through Network Address Translators (NATs) rfc3489

STUN的精髓:

 

                           /—–
                          // STUN 
                         |   Server  |
                                 //
                            —–/

                       +————–+             Public Internet
       …………….|     NAT 2    |…………………..
                       +————–+

                       +————–+             Private NET 2
       …………….|     NAT 1    |…………………..
                       +————–+

                            /—–
                          // STUN 
                         |   Client  |
                                 //               Private NET 1
                            —–/

                     Figure 1: STUN Configuration

 

STUN 是用来探测NAT类型和获取私网内部客户程序IP地址和端口的。它只适用于锥形的NAT,和发送UDP包。STUN Server并不保存Client的IP地址和端口。但会在绑定回复包里告诉Client它的IP地址和端口。比较源IP 端口和回复包里的给的IP端口,如果不一致,就知道客户端在NAT后。为了探清楚NAT类型,可以发送绑定请求,让STUN Server换个IP和端口发回复,如果收到,就是完全锥形。

 

 

1.2.TURN

TURN相当于一个Proxy服务器,可以用来对TCP协议穿透和Symmetric NAT的穿透。

 

 

    TURN server  ======= TURN Server

       /                                          

———————–          ————————- Symmetric NAT

    /                                              

     A                                            B

 

1.3.ICE
将TURN和STUN协议结合起来用。

 

    NAT                                                               NAT

A         ———ICE(TURN+STUN server)——– B

 

1.4.Full Proxy

解析协议报文并转发。客户端不用任何修改

 

  1. 防火墙穿透

2.1 HTTP代理 rfc2616 用GET,POST,CONNECT方法,CONNECT建立连接后直接发送数据。可能需要一个proxy或前置机来处理HTTP信息,再重新组包发给真正的接受主机或进程。

 

2.2 Socks 5代理 RFC1928 知名端口1080,支持TCP,UDP的防火墙穿透。其报文也是TLV(Type,Length,Value)的形式。

 


如非注明转载, 均为原创. 本站遵循知识共享CC协议,转载请注明来源