Go to file
JingX 8170af576c bug fix 2018-10-22 00:03:31 +08:00
image 文章完善 2018-10-21 21:28:21 +08:00
.gitattributes Initial commit 2018-10-08 15:55:35 +08:00
readme.md bug fix 2018-10-22 00:03:31 +08:00

readme.md

Shadowsocks 笔记

by JingX

时间会遗忘的。

前言

翻越GFW有很多种方法大浪淘沙很多的方法都已经消失了在我能够想起来的过去的现在的做一简单的记录

经典思路

  1. 修改电脑内部的host文件通过自主指定相关网站的IP地址的方式实现这种方式现在依然存在
  2. GFW主要攻击手段之一是DNS污染于是便有了强制指定DNS的方式以避免IP被污染的方法这种方法经常会结合1使用
  3. 原本用来作为一种匿名安全保密的VPN服务也被发掘出翻墙的潜力其原理比较简单选择一个没有被GFW封杀的服务器通过该服务器将相关网站的流量转发到自己的设备而设备与VPN服务器之间的通信并不在GFW的屏蔽范围之内于是便达成了翻墙的目的。VPN最初的目的是用于企业服务方便员工远程登录企业内网进行操作主要协议有PPTP、L2TP、IPsec、IKEv2、openVPN等等
  4. GoAgent自由门fqrouter等一系列网络服务

新思路

  1. Shadowsocks类主要包括各类Shadowsocks衍生版本ShadowsocksRShadowsocks-libev等特点是加密了通信过程中的数据
  2. 内网穿透:比较典型的是ZeroTier,简单解释就是假装自己在国外上网;
  3. V2RayV2Ray 是 Project V 下的一个工具。Project V 是一个包含一系列构建特定网络环境工具的项目,而 V2Ray 属于最核心的一个。官方中介绍Project V 提供了单一的内核和多种界面操作方式。内核V2Ray用于实际的网络交互、路由等针对网络数据的处理而外围的用户界面程序提供了方便直接的操作流程。不过从时间上来说先有 V2Ray才有Project V
  4. 大杀器:奇怪的名字,似乎是一个有趣的人开发的,个人没有关注过。

Shadowsocks

一些历史事件

2012年4月22日V2EX用户clowwindy分享了一个自己自用一年多的翻墙工具Shadowsocks 相对于以前的VPN技术SS的一个大特点就是网络分流技术配置文件中的网站走代理通道之外的全部走直连通道相较于以前所有的流量只能走代理通道不需要代理的网站上网速度也会受到影响着实提升了上网体验。

之后的SS的发展比较顺利各个平台的客户端也如雨后春笋逐渐建立起来最初的SS客户端都内置了节点信息虽然速度略慢但丰俭由人普通用户安装后无需配置即可食用有需求有技术的群体也可以使用自己的服务器。唯一遗憾的是当年的iOS上并没有网络通道的权限要么使用ss浏览器有限翻墙要么越狱安装客户端全局代理。

风云突变

2015年8月20日clowwindy在GitHub发出如下一段话

Two days ago the police came to me and wanted me to stop working on this. Today they asked me to delete all the code from GitHub. I have no choice but to obey.

I hope one day Ill live in a country where I have freedom to write any code I like without fearing. I believe you guys will make great stuff with Network Extensions.

Cheers!

当晚clowwindy把他所维护的几个shadowsocks实现的代码仓库内的Issue面板全部关闭所有帮助信息全部删除所有的描述都改成了Something happened。另外他还清空了该组织的membership或者将所有成员全部转入隐私状态不对外公开。

2015年8月21日传出clowwindy被请去喝茶的消息他在 shadowsocks-windows 的 #305 issue 下回复道

I was invited for some tea yesterday. I wont be able to continue developing this project.

同时开启了 twitter 的隐私保护,除先前关注者外无法查看动态; 当晚clowwindy 发布了 thanks. 后的推文,证明人没事 至此SS原作者退出。

