因为公司之前网络自带梯子,自己一直也没搞代理服务器就也没有在机器上配置梯子,最近换了办公地网络没有梯子了。一开始觉得自己能接受,查阅外网的文档慢点就慢点吧,结果真让自己怀疑人生了,时不时问身边人,你可以打开github吗?是我们网又坏了吗?还有就是自己chrome浏览器的数据不能同步很不方便。于是,决定给机器配下梯子!
关于撕我们所处的环境为什么有GFW这种东西,在github上看到一句话“We don’t dismantle the wall, we just find a hole to bypass then instead. Don’t ask us how to bypass, we don’t know. And don’t ask us what a wall is, it’s not a continuous vertical brick or stone structure that encloses or divides an area of land.”。
原理
如图,代理服务器我们需要找一个IP没有被GFW Block掉的境外节点服务器在上面搭建一个shadowsocks协议的代理服务。代理服务器软件有很多python的,go的等等,这里安利一个go项目gost。服务端代理服务器和本地client通信协议一定是shadowsocks,其它协议不行吗?当然可以!但是GFW能认出来呀,然后把你Block掉。shadowsocks协议现在也很敏感了,个人用不要被认为有sale行为就好。 服务端是shdowscoks协议,但是我们的浏览器和其他软件支持的代理协议一般有socks4,socks5,http,https等协议,不能直接用,所以我们要在本地启动一个进程和服务端以shadowsocks协议通信,然后该进程再向本地开放socks5,https等代理协议,我们的浏览器和其他软件就可以直接用了。这个进程程序就是我们看到的很多shadowsocks客户端程序,它就是两边握手byte by byte的转发。 最后,我们在浏览器里使用设置一下浏览器的代理就好了,chrome/firefox代理设置管理,这里安利SwitchyOmega,linux/mac终端走代理可以设置http_proxy/https_proxy环境变量。
shadowsocks客户端方案
本地shdowsocks客户端,网上有很多,大致分两种,CLI形式和GUI形式,GUI的看上去方便,但是linux涉及图形的软件就是各种问题,下了一个QT的试了一下果然各种库问题。果断转CLI,这里再次安利gost。 有一个问题就是随着开机启动需要我们自己解决,linux下配置自启动大家各种脚本写init等等。但是经验告诉我,这么随意的改home目录以外的东西,我这mint又用不过半年了,还有就是发现脚本启动gost用一段时间gost有不响应的情况(可能和网有关系挂掉了)简单的脚本不能重启gost,写复杂好费事。然后想到了docker,机器本来就装了docker,gost放到一个守护容器里面让docker帮我管理就好了,gost是挂掉还是什么docker帮我重启。实践发现确实比我自己手动脚本启动好使,目前一周了没出现不响应的情况。
docker run -d --name gost --restart unless-stopped --log-opt max-size=10m -p 1080:1080 \
ginuerzh/gost -L socks5://:1080 -F ss://aes-256-cfb:password@xx.xx.xx.xx:port
chrome代理设置
chrome代理管理用的SwitchyOmega,值得一提实践中的一个问题就是,我们访问国内网站不想走代理绕一圈回来,访问国外网站要走代理。不能来回手点设置那些网站走代理那些网站不走代理,很烦。解决方法就是设置Switchomega的自动切换规则,参考的这个wiki,自动更新GFW的block list挺好的。
总结
花了一个多小时时间,看了几个项目,找到了自己觉得比较适合自己linuxmint的方案,分享在这里。