感觉速度很慢?使用BBR优化服务器加速小飞机!

在上文 电脑小白使用Shadowsocks搭建翻墙服务器傻瓜式手把手教程中,我们已经利用Bandwagonhost(搬瓦工)的VPS 搭建起自己的专属Shadowsocks翻墙服务器(小范围分享也可以,比如供自己家人或同事使用,但不建议公开在网上,很容易导致服务器被列入黑名单导致不可用,网上也有很多坏人会拿你提供的服务去干坏事。),在使用中,你可能会感觉速度不甚理想,可能会不如你之前购买的商家的服务。

这种情况是确实存在的,因为专业提供这类服务的商家都会提供与大陆物理距离近的国家的服务器,比如HK香港/JP日本/KR韩国等。我们购买的自己的服务器是在美国西海岸洛杉矶,和周边国家确实没得比。

这个速度慢表现在两方面,一是延迟,二是带宽。

延迟是因爱因斯坦的相对论(光速)限制着的,最快也不可能低于120ms,但实际上,这延迟对访问体验影响很小的,访问网页时加载网页的时间一般都比这个长得多,两秒内能完全打开的网站都算体验很好的,延迟的这不到1/5秒,基本可忽略不计。

带宽这个才是比较要命的,因中美之间宽带上限限制,虽然服务器的网络端口是1Gbps的,但实际上我们在中国使用它,可能连10Mbps都达不到,不到1%。

这个问题是有办法改善的,因为服务器是千兆网络,而我们实际在中国访问因网络拥塞只能使用1%的宽带,相当于有99%的的带宽都是闲置的。我们可能通过优化服务器采用更激进的发包策略来加快速度。例如 我们发送一个请求,正常情况下服务器会返回一个数据包,这个数据包可能因为网络拥塞而没有到达我们这,我们通知服务器说没有收到,服务器才会再次发送,这浪费了时间,也导致了速度上不去。优化过后,服务器会根据网络情况,掉包多时一次发送2个数据包,即使一个掉包了,还有一个会到达我们这。这样做也有一个缺点:会损耗更多的流量。

我们买的服务器最少都有500G/月的流量,个人正常使用几乎是不可能用完的。所以也大可别介意损耗更多流量。

介绍完优化加速原理,我们先来做个试验

之前已经搭建好的SS服务器,我们来看下Youtube上的4K视频,看其能达到的宽带是多少?
未优化前看4k视频
看到的情况,连接宽带在5Mbps-10Mbps之间跳,看1080P没问题,很流畅,但看4K就不行了,需要缓冲。
我们装好优化再来看看情况怎么样?
优化后看4k视频
优化后看4k视频2
看到的情况,连接宽带很快就飙到了50Mbps以上,看了一会后更飙到了80Mbps以上,youtube 4K视频 即点即看,体验和未优化前有天壤之别。

另外放出我已经优化好的搬瓦工VPS的下载测试链接,你自己亲身体验下
ChromeStandaloneSetup64.exe Win7-10 64位系统安装包 50.6Mb
ChromeStandaloneSetup.exe Win7-10 32位系统安装包 40.6Mb
这是Chrome浏览器的离线安装包,刚从官网下载的最新版,请放心下载。
下载能达到的速度可认为等同于你使用它翻墙的速度。

效果这么好!你是不是也想要呢?没问题,下面开始优化教程,还是照例的傻瓜化操作^_^

准备工具

一台搬瓦工的VPS,KVM架构的,确保你是默认的系统没有重装过别的系统,关键字 Centos 6 x86 KVM 如下
搬瓦工VPS

一个SSH客户端--Xshell,下载后安装好

本教程使用的加速方案是Google的开源TCP拥塞控制算法 BBR ,其主要解决两个问题

  1. 充分利用宽带
  2. 降低网络延迟

有兴趣了解原理的朋友可以看下这个链接

