利用node.js搭建SPDY协议的翻墙服务

2012-08-17 08:10

利用node.js搭建SPDY协议的翻墙服务

by snnn

at 2012-08-17 00:10:28

original http://www.udpwork.com/item/7959.html

我之前一直是使用ssh –D的方式翻墙,但是这么做有个缺点,需要在用户的机器上安装一个软件,并且ssh会经常断(即使加了keep alive)。后来我一直在想,为什么不直接走http或者socks协议呢?我觉得主要原因是:通信没有加密。

Chrome开了一个名为Secure Web Proxy的项目,旨在让浏览器支持HTTPS协议的proxy server。目前不光chrome,firefox也支持了。此外,Chrome还引入了一个名为SPDY的协议,通过对HTTPS做略微的修改,使得在单个SSL连接上可以同时传输多个HTTP请求。因为减少了HTTPS握手次数,可以大大提高proxy的相应次数。

综上所述,用SPDY协议来翻墙,比ssh -D好多了!

最近我从网上找了一段代码,发现可以很快速的利用node.js搭建一个SPDY协议的proxy server,下面分享给大家:

首先,安装node.js,从这里下载http://nodejs.org/download/对应的包。如果是Linux,直接解压缩即可,不需要root权限。

然后下载proxy程序文件

[app@www proxy]$ wgethttp://www.sunchangming.com/d/12641
[app@www proxy]$ unzip 12641

然后准备一对SSL key,我是从http://www.startssl.com/申请的。你也可以用openssl自己随便生一个自签名证书,但是必须让每个使用你的proxy的人安装这个CA证书到信任列表里。所以我建议还是找startssl申请吧。

启动参数很简单

/home/app/node/bin/spdyproxy -k /home/app/startssl/private.key -c /home/app/startssl/mycert.pem -p 4433 -U xxx -P xxxxx

-k: ssl证书的私钥
-c:  ssl 证书
-p: 端口号
-U: 用户名
-P: 密码

然后是client端。最简单的方式是启动chrome的时候直接加上--proxy-server=https://www.myproxyserver.com:4433 。高级点的,可以自己写个脚本生PAC配置文件,从而根据域名来判断是否需要走代理服务器。

        <div style="margin-top:8px;padding:6px 0;border-top:1px solid #3cf">
            <div style="text-align:center;margin:16px 0;padding:6px;border:0px dashed #999;font-family:arial;font-size:26px;font-weight:bold">
<a href="http://www.udpwork.com/item/7959.html#review_form" title="不喜欢" style="text-decoration:none">
    <img src="http://www.udpwork.com//images/thumb_down24.gif" alt="">
    <span style="color:#f33">0</span>
</a>
   
<a href="http://www.udpwork.com/item/7959.html#review_form" title="喜欢" style="text-decoration:none">
    <img src="http://www.udpwork.com//images/thumb_up24.gif" alt="">
    <span style="color:#3c3">0</span>
</a>

IT 牛人博客聚合网站(udpwork.com) 聚合 | 评论: 0 | 10000+ 本编程/Linux PDF/CHM 电子书下载