一些话

ShadowsocksR的作者breakwa11是一个极富争议性的人她接手了后续SS的开发工作却违反开源协议封闭源代码同时发布的过程中暗示自己是原作者shadosocks-windows/Issue108中clowwindy做出了一些回应

那是自然的咯。这边加了什么功能,它马上扒过去合并了。它那边加了什么却不会贡献出来给其他人用,久而久之,不就是它那边功能更多了吗。

一直以来我什么都没说是因为我对他还有点希望,所以得给他一点面子不是。一开始我还只是纳闷他为什么不发 pull request过了一段时间我才明白这个世界上也有这一类的人。不尊重 GPL 就算了,把作者名字换成自己的,还在主页上加上官方的字样。为什么我们这边反而不说官方呢?因为我希望这个项目是没有官方的,人人都是贡献者。想不到这个社会人人都围着官转,人人都巴不得当官 。

既然他没有尊重别人劳动成果的意愿,那他那些不开源的理由想必也只是借口。说因为加了一些试验性功能会不兼容所以暂不开源。他弄了一个混淆 TCP 协议头功能,在界面上标注提升安全性,吸引用户打开,然后安装他自己的不兼容服务端。然而我分析了一下之后发现这个功能的设计就是想当然,用得多了以后反而会增加特征。如果你真有什么试验性功能,不是更应该开放出来让所有人帮你分析么,大家一起讨论么?在加密算法领域,只有经过足够多人和机构的审视的算法,才能视作是安全的,闭门造出来的怎么能用。。

当然啦,大部分用户才不会管这些,他们不会分析你是不是真的安全,也不会做道德判断,只要他们觉得好用就行。所以可以看到,这种环境下开源其实并没有什么优势,只不过为一些人抄袭提供了便利。这种环境下最后留下来的都是这些人。

我一直想象的那种大家一起来维护一个项目的景象始终没有出现,也没有出现的迹象。维护这个项目的过程中,遇到 @chenshaoju 这样主动分享的同学并不多。很多来汇报问题的人是以一种小白求大大解决问题,解决完就走人的方式来的,然而既不愿提供足够的信息,也不愿写一些自己尝试的过程供后人参考。互帮互助的气氛就是搞不起来。对比下国外的社区差好远。

最适合这个民族的其实是一群小白围着大大转,大大通过小白的夸奖获得自我满足,然后小白的吃喝拉撒都包给大大解决的模式。通过这个项目我感觉我已经彻底认识到这个民族的前面为什么会有一堵墙了。没有墙哪来的大大。所以到处都是什么附件回帖可见,等级多少用户组可见,一个论坛一个大大供小白跪舔,不需要政府造墙,网民也会自发造墙。这尼玛连做个翻墙软件都要造墙,真是令人叹为观止。这是一个造了几千年墙的保守的农耕民族,缺乏对别人的基本尊重,不愿意分享,喜欢遮遮掩掩,喜欢小圈子抱团,大概这些传统是改不掉了吧。

现在维护这些项目已经越来越让我感到无趣。我还是努力工作,好好养家,早日肉翻吧。

值得反思。

SSR之死

紧接着breakwa11的遭遇不论真假同样令人胆寒

2017年7月19日breakwa11在Telegram频道ShadowsocksR news裡转发了深圳市启用SS协议检测并被大量用户转发引发恐慌。

2017年7月27日breakwa11遭到自称 "ESU.TV" 的不明身份人士人身攻击对方宣称如果不停止开发并阻止用户讨论此事件将发布更多包含个人隐私的资料随后breakwa11表示遭到对方人肉搜索并公开个人资料的是无关人士为了防止对方继续伤害无关人士breakwa11删除GitHub上的所有代码、解散相关交流群组停止ShadowsocksR项目。

