这几天想配置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。
安装好这个插件以后,按照如下配置这个插件。
平时使用的使用使用自动切换模式即可,遇到实在打不开的网页,直接使用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这一节,确认监听的端口号。
找到5.2. forward-socks4, forward-socks4a, forward-socks5 and forward-socks5t这一节,加上如下配置,注意最后的点号。
有关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