Shadowsocks进行TCP优化

Shadowsocks目前仍可用。请注意,SS主要作用是“混淆”而不是“加密”。

如果需要shadowsocks-rss的话这里有一个发布链接原味原版ss在这里

对于使用htcp后没太大感觉的,可以尝试用阿里云中转,或者使用BBR(需要Linux kernel4.9,CentOS用户可以用这个脚本。源码粗看下来没有问题。

因为原ss-wiki上用的hybla现在效果不是很好,在经过一天把hybla用htcp替代的测试之后觉得效果反差已经可以修改教程了。嗨呀,现在看一年前(快两年了)自己写的东西感觉当时的文笔还真是稚嫩呢(说的好像现在就……一样)

增加TCP连接数量

sudo nano /etc/security/limits.conf

添加以下两行

* soft nofile 51200
* hard nofile 51200

保存。

设置ulimit:

sudo ulimit -n 51200

修改内核参数

TCP拥塞控制算法有很多种,我们用的主要是hybla, htcp和Linux Kernel 4.9中集成的BBR。如果想尝试BBR的话,除了我上面提到的CentOS使用这个脚本以外,其实还可以自行编译或者干脆换成Arch Linux。

ss-wiki上给的hybla算法,在我这边的表现不是非常优秀(尽管加了阿里云但还是只有100k/s出头),但是没做优化也没用阿里云跳板的Linode 东京2机房就可以跑出3M/s-4M/s(我这边带宽的极限)速度。所以这锅我猜应该得conoha背。

首先看一下VPS现有算法有哪些:

sysctl net.ipv4.tcp_available_congestion_control

如果没有优化的话,返回的结果应该是net.ipv4.tcp_available_congestion_control = cubic reno。也就是说现在VPS上加载的算法有cubic和reno,没有我们要的htcp。

非linode用户一般可以直接用下面的命令加载htcp算法,linode需要自己下载内核源码自行编译。

sudo /sbin/modprobe tcp_htcp

好的我们现在可以打开sysctl.conf进行修改了。

sudo nano /etc/sysctl.conf

sysctl.conf是一个记录内核参数修改的文件,并且在修改后不会随着机器重启后丢失。(言外之意就是如果需要进行实验性操作的话在 /proc/sys 目录下修改,要是爆炸了只要重启一下就行了)

下面的配置整体上是ss-wiki上的,我做的唯一改动是把hybla换成了htcp。

#TCP配置优化
fs.file-max = 51200
#提高整个系统的文件限制
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.core.netdev_max_backlog = 250000
net.core.somaxconn = 4096

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_mem = 25600 51200 102400
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.ipv4.tcp_mtu_probing = 1
net.ipv4.tcp_congestion_control = htcp
#END OF LINE

然后就保存文件,运行sysctl -p来加载修改后的参数。回显会返回修改过的参数,如果有报错的话(digitalocean会对其中两行进行报错但是不影响使用)

sudo sysctl -p

最后重启一下shadowsocks。我使用的是轻量化的shadowsocks-libev,如果在用其他版本的ss就改一下服务名就好了。

sudo service shadowsocks-libev restart

测试效果

在ConoHa+阿里云+25M(联通说给我50M的,什么辣鸡玩意= =)联通环境下测试速度会达到使用hybla的2-3倍,能达到3M/s,1080P没有问题。但是手机上大概6-7s会有一次速度突然降为0的中断点。总体而言比hybla优秀了很多。

参考来源

13 条评论

jacob 发表评论 取消回复

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  • vultr的dedicated server速度都不行,怎么优化也没用,联通的ping虽然低,速度很不稳定,快的时候能跑满20M,慢的时候2M都没

    • Vultr的确不怎么稳定,所以现在已经没再用了(换了更不稳定的conoha(摊手))

  • /bin/sh: 1: bc: not found
    kernel/time/Makefile:30: recipe for target ‘kernel/time/timeconst.h’ failed
    make[2]: *** [kernel/time/timeconst.h] Error 127
    scripts/Makefile.build:403: recipe for target ‘kernel/time’ failed
    make[1]: *** [kernel/time] Error 2
    Makefile:947: recipe for target ‘kernel’ failed
    make: *** [kernel] Error 2

    博主您好 我在编译hybla时出现了这种问题 请问是否能解决?

    • 已解决 没装BC Orz
      Linode sg机房 魔都电信简直……

  • shadowsocks已在8月22日停止更新,并删除了github上的源码,如果您一键ubuntu/debian安装shadowsocks的脚本可以使用我的博客 wangtongze.tk 上的脚本,我采用的是拥有全新防封锁的TCP协议 Shadowsocks-RSS版,带生成二维码的功能。欢迎在我博客上留言!

    • 您的网站似乎出了点问题,已经没有内容了。

    • shadowsocks还在维护,github上源码肯定是在的,切下分支就能看到,这玩意我还是喜欢原版。rss的话对作者当年违反GPL协议的行为无感。

      • ss确实还在维护,源码切成master branch可以看到,RSS我担心的还是潜在的安全问题,在混淆上个人感觉RSS比原版好。

  • 當然,電信是指中國電信,不是台灣的中華電信哈。LOL
    中華電信經常遭人詬病的就是其主機房沒有google的CDN,導致再快的網速上youtube都比較慢。

  • 關於GFW throttle(限速)的問題……本人目前是電信100M網路,用Astrill自帶的速度測試器往往能達到11500k以上的滿速度,但是第二次測試或者連上後就只剩下若干Mbps的速度了,過了一分鐘左右又恢復正常的超高速度——這種情況只發生在傍晚到晚上,我想應該是GFW自動執行的Qos功能,畢竟國際出口有限。到了深夜和白天尤其是上午,我沒有發現限速問題。

    SSH還沒有被徹底封鎖,賽風至今SSH模式比VPN模式更加流暢順滑,剛剛測試了下,居然跑出80M的速度……youtube在線4k毫無壓力。不管我怎麼優化我的私人ss線,最高速度都只有25M,我想應該是套餐處理器性能問題,我目前是linode 1GB plan,雖然“理論上”最高上行帶寬125M,但處理器性能弱給單客戶端的速度就比較有限了。而賽風很可能用的高檔plan,速度……

    • 大陆现在被投诉得最厉害的就是电信…本来是想写一点东西来吐槽的(我也是电信…)然而一直没有时间…(甚至今天才看到这条评论)