这次的人肉事件,让我严重怀疑我自己做 SSR 是不是对的,首先不管资料对不对,从行为上看,就是有人希望我死,希望这个项目死,恨一个人能恨到如此程度。我知道我很做作,因此得罪了很多人,尤其最近公开 SS 可被检测的问题,更是让很多人义愤填膺,非要干掉我不可。尽管从我的角度看,我只是希望通过引起关注然后促进 SS 那边进行修改,这并不是希望 SS 死掉的意思,我每次提出的问题之后不是都得到了改进了吗,包括 OTA 和 AEADAEAD 我也是有参与设计的,你们可以问 Syrone Wong以及 NoisyFox 证实,而且 ss-windows 有一部分也是我参与修改的。但如今,人肉的资料我也稍微看了一下,真是太令人心寒,连对方的支付宝流水都拉出来了,这样真的好吗?我并不希望因为我自己的问题而害了另一个人。我期望和那些反对我的人来一笔交易,我可以以停止开发 SSR 作为交换删除项目及相关的东西以后不再出现SSR 群从此解散,账号注销,删除代码。对于我来说,这个项目不过是我用来证实自己的想法的一个东西,可有可无,制作也只是兴趣,扔掉也没有什么可惜的,反正替代品非常多,根本就不缺我这一个。你们老说我圈粉,你们真想太多了,真没这个必要。如果可以以这个换取另一人免受网络暴力,我也觉得这是值得的。相反的,如果人肉的结果仍然公开了,那就是我的行为已经救不了了,那我就可以继续开发 SSR。不过也不会太久估计最多只多坚持一年到我毕业之前。谢谢这两年来大家的支持这次应该是真正的和大家再见看结果吧今天晚上 12 点以 SSR 群解散作为标志,如果解散了那就正式和大家说一声再见

至此SSR作者退出

传承

得益于clowwindy最初开源SS的决定大量的fork使得SS依然在更新之中从GitHub现有结果来看各个平台甚至是路由器的SS仍然不断的在更新在提交Issue也有大功能更新每一滴微小的力量都推动着项目的前进只是前途在何处仍然是未知数。

变数

收紧的手

2017年7月底中国区App Store多款VPN相关应用在无任何说明与通知的情况下突然集体被下架与正常下架流程不同的是过去苹果官方下架的应用一般可以在用户的已购项目中仍然可以下载这是对已经购买了该应用的用户权益的保障而这次的下架直接封杀了所有渠道的下载性质不同于以往苹果给出的回应是

我们已经收到要求在中国移除一些不符合规范的 VPN App。这些 App 在其他市场的运营则不受影响

此次下架中所谓的规范即指2017年1月工业和信息化部印发的《关于清理规范互联网网络接入服务市场的通知》《通知》中明确表明

规范的对象是未经电信主管部门批准无国际通信业务经营资质的企业或个人租用国际专线或VPN私自开展跨境的电信业务经营活动。外贸企业、跨国企业因办公自用等原因需要通过专线等方式跨境联网时可以向依法设置国际通信出入口局的电信业务经营者租用《通知》的相关规定不会对其正常运转造成影响。

受此影响大量的用户只能与开发者联系不少开发者只能通过TestFlight对用户分发更新但是由于TestFlight的app 90天后就会失效开发者一旦弃更用户便无法再使用该软件此种风险也使得不少用户注册了外区的Apple ID 并重新购买应用。由于工信部要求备案,且个人无备案资格,基本上表明了此次被下架的应用无法再上架,此次的风波也受到了国际社会的广泛关注与批评,苹果在下架软件的同时,倒逼政府出台了相应的明确细则。

2017年10月伴随着十九大的开幕大量线路被封杀尤其以SSR为甚各大机场与tg群一片哀嚎所幸大会闭幕后不少IP被解封不清楚具体的比例。

2018年1月以及接下来的两会期间执行了更大规模的IP封杀涉及范围更广基于各种算法的翻墙方法均有涉及SS的Issue中有人反应刚刚搭好十几分钟即被封杀。

