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

2015/01/19

搭梯翻墙

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://boafanx.tabboa.com/boafanx-ss/ 、http://water.dbops.org/?page_id=15http://www.jslink.org/about 、http://www.v2ex.com/go/shadowsocks 、http://it-player.com/https://cattt.com/index.php (需邀请码)、https://heidong.in/ (需邀请码)、http://bbs.v7club.com/forum-2-1.html (需要积分)、https://www.shadowsocks.net/get (暂停服务,后期恢复)、https://service.efmoe.us/thread-index-fid-1-tid-3-page-1.htm (暂停服务,后期恢复),感想他们。一方面为留住访问量,一方面避免流量滥用,通常,这些公益网站会定期更新免费帐号的 server_port 和 password 信息,导致我在用的 SS 帐号时不时失效,我又不得不登录这些网站重新获取新帐号,真是麻烦。好吧,我,作为一个发育成熟的成年男性懒人,不能再这样过下去了,所以,基本上,我需要一个自动化工具,它得帮我做几件事:0)从各网站搜集 SS 帐号并测试帐号的可用性、代理出口所在区域、代理网速;1)将可用帐号转换成 sslocal 的命令行选项并输出至屏幕,让我复制后可直接运行;2)将可用帐号转保存成 sslocal 的 *.json 证书文件。所以,我写了个程序 autoshadower,你可以从 https://github.com/yangyangwithgnu/autoshadower 获取。你可以不带任何命令行选项直接运行:
$ 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 实现的翻墙并非全局性的。我需要支持整个系统的全局代理。
摘自:https://github.com/yangyangwithgnu/the_new_world_linux

作者:yangyangwithgnu

Related Posts