how to use obfsproxy with shadowsocks-nodejs stop all tor censorship

这个英文标题够中式吧,哈哈。大家能猜出意思吧。 利用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目录,然后设置变量,貌似原作者打错了,我这个是可行的。

$ 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

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注