Something about shadowsocks and more. SS/SSR 带你看世界。

前情概要

很久之前写过一篇宿舍 NAS 简单配置的文章,也是那时候开始自己用服务器搭梯子,然后萌生了弄一个网站的想法。当然目前网站还有不少坑没填,以后慢慢埋土吧。

之前链接在这:宿舍养老企划Ver1.0 – NAS篇

最近感受到我天朝又在加固城墙,所以新开了个服务器做专用梯子。这篇文章比较适合 IPv6 环境(校园党的福利)

准备 & 需知

Need to Have

(1)双栈(支持IPv4和IPv6)服务器。(大多数空间商都支持双栈)
(2)能够刷固件的路由器,需要 IPv6 的还要选择支持 IPv6 的路由器。

Need to Know

(1)博主现在专用梯子换的是 Vultr 家 New York 2.5刀的小服务器,流量 500G ,足够日常使用,偶尔上上油管看1080P或者爬爬P站。大佬们酌情选用高档位的。
(2)Vultr 目前已经被国内墙了很多 IP,45.76,208.什么的这些号段都是重灾区,新建服务器遇到这些基本可以 Destroy 重来。(搞得跟摇号一样🙃)
多地区ping服务器:国内路径亮红灯的基本都是GG。
(3)因为之前有不少人用 Vultr 服务器挂爬虫恶意爬P站,所以P站也封了不少号段。有此需求的建好服务器先 ping 一下pixiv.net,别搭好梯子发现还是上不了。
(4)本文基本也是些常规操作,只是记录备用。尝试过不少零碎的小众翻墙方法等有空慢慢补充,网络环境恶劣的盆友可以留言说一下情况,指不定博主有不错的解决方法哦😄
(5)好好上网,搭梯子是为了看世界,别成天想着搞事情😷(看看隔壁家那半死不活的ss)

SS/SSR 安装配置

博主是单独重新买了一个 Vultr 的服务器来搭 SS/SSR,安装方法十分简单,这里给出推荐,主要还是说明一下 SS/SSR 配置的注意事项。

推荐安装方法,几分钟就可以完事:

实在有脚本安装强迫症的那就用pip install来安装吧。

参数说明

最早搭梯子的时候也没太在意这些参数,脚本安装也是一路回车过去,但现在越来越严,博主特意去Github扒了一些关于参数配置的技巧,希望能够提升梯子的存活率。

  • 服务器端口:emmm,没啥好说的
  • 密码:****
  • 加密方式:Python 和 libev 版默认为 aes-256-gcm,R 和 Go 版默认为 aes-256-cfb
  • 协议(protocol):定义加密前的协议,用于长度混淆及增强安全性和隐蔽性(SSR专有)
  • 混淆(obfs):定义加密后的通信协议,用于协议伪装(SSR专有)

基本的参数就是上面几个,还有一个fast_open的参数,可选择是否开启,主要用来降低网络延迟。有关加速方式可以参考后文“BBR加速”。

现在开始,不要认为 加密/协议/混淆 什么的随便都行,出现在选项列表里只是说明其存在性,不代表其可用性。

Encryption

SS 加密选择AEAD 加密,主要是以下几种:

  • aes-128-gcm
  • aes-192-gcm
  • aes-256-gcm
  • chacha20-ietf-poly1305
  • xchacha20-ietf-poly1305

SSR 加密选择none,或者同上选择AEAD 加密

首先 SS/SSR 只要不使用弱加密,比如rc4-MD5之类,那么有生之年你传输的数据都是安全的。但是安全归安全,却容易被主动嗅探到,我们高贵的墙墙虽然不知道你传的内容,但是知道你是想要爬墙就足够了。

所以在 SSR 中,通过添加协议混淆伪装成正常流量达到骗过所谓“主动嗅探”,这也是为什么 SSR 加密方式可以选择 none。而 SS 是以数据加密的方向解决这个问题,如AEAD加密方式。

Protocol(SSR)

SSRauth_chain_a,使用此插件建议加密使用none。

参数介绍时讲到,Protocol 定义加密前的协议,用于长度混淆及增强安全性和隐蔽性。其类似于一个加压/解压过程,选择协议之后会影响速度。

chain_a 基本是目前 SSR 最佳的协议;chain_b 虽然说更难识别,但是一个测试版协议,并且使用发现丢包现象严重,暂时不推荐。auth_chain系列协议数据流自带RC4加密,针对 UDP 部分也有加密及长度混淆,因此不需要再进行额外的加密,故 SSR 加密方式可选择none。
更多参考:ShadowsocksR 协议插件文档

obfs(SSR)

SSRplain,推荐不使用混淆插件

首先,tls1.2_ticket_auth已经不再安全,在 Github 和 Twitter 上已经有人指出 tls凭据复用已经成为安全问题。很有可能是 GFW 已经掌握 tls 的特征。大家可以参考以下这表格。

name RTT encode speed bandwidth anti replay attack cheat QoS anti analysis
plain 0 100% 100% No 0 /
http_simple 0 20%/100% 20%/100% No 90 70
http_post 0 20%/100% 20%/100% No 100 70
random_head (X) 1 100% 85%/100% No 0 10
tls1.2_ticket_auth 1 98% 75%/ 95% Yes 100 90
From: SSR混淆特性