原版的BBR有兼顾网络公平,使用效果有,但可能快感不够,因为它是渐渐提升网速的,而不是一开始就直接怼到满速的。

我们这里使用其修改版(感谢 @Yankee 大佬),其发包策略更加激进,从一开始就给你满满的快感^_^
修改内核并启用BBR用的是秋水逸冰的一键包,一并感谢!

下面开始

  1. 先找到你的搬瓦工管理账号信息,在购买开通后搬瓦工已经把信息发到你的注册邮箱里了,去邮箱里找到如下邮件
    VPS信息
    VPS信息2

  2. 打开已安装好的Xshell,新建连接-输入VPS信息-连接 如下图
    Xshell1
    Xshell2
    Xshell3
    Xshell4
    Xshell5

  3. 输入如下命令

    2017-09-18更新:近期发现评论区很多人说安装出错,根据提供的安装日志,发现是编译魔改块时出错了。一番查找,发现秋水逸冰修改内核的一键包默认安装最新版内核,而这个版本是一直在更新的。之前我安装时最新版内核是4.12,现在已经是4.13了,魔改版BBR只支持到4.12,4.13内核就会出现编译错误。我修改了秋水的一键包,使它指定安装4.12.10版内核,测试通过了,放出来。

    注意:修改过的这个脚本没有做系统适配,只适用于搬瓦工默认安装的CentOS6.9 i386(不带BBR)系统,别的系统请勿尝试,特别是64位系统,可能造成VPS系统内核损坏无法开机!

yum update -y && yum install wget -y
wget --no-check-certificate https://downloads.glorystar.me/bbr/bbr.sh && bash bbr.sh

命令输入完按回车键,会提示自动安装最新内核启用BBR,按任意键即开始安装。如下图
安装BBR
命令执行完后会提示需要重启,输入 y 按回车键重启VPS。如下图
安装BBR1

注意VPS重启会断开连接,等大约30秒等VPS重启完成,再连接上去,开始安装修改版模块。输入如下命令

wget --no-check-certificate https://downloads.glorystar.me/bbr/bbr-m.sh && bash bbr-m.sh

验证安装是否成功,输入如下命令

lsmod | grep tsunami

有输出就代表安装成功了,显示如下

s9.png

OK, Enjoy it!

本教程只在Bandwagonhost(搬瓦工)的VPS KVM CENTOS6 32位测试通过。请确保你的系统和我的环境一致。

标签: 翻墙, 教程, 加速, 优化, 加速shadowsocks

本文链接:https://glorystar.me/archives/Speed-up-shadowsocks.html,转载请注明链接!

以下文章可能对你有用:

如你觉得本文有用,不妨把它分享给你的朋友:

已有 36 条评论

  1. liuenshuo9510 liuenshuo9510

    大佬,我在运行
    wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh && bash bbr.sh
    出现了
    Your VPS is based on OpenVZ, not be supported.
    这个错误,怎么解决呀?

    1. 你的VPS不是KVM架构,是OPENVZ的,Openvz是不支持换内核的。
      如果你是搬瓦工的VPS,可以在后台重装系统为支持BBR的CENTOS6,再直接运行
      wget --no-check-certificate https://downloads.glorystar.me/bbr-m.sh && bash bbr-m.sh
      不保证一定能成功哦。

      1. liuenshuo9510 liuenshuo9510

        KiwiVM主面板信息是这样的,它的系统是CENTOS6呀
        localhost.localdomain [WAGON10G512M1T-CA] OVZ
        Physical Location: US, California Node ID: xxx VPS ID: xxx
        IP address: xx.xx.xx.xx
        SSH Port: xxx
        Status: Running (7 processes; LA: 0.00/0.00/0.00)
        Actions: start stop reboot kill
        RAM:
        12.76/512 MB
        SWAP:
        8.57/64 MB
        Disk usage (/):
        0.67/10 GB
        Bandwidth usage:
        Resets: 2017-08-15
        2.69/1000 GB
        Operating system: Centos 6 x86
        Hostname: localhost.localdomain

        1. 你买的Openvz架构的VPS,而本篇教程说得很清楚,要是KVM架构才行。
          不过搬瓦工Openvz的VPS也提供使用BBR内核的的系统,你在后台后选择重装为带BBR的Centos后运行上次回复的命令试试。

        2. 如果你的VPS买了不满1个月,也可以发TK跟客服商量下能不能转成KVM架构的,如不行,直接申请退款另外购买KVM架构的,搬瓦工有提供1个月退款保证的。

  2. po po

    yum update -y && yum install wget -y
    wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh && bash bbr.sh
    执行这段命令时,只执行了yum update -y && yum install wget -y,然后再执行一次后面的,行吗?
    不过后面的验证没像你那样显示,也没要我重启,这样行不行?帮忙解答一下,谢谢

    1. 第一行命令 更新列表并安装wget
      第二行命令 下载bbr.sh一键包并执行
      你可以先复制第一行粘贴,回车执行,再复制第二行粘贴,回车执行。

  3. huang huang

    tcp_tsunami 20480 50 後面這個50是什么意思

    1. 依赖模块的个数,lsmod命令用于列出内核加载模块

  4. po po

    速度变慢了...怎么办???有重装系统的教程?搬瓦工里的

  5. po po

    看着教程,,重新搞了一边...好了,,,不过还是谢谢博主

  6. kz7 kz7

    完全照着做了一遍,在一大段内容的最后出现了
    error: "No such file or directory" setting key "net.ipv4.tcp_congestion_control"
    然后输入lsmod | grep tsunami无任何输出,这是哪里出问题了呀?

    1. /etc/sysctl.conf 不存在?你的系统确定是搬瓦工默认的Centos 6 x86吗?

      1. kz7 kz7

        Operating system: Centos 6 x86 bbr

        1. 改成和我一样的系统环境吧 然后再试一遍

          1. kz7 kz7

            改系统后还是一样,过程如下

            [root@host ~]# wget --no-check-certificate https://downloads.glorystar.me/bbr-m.sh && bash bbr-m.sh
            --2017-09-06 10:48:05-- https://downloads.glorystar.me/bbr-m.sh
            Resolving downloads.glorystar.me... 162.220.14.112
            Connecting to downloads.glorystar.me|162.220.14.112|:443... connected.
            HTTP request sent, awaiting response... 200 OK
            Length: 485 [application/octet-stream]
            Saving to: “bbr-m.sh.1”

            100%[===============================================>] 485 --.-K/s in 0s

            2017-09-06 10:48:05 (73.4 MB/s) - “bbr-m.sh.1” saved [485/485]

            Loaded plugins: fastestmirror
            Setting up Update Process
            Loading mirror speeds from cached hostfile

            base: mirror.lax.hugeserver.com elrepo: repos.lax-noc.com extras: mirror.sfo12.us.leaseweb.net updates: mirror.sfo12.us.leaseweb.net
            base | 3.7 kB 00:00
            elrepo | 2.9 kB 00:00
            extras | 3.3 kB 00:00
            updates | 3.4 kB 00:00
            No Packages marked for Update
            Loaded plugins: fastestmirror
            Setting up Install Process
            Loading mirror speeds from cached hostfile base: mirror.lax.hugeserver.com elrepo: repos.lax-noc.com extras: mirror.sfo12.us.leaseweb.net updates: mirror.sfo12.us.leaseweb.net
            Package 1:make-3.81-23.el6.i686 already installed and latest version
            Package gcc-4.4.7-18.el6.i686 already installed and latest version
            Nothing to do
            --2017-09-06 10:48:11-- https://gist.github.com/anonymous/ba338038e799eafbba173215153a7f3a/raw/55ff1e45c97b46f12261e07ca07633a9922ad55d/tcp_tsunami.c
            Resolving gist.github.com... 192.30.253.119, 192.30.253.118
            Connecting to gist.github.com|192.30.253.119|:443... connected.
            HTTP request sent, awaiting response... 301 Moved Permanently
            Location: https://gist.githubusercontent.com/anonymous/ba338038e799eafbba173215153a7f3a/raw/55ff1e45c97b46f12261e07ca07633a9922ad55d/tcp_tsunami.c [following]
            --2017-09-06 10:48:11-- https://gist.githubusercontent.com/anonymous/ba338038e799eafbba173215153a7f3a/raw/55ff1e45c97b46f12261e07ca07633a9922ad55d/tcp_tsunami.c
            Resolving gist.githubusercontent.com... 151.101.0.133, 151.101.64.133, 151.101.128.133, ...
            Connecting to gist.githubusercontent.com|151.101.0.133|:443... connected.
            HTTP request sent, awaiting response... 200 OK
            Length: 32858 (32K) [text/plain]
            Saving to: “./tcp_tsunami.c”

            100%[===============================================>] 32,858 --.-K/s in 0.001s

            2017-09-06 10:48:11 (51.6 MB/s) - “./tcp_tsunami.c” saved [32858/32858]

            make: Entering directory /usr/src/kernels/4.13.0-1.el6.elrepo.i686' CC [M] /root/tcp_tsunami.o /root/tcp_tsunami.c:67: error: field ‘cycle_mstamp’ has incomplete type /root/tcp_tsunami.c: In function ‘bbr_is_next_cycle_phase’: /root/tcp_tsunami.c:387: error: implicit declaration of function ‘skb_mstamp_us_delta’ /root/tcp_tsunami.c: In function ‘bbr_reset_lt_bw_sampling_interval’: /root/tcp_tsunami.c:473: error: request for member ‘stamp_jiffies’ in something not a structure or union /root/tcp_tsunami.c: In function ‘bbr_lt_bw_sampling’: /root/tcp_tsunami.c:579: error: request for member ‘stamp_jiffies’ in something not a structure or union /root/tcp_tsunami.c: In function ‘bbr_update_min_rtt’: /root/tcp_tsunami.c:707: warning: passing argument 2 of ‘before’ makes integer from pointer without a cast ./include/net/tcp.h:299: note: expected ‘__u32’ but argument is of type ‘u32 (*)(const struct tcp_sock *)’ /root/tcp_tsunami.c:712: warning: assignment makes integer from pointer without a cast /root/tcp_tsunami.c:738: warning: assignment makes integer from pointer without a cast /root/tcp_tsunami.c:745: warning: passing argument 2 of ‘before’ makes integer from pointer without a cast ./include/net/tcp.h:299: note: expected ‘__u32’ but argument is of type ‘u32 (*)(const struct tcp_sock *)’ /root/tcp_tsunami.c:746: warning: assignment makes integer from pointer without a cast /root/tcp_tsunami.c: In function ‘bbr_init’: /root/tcp_tsunami.c:793: warning: assignment makes integer from pointer without a cast make[1]: *** [/root/tcp_tsunami.o] Error 1 make: *** [_module_/root] Error 2 make: Leaving directory/usr/src/kernels/4.13.0-1.el6.elrepo.i686'
            chmod: cannot access ./tcp_tsunami.ko': No such file or directory cp: cannot stat./tcp_tsunami.ko': No such file or directory
            insmod: can't read 'tcp_tsunami.ko': No such file or directory
            net.ipv4.ip_forward = 0
            net.ipv4.conf.default.rp_filter = 1
            net.ipv4.conf.default.accept_source_route = 0
            kernel.sysrq = 0
            kernel.core_uses_pid = 1
            net.ipv4.tcp_syncookies = 1
            kernel.msgmnb = 65536
            kernel.msgmax = 65536
            kernel.shmmax = 4294967295
            kernel.shmall = 268435456
            net.ipv4.neigh.default.base_reachable_time_ms = 600000
            net.ipv4.neigh.default.mcast_solicit = 20
            net.ipv4.neigh.default.retrans_time_ms = 250
            net.core.default_qdisc = fq
            error: "No such file or directory" setting key "net.ipv4.tcp_congestion_control"
            [root@host ~]#

          2. 把你的root账号信息发邮件给我,我有空上去给你看下

  7. kz7 kz7

    邮件已发,请查收。再次感谢!

    1. xy xy

      你的问题解决了吗,我的和你的一模一样。。。重装之后还是同样的问题。

  8. xy xy

    完全照做,系统都一样。运行 bbr没有问题,到了运行bbr-m.sh 就报错:
    make: Leaving directory /usr/src/kernels/4.13.2-1.el6.elrepo.i686' chmod: cannot access./tcp_tsunami.ko': No such file or directory
    cp: cannot stat `./tcp_tsunami.ko': No such file or directory
    insmod: can't read 'tcp_tsunami.ko': No such file or directory
    net.ipv4.ip_forward = 0
    net.ipv4.conf.default.rp_filter = 1
    net.ipv4.conf.default.accept_source_route = 0
    kernel.sysrq = 0
    kernel.core_uses_pid = 1
    net.ipv4.tcp_syncookies = 1
    kernel.msgmnb = 65536
    kernel.msgmax = 65536
    kernel.shmmax = 4294967295
    kernel.shmall = 268435456
    net.ipv4.neigh.default.base_reachable_time_ms = 600000
    net.ipv4.neigh.default.mcast_solicit = 20
    net.ipv4.neigh.default.retrans_time_ms = 250
    net.core.default_qdisc = fq
    error: "No such file or directory" setting key "net.ipv4.tcp_congestion_control"

    看了下 bbr-m.sh的内容:
    #/bin/bash
    yum update
    yum install -y make gcc
    wget -O ./tcp_tsunami.c https://gist.github.com/anonymous/ba338038e799eafbba173215153a7f3a/raw/55ff1e45c97b46f12261e07ca07633a9922ad55d/tcp_tsunami.c
    echo "obj-m:=tcp_tsunami.o" > Makefile
    make -C /lib/modules/$(uname -r)/build M=pwd modules CC=/usr/bin/gcc
    chmod +x ./tcp_tsunami.ko
    cp -rf ./tcp_tsunami.ko /lib/modules/$(uname -r)/kernel/net/ipv4
    insmod tcp_tsunami.ko
    depmod -a
    sed -i 's/bbr/tsunami/g' /etc/sysctl.conf
    sysctl -p
    exit

    对比上面的错误日志“chmod: cannot access `./tcp_tsunami.ko': No such file or directory”,可以看到他运行到chmod 这一行就出错了,找不到tcp_tsunami.ko这个文件。我也是小白,不知道上面的理解对不对。

    现在只能用bbr的策略,加速还是有的,只是是逐渐加速,也能到15~16mbps。无法更高了。

    我不知道 tcp_tsunami.ko这个文件复制一份到我的vps里面能不能用?楼主能发一份给我试试吗?我的邮箱提交评论的时候留了,就不在这里留了。
    谢谢了。

    1. 运行这两个命令看看输出什么?我怀疑你的系统并非默认的CENTOS6.9 I386
      cat /etc/issue
      uname -r

  9. kz7 kz7

    [root@host ~]# lsmod | grep bbr
    tcp_bbr 20480 5
    [root@host ~]# lsmod | grep tsunami
    [root@host ~]# cat /etc/issue
    CentOS release 6.9 (Final)
    Kernel \r on an \m

    [root@host ~]# uname -r
    4.13.2-1.el6.elrepo.i686
    [root@host ~]#

    以上是我的系统输出,请过目。

    1. 找到问题了,秋水逸冰修改内核的一键包默认安装最新版内核,之前我安装时最新版内核是4.12,鸡血版BBR只支持到4.12,4.13内核就会出现编译错误,我正在修改秋水的一键包,弄好后放出。
      折腾过程可见 https://glorystar.me/archives/CentOS6-9-make-install-gcc-4-9.html

  10. xy xy

    [root@host ~]# cat /etc/issue
    CentOS release 6.9 (Final)
    Kernel \r on an \m

    [root@host ~]# uname -r
    4.13.2-1.el6.elrepo.i686

    额,我的是i686,大师,这个要咋整。。。谢谢回答。

    1. 问题已修复,请重装系统后再进行安装。

      1. xy xy

        ok了,安装成功了。
        有一个小问题:wget --no-check-certificate https://downloads.glorystar.me/bbr-m.sh 这个显示404. 我用的是之前本地存的一个bbr-m.sh。

        另外,不知道是不是我网络的原因,我这边50m的宽带,用了修改过的bbr后YouTube看4k还是只有10m,还没有之前用bbr快。。。不过反应速度倒是比之前用bbr快了一些。正好这两天准备升级100m的宽带,到时候再试试。

        谢谢大师了。

  11. gabriel gabriel

    博主,我都装好了,测试也通过了,为什么速度还是在4M左右,4k看不了

    1. 这个也得看你本地网络环境是否给力的。一般三大运营商的宽带都没问题 如果是二级承包商 如长宽 有线电视这些可能就会有问题。

  12. 5venw0ng 5venw0ng

    兄弟,真不知道你买的啥机器,我买的搬瓦工,
    SPECIAL 20G VZ PROMO V3 - LOS ANGELES - CHINA DIRECT ROUTE
    SSD: 20 GB RAID-10
    RAM: 1 GB
    CPU: 1x Intel Xeon
    Transfer: 2000 GB/mo
    Link speed: 1 Gigabit

    Location: Los Angeles (no other locations available on this plan)
    Direct route via China Telecom and China Unicom

    但是我看 youtube,Connection Speed 就没超过 500 的,时好时坏,我都准备退款了,真不知到你家截图上的 8000 多,甚至更高的是怎么来的。

    1. 这阵搬瓦工网络确实不怎么稳,我刚刚测试也只有4Mbps左右,要求高的话可以看看阿里云香港的VPS,下面是我的测试截图

      1. 5venw0ng 5venw0ng

        兄弟,我给你发了封邮件,盼望回复

  13. 1777 1777

    安装魔改BBR时候报错,已经确认系统是正确的了
    2017-10-11 11:36:56 (35.9 MB/s) - “./tcp_tsunami.c” saved [32858/32858]

    make: *** /lib/modules/2.6.32-642.el6.i686/build: No such file or directory. Stop.
    chmod: cannot access ./tcp_tsunami.ko': No such file or directory cp: cannot stat./tcp_tsunami.ko': No such file or directory
    insmod: can't read 'tcp_tsunami.ko': No such file or directory

    1. 执行以下命令看看输出是什么
      uname -r

  14. cory cory

    请教下 博主,我的vultr搭建好之后也是看视频很卡,加速器安装不了,说是不匹配内核。

  15. 卧龙11 卧龙11

    输完前两个命令之后都提示安装成功,但是并没有提示重启,然后执行wget --no-check-certificate https://downloads.glorystar.me/bbr/bbr-m.sh && bash bbr-m.sh, 就会提示找不到文件,输入lsmod | grep tsunami 也没有任何输出, 是KVM的,博主求教。

    1. 筱旺 筱旺

      大佬我执行wget --no-check-certificate https://downloads.glorystar.me/bbr/bbr-m.sh && bash bbr-m.sh, 就会提示找不到文件

添加新评论

昵称和邮箱为必填项,网站选填;请留有效邮箱,无效邮箱将导致评论被定为SPAM