感觉速度很慢?使用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

KVM、XEN、VMware或HyperV架构的,OpenVZ不支持换内核不适用此篇教程;搬瓦工确保你是默认的系统没有重装过别的系统,关键字 Centos 6 x86 KVM 不再建议使用老旧的centos6系统,搬瓦工的机子请直接重装为ubuntu18.04,其已经默认开启了bbr,下面的内容你都不需要再看了!

其它家的VPS也建重装为ubuntu18.04或debian9以上版本,其内核已大概率直接支持bbr,可以直接启用。

一个SSH客户端–Xshell 现在有更好的替代品MobaXterm

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

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

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

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

我们这里使用其修改版(感谢 @Yankee 大佬),其发包策略更加激进,从一开始就给你满满的快感^_^,不再建议使用修改版,使用原版bbr也可以达到加快速度的目的

这里修改内核并启用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系统内核损坏无法开机!— 2020-5-30 — 已更改为使用秋水逸冰原版BBR一键包,适配各种系统,请放心食用 🙂
apt update && apt install wget -y #debain及ubuntu安装wget
yum update && yum install wget -y #centos安装wget
wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh && chmod +x bbr.sh && ./bbr.sh

 

命令输入完按回车键,会提示自动安装最新内核启用BBR,按任意键即开始安装。如下图

安装BBR
命令执行完后会提示需要重启,输入 y 按回车键重启VPS。如下图
安装BBR1

注意VPS重启会断开连接,等大约30秒等VPS重启完成。

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

lsmod | grep bbr

有输出就代表安装成功了

OK, Enjoy it!

感觉速度很慢?使用BBR优化服务器加速小飞机!》有41个想法

      1. 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. glorystar 文章作者

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

          回复
        2. glorystar 文章作者

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

          回复
    1. glorystar 文章作者

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

      回复
  1. kz7

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

    回复
          1. 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. 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里面能不能用?楼主能发一份给我试试吗?我的邮箱提交评论的时候留了,就不在这里留了。
    谢谢了。

    回复
  3. 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 ~]#
    以上是我的系统输出,请过目。

    回复
  4. 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. 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的宽带,到时候再试试。
        谢谢大师了。

        回复
    1. glorystar 文章作者

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

      回复
  5. 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. glorystar 文章作者

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

      回复
  6. 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

    回复
  7. Pingback引用通告: 墙越来越高,如何升级翻墙工具?这是一篇全面的指引。 - 荣耀之星

  8. Pingback引用通告: 购买RUVDS 780卢布年付的VPS教程 - 荣耀之星

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据