一个伪linux粉丝的blog

  1. 首页
  2. network
  3. 正文

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

12月 27, 2012 2561点热度 0人点赞 0条评论

这个英文标题够中式吧,哈哈。大家能猜出意思吧。 利用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

 

相关文章:

  1. nginx升级0.8.52
  2. iWatch monitor ftp site file created and send mail
  3. grub慢
  4. bwbar
标签: 暂无
最后更新:12月 27, 2012

wanjie

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

取消回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据。

归档
分类
  • network / 324篇
  • Uncategorized / 116篇
  • unix/linux / 114篇
  • 业界资讯 / 38篇
  • 公司杂事 / 11篇
  • 数码影像 / 12篇
  • 美剧 / 3篇
  • 美图共赏 / 20篇
  • 英语学习 / 3篇
标签聚合
网通 Ubuntu debian wget 中国电信 brew ldap d90 jira Google Google Adwords 虚拟主机 Linux dreamhost空间 Google Voice Opera Mini Nginx VPS 网站运营 nexus Android k8s 邮件归档 刷机 kernel iMac gitlab docker dreamhost 泰国

COPYRIGHT © 2008-2022 wanjie.info. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang