分类: 系统运维
2008-08-25 12:56:57
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
解析协议报文并转发。客户端不用任何修改
2. 防火墙穿透
2.1 HTTP代理 rfc2616 用GET,POST,CONNECT方法,CONNECT建立连接后直接发送数据。可能需要一个proxy或前置机来处理HTTP信息,再重新组包发给真正的接受主机或进程。
2.2 Socks 5代理 RFC1928 知名端口1080,支持TCP,UDP的防火墙穿透。其报文也是TLV(Type,Length,Value)的形式。