2018年9月30日公安部下发通知

《公安机关互联网安全监督检查规定》已经2018年9月5日公安部部长办公会议通过现予发布2018年11月1日起施行。

小心翼翼

网传的一份联通客户端对于各个协议的识别情况:

软件和协议 联通检测类型 访问网址
Shadowsocks TCP 业务 显示服务器IP
SS + http_simple80端口 上网 (Web方式get) 显示混淆域名
SSR TCP 业务 显示服务器IP
SSR + http_simple 上网 (Web方式get) 显示混淆域名
SSR + TLS(443) * 安全类网页浏览 (HTTPS VPN) 流量
* HTTPS 链接
显示混淆域名
SSR + TLS(995) 安全协议的收邮件流量 显示IP
SSR + TLS(非443) * 网络连接(网页)
* HTTPS 链接
显示混淆域名
OpenConnect UDP 业务 显示服务器IP
IPSec VPN UDP 业务 显示服务器IP
V2Ray TCP 业务 显示服务器IP
V2Ray + TLS HTTPS 网络连接 显示证书域名
nghttpx + TLS HTTPS 网络连接 显示证书域名
kcptun UDP 业务 显示服务器IP

新生代

所有的主流平台中iOS 是比较特殊的,因为其权限管理相当的严格,直到 iOS9 时代才对开发者开放VPN 相关的 Network Extension 权限,但 SS 相关软件在 iOS 上不温不火,直到 Surge 的出现。

Surge --- 破局者

Surge虽然出生于 iOS 平台,但其思路打破了之前 SS 圈内的桎梏,再次促进了 SS 生态的发展。

最初的 Surge 定位于网络调试工具,作者本人写了一个 SS module 实现了 SS也许作者本人的想法并不是翻墙所以 module 也是一个黑箱至今也没有支持V2Ray等新型协议。无心栽柳柳成荫Surge 可以在 iOS 端实现全局代理并且自开始稳定性非常好68的售价并没有挡住人们热情的购买力但此时的 Surge 仍然是相对小众的。

Surge 的模式非常具有开创性:

  1. 以文本 config 设置软件,非常的 linux
  2. 因为 Surge 定位为网络调试工具因为配置文件中可以单独设置面对某网址或某IP时网络对其的响应主要包含 proxydirectreject 3种核心模式同时Surge 可以观测到网络的连接情况,实现重发等操作,实现抓包。于是,一个网络调试设备,可以指定代理地址,屏蔽广告,解析视频地址,抓取网络流量,堪称完美。

题外话

Surge 固然好,但是其开发者 Yachen Liu 却着实是一个富有争议的人,整理的 Surge 时间线如下:

  • 2015年10月26日 Surge 以68元的售价上架 App Store

  • 2015年11月29日 Yachen Liu 自称被喝茶(注:无法被证实);

  • 2015 年 12 月 4 日 Surge App Store 全区下架之后又以648元的高价短期上线作者解释为方便已购买用户更新

  • 2016 年 3 月Surge iOS 2.0 版本发布承诺648元永不降价同时启用反盗版策略180天内仅能激活十台设备

  • 2016 年 8 月Surge Mac 2.0 版本发布iOS 版本价格调整为 328元作者解释648元为 Mac 与iOS双版本价格价格调整是售卖策略发生变化

  • 2017年5月Surge限时8折

  • 2018 年 1 月iOS Surge 3发布根据老用户购买时间提供免费升级和优惠升级同时提升反盗版策略仅能激活3台设备

  • 2018年10月作者发推表示

    计划给 Surge iOS 加一个新功能,可以选择将自己的授权与 iCloud 账号绑定,绑定后最多可激活 6 个设备,但是仅可以在自己的 iCloud 登录的设备上使用。

作者确实是网络技术大牛截至目前Surge 仍然是iOS端最优秀的 SS 客户端,但是其营销策略极富争议性,喝茶事件至今无法证实,且之后全区下架客户端也毫无道理,之后长期上架 App Store 也不能很好的自圆其说,因此被称为喝茶营销。

