如何使用obfsproxy搭配shadowsocks-nodejs安全高效的访问互联网

2012年12月24日 | 分类: 翻墙相关 | 标签: ,

该文章无版权,请随意转载或修改。由于编写仓促,可能会有瑕疵,请多多谅解。

由于WordPress的特性,两个 – 符号可能会变成全角的 —— 符号,实际操作时请注意替换。

本教程将指导您如何使用shadowsocks-nodejs作为代理服务器,以及使用obfsproxy作为伪装躲避检查。

本教程的服务端基于CentOS 6.2进行,客户端为Windows 7,由于本人使用的CentOS并非初始(干净的)环境,可能会有误差,同时在其他操作系统上的操作可能会略有差异,请注意按照实际情况更改配置。

------以下是服务端的配置------

首先搭建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)。

下载成功后,进入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-darwin-x86.tar.gz

稍等片刻,下载完了,我们下回来一个压缩包,现在需要解压:

tar zfvx node-v0.8.16-darwin-x86.tar.gz

解压完毕后用ls命令查看,会有一个node-开头的目录,进入这个目录:

cd node-v0.8.16-darwin-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 存盘退出。

现在,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

注意,CentOS会缺少许多包,或者版本不对,对于这种包只能一个个的编译。比如版本不对的 libevent ,通过Google这个名字可以发现官方网站是 http://libevent.org/ ,而官方网站也提供了下载链接: https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz ,因此需要下载回来,然后进行编译,下面的部分教程是将如何编译 libevent ,如果已经具备该包,或者您是对Linux比较了解的用户,请跳过。

------如何编译libevent------

首先,从 http://libevent.org/ 获得最新版本的下载地址,截至到本文发布时,版本是 2.0.21-stable ,我们使用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了。

-------如何编译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缺少的软件包的名字,重新编译安装后,再尝试编译。

在编译完成后, 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。

截至本文发布时,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 ,端口1080即可(或者您指定的端口)。

以上就是本教程的全部部分。

补充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. AEC4D
    2013年1月9日15:34

    这个步骤有点复杂…那次部署单纯ssh的obfsproxy都花了不少时间….希望能用的久一点吧

  2. jdimg
    2012年12月26日01:36

    界面和以前无法比,版面看上去和网页没加载完一个模样似的。

    • iGFW
      2012年12月27日14:03

      好了,已经修改会原来的了,很抱歉给您带来的不便

  3. AS
    2012年12月25日12:09

    New ver.:BreakWall
    https://code.google.com/p/breakwall/downloads/list
    “bw392f.dmg.zip BreakWall 3.92 修正版,抱歉昨晚发布的3.92有点小错误,请重新下载这个版本: Featured 104 minutes ago 112 minutes ago 19.8 MB ..”

  4. AS
    2012年12月25日11:41

    http://forums.internetfreedom.org/index.php?topic=18365.0
    ” 欢迎下载爱博电视-iPPOTV Ver.12(0935) 发布日期:2012年12月23日
    « 于: 昨天 10:51:42 pm »

    引用

    iPPOTV Ver.12(0935)主要是针对目前的封锁特点做了较大的改进.在中国大陆,使用的人越多,突破封锁效果越好。从观察的数据看”低带宽视频直播”及“音频直播”栏目中的频道带宽较低,在中国大陆也能流畅收看。其他视频频道带宽在450-550kbps之间,海外收看非常流畅,但在中国大陆由于受到网络封锁的干扰,不同地区和时段收视效果有所不同。………..”

  5. fanq
    2012年12月25日10:51

    我因为是你的博客有问题,原来是改版了,不如旧版的醒目

  6. @twfcc
    2012年12月25日06:10

    請改回以前的風格,現在很刺眼的白色

  7. fly
    2012年12月25日00:26

    博主的网站改版了?真心觉得不如旧版的好,白色背景较刺眼,看着不舒服。另外评论功能也不如旧版,没有层次感,希望回归到旧版!

    • iGFW
      2012年12月25日21:13

      明天换回来,呵呵

  8. mitchel
    2012年12月24日22:36

    今天博主大发了!

  9. maoyipeng
    2012年12月24日20:32

    短时间内不会被q吧