分享

PuTTY - 内网穿透原理

 imzjw 2011-03-19

PuTTY - 内网穿透原理

内网计算机(也就是LowID),都通过至少一层网关连接互联网,没有自己的独立IP和端口(别人看到的你的IP是网关的),所以别人无法主动与你建立连接,两个内网用户自然也就无法连通,更无法实现传输。但是内网计算机可以主动连接其他有独立IP的外网计算机,再通过udp协议通讯的时候,因为udp是非持续连接的,所以网关那边会给你开一个临时端口,让你能够接受外网计算机返回给你的udp包,如果一段时间内没有传输,临时端口便会取消。这个步骤就可有空子钻,比如A和B
两台内网计算机,都同时连接外网计算机C进行udp协议的传输,A和B分别用到了临时端口Ap和Bp,这个时候通过Ap就可以主动连接到A,Bp就可以主动连接到B,所以C所要做的,就是把Ap告诉B,把Bp告诉A。AB通过从C那里知道的Ap和Bp,即可实现UDP直连。只要连接不断,临时端口就一直有效,传输期间,C什么都不需要参与,这个过程,俗称打洞,C帮AB打好洞,AB就可以自己玩了。当然我这个是最简单的讲法,根据不同的网关设备,还是有很多不同情况需要解决。有人怕Low2Low会耗HighID资源,这个多虑了,不是说不耗,而是耗的根小,C只不过初期接受一下AB发来的UDP请求,并向双方返回一次数据,打洞成功之后就再也没事了。本身UDP传输就耗的资源很少,这一两次UDP传输相对于连接频繁的eMule,可以忽略不计了。更要说明的一点就是,我们目前测试用的内网穿透eMule,都是连接的我们自己的一台服务器用来做“C”,帮LowID打洞,没有依赖任何其他。HighID,而我们那台破PIII服务器,目前同时处理着几百个low2low的连接,也几乎没占多少服务器资源。当然将来最好的方案,是可以让eMule的Low2Low基于Kad来进行,这样可以不依赖任何第三方的服务器,独立的发展下去。基本原理是LowID利用自己的buddy来做帮助打洞,每个HightID只会帮1个LowID做buddy,所以不会增加HighID的负担。这方面我们也作了研究,不日也准备进行测试。内网穿透目前是一套成熟的方案,QQ,BC等都早已开始大规模使用。为什么eMule到现在为止才开始由我们开始测试内网穿透呢?主要是因为eMule的开发长期以来都由老外们主导,国外大都由公网IP,Low2Low对他们来说,太不重要。而我们自己也走了很多的弯路,去年尝试通过内置VNN来解决问题,但VNN相对eMule,是一套太大的解决方案,需要注册和安装虚拟网卡才能使用。虽然我们后来的版本自动完成了这2步,但是VNN的服务器还是无法拖起eMule这巨大的用户群进行这样复杂的应用。所以这次痛定思痛,自己从头开始开发,主要就是让使用tcp协议传输数据的eMule可以利用到UDP直连,并且解决各种各样的细节问题(因为eMule之前都没考虑到low2low问题)。国外也有个neo版本的eMule,尝试利用kad解决Low2Low的问题,但实际使用效果不好。我们在开发过程中也想参考,不过基本没参考成,代码
太复杂太乱。最后还是根据自己的思路自己写的,会比neo的思路更清晰些 。
    使用SSH建立tunnel隧道,穿透到内网服务器!
  在很多项目的搭建上,处于安全角度,经常将某些关键服务器配置成内网环境