作者对高价的解释是 Surge 是面向国际的网络调试设备,主要竞品是老牌应用 Charles但是这几年的发展下来调试功能这种核心并没有实质的长进反盗版能力UI设计倒是提升不少口嫌体直般升级了 SS 的最新版本,却死活不肯添加 V2ray 等新协议,面向国际的软件却只有国内用户,可以说是相当的傲娇。

Shadowrocket --- 穿云箭

Surge 下架上架来回折腾的时候不少开发者也看到了机遇Shadowrocket 便是当时的 Surge 追随者最初上架性能虽然不佳但是6元的售价并且兼容Surge规则还是吸引了不少人下载一时间风头无两被称为小火箭。

小火箭的作者 Guangming Li 似乎是个奶爸,最初小火箭比较简陋,随着快速的迭代更新,小火箭功能逐渐完善起来,稳定性也提高了不少,在摆脱 Surge 的同时,小火箭也开发出了不少让人眼前一亮的新功能。

与Surge不同小火箭的初衷就是为了翻墙所以作者直接就内置了各种翻墙协议通过UI界面非常容易添加和修改作者也针对国内的环境开发出了场景模式按需求连接服务器订阅等模式同时作者在Telegram上创建了群组,用户之间的交流以及开发者的反馈速度很快。

shadowrocket

现在的小火箭可以说已经尽善尽美了18元的售价也是非常的亲民。

Others

iOS上还有A.BIG.TPotatso等VPN软件16年17年与小火箭战的难舍难分无奈后劲不足现在大概是明日黄花了。

Quantumult是新近崛起的一款代理软件,$4.99 的售价可以实现 Surge 的大部分功能支持多种协议相较于小火箭又多出了抓包功能测试规则更方便同时Quantumult 扩展了规则中的屏蔽性能,使得屏蔽广告更有针对性。

Quantumult

个人搭建指南

服务器选择

一般来说VPS的虚拟化技术分为 OpenVZ 与 KVM 架构,从各种资源以及 SS 服务支持上建议选择KVM架构的机器以下所有的说明都是基于搬瓦工 KVM 建构的机器。

服务器系统

服务器建议安装带有BBR技术的Linux系统TCP BBR 拥塞控制算法由 Google 开发,并提交到了 Linux 内核,从 4.9 开始Linux 内核已经用上了该算法。根据以往的传统Google 总是先在自家的生产环境上线运用后,才会将代码开源,此次也不例外。根据实地测试,在部署了最新版内核并开启了 TCP BBR 的机器上,网速甚至可以提升好几个数量级。

搬瓦工的机器可以在控制面板 ---> install new os ---> centos-7-x86_64-bbr快速更换系统注意备份服务器上的数据。

Shadowsocks-libev

随着技术发展SS与墙之间的交锋也是一次比一次激烈据传说即使是SS的256位加密运营商可以做到解密监视SS使用者的上网流量真实性未知但小心点总不会错。

目前有4个衍生版本的SS:

  1. Shadowsocks-go: 二进制编译, 轻量, 快速
  2. Shadowsocks-python: 无功无过
  3. Shadowsocks-libev: 支持obfs混淆
  4. ShadowsocksR: 从作者到产品都极负争议性, 混淆模式开创者, 但是前一段时间SSR服务器普遍遭到GFW的封杀.

现阶段为了能在安全与速度之间取得平衡有一种SS的配置脱颖而出Shadowsocks-libev + obfs混淆

obfs 混淆

obfs 混淆最大的作用是对 SS 流量进行伪装, 在不添加obfs的情况下, 运营商服务器通过的流量为未知的加密流量, 据说 GFW 已经有一定的包检测的能力, 仅仅加密流量具有一定的风险, 添加 obfs http 模式之后, 通过运营商的流量会被识别为设定好的网址的流量, 假设你设定的是 bing, 那么你的 SS 流量会被判别为你当前正在访问 bing, 减少了被封杀的可能性,tls模式安全性高于http模式