RTT 表示此混淆是否会产生附加的延迟,1个RTT表示通讯数据一次来回所需要的时间。
anti replay attack 主要是抗主动探测的能力,这也是大家原先采用 tls 的原因,唯一原生抗主动探测的协议。
cheat QoS 表示欺骗路由器 QoS 的能力,100表示能完美欺骗,0表示没有任何作用,50分左右表示较为严格的路由能识别出来。
anti analysis 表示抗协议分析能力,plain 的时候依赖于协议,其它的基于网友反馈而给出的分值。值为100表示完美伪装。

没有非常高的要求完全可以选择plain,不然既要付出带宽和速度的代价,说不定还吃力不讨好。

BBR 加速

前面提到的各种抗嗅探,抗检测的协议都是建立在付出一定带宽和速度的基础上的。相比之下AEAD加密的各种协议都会影响速度,毕竟是在普通加密之上再加一层验证手段。尤其是晚高峰时段,aes-256-gcm明显会比aes-256-cfb慢上不少。除此之外,比较安全的几种混淆和协议插件都会影响速度。

在 SS 中其实就有用来降低网络延迟的参数fast_open,但是其作用甚微,所以这里就要引出我们大名鼎鼎的 Google BBR TCP阻塞算法。有关 BBR 的介绍请自行Google,其效果确实明显,但也不要过分神化。

安装配置

博主一直使用 Centos ,BBR 配置内核要求4.9+,Vultr 的一般是3.10,首先检查服务器kernel版本:

uname -r

如果其显示版本在4.9.0之下,则需要升级Linux内核,否则请忽略下文。
先更新系统。

yum update -y

添加ELRepo仓库,安装新版本内核。

# 导入elrepo密钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# 安装elrepo仓库
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
# 查看elrepo仓库下相关内核包
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
# 安装最新的主线稳定内核
yum --enablerepo=elrepo-kernel install kernel-ml

安装完成后使用下面命令查看当前已安装的内核。

awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg

根据上一步中显示的最新内核的序号,把Linux (4.9.0-1.el7.elrepo.x86_64)内核设置为默认。

grub2-set-default 0

重启系统,查看内核没有问题就ok。

reboot  # 重启
uname -r

编辑/etc/sysctl.conf加入或修改这两行。

net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

修改配置文件完成后:

# 使修改的内核配置生效
sysctl -p
# 查看当前网络堆栈的默认排队机制
sysctl net.core.default_qdisc
# 查看当前TCP BBR拥塞控制算法
sysctl net.ipv4.tcp_congestion_control
# 查看tcp_bbr内核模块是否启动
lsmod | grep bbr

如果操作一切顺利,那么应该可以感受速度有质的提升。另外,内核配置针对 ipv6 没有tcp_congestion_control一说,v4和v6用的是一样的(原文引用: IPv6 has no global variables such as tcp_*. tcp_* settings under ipv4/ also apply to IPv6.)

实测

测试了一下油管视频的连接速度,如下图,相比未使用 BBR 时普遍的5000Kbps有了较大提升。
20180324-1-1.jpg
更多测试以及分析可以参考知乎上李博杰的回答

宿舍党福利

为什么把这篇文章归到 “宿舍养老企划Ver1.0” 中呢,主要是现在各大高校得天独厚的优势就是支持 ipv6,宿舍/教室/实验室的有线网基本都已经接入免费 ipv6,所以这就给我们带来了很大的便利。

SS/SSR ipv6配置

目前使用 ipv6 的优势就是不用担心 ip 被墙,意思是:乱七八糟的协议,混淆,加密统统不需要,纯天然 SS/SSR 肯定是最快的。

首先,需要配置 SS/SSR config.json,添加 ipv6 监听,修改为"server":"::"

接下来,SS加密方式改选rc4-md5;SSR协议改选origin,加密继续使用none,混淆继续使用plain,然后就可以体验飞速的翻墙效果了。

为防止使用 ipv4 时需要重新配置参数,可以 SS 用作 ipv6 翻墙梯子,SSR 用作 ipv4 翻墙梯子。

迅雷下载加速

理论上,将 SS/SSR 客户端设置为“全局模式”就已经可以实现迅雷下载了,但效果并不理想。

正确的方法是在迅雷的“系统设置”->“高级设置”->“代理设置”中“添加”代理。代理名称随便填,服务器填写本地地址,如127.0.0.1,端口填写本地端口,如1080,类型选择Socks5;然后点击测试,测试成功点击确定。然后在“代理设置”中将除“迅雷服务器连接”外的其他连接都设置为使用代理(“迅雷服务器连接”保持为“直接连接”)。

这时就可以随便下个大点的文件测试速度了,当然下载资源最好是正规而且有来自国外的分享点,P2P 资源相对会慢,而来自服务器的资源往往可以跑到慢速。

20180324-1-2.jpg

原理很简单,而 ipv6 的带宽就是100M,理论下载速度为 12.8M/s;而本地计算机与服务器通过IPv6连接时,国内 v6 出口一般都是满带宽,当服务器再访问 v4/v6 资源时,空间商的带宽往往都是上百兆。而且使用 SS/SSR 时,根据迅雷的做种特性,代理和直接访问是可以同时工作的,所以理论最大值不只是 100M,还可以叠加 v4 的带宽。