原版的BBR对于我们来说,速度不太稳定. 通过修改BBR源码,调整参数,使其更强劲.
使用前,请确认能够开启BBR. 可参考: Debian/Ubuntu 开启 TCP BBR 拥塞算法 或者直接执行此命令进行开启.
1 wget --no-check-certificate -qO 'BBR.sh' 'https://moeclub.org/attachment/LinuxShell/BBR.sh' && chmod a+x BBR.sh && bash BBR.sh -f
注意:执行此命令会自动重启.
1 wget --no-check-certificate -qO 'BBR_POWERED.sh' 'https://moeclub.org/attachment/LinuxShell/BBR_POWERED.sh' && chmod a+x BBR_POWERED.sh && bash BBR_POWERED.sh
1 wget --no-check-certificate -qO 'BBR_POWERED.sh' 'https://moeclub.org/attachment/LinuxShell/BBR_POWERED.sh' && chmod a+x BBR_POWERED.sh && bash BBR_POWERED.sh -f v4.11.9
说明 :执行过程中会重新编译模块. 模块默认为开机自动加载. 模块名称:tcp_bbr_powered 可用 modprobe tcp_bbr_powered 命令进行加载模块. 可执行 lsmod grep 'bbr_powered' 结果不为空,则加载模块成功 可执行 sysctl -w net.ipv4.tcp_congestion_control=bbr_powered 使用此模块. 以上只是说明,直接使用一键脚本即可.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 #!/bin/bash [ "$EUID" -ne '0' ] && echo "Error,This script must be run as root! " && exit 1 [ $# -gt '1' ] && [ "$1" == '-f' ] && tmpKernelVer="$2" tmpKernelVer=''; [ -z "$(dpkg -l grep 'grub-')" ] && echo "Not found grub." && exit 1 which make >/dev/null 2>&1 [ $? -ne '0' ] && { echo "Install make..." DEBIAN_FRONTEND=noninteractive apt-get install -y -qq make >/dev/null 2>&1 which make >/dev/null 2>&1 [ $? -ne '0' ] && { echo "Error! Install make. " exit 1 } } which awk >/dev/null 2>&1 [ $? -ne '0' ] && { echo "Install awk..." DEBIAN_FRONTEND=noninteractive apt-get install -y -qq gawk >/dev/null 2>&1 which awk >/dev/null 2>&1 [ $? -ne '0' ] && { echo "Error! Install awk. " exit 1 } } which gcc >/dev/null 2>&1 [ $? -ne '0' ] && { echo "Install gcc..." DEBIAN_FRONTEND=noninteractive apt-get install -y -qq gcc >/dev/null 2>&1 which gcc >/dev/null 2>&1 [ $? -ne '0' ] && { echo "Error! Install gcc. " echo "Please 'apt-get update' and try again! " exit 1 } } GCCVER="$(readlink `which gcc` grep -o '[0-9].*')" GCCVER1="$(echo $GCCVER awk -F. '{print $1}')" GCCVER2="$(echo $GCCVER awk -F. '{print $2}')" [ -n "$GCCVER1" ] && [ "$GCCVER1" -gt '4' ] && CheckGCC='0' CheckGCC='1' [ "$CheckGCC" == '1' ] && [ -n "$GCCVER2" ] && [ "$GCCVER2" -ge '9' ] && CheckGCC='0' [ "$CheckGCC" == '1' ] && { echo "The gcc version require gcc-4.9 or higher. " echo "You can try apt-get install -y gcc-4.9 or apt-get install -y gcc-6" echo "Please upgrade it manually! " exit 1 } KernelVer=''; KernelBitVer=''; MainURL='http://kernel.ubuntu.com/~kernel-ppa/mainline' [ -n "$tmpKernelVer" ] && { wget -qO /dev/null "$MainURL/$tmpKernelVer" [ $? -ne '0' ] && echo 'Please input a vaild kernel version! exp: v4.11.9.' && exit 1 KernelVer="$tmpKernelVer" } [ -z "$tmpKernelVer" ] && { KernelVerBIG="$(wget -qO- "$MainURL" awk -F '/">href="'%20'{print%20$2}'%20sed%20'/rc/d;/^$/d'%20tail%20-n1)" [ -n "$KernelVerBIG" ] && KernelVer="$(wget -qO- "$MainURL" awk -F '/">href="'%20'{print%20$2}'%20sed%20'/rc/d;/^$/d'%20grep%20''${KernelVerBIG}''%20sort%20-n%20tail%20-n1)" } [ -z "$KernelVer" ] && echo 'Error,Get Kernel fail! ' && exit 1 ReleaseURL="$(echo -n "$MainURL/$KernelVer")" KernelBit="$(getconf LONG_BIT)" [ "$KernelBit" == '32' ] && KernelBitVer='i386' [ "$KernelBit" == '64' ] && KernelBitVer='amd64' [ -z "$KernelBitVer" ] && echo "Error! " && exit 1 HeadersFile="$(wget -qO- "$ReleaseURL" awk -F '">href="'%20'/generic.*.deb/{print%20$2}'%20grep%20'headers'%20grep%20"$KernelBitVer" head -n1)" [ -n "$HeadersFile" ] && HeadersAll="$(echo "$HeadersFile" sed 's/-generic//g;s/_'${KernelBitVer}'.deb/_all.deb/g')" [ -z "$HeadersAll" ] && echo "Error! Get Linux Headers for All." && exit 1 echo "$HeadersFile" grep -q "$(uname -r)" [ $? -ne '0' ] && echo "Error! Header not be matched by Linux Kernel." && exit 1 echo -ne "Download Kernel Headers for All\n\t$HeadersAll\n" wget -qO "$HeadersAll" "$ReleaseURL/$HeadersAll" echo -ne "Install Kernel Headers for All\n\t$HeadersAll\n" dpkg -i "$HeadersAll" >/dev/null 2>&1 echo -ne "Download Kernel Headers\n\t$HeadersFile\n" wget -qO "$HeadersFile" "$ReleaseURL/$HeadersFile" echo -ne "Install Kernel Headers\n\t$HeadersFile\n" dpkg -i "$HeadersFile" >/dev/null 2>&1 echo -ne "Download BBR POWERED Source code\n" [ -e ./tmp ] && rm -rf ./tmp mkdir -p ./tmp && cd ./tmp [ $? -eq '0' ] && { wget --no-check-certificate -qO- 'https://moeclub.org/attachment/LinuxSoftware/bbr/tcp_bbr_powered.c.deb' >./tcp_bbr_powered.c echo 'obj-m:=tcp_bbr_powered.o' >./Makefile make -s -C /lib/modules/$(uname -r)/build M=`pwd` modules CC=`which gcc` echo "Loading TCP BBR POWERED..." [ -f ./tcp_bbr_powered.ko ] && [ -f /lib/modules/$(uname -r)/modules.dep ] && { cp -rf ./tcp_bbr_powered.ko /lib/modules/$(uname -r)/kernel/net/ipv4 depmod -a >/dev/null 2>&1 } modprobe tcp_bbr_powered [ ! -f /etc/sysctl.conf ] && touch /etc/sysctl.conf sed -i '/net.core.default_qdisc.*/d' /etc/sysctl.conf sed -i '/net.ipv4.tcp_congestion_control.*/d' /etc/sysctl.conf echo "net.core.default_qdisc = fq" >>/etc/sysctl.conf echo "net.ipv4.tcp_congestion_control = bbr_powered" >>/etc/sysctl.conf } lsmod grep -q 'bbr_powered' [ $? -eq '0' ] && { sysctl -p >/dev/null 2>&1 echo "Finish! " exit 0 } { echo "Error, Loading BBR POWERED." exit 1 }
如遇报错:Error! Header not be matched by Linux Kernel. 请用使用本博客提供的脚本重新开启BBR,或使用-f参数.可参考本篇中的准备 步骤. 如遇报错:Error! Install make或Error! Install gcc. 首先尝试apt-get update,再次执行此脚本. 如果未解决想办法自行安装gcc(>=4.9),或切换系统后再试. 本脚本在Debian8,Debian9,Ubuntu16.04上通过测试.
引用评论中提供的在Ubuntu安装gcc-4.9的方法 :1 2 3 4 sudo apt-get install -y software-properties-common sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update sudo apt-get -y install g++-4.9