用 kcptun 加速 Shadowsocks

标签:无

自从离职后,没有了流畅的 VPN,我上网就各种别扭。
虽然 DigitalOcean 的 VPS 也凑合能用,但是新加坡线路抽风严重,经常连 Gmail 都打不开,所以决定更换一个 CN2 线路的 VPS。
找了几家 VPS 后,虽然更中意 KVM 的,但是喜欢的几款都没货了,于是买了个 Bandwagon Host(搬瓦工) 的特价版 OpenVZ VPS,用优惠码后年付 19 美元(顺带一提,电脑上选择用支付宝没反应,手机上可正常打开),512 MB 内存,1000 GB 月流量,洛杉矶 CN2 线路,广东电信 160 ~ 170 ms 的 ping 值,基本不丢包,看上去应该够用了。然而看 Youtube 仍然很卡,只有 500Kbps 左右的速度,勉强能看 480P 吧。
于是又查了下有没有办法优化,然后发现了 kcptun 这个神奇的玩意。

虽然看上去调参数挺复杂的,不过抱着尝试的心态,我就先用普通的设置把它先跑起来吧。
于是在下载页找了个最新版本的,从网上抄了个配置文件, 把「target」设为 Shadowsocks 的地址(Shadowsocks 的「server」配置也可以从「::」改成「127.0.0.1」,因为不需要对外暴露了),然后用 server_linux_amd64 -c kcptun.json 就跑起来了。
由于我是直接用路由器来翻墙,就不需要装客户端了。打开梅林小宝固件的 Shadowsocks 配置页,勾上「启用KCP协议」,填上「KCP端口」,并在「KCP参数」里填上和服务器配置一致的 key、crypt、datashard、parityshard 和 nocomp。
提交后再打开 Youtube,速度已经提升到 2000 Kbps 了,看 720P 也没压力了。

接下来就调下参数吧。
我把 ping 包的大小改成了 1350 字节(和默认的 MTU 值一样),然后测试丢包率,发现在晚上的高峰时期也只有 4% 左右。又看了下 SNMP 信息,发现 FECRecovered 和 FECErrs 都是 0,于是猜测不需要前向纠错,便把 datashard 和 parityshard 设为了 0。这下再打开 Youtube,速度变成了 5000 KBps,下载搬瓦工的测试文件也到了 1.2 MB/s。
然后慢慢调整窗口大小(rcvwnd 和 sndwnd),从 256 慢慢增加到 1024,Youtube 能到 10000 Kbps,可以流畅看 1440P(勉强能看 4K 的视频,但是我的 CPU 和显卡扛不住),下载搬瓦工的测试文件也到了 2 MB/s。因为家里的网络就是 20 M 的,差不多也到上限了,就懒得再调整别的了。
不过又看了眼路由器的 CPU 占用率,还是比较高的。于是又把 Shadowsocks 的加密算法改成了 chacha20,kcptun 设为 salsa20,这两种算法在 ARM 设备上比较快。此外,互联网上绝大部分的东西都压缩过,所以没必要再用 kcptun 压缩一次,加上 nocomp 参数也是可以的。
其实据我测试,最重要的参数是 nc(关闭拥塞控制),如果不关闭的话,基本没有加速效果,所以预置的几种模式都把它的值设为了 1。

最后,如果觉得麻烦的话,可以用 kcp-server 来安装。不过这个脚本是用 socks5 代理取代了 Shadowsocks,安全性方面可能有些隐患,但是速度可能会更快些。
如果嫌贵的话,偶尔还有一些年付 3 美元的 OpenVZ VPS(例如 virmach),虽然稍微差了点,但用来翻墙的话还是够用的。

22条评论 你不来一发么↓ 顺序排列 倒序排列

    向下滚动可载入更多评论,或者点这里禁止自动加载

    想说点什么呢?