ngrok内网穿透原理分析和实现

转载: http://www.dkys.org/archives/92.html
在互联网终端急剧增长的今天,公网ip已经成为稀缺资源,对于国内垄断的电信运营商来讲,更是不可能随便免费给你一个公网ip,许多家庭宽带都无法分配到公网ip,又或者公司学校安全角度考量,为了防止网络攻击,资料泄露,禁止内网机器通过路由器进行端口映射,搭建代理服务器,由此许多内网穿透,内网映射软件应运而生,根据网络通内网端口映射工具的多年开发经验,和大家分享一下内网穿透的原理和简单实现,网络通,花生壳内网版,ngrok等原理都是大同小异的.

首先传输协议选择,tcp或者udp,udp协议是被监控的最厉害的协议,因为p2p软件,迅雷,bt,emlue都频繁的使用udp,网络管理员经常会将udp协议禁掉,除了dns的53端口,所以tcp协议是首选.

既然不能在路由器就在公网搭建一个服务器,通过公网服务器帮我们转发数据,ngrok就提供了这样的转发服务器,如果嫌ngrok国外服务器太慢,自己搭建是首选,网络通  http://www.dkys.org 则内置国内穿透服务器,节省了很多功夫.

服务端是接收外部连接的,还需要客户端,将请求转发到内网服务器,为了实时知道有连接进来,客户端要和服务端建立tcp长连接.

穿透过程:

1.当服务端接收到连接,就读取映射表,判断接收的端口对应于哪一个客户端,然后向客户端发送通知.

2.客户端收到通知,读取本地映射表,判断对应哪个内网地址,向内网地址发起连接.

3.客户端和内网的服务器建立连接后,向服务端发起一个连接,作为转发通道.

4.服务端读取请求数据,并通过转发通道转发到客户端,客户端读取响应并通过转发通道返回给请求.

这只是一个简单的连接过程,其中还有映射端口的管理,如果是全端口映射还需要动态映射端口,目前只有网络通有这个全端口的功能,对于一些特殊应用,还要修改解析修改转发的数据才能穿透成功.

猜你喜欢

转载自sky13551389.iteye.com/blog/2254600