即只能在内部运行,无法向外连接
例如下图在图中,要访问内网里边的服务器上的站点,则必须先登录到具有双网卡的机器上
然后再跳转到内网服务器上
如果是http/ftp协议,则只要在双网卡双IP的服务器上配置好apache/squid代理就可以了但是,如果要访问内网服务器的MSSQL、远程桌面等服务,那就成为问题了
具有双网卡的服务器是一个字符linux环境,无法直接连接远程桌面等图形服务,也不支持mssql协议
这时候就需要ssh的tunnel隧道出马了。首先使用putty或者ssh等标准的ssh工具,建立一个profile,设置好ip、端口等。进入高级选项,可以在选项卡里边找到ssh tunnel的设置。选择Outgoing,选择add。添加一个新规则。其中licten 12345表示隧道建立后,使用本机的12345端口。
而远程地址,则输入要穿透的内网服务器的地址和端口。新建好了点击确认。从profile中选中刚才建立的带有隧道的连接。输入密码完成,连接ok。随着标准ssh的建立,后台的tunnel也建立好了!到本机上,执行netstat -an,能看到刚才建立的隧道,端口是12345。由于我们的隧道的远端是个3389端口,所以我们这里就可以用远程桌面了。登录成功!通过ssh tunnel隧道的建立,成功的利用一个双网卡(双ip,双网段)的机器,实现了到内网的穿透。穿透内网,用手机远程控制电脑  3G时代来了,智能手机也越来越强悍了,像HTC
HD2主频已达到1GHz,都要与PC电脑配置差不多了,这使得手机上的应用也越来越牛逼啦。
  最近网上有一款本该在PC电脑上玩的强悍软件--“网灵一号” 在智能手机上也流行起来。
  机油们用它来远程移动办公,远程监护未成年人上网用电脑,甚至用它来远程监管办公室员工电脑,家里情人的电脑。。。
  下面是我的 HTC Diamond2 上软件截图:
  运行软件,列表中显示了所有在线的受控端,由于“网灵一号”可以穿透内网,所以不管受控端在世界什么角落,
  只要能上网即可出现在这个列表中:  【插图:001-手机列表.JPG】
  连接上一个受控端,是如下界面:  【插图:002-已连接.JPG】
  假如说其中有一个是自己小孩在家里用的电脑,要远程监管他上网。使用“桌面监控”,即可看到小孩正在上网聊QQ:  【插图:003-桌面监控.jpg】
  用“上网监管”功能,可以查看孩子最近上网记录:  【插图:004-浏览记录.JPG】
  也可以查看孩子收藏了哪些网页,了解孩子的兴趣爱好:  【插图:005-收藏网页.JPG】
  如果发现小孩浏览过色情、暴力等不良网站,应该坚决屏蔽这些网站:  【插图:006-屏蔽网站.JPG】
  用“音视频监控”功能,可以开启摄像头和麦克风,看孩子在做什么,说什么。
  视频流畅,声音清晰。  【插图:007-音视频监控.jpg】
  可录制,可以从摄像头抓拍照片。。。  【插图:008-抓拍照片.jpg】
  远程管理文件也可以,出门在外偶尔需要上传下载什么的。。。  【插图:009-文件传输1.jpg】  【插图:010-文件传输2.jpg】
  目前,“网灵一号”已支持 Windows Mobile手机 及 魅族M8手机, Google Android手机版本也即将发布。
  下面是 魅族M8 手机上运行“网灵一号”控制端软件的截图:
  a) 在线受控端列表 b)桌面监控功能,查看和控制远程电脑的屏幕
  c)可访问远程电脑文件系统 d)音视频监控,用手机开启远程摄像头进行语音视频聊天  【插图:011-M8组合.JPG】
  我个人认为这个相当强大的,有了这个手机软件,只要有3G信号或者Wifi信号,不管你是出差在外,旅游途中,
  还是逗留机场,宾馆,商场,餐厅,咖啡馆,,,都可以随时对PC电脑进行远程管理或远程监控!
  PS:软件控制端同时提供手机版,PC版,以及基于浏览器的网页远程控制。
  刚看了下BT原理因为公司一个程序被防火墙死活当成BT软件而封了,被误判可能是因为网络连接过程更BT内网穿透情况完全一致而导致网关给卡掉了。所以仔细研究了一下。看了几篇文章,说得都差不多。
  最近一篇地址:http://www./n1306c2.aspx  下面是自己的理解。
  内网穿透的原理是
内网客户端 l,
外网客户端 n,
网关 nat,
  内外网是无法直接连接的,因为IP范围不一样
但网关充当中间人就实现了这个功能
  l 要连 n, 消息发到 nat 时 nat发现时要连到外网(内网就直接转发到内网地址即可), 就自己建立一个socket去连接
n, 从此以后  l 发过去的数据都会被修改包头中的本地地址为 nat的地址, 然后发出去

所以 n 实际上一直以为 是nat在给自己发东西。
n要给l发东西 , nat收到以后就会把包头中的目标地址改成内网地址,然后发给l
  而l则实际上一直是在跟nat发东西。
  然后BT穿透是指有时候两个不同的内网需要连接,这是办不到的。因为两个内网程序都不知道对方的外网地址,所以无法连接。
于是找一个外网客户端。
内网 la,lb
网关 nata,natb
外网 n
la 要连 lb。
la先连接n,lb也连接n。然后
la在n那里得到了lb的地址(而实际上就是natb的地址)。但是直接给natb发东西不行的。因为一个socket只能给一个socket发东西而这时natb是在跟n发东西的。
  于是la给n说,你让lb连我吧!然后n对lb说,你再开一个连接出来,于是n就有了lb的另一个地址AddreslbB,然后告诉la。la这下就可以连接lb了,因为AddresslbB是一个外网地址,也就是natb的地址。而natb是知道这个地址是要转发给lb的。所以……
  这就水到渠成了。所以大致分析公司那个被误判的程序是因为他连到了一个外网地址,网关已经为他代理了一条通道,他又要开一个新的连接同一个外网IP。可能是这样子网关以为他是在做内网穿透。给屏蔽了后面要建立的连接。  只是可能这样,要看代码才知道,代码才是最直接的解释。不过这个问题不是让我来解决。仅仅旁听后做的感想。呵呵
  等他们解决问题后再看看是不是这个样子。
