-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Welcome to the Blog wiki! 背景 因为经常要使用Google搜索和Gmail,以及没事儿上上维基百科,在搭建了家庭的软路由后,决定还是抛弃不靠谱的VPN(不是因为穷,是因为不稳定……其实还是穷?),利用AWS自己建一个服务,然后使用LEDE的插件做客户端,供全家上网使用。
以下为主要参考文章,我这里主要是在文章介绍的内容基础上使用了Shadowsocks-libev,开启了obfs混淆,同时在服务器上启用了BBR拥塞算法。
创建AWS服务实例
- 注册AWS账号
访问 AWS网站 ,进行用户注册并填写相应信息,注意要绑定一张信用卡(后面会进行1美元的预付款验证)。信用卡类型应该是没有限制,貌似很早以前必须是VISA或万事达。我用的运通,顺利搞定。
- 登录并创建实例
注册完成后,登录账号,启动“AWS管理控制台”,点击左上角的“服务”,选择“EC2”即可。此时注意右上角的归属地,我选择的是东京,实测访问速度不错。
等待一段时间开通服务后,点击“启动实例”,依次进行系统映像和实例类型选择,创建秘钥对并最终启动实例。我这里选择的是Ubuntu18.04。
之后会弹出来一个创建密匙对的框,在第一个下拉框中,选择“创建新密匙对”。在第二个框中输入密匙对的名字,如“aws_ubuntu”等。点“下载密匙对”,会下载一个后缀名为.pem的文件,记得一定保存好。
此时实例已经创建完毕。点击启动实例, 服务器就已经创建并启动了。这里也可以创建账单警报,避免不必要的扣费。
安装SS及配置服务 定制完成后,实例已启动。此时可以远程登录并配置SS服务。选择实例,点击连接,可弹出相应介绍界面。
如果使用的是Windows或者MAC,请参考我开头列出的参考文章里的连接教程使用PuTTY或者xShell等工具。我这里直接使用本地的Ubuntu进行连接,非常简单,在终端窗口直接使用ssh连接即可。
- 连接成功后,安装SS服务。 以下介绍引用自《Shadowsocks 笔记》
随着技术发展,SS与墙之间的交锋也是一次比一次激烈,据传说,即使是SS的256位加密,运营商可以做到解密,监视SS使用者的上网流量,真实性未知,但小心点总不会错。
目前有4个衍生版本的SS:
-
Shadowsocks-go: 二进制编译, 轻量, 快速
-
Shadowsocks-python: 无功无过,也是最原始的版本,近年来更新速度略慢
-
Shadowsocks-libev: 一直处于更新之中,最大的特点是支持obfs混淆
-
ShadowsocksR: 从作者到产品都极负争议性, obfs混淆模式开创者, 但是前一段时间SSR服务器普遍遭到GFW的封杀.
现阶段为了能在安全与速度之间取得平衡,我个人更加推荐使用 Shadowsocks-libev + obfs混淆。
obfs 混淆:
obfs 混淆最大的作用是对 SS 流量进行伪装, 在不添加obfs的情况下, 运营商服务器通过的流量为未知的加密流量, 据说 GFW 已经有一定的包检测的能力, 仅仅加密流量具有一定的风险, 添加 obfs http 模式之后, 通过运营商的流量会被识别为设定好的网址的流量, 假设你设定的是 bing, 那么你的 SS 流量会被判别为你当前正在访问 bing, 减少了被封杀的可能性,tls模式安全性高于http模式。
首先做一些准备工作:
-
连接上之后,首先要将我们当前登录的用户提升至root权限,输入如下代码并回车sudo -s你会发现光标前面的“$”变成了“#”,并且行首的“ubuntu”也变成了“root”。
-
接下来输入如下命令并回车 apt-get update就当作是在安装更新包吧,完成后会显示“Reading package lists… Done”。
-
然后输入如下命令并回车 apt-get install python-pip。安装过程中可能会让你确认[Y/n],输入y然后回车就好。
之后安装Shadowsocks-libev
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.sh2>&1|tee shadowsocks-all.log
根据提示选择相应类型安装即可,注意以下几点:
-
加密方式推荐chacha20-itef-poly1305,
-
端口可以尽量设置高一点,避免443, 1080等常用端口,
-
安装 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!
常用命令如下,也可将其加入启动项,开机后自己启动。不过我们的AWS实例一般创建完了都扔在那里不管……
启动:/etc/init.d/shadowsocks-libev start
停止:/etc/init.d/shadowsocks-libev stop
重启:/etc/init.d/shadowsocks-libev restart
查看状态:/etc/init.d/shadowsocks-libev status
- 开启BBR BBR简介如下:
TCP 拥塞控制算法
传统 TCP 拥塞控制算法,基于丢包反馈的协议。
基于「丢包反馈」的协议是一种 被动式 的拥塞控制机制,其依据网络中的丢包事件来做网络拥塞判断。即便网络中的负载很高时,只要没有产生拥塞丢包,协议就不会主动降低自己的发送速度。
这种协议可以最大程度的利用网络剩余带宽,提高吞吐量。然而,由于基于丢包反馈协议在网络近饱和状态下所表现出来的侵略性,一方面大大提高了网络的带宽利用率;但另一方面,对于基于丢包反馈的拥塞控制协议来说,大大提高网络利用率同时意味着下一次拥塞丢包事件为期不远了,所以这些协议在提高网络带宽利用率的同时也间接加大了网络的丢包率,造成整个网络的抖动性加剧。
还有谁导致了丢包?
丢包并不总是拥塞导致,丢包可能原因是多方面,比如:
全球最牛的防火墙 GWF 的随机丢包策略
网路中由于多路径衰落(multi-path fading)所造成的信号衰减(signal degradation)
通道阻塞造成的丢包(packet drop),再者损坏的封包(corrupted packets)被拒绝通过
有缺陷的网路硬件、网路驱动软件发生故障
信号的信噪比(SNR)的影响
Google BBR 的出现
我们自然不喜欢 GWF 这种人为的随机丢包策略,当路过 GWF 时,数据被丢包,我们在此时应该立刻重新发包,增大发送的频率,而不希望降低速度,也就是不希望传统的 TCP 拥塞算法去控制。
由此,就出现了基于不丢包的拥塞控制算法 CDG, 以 延迟 作为判断依据,延迟增大说明拥塞, 数据开始在路由器的缓冲中积累. 降低发送 窗口。然而 CDG 算法与基于丢包的算法不兼容, 只有全球的设备都换上 CDG,但这是不可能的,目前市面上的设备不可能一下子都切换到 CDG,因此 Google 就不开心了,Google 的科学家们开发了一种过渡算法来解决这个问题,这个算法的名字就是 BBR(Bottleneck Bandwidth and RTT),它是一种全新的 拥塞控制算法,BBR 同 CDG 一致的思想是不以丢包作为拥塞控制信号,但是和 CDG 不同的是,BBR 能和 cubic 和 reno 共存。
🥕 使用BBR前后网络吞吐量对比图 / By Google
BBR 由 Google 开发,供 Linux 内核的 TCP 协议栈使用,有了 BBR 算法,Linux 服务器可以显著提高吞吐量并减少连接延迟,简单来说 BBR 能加速网络传输速度。此外,部署 BBR 也很容易,因为该算法只需要发送方,而不需要网络或接收方的支持。
Ubuntu18.04的内核版本支持BBR,无需升级内核。
开启具体步骤如下,直接引用自参考文章《ubuntu更换内核并开启bbr加速》。
修改系统变量
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
保存生效
sysctl -p
执行
sysctl net.ipv4.tcp_available_congestion_control
如果结果入下,则开启成功。
root@linux:~# sysctl net.ipv4.tcp_available_congestion_control
net.ipv4.tcp_available_congestion_control = bbr cubic reno
查看
lsmod | grep bbr
关闭
sed -i "net.core.default_qdisc=fq/d" /etc/sysctl.conf
sed -i "net.ipv4.tcp_congestion_control=bbr/d" >> /etc/sysctl.conf
sysctl -p
执行上述代码后要重启VPS才能关闭bbr。
- 设置外网访问 SS服务配置完成后,必须对实例进行外网访问配置,否则客户端无法连接。
在控制台界面,将实例列表的滚动条往右拉,出现安全组标签。点击实例的安全组“launch-wizard-1”,进入实例的安全组设置。
在左下部点击 “入站”标签页,并点击编辑。
点击“添加规则”,添加的规则中“类型”和“协议”都不需要改动。“端口范围”这里填上我们前面设置的服务端口,“来源”下拉框中选择“任何位置”。保存退出后,会自动为你增加两条规则。
至此实例的SS服务已配置完成,静待客户端连接 ;)
多平台客户端配置
- Windows及其他 请移步参考文章《Shadowsocks 笔记》,这一节介绍的很详细,亲测可用:
Now, enjoy it!
-
Linux 已完成,待补充
-
LEDE软路由
尚未测试,待补充
防止扣费 AWS试用只有1年时间,快到期之前,记得先销毁实例并关闭账户,防止扣费。
关闭账户:https://console.aws.amazon.com/billing/home?#/account下拉到网页最下方,关闭账户。
之前在创建实例的时候我们已经设置了扣费告警,如果当时手滑忘记了(没错,就是我),也可以在控制台界面重新配置告警机制,具体操作待我完善一下。
如果觉得好用的话,我想我可能会一直用下去……到时候具体收多少费用,我还没研究,待补充