之前流量不是无限的时代, 因为只有运营商的 APP 可以无限使用流量, 比如什么天翼视讯, 利用 obfs 混淆, 可以将你的手机流量伪装为天翼视讯的流量, 从而达到无限使用使用流量, 这种操作太骚, 实测可以成功, 不过还是低调的好.

Shadowsocks-libev安装与配置

安装图省心推荐秋水逸冰的一键安装脚本

  1. 使用root用户ssh登录

    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
    
  2. 跟随提示选择相对应的模式即可

    1. 加密方式推荐 chacha20-itef-poly1305,
    2. 端口可以尽量设置高一点,避免443, 1080等常用端口,
    3. 安装 simple-obfs , 选择 http 模式

    安装成功后会有如下提示:

    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!
    

    Snipaste_2018-09-12_09-12-18

  3. 卸载

    使用root用户登录

    ./shadowsocks-all.sh uninstall
    
  4. 常用命令

    启动:/etc/init.d/shadowsocks-libev start
    停止:/etc/init.d/shadowsocks-libev stop
    重启:/etc/init.d/shadowsocks-libev restart
    查看状态:/etc/init.d/shadowsocks-libev status
    

Shadowsocks客户端

SS 客户端已经全平台覆盖了, Github 上有专门的开源客户端项目.

Windows

下载地址

本地配置

服务器端已将安装了 obfs, 本地端直接下载obfs-local插件, 解压后将插件 obfs-local 与Shdowsocks.exe 同一路径下即可.

obfs可以直接在SS的服务器编辑页面修改参数

插件选项为 obfs=http;obfs-host=www.bing.com, 实际上可以将 www.bing.com 更换为任意的一个网址, 只要不是被GFW封杀的就可以, 推荐像腾讯视频, 优酷, bing这种流量较大的网站, 如果填写是Google或者YouTube, 活着不好么......

macos

macos上的ss客户端目前似乎还是不支持obfs混淆. 2018/10/06更新

Shadowsocks-NG

GitHub上存在好几种Mac客户端使用最广的是Shadowsocks-NG目前的版本中已经支持obfs混淆并且已经直接集成于客户端之中按照windows的设置填写参数即可。

ClashX

最近出现了一个新的类Surge软件ClashX目前还在开发之中但是兼容Surge的config文件基本上对其稍作修改便可以导入ClashX中使用。可以去官方 Telegram 群参与讨论

类Surge软件的核心都在于config文件在SS网络分流的基础上对不同的流量产生不同的行为可以实现指定网址代理广告屏蔽等效果自由度更高。

Surge

支持,没钱截图😂

iOS

iOS上推荐的客户端为 Shadowrocket 与 Surge, 首推 Shadowrocket, 因为便宜够用, 唯一遗憾的是国区下架了, 只能用非国区的 Apple ID 购买与下载, Surge3 目前可以在国区下载, 虽然 Surge 是配置文件类开创者, UI 更好看, 功能更强大,颇高的上手难度与328的价格会吓退不少人但一句话Surge 贵在稳定。

两款客户端均支持 obfs, Surge 2 仅支持 http 模式, Surge 3 支持 tls 与 http 两种模式; shadowrocket 支持 http 与 tls 两种模式

2018年10月8日更新Quantumult 最近热度也上来了,在小火箭与 Quantumult 任选其一既可。

Surge

Surge 在编辑服务器的 Advance 设置中可以配置混淆

surge

Shadowrocket

shadowrocket在服务器的编辑页面中即可设置混淆

sr

Andorid

推荐在Google Play上下载Shadowsocks app, 同时下载obfs插件, 开发者均为 Max Lv.

也可以前往 Shadowsocks-Andorid 的 GitHub 仓库下载。