Friday, January 23, 2015

美丽新世界:linux 下的惬意生活 之 shadowsocks 代理篇

搭梯翻墙




Everyone has the right to freedom of opinion and expression; this right includes freedom to hold opinions without interference and to seek, receive and impart information and ideas through any media and regardless of frontiers.

—- <<Art. 19, Universal Declaration of Human Rights, 1948>>.


google 重新定义了搜索引擎,苹果重新定义了手机,天朝重新定义了局域网。为让大家保有天朝优越感,+- 屏蔽了大量“非法”网站,有境内/境外的、有纯技术的、有爱情动作的、有轮子功的,反正 +- 不喜欢的通通借由 GFW 这堵墙屏蔽掉。当然,也有主动屏蔽囧朝访问请求的,比如,sourceforge.net 非常反感囧朝的封闭,你朝子民别来我这儿。裆从小就教育我们,哪里有压迫哪里就有反抗,话说屏蔽之前,天朝的宅男还可以下载几部码片看看打发时间,嘚,看吧,让你屏蔽,没事做了,那就研究下怎样翻墙吧。

shadowsocks 代理




前面介绍的 goagent 只支持 HTTP(S) 协议代理,并不支持 socket 协议,shadowsocks,支持 socks5 的代理工具。shadowsocks 用 python 编写开发,非常轻量级,仅依赖库 python-M2Crypto 和 python-setuptools 两个库。你需要用 python 自己的包管理工具 python-pip 来安装 shadowsocks,执行





pip install shadowsocks


完成 shadowsocks 的安装。

安装完后,系统中多客户端 sslocal 和服务端 ssserver 两个程序,后者用于部署 shadowsocks 代理服务器对外提供代理服务,这里不关注。前面提过,代理,实际上需要一个代理服务器,同个它进行访问请求的中转,shadowsocks 也不例外,要成功连接代理服务器,必须传递如下信息至服务器:


  • “server”,服务器名称

  • “server_port”,服务端监听端口

  • “local_address”,本地中转地址,通常为 127.0.0.1

  • “local_port”,本地监听端口,通常为 1080

  • “password”,接入服务端密码

  • “timeout”,以秒为单位的连接超时时长

  • “method”,加密方式,通常为 aes-256-cfb

  • “fast_open”,是否开启 TCP_FASTOPEN 以减少延迟,通常为 false

  • “workers”,工作线程数量,通常为 1


以上信息保存至 *.json 证书文件中。如下是一 *.json 证书文件示例(含前后大括弧),取名 1080.json:


{
"server": "31.220.50.8",
"server_port": 36580,
"local_address": "127.0.0.1",
"local_port": 1080,
"password": "goagent",
"timeout": 512,
"method": "aes-256-cfb",
"fast_open": false,
"workers": 1
}


接下来,运行客户端程序


sslocal -c 1080.json


将成功连接代理服务器。到这步,shadowsocks 还无法为你提供代理服务。前面介绍 goagent 时提过用 autoproxy 设置 firefox 浏览器本地中转地址及端口,同理,shadowsocks 也需要用 autoproxy 设置自己的本地中转地址及端口,通常本地中转地址为 127.0.0.1、端口为你 *.json 文件中 local_port 字段指定的值、协议类型为 socks5,如下图:



(设置 shadowsocks 本地中转地址)

这时,在 autoproxy 中可使用 goagent 和 shadowsocks 两种代理:



(选用 shadowsocks 代理)

现在,你肯定关注如何获取 shadowsocks 免费证书。我为你准备了几个网站:http://ift.tt/1oEp0fRhttp://ift.tt/1DXcgXyhttp://ift.tt/1xPvO7Nhttp://ift.tt/19WLTSEhttp://it-player.com/http://ift.tt/1DXcgXA (需邀请码)、https://heidong.in/ (需邀请码)、http://ift.tt/1DXcjCM (需要积分)、http://ift.tt/RJ2SBo (暂停服务,后期恢复)、http://ift.tt/1DXcjCS (暂停服务,后期恢复),感想他们。一方面为留住访问量,一方面避免流量滥用,通常,这些公益网站会定期更新免费帐号的 server_port 和 password 信息,导致我在用的 SS 帐号时不时失效,我又不得不登录这些网站重新获取新帐号,真是麻烦。好吧,我,作为一个发育成熟的成年男性懒人,不能再这样过下去了,所以,基本上,我需要一个自动化工具,它得帮我做几件事:0)从各网站搜集 SS 帐号并测试帐号的可用性、代理出口所在区域、代理网速;1)将可用帐号转换成 sslocal 的命令行选项并输出至屏幕,让我复制后可直接运行;2)将可用帐号转保存成 sslocal 的 *.json 证书文件。所以,我写了个程序 autoshadower,你可以从 http://ift.tt/1xPvO7T 获取。你可以不带任何命令行选项直接运行:


$ autoshadower


autoshadower 为你测试它能获取的帐号是否可用,若可用它会在屏幕上输出 sslocal 的命令行选项,你直接复制运行即可,类似



\(^o^)/. this SS certificate available. now you can issue SS proxy as follow:
sslocal -s "la11.wfg.pw" -p 47265 -k "efmoe.panny" -b "127.0.0.1" -l 1080 -m "AES-128-CFB" -t 512


你将第二行复制粘贴至命令行中运行即可:


$ sslocal -s "la11.wfg.pw" -p 47265 -k "efmoe.panny" -b "127.0.0.1" -l 1080 -m "AES-128-CFB" -t 512


或者,采用 autoshadower 为你生成的证书文件:


$ sslocal -c ~/1080.json


同理,要想测试帐号的速度,–mode 指定为 s 即可。简单得很。


$ autoshadower --mode s --path ~/downloads


如下图所示:




(autoshadower 自动获取 SS 帐号)

怎么样,shadowsocks 代理还不错吧。shadowsocks 还有个特性,多路代理,你可以同时连接多个代理服务器。前面样例中我把本地中转地址的端口 local_port 设置为 1080,你完全可以用 autoshadower 生成的多个 SS 帐号(如,一个美国的、德国、法国、香港),每个帐号对应一个 *.json 文件(如,1080_us.json、1081_de.json、1082_fr.json、1083_hk.json),文件中的本地中转地址的端口 local_port 分别设置为 1080、1081、1082、1083,然后再在 autoproxy 中设定四个本地中转,这样你就可以按需要使用不同的代理了。

shadowsocks 与 goagent 互补,至此,达到我总预期的 80%。但它俩只能让我翻墙看看网页,仅此而已,无法让浏览器之外的软件翻墙。比如,Cygwin,一套用于将 linux 软件移至到 Windows 下的开发环境,在安装 Cygwin 时,它会自动联网下载环境中必须的头文件、编译器等等资源,而这些资源存放在墙外服务器上,Cygwin 又无法通过 HTTP 协议访问墙外资源,所以资源下载失败。换言之,shadowsocks 和 goagent 实现的翻墙并非全局性的。我需要支持整个系统的全局代理。

作者:yangyangwithgnu


原文:http://ift.tt/1vBZRRn








via 细节的力量 http://ift.tt/1CtrQsk

No comments:

Post a Comment