让你的电脑穿透内网全速P2P!(适用于BT、EMULE)2007-05-18 06:19  
前言:P2P大家应该都比较熟悉了,点对点的传输协议。但是,P2P有个最大的问题,就是内网穿透能力非常弱。
什么叫内网?比如说,你是通过局域网内其他的主机(或路由器)连接到网络的,那么,你就处于内网之中(也可以望文生意的)。假如双方都处于内网,那协议对地址的解析能力就比较弱了,因为内网用户使用的是虚拟IP地址,不是在INTERNET上的IP地址。
然后教大家怎么做:
首先要确定你是否属于内网用户。一般来说,教育网一般是属于内网的。使用路由器的是属于内网。多台机器上网,其主机可以不算内网用户,其他分机均属于内网。
至于怎么完全确认呢?需要这样做:
进“控制面板”-“网络连接”。然后双击“本地连接”。点到“支持”。看IP地址。如果是类似192.168.1.2 
192.168.0.8 
之类的地址,那就是使用的内网中的IP,也就是说,你处于内网之中。
那怎么设置呢?这样做:
进“本地连接”,点“常规”-“属性”。然后双击下面的“TCP/IP协议”。则会出现一个可以输入很多数值的东西。这个就是设置你IP使用的。按如下设置:IP:填入192.168.0.8 
(前面三位一定得和你刚才看的IP相同,第4位任意)
子网掩码:点击它,会自动出现 255.255.255.0
默认网关:192.168.0.1 
(前面三位和你刚才看的一定得相同,第4位一定是1。比如你看的是192.168.0.8,则填192.168.0.1,如果是192.168.8.7,则填192.168.8.1)
下面的DHCP服务器:192.168.0.1 
(设置的值与默认网关相同)
备用DHCP服务器可以不填。这样做的目的是让你在局域网内有固定的IP,好方便下面对端口映射的设置。
设置好后,打开IE浏览器,输入192.168.0.1(和默认网关的地址相同)。然后输入你的路由器的设置帐户和密码,进入路由器设置界面。
然后找到“NAT设置”(也有叫 虚拟端口影射 虚拟服务等等的,但一定有这个功能的,大家可参见路由器的说明书)
然后在底下,“虚拟服务名称”可以随便填,只要你知道是什么就可以了。
“内网服务IP地址”填入192.168.0.8
(必须和你上面设置的自己的IP相同),“外部端口”和“内部端口”填入相同的值,都填你软件使用的端口!然后“协议”选择软件使用的协议!
但是使用的端口和协议怎么得知呢?你打开你的软件,比如BT精灵或者EMULE,然后点“设置”或者是“选项”。然后找到关于“连接”的描述,会有使用的端口和协议。下面列举一些常用的软件端口:
IE:80端口,TCP协议
QQ:4000端口,TCP协议/UDP协议
FTP:21端口 TCP协议(默认是21,但很多建FTP的人都改了端口号)
WAR3:6112端口 TCP协议
BT精灵:16881端口,TCP协议
EMULE:46722端口,UDP协议
  46622端口,TCP协议当然,端口都可以自己在软件里面改变,当然,路由器的设置也必须随之改变。
这些设置好后,保存,并退出路由器设置,你再使用这些软件的时候,就会很容易跟别人连接上了!而且速度很快!最明显的变化,就是使用EMULE的用户会发现自己由“LowID”变为“HighID”了,有这个变化也就说明设置成功了!
另外,这主要是针对路由器的内网用户,对于教育网,由于网关服务器我们无法设置,所以比较麻烦,我们也没法轻易突破或设置,对此我也没有太好的办法。
不过,对于那些封了魔兽、QQ、BT端口的变态网关,大家可以通过设置自己的软件,改变其运行端口,就可以突破这些限制了!(注意,不是路由器的设置!)
至于说的通过一台主机实现的局域网,则需要在主机上安装端口映射的软件,比较麻烦。最好的方法就是如果需要BT,就用主机去下载,下完后再通过局域网拖到自己的机器上 
^_^
最后,祝大家都能设置成功!文章来源:http://blog.sina.com.cn/s/blog_6444798b0100madv.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多