这个英文标题够中式吧,哈哈。大家能猜出意思吧。 利用obfsproxy和shadowsocks-nodejs阻止内容审查(也就是传说中的翻墙)。据说这个方式叫混淆流量,抗干扰能力比vpn强大。
原文:http://sae.chenshaoju.com/?p=14 大部分原文转载,有些地方根据自己的实际情况做了一些调整。我的环境是debian 5.0 vps
------part one shadowsocks-nodejs 搭建过程------
首先搭建shadowsocks-nodejs
shadowsocks-nodejs是基于Node.js开发的高效网页代理,可以非常方便的在客户端建立一个SOCKS5代理,帮助用户通过VPS或物理计算机访问网络。
用您喜欢的方式(SSH或任何其他方式)登录您的VPS或服务器的终端控制台,进入一个目录,比如/tmp/,然后从 https://github.com/clowwindy/shadowsocks-nodejs.git 下载shadowsocks-nodejs。
cd /tmp
git clone https://github.com/clowwindy/shadowsocks-nodejs.git
提示:如果提示没有git命令,请运行 yum install git (CentOS)或 apt-get install git (Ubuntu)。
我的vps实践是需要 apt-get install git-core 否则依然提示"-bash: git: command not found"
#git clone https://github.com/clowwindy/shadowsocks-nodejs.git
Initialized empty Git repository in /tmp/shadowsocks-nodejs/.git/
error: The requested URL returned error: 403
warning: remote HEAD refers to nonexistent ref, unable to checkout.
如上这一步如果报错The requested URL returned error: 403,解决方式有2种
a. 改https为git协议 , git clone git://github.com/clowwindy/shadowsocks-nodejs.git
b. 运行这个命令 git config --global http.sslverify "false"
下载成功后,进入shadowsocks-nodejs目录:
cd shadowsocks-nodejs
用ls命令,可以看到许多文件,我们先修改配置以符合我们的要求,用编辑器打开config.json文件:
vi config.json
我们可以看到5行内容(忽略花括号),按下Insert按钮开始修改。第一行(server)可以不用修改,这是提供给客户端的。第二行 (server_port)是服务器的监听端口,通常推荐换一个端口以防被发现,请务必要记住,在本例中,设置为12345端口。第三行 (local_port)也是客户端使用的,暂时不用修改,第四行(password)是密码,通常推荐修改默认密码增加安全性,修改好后务必要记住。第 五行(timeout)是超时设置,通常不用修改。
更换好端口和密码后,请务必要记下这些信息,因为稍后配置会用到它。按下ESC,输入 :wq 存盘退出。
现在回到终端控制台上,我们可以将这些内容移动到一个合适的目录,比如,我把整个shadowsocks-nodejs放到了/var目录下:
mkdir /var/shadowsocks
mv /tmp/shadowsocks-nodejs/* /var/shadowsocks
我们需要记住这个路径(/var/shadowsocks),因为稍后会用到。
现在,需要下载node.js的运行环境,截至到本文发布时,node.js的版本是0.8.16,下载地址是: http://nodejs.org/dist/v0.8.16/node-v0.8.16-linux-x86.tar.gz ,如果该链接已经失效,或者您的Linux是AMD64的,请访问 http://nodejs.org/download/ 获得最新或对应的二进制包。
下载命令为:
cd /tmp/
wget http://nodejs.org/dist/v0.8.16/node-v0.8.16-linux-x86.tar.gz
稍等片刻,下载完了,我们下回来一个压缩包,现在需要解压:
tar zxvf node-v0.8.16-linux-x86.tar.gz
解压完毕后用ls命令查看,会有一个node-开头的目录,进入这个目录:
cd node-v0.8.16-linux-x86
然后进入 bin 目录
cd bin
用 ls 命令看一下,是否能找到一个 node 的文件,如果能,那么将这个文件复制到 /usr/bin/ 目录下:
mv node /usr/bin/
复制完毕后,说明现在已经完成了配置 shadowsocks-nodejs 的服务端环境,还需要将其加入开机自动启动的 rc.local 里,先运行以下命令:
vi /etc/rc.local
回车后,会进入编辑器,按下Instre按钮,然后新起一行,添加(包括括号):
(node /var/shadowsocks/server.js >/dev/null 2>&1 &)
注意,我的server.js文件(shadowsocks-nodejs解压出来的)在之前移动到了 /var/shadowsocks/ 目录下,如果您修改了路径,那么请按照实际情况对路径进行修改。
然后按下ESC按钮,并输入 :wq 存盘退出。
--------------part two obfsproxy 出场的分割线------------------
现在,shadowsocks-nodejs的搭建已经完成了,只需要重启VPS或计算机即可立即启动,但是由于shadowsocks-nodejs存在一些特征,容易被不可抗力捕获并屏蔽,因此推荐再利用obfsproxy进行二次封装。
obfsproxy的主要目的是将各种网络通信封装为一种混杂通信--数据包经过加密,并且参杂了无用信息,使得不可抗力难以侦测到有效流量,从而降低被屏蔽的可能性。
obfsproxy需要较多的组件,首先先准备开发环境:
CentOS: yum install autoconf autotools-dev gcc git pkg-config libtool libevent-2.0-5 libevent-dev libevent-openssl-2.0-5 libssl-dev
Ubuntu: apt-get install autoconf autotools-dev gcc git pkg-config libtool libevent-2.0-5 libevent-dev libevent-openssl-2.0-5 libssl-dev
我的debian 5.0果断的提示没有 libevent-2.0-5 ,手动编译吧:)
注意,CentOS会缺少许多包,或者版本不对,对于这种包只能一个个的编译。比如版本不对的 libevent ,通过Google这个名字可以发现官方网站是 http://libevent.org/ ,而官方网站也提供了下载链接: https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz ,因此需要下载回来,然后进行编译,下面的部分教程是将如何编译 libevent ,如果已经具备该包,或者您是对Linux比较了解的用户,请跳过。
------part three 如何编译libevent------
首先,从 http://libevent.org/ 获得最新版本的下载地址,截至到本文发布时,版本是 2.0.21-stable (Released 2012-11-18),我们使用wget命令下载:
wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
然后解压:
tar zxvf libevent-2.0.21-stable.tar.gz
解压结束后,进入 libevent-2.0.21-stable 目录
cd libevent-2.0.21-stable
注意,这个地方有点不一样,如果您的操作系统是CentOS,并且已经安装了1.x版本的libevent,那么可能在obfsproxy的编译过程中找不到,所以需要编译到其他目录,比如/home/tord/event2/目录。
./configure –prefix=/home/tord/event2
make
make install
编译结束后,路径会到 libevent 会安装到/home/tord/event2目录,然后设置变量,貌似原作者打错了,我这个是可行的。
1 2 3 |
$ export libevent_CFLAGS=-I/home/tord/event2/include $ export libevent_LIBS="-L/home/tord/event2/lib -levent" $ export LD_LIBRARY_PATH=/home/tord/event2/lib/ |
现在,就可以开始编译obfsproxy了。
-------part five 如何编译libevent------
开发环境下载完后,从官方源获取obfsproxy的源码:
cd /tmp/
git clone https://git.torproject.org/obfsproxy.git
然后运行ls命令看看是否有一个obfsproxy的目录,如果有,则继续:
cd obfsproxy
./autogen.sh
./configure
make
make install
提示,如果缺少软件包,那么必须使用yum install或apt-get install 命令安装,或者Google缺少的软件包的名字,重新编译安装后,再尝试编译。
我分别安装了如下的包 apt-get install autoconf2.13 pkg-config libcurl4-openssl-dev
在编译完成后, obfsproxy 会存放在 /usr/local/bin/ 目录中。
由于我在之前指定了libevent的路径,因此还需要将libevent的库文件拷贝到公共目录中:
cp /home/tord/event2/lib/libevent-2.0.so.5 /usr/lib/
最后,重新打开 rc.local 文件:
vi /etc/rc.local
然后按下Insert按钮,进入编辑模式,新起一行,然后增加(包括括号):
(/usr/local/bin/obfsproxy obfs2 –dest=127.0.0.1:12345 server 0.0.0.0:54321 >/dev/null 2>&1 &)
注意,前面 12345 是在shadowsocks-nodejs的config.json文件中配置的端口,而 54321 是 obfsproxy 负责接收和发送混杂数据的端口,推荐按照实际情况为obfsproxy设置一个新端口。
确认无误后,按下ESC键,并输入 :wq 存盘退出。
现在,只需要重启VPS或计算机即可让其生效。
提示:对于CentOS 6.2,可能还需要修改 /etc/sysconfig/iptables 文件允许obfsproxy的端口通过。
而对于没有端口防火墙的用户,推荐使用iptalbes屏蔽shadowsocks-nodejs的端口(本例中为TCP 12345),以防止被外界扫描到。
------以上就是服务器端的配置------
下面,开始客户端的配置(Windows)。
首先,从Tor官方网站 https://www.torproject.org/projects/obfsproxy.html.en 下载包含Obfsproxy的Tor包,当然,我们只需要用里面的Obfsproxy。
截至本文发布时(2012.12.26),Windows的包的下载地址是 https://www.torproject.org/dist/torbrowser/tor-obfsproxy-browser-2.4.6-alpha-2_en-US.exe ,请按照实际情况下载。
下载回来是一个7-Zip自解压压缩包,解压后会生成四个目录和一个可执行文件,我们将App目录里的东西复制到一个合适的位置(比如 D:\FQ\ )。
访问 http://nodejs.org/download/ ,下载Windows的程序包,截至到本文发布时,x86的下载包是 http://nodejs.org/dist/v0.8.16/node.exe ,AMD64的下载包是: http://nodejs.org/dist/v0.8.16/x64/node.exe ,直接将下载回来的文件放入之前所指定的目录即可( D:\FQ\ )。
访问 https://github.com/clowwindy/shadowsocks-nodejs ,点击界面上的ZIP按钮,将压缩包下载回来解压,将shadowsocks-nodejs-master文件夹中的内容也移动到之前设定的目录( D:\FQ\ )。
用记事本打开config.json文件,将password行修改为之前所指定的密码,server_port和server_ip无需修改。
注意:如果1080端口冲突,请更换一个端口,并在稍后修改浏览器的代理服务器的地方设置为您所指定的端口。
提示:如果您有整理癖,请按照您的习惯放置,不过在稍后的批处理中,需要按照指定路径进进行访问。
进入该目录,右击空白区域,新建文本文件,并设定一个名字,然后双击打开,输入:
START node.exe local.js
START obfsproxy obfs2 –dest=111.111.111:54321 client 127.0.0.1:8388
EXIT
注意:上面的111.111.111.111是您的VPS或服务器的IP地址,54321是您的服务器上的obfsproxy端口,如果您修改了,请按照实际情况填写!
然后保存并退出,并将新建的文本文件的扩展名修改为.BAT。
提示:如果看不到扩展名,请打开我的电脑(或计算机),点击工具菜单(如果看不见,先按一下Alt按钮),点击文件夹选项,转到查看选项卡,并取消“隐藏已知文件类型的扩展名”,然后确定,就能看到刚才的文本文件末尾多出来了 .txt ,将其修改为 .bat 即可。
双击所建议的FQ.BAT,会自动打开两个新窗口,这说明启动成功。
最后,打开您的浏览器,配置代理为SOCKS5,IP 127.0.0.1 ,端口8388即可(或者您指定的端口)。
以上就是本教程的全部部分。
补充1:如果不在乎速度,而在乎安全,可以加上 –shared-secret=PASSWORD 参数,其中PASSWORD是设定的obfsproxy协商密码,比如:
服务器:
(/usr/local/bin/obfsproxy obfs2 –dest=127.0.0.1:12345 –shared-secret=PASSWORD server 0.0.0.0:54321 >/dev/null 2>&1 &)
客户端:
obfsproxy obfs2 –dest=111.111.111:54321 –shared-secret=PASSWORD client 127.0.0.1:8388
原作者表示,加上了加密参数后变得很慢(比SSH还慢),可能在不同的环境下可能不一样,请酌情测试。
特别感谢:
@jimmy_xu_wrk
@radaiming
@fdb713
参考资料:
https://github.com/clowwindy/shadowsocks-nodejs/wiki
http://nodejs.org/api/
https://www.torproject.org/projects/obfsproxy-instructions.html.en
https://trac.torproject.org/projects/tor/ticket/5009#comment:17
http://www.wangafu.net/~nickm/libevent-2.0/doxygen/html/
http://www.cnblogs.com/bluesky23/archive/2012/11/30/2796251.html
文章评论