红联Linux门户
Linux帮助

Ubuntu 14.04配置Shadowsocks和Privoxy实现浏览器和终端代理

发布时间:2016-01-07 16:16:22来源:linux网站作者:RyougiShikii

这几天想配置PHP Laravel框架,Laravel框架需要Composer安装。结果安装Composer的时候遭遇到了GFW,光在浏览器上穿墙还不够,还要在终端上穿墙。使用Shadowsocks在浏览器上穿墙很简单,但是在终端穿墙以前没接触过,这次花了一晚上搞定了。


安装Shadowsocks

既然是用Shadowsocks穿墙,那么首先需要安装Shadowsocks。在维基百科上对Shadowsocks的描述如下:

Shadowsocks使用自行设计的协议进行加密通信。加密算法有AES、Blowfish、IDEA、RC4等,除创建TCP连接外无需握手,每次请求只转发一个连接,因此使用起来网速较快,在移动设备上也比较省电。然而协议对双方的身份验证仅限于预共享密钥(pre-shared keys),亦无完全前向保密(perfect forward secrecy),也未曾有安全专家公开分析或评估协议及其实现。Shadowsocks不能替代TLS或者VPN,本质上只是设置了密码的网络代理协议,不能用作匿名通信方案,该协议的目标不在于提供完整的通信安全机制,主要是为了协助上网用户在严苛的网络环境中突破封锁。在某些极端的环境下,通过深度包检测(DPI)也有可能识别出协议特征。为了确保安全,用户应做好额外的加密和验证措施,以免泄露信息,无论使用的服务器来源是否可靠。
通过客户端以指定的密码、加密方式和端口连接服务器,成功连接到服务器后,客户端在用户的电脑上构建一个本地socks5代理。使用时将流量分到本地SOCKS5代理,客户端将自动加密并转发流量到服务器,服务器以同样的加密方式将流量回传给客户端,以此实现代理上网。

虽然不是一个完整的通信安全机制,不过只要能突破封锁就可以了。Shadowsocks的安装很简单。

~$ sudo apt-get install python-gevent python-pip
~$ sudo pip install shadowsocks


安装后需要对Shadowsocks进行配置,在/etc目录下新建shadowsocks.json文件,添加以下内容。

{
"server": "your server ip",
"server_port": 15216,
"local_address": "127.0.0.1",
"local_port": 1080,
"password": "your password",
"method": "aes-256-cfb",
"fast_open": true,
"workers": 1
}


随后就可以启动Shadowsocks了。

~$ sslocal -c /etc/shadowsocks.json

但是这样每次启动后都需要手动输一次命令,比较麻烦,所以设置为启动时自动运行。在/etc/rc.local中添加如下命令,注意在exit 0之前。

sudo sslocal -c /etc/shadowsocks.json

注意,这里必须用sudo才行,具体原因不明。

至此,Shadowsocks已经配置成功。


Chrome穿墙

使用Chrome穿墙需要用到一个插件——Proxy SwitchyOmega。

安装好这个插件以后,按照如下配置这个插件。

Ubuntu 14.04配置Shadowsocks和Privoxy实现浏览器和终端代理

Ubuntu 14.04配置Shadowsocks和Privoxy实现浏览器和终端代理

平时使用的使用使用自动切换模式即可,遇到实在打不开的网页,直接使用Shadowsocks模式。


终端穿墙

浏览器能穿墙就已经能满足绝大多数需求了,但是有的时候终端也必须穿墙,就比如Composer。关于终端穿墙,本人尝试了很多种方案,比如Privoxy、Proxychains和Polipo,最后觉得还是Privoxy最好。

为什么终端需要单独穿墙呢?难道Shadowsock不能“全局”代理么?这个问题当时困惑了我很久,最后一句话点醒了我。 Shadowsocks是一个使用SOCKS5(或者SOCK4之类)协议的代理,它只接受SOCKS5协议的流量,不接受HTTP或者HTTPS的流量。所以当你在Chrome上能穿墙的时候,是Proxy SwitchyOmega插件把HTTP和HTTPS流量转换成了SOCKS协议的流量,才实现了Shadowsocks的代理。而终端是没有这样的协议转换的,所以没法直接使用Shadowsock进行代理。这时候就需要一个协议转换器,这里我用了Privoxy。


那么Privoxy到底是什么呢?维基百科上是这么说的。

Privoxy是一款带过滤功能的代理服务器,针对HTTP、HTTPS协议。通过Privoxy的过滤功能,用户可以保护隐私、对网页内容进行过滤、管理cookies,以及拦阻各种广告等。Privoxy可以用作单机,也可以应用到多用户的网络。
修改HTTP请求头的字段,如referrer和user agent,从而隐藏用户上一个查看的网页和用户正在使用的浏览器。


安装Privoxy很简单。

~$ sudo apt-get install privoxy

安装好后进行配置,Privoxy的配置文件在/etc/privoxy/config,这个配置文件中注释很多。

找到4.1. listen-address这一节,确认监听的端口号。

Ubuntu 14.04配置Shadowsocks和Privoxy实现浏览器和终端代理

找到5.2. forward-socks4, forward-socks4a, forward-socks5 and forward-socks5t这一节,加上如下配置,注意最后的点号。

Ubuntu 14.04配置Shadowsocks和Privoxy实现浏览器和终端代理

有关Privoxy的配置就结束了,重启一下Privoxy。

~$ sudo /etc/init.d/privoxy restart

接着配置一下终端的环境,需要如下两句。

~$ export http_proxy="127.0.0.1:8118"
~$ export https_proxy="127.0.0.1:8118"


然后就可以测试一下穿墙效果了。

~$ wget http://www.google.com
--2016-01-06 23:59:30--  http://www.google.com/
正在连接 127.0.0.1:8118... 已连接。
已发出 Proxy 请求,正在等待回应... 200 OK
长度: 未指定 [text/html]
正在保存至: “index.html”

[ <=>  ] 154,759     --.-K/s   用时 0s   

2016-01-06 23:59:31 (842 MB/s) - “index.html” 已保存 [154759]

~$ wget https://www.google.com
--2016-01-06 23:59:36--  https://www.google.com/
正在连接 127.0.0.1:8118... 已连接。
已发出 Proxy 请求,正在等待回应... 200 OK
长度: 未指定 [text/html]
正在保存至: “index.html.1”

[       <=>   ] 154,786     78.5KB/s   用时 1.9s

2016-01-06 23:59:39 (78.5 KB/s) - “index.html.1” 已保存 [154786]

终端穿墙搞定!


为了方便还是在/etc/rc.local中添加如下命令,注意在exit 0之前。

sudo /etc/init.d/privoxy start

在/etc/profile的末尾添加如下两句。

export http_proxy="127.0.0.1:8118"
export https_proxy="127.0.0.1:8118"


ubuntu下通过privoxy将Socks代理转换为Http代理:http://www.linuxdiyf.com/linux/13715.html

安装net-speeder,加速Shadowsocks:http://www.linuxdiyf.com/linux/15304.html

ubuntu服务器搭建Shadowsocks服务:http://www.linuxdiyf.com/linux/15100.html

Linux下使用shadowsocks(以ubuntu14为例,非服务器):http://www.linuxdiyf.com/linux/14658.html

Ubuntu下配置shadowsocks-libv客户端:http://www.linuxdiyf.com/linux/14544.html