最近 GFW 越来越猛,访问 Github 变得很慢很慢,而我又很需要频繁使用 Github,所以我得找一个很优秀的梯子,上个月在一家机场买了个月付套餐,用着还不错,节点多,速度也快,本来打算继续续费的,可阿里云那边传来了个好消息。

开学前在阿里云白嫖的三个多月香港轻量服务器,使用酸酸乳被关进小黑屋之后,前几天居然被放出来了,还剩两个多月,本来想用来建站的,可惜用了一两天,发现香港轻量的网络线路是真的越来越差了,一到高峰期几乎没法用,网站都打不开,可是不用的话放着吃灰也是浪费资源,索性就用来搭个梯子,有需要的时候能勉强用一下,机场那边又能省一笔小钱。
谈到搭酸酸乳,自然是用秋水逸冰的四合一脚本啦,可惜秋水大佬被请喝茶后就不敢再更新维护脚本,网站也停了,真是让人唏嘘。贴一下秋水大佬的告别文。
斟酌再三,还是觉得已经没有继续坚持下去的必要了。 从 2018 年 8 月 8 日起,我的博客正式被墙了。恐怕这已经是相当仁慈的结果,毕竟从 2014 年初我就开始写关于 Shadowsocks 的教程和安装脚本了。我猜测,是因为从一开始我就使用了 CloudFlare 的服务,因此是不便直接对 IP 下手的,所以最终结果也是如我所料,被墙的方式是 DNS 污染。 也许已经有人发现,自从博客被墙后,我就不怎么更新了。原因无它,一个字足以形容,懒。还有就是有点心灰意冷。本想着反正已经被墙了,那就干脆那么放着吧。但是,有意料之中的事情还是发生了。 我承认 Toyo(逗比)的事情多少对我产生了一些影响,毕竟这位网友以前多少还是跟我有过沟通交流。从有限的接触来看,我认为他是一个热忱的人,有着强烈的学习欲望。一开始他也使用着我写的脚本,后来他觉得我写的脚本有不完善的地方,比如没有安装完成后的端口管理命令等等。于是跟我反映,而我觉得既然叫一键安装脚本,那自然是只管安装了,也懒得添加新功能。后来他就开始自学bash shell 开发,整合了我的脚本并添加了他自己想要的诸多功能。 他似乎在这条道路上有着用不完的激情,各种脚本和教程如雨后春笋,有了自己的用户群。而我所知道的,也仅限于此,直到他被人肉,被举报,被拘留,被起诉…… 有那么一瞬间,我回想起自己从 2014 年初坚持至今的心路历程。 我可能是中国最早开始写 Shadowsocks 一键安装脚本并公开出来的人(权当是自吹自擂吧)。当然,这一切源自于我自己的需求。以至于后来开源脚本并写了各种教程,也都是源于我在使用它。 我喜欢这个巧妙的工具,比 VPN 轻量,使用起来也并不复杂,所以我愿意去推广和分享。 但不好的事情还是发生了。很多时候我们无能为力。 2015年8月,Shadowsocks 的作者 clowwindy 被迫删除其 Github 上的所有关于 Shadowsocks 的代码并从此退出开发。 2017年7月,ShadowsocksR 的作者 breakwa11 遭到人肉和恶意攻击,删除代码,退出开发。 迄今(2019年5月)为止,随着主要维护者的相继退出,Shadowsocks libev 版成了一颗独苗,虽然缓慢却仍在不断地更新。 Shadowsocks 发展至今,我觉得该到一键安装脚本退出历史舞台的时候了。原因就是,Shadowsocks 已经成为了大众化的工具,有着完善的服务端安装包,客户端以及各种 Docker 镜像等。 言及于此,是时候告别了。 青山不改,绿水长流。
大佬虽删除了教程和文章,但 Github 上仍保留了 master 分支,实际上并不影响脚本使用,尽管以后不会再更新了,但至少现在还能用,而且也是目前为止最干净的酸酸乳一键脚本
脚本适用环境
系统支持:CentOS 6+,Debian 7+,Ubuntu 12+ 内存要求:≥128M 最后更新:2019 年 1 月 23 日
脚本简介
- 一键安装 Shadowsocks-Python、ShadowsocksR、Shadowsocks-Go、Shadowsocks-libev 版(四选一)服务端
- 各版本的启动脚本及配置文件名不再重合
- 每次运行可安装一种版本
- 支持以多次运行来安装多个版本,且各个版本可以共存(注意端口号需设成不同)
- 若已安装多个版本,则卸载时也需多次运行(每次卸载一种)
- Shadowsocks-Python 和 ShadowsocksR 安装后不可同时启动(因为本质上都属 Python 版)
脚本安装
使用 root 用户登录,运行一下命令:
wget --no-check-certificate -O shadowsocks-all.sh https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-all.sh
chmod +x shadowsocks-all.sh
./shadowsocks-all.sh 2>&1 | tee shadowsocks-all.log
安装完成后,如果出现下方提示就表示成功了:
Congratulations, your_shadowsocks_version install completed!
Your Server IP :your_server_ip
Your Server Port :your_server_port
Your Password :your_password
Your Encryption Method:your_encryption_method
Your QR Code: (For Shadowsocks Windows, OSX, Android and iOS clients)
ss://your_encryption_method:your_password@your_server_ip:your_server_port
Your QR Code has been saved as a PNG file path:
your_path.png
Welcome to visit:https://teddysun.com/486.html
Enjoy it!
脚本卸载
若已安装多个版本,则卸载时也需多次运行(每次卸载一种),使用 root 用户登录,运行以下命令:
./shadowsocks-all.sh uninstall
脚本命令
启动脚本后面的参数含义,从左至右依次为:启动,停止,重启,查看状态。
Shadowsocks-Python 版:
/etc/init.d/shadowsocks-python start | stop | restart | status
ShadowsocksR 版:
/etc/init.d/shadowsocks-r start | stop | restart | status
Shadowsocks-Go 版:
/etc/init.d/shadowsocks-go start | stop | restart | status
Shadowsocks-libev 版:
/etc/init.d/shadowsocks-libev start | stop | restart | status
脚本默认配置
服务器端口:自己设定(如不设定,默认从 9000-19999 之间随机生成)
密码:自己设定(如不设定,默认为 teddysun.com)
加密方式:自己设定(如不设定,Python 和 libev 版默认为 aes-256-gcm,R 和 Go 版默认为 aes-256-cfb)
协议(protocol):自己设定(如不设定,默认为 origin)(仅限 ShadowsocksR 版)
混淆(obfs):自己设定(如不设定,默认为 plain)(仅限 ShadowsocksR 版)
备注:脚本默认创建单用户配置文件,如需配置多用户,请手动修改相应的配置文件后重启即可。
配置文件
Shadowsocks-Python 版:
/etc/shadowsocks-python/config.json
ShadowsocksR 版:
/etc/shadowsocks-r/config.json
Shadowsocks-Go 版:
/etc/shadowsocks-go/config.json
Shadowsocks-libev 版:
/etc/shadowsocks-libev/config.json
客户端下载
SS 客户端
Win:https://github.com/shadowsocks/shadowsocks-windows/releases Mac:https://github.com/shadowsocks/ShadowsocksX-NG/releases Android:https://github.com/shadowsocks/shadowsocks-android/releases
SSR 客户端
Win:https://github.com/shadowsocksr-backup/shadowsocksr-csharp/releases Android:https://github.com/shadowsocksr-backup/shadowsocksr-android/releases
SSR 协议和混淆插件说明
工作原理
C->S 方向
浏览器请求(socks5 协议) -> ssr 客户端 -> 协议插件(转为指定协议) -> 加密 -> 混淆插件(转为表面上看起来像 http/tls) -> ssr 服务端 -> 混淆插件(分离出加密数据) -> 解密 -> 协议插件(转为原协议) -> 转发目标服务器,其中协议插件主要用于增加数据完整性校验,增强安全性,包长度混淆等,协议插件主要用于伪装为其它协议。
客户端
客户端的协议插件暂无配置参数,混淆插件有配置参数,混淆插件列表如下:
plain:不混淆,无参数。
http_simple:简易伪装为 http get 请求,参数为要伪装的域名,如 cloudfront.com。仅在 C# 版客户端上支持用逗号分隔多个域名如 a.com,b.net,c.org,连接时会随机使用其中之一。不填写参数时,会使用此节点配置的服务器地址作为参数。
http_post:与 http_simple 绝大部分相同,区别是使用 POST 方式发送数据,符合 http 规范,欺骗性更好,但只有 POST 请求这种行为容易被统计分析出异常。参数配置与 http_simple 一样。
tls1.2_ticket_auth:伪装为 tls 请求。参数配置与 http_simple 一样。
其它插件不推荐使用,在这里忽略
客户端的协议插件,仅建议使用 origin,verify_sha1,auth_sha1_v2,auth_sha1_v4,auth_aes128_md5,auth_aes128_sha1,解释如下:
origin:原版协议,为了兼容
verify_sha1:原版 OTA 协议,为了兼容
auth_sha1_v2:中等安全性,无时间校对的要求,适合路由器或树莓派,混淆强度大
auth_sha1_v4:较高安全性,有宽松的时间校对要求,混淆强度大
auth_aes128_md5 或 auth_aes128_sha1:最高安全性,有宽松的时间校对要求,计算量相对高一些,混淆强度较大
如不考虑兼容,可无视前两个
服务端
大部分插件都可以通过添加 compatible 后缀以表示兼容原版,例如默认的 http_simple_compatible 或 auth_sha1_v4_compatible 这样;服务端的协议插件,仅 auth* 系列有协议参数,其值为整数。表示允许的同时在线客户端数量,建议最小值为 2,默认值 64。
服务端的混淆插件,http_simple 或 http_post 有混淆参数,用逗号分开若干个 host,表示客户端仅能使用以上任一个 host 连接,而留空表示客户端可以使用任意 host。tls1.2_ticket_auth 有混淆参数,其值为整数,表示与客户端之间允许的 UTC 时间差,单位为秒,为 0 或不填写(默认)表示无视时间差。
总结
如不考虑原版的情况下,推荐使用的协议,只有 auth_sha1_v4 和 auth_aes128_md5 和 auth_aes128_sha1,推荐使用的混淆只有 plain、http_simple、http_post、tls1.2_ticket_auth 不要奇怪为什么推荐 plain,因为混淆不总是有效果,要看各地区的策略的,有时候不混淆让其看起来像随机数据更好。