注意:TCP-BBR和锐速一样,不支持Openvz,查看本教程之前,请先确定你的VPS的虚拟化技术!
注意:本教程涉及到VPS更换内核,所以如果步骤错误,或者VPS不兼容最新的内核,
会导致无法开机等错误,请勿用于生产环境!!!!
BBR 简单介绍
BBR 是一个由谷歌社区开发的 TCP拥塞控制技术,目前处于开发初期,但是前景很棒,大家可以持续关注,同时BBR是集成与Linux最新版本的内核中的。具体什么是TCP拥塞控制技术,详细的我也不懂,我就用通俗的解释一下,不一定准确,看一看理解一下就好了。
原始的TCP流量传输技术,流量管理很乱,我们把 TCP流量比喻成 公路上的汽车流量,而TCP传输隧道就是 公路,那么:大概就是这样解释了,有什么错误请指出。
在原始的TCP流量传输中,一条十字路口公路,很多车流量,但是却没有红绿灯和交警,导致大家左挤右挤的堵车了,这就是没有合理的管理导致的。
而BBR和锐速等TCP流量控制技术,就是红绿灯+交警,他们就是在无人管理的十字路口,去合理指挥分配车流量,然后最大化的利用车流量,保证路面畅通。
启动步骤
首先是教程,本人喜欢Debian,所以我先使用 Debian 7 / 8 x64 系统来做测试。Ubuntu随后考虑加上。每一个步骤,我都会加上VPS中执行后的提示,本教程以64位为例。但是各个系统可能会存在差异,所以仅为参考。在 2016-12-05 21:00 更新的 4.9.0-rc8 内核已经支持了TCP-BBR,最新内核看这里。
注意:TCP-BBR必须是 2016-12-05 21:00 更新的 4.9.0-rc8 内核及以后的版本 才能开启,而锐速并不支持这个最新的内核版本,所以TCP-BBR和锐速是不能共存的。
更换内核需要ROOT权限的账号,所以如果你是普通用户 的话,需要切换到ROOT账号,如果你是ROOT账号,那就忽略这个步骤:
输入并回车后,会提示让你输入当前用户账号的密码,输入并回车后就可以继续下面的步骤了。
- sudo su
使用这个命令会返回你的系统位数,如果是 x86_64 那就是64位,如果是 i386 或 386 那就是32位,如果是 i686 或 686,那么不支持。
- uname -m
下载内核文件(64位系统)
- wget -O linux-image-4.10.1-amd64.deb http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10.1/linux-image-4.10.1-041001-generic_4.10.1-041001.201702260735_amd64.deb
下载内核文件(32位系统)
- wget -O linux-image-4.10.1-i386.deb http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10.1/linux-image-4.10.1-041001-generic_4.10.1-041001.201702260735_i386.deb
- # VPS提示(64位)
- root@bbr1:~# wget -O linux-image-4.10.1-amd64.deb http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10.1/linux-image-4.10.1-041001-generic_4.10.1-041001.201702260735_amd64.deb
- converted 'http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10.1/linux-image-4.10.1-041001-generic_4.10.1-041001.201702260735_amd64.deb' (ANSI_X3.4-1968) -> 'http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9-rc8/linux-image-4.10.1-040900rc8-generic_4.10.1-040900rc8.201612051443_amd64.deb' (UTF-8)
- --2016-12-08 15:31:16-- http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9/linux-image-4.10.1-040900-generic_4.10.1-040900.201612111631_amd64.deb
- Resolving kernel.ubuntu.com (kernel.ubuntu.com)... 91.189.94.216
- Connecting to kernel.ubuntu.com (kernel.ubuntu.com)|91.189.94.216|:80... connected.
- HTTP request sent, awaiting response... 200 OK
- Length: 60489324 (58M) [application/x-debian-package]
- Saving to: 'linux-image-4.10.1-amd64.deb'
- linux-image-4.10.1-040900 100%[=====================================>] 57.69M 3.02MB/s in 14s
- 2016-12-08 15:31:31 (4.05 MB/s) - 'linux-image-4.10.1-amd64.deb' saved [60489324/60489324]
安装内核(64位)
- dpkg -i linux-image-4.10.1-amd64.deb
安装内核(32位)
- dpkg -i linux-image-4.10.1-i386.deb
- # VPS提示
- root@bbr1:~# dpkg -i linux-image-4.10.1-amd64.deb
- Selecting previously unselected package linux-image-4.10.1-040900rc8-generic.
- (Reading database ... 25141 files and directories currently installed.)
- Preparing to unpack linux-image-4.10.1-040900rc8-generic_4.10.1-040900rc8.201612051443_amd64.deb ...
- Done.
- Unpacking linux-image-4.10.1-040900rc8-generic (4.10.1-040900rc8.201612051443) ...
- Setting up linux-image-4.10.1-040900rc8-generic (4.10.1-040900rc8.201612051443) ...
- Running depmod.
- update-initramfs: deferring update (hook will be called later)
- Examining /etc/kernel/postinst.d.
- run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 4.10.1-040900rc8-generic /boot/vmlinuz-4.10.1-040900rc8-generic
- run-parts: executing /etc/kernel/postinst.d/initramfs-tools 4.10.1-040900rc8-generic /boot/vmlinuz-4.10.1-040900rc8-generic
- update-initramfs: Generating /boot/initrd.img-4.10.1-040900rc8-generic
- run-parts: executing /etc/kernel/postinst.d/zz-update-grub 4.10.1-040900rc8-generic /boot/vmlinuz-4.10.1-040900rc8-generic
- Generating grub configuration file ...
- Found linux image: /boot/vmlinuz-4.10.1-040900rc8-generic
- Found initrd image: /boot/initrd.img-4.10.1-040900rc8-generic
- Found linux image: /boot/vmlinuz-3.16.0-4-amd64
- Found initrd image: /boot/initrd.img-3.16.0-4-amd64
- done
列出并删除旧内核
列出VPS 除了刚才安装的内核以外的 所有内核名称:注意:这个代码是排除了刚才安装的内核,所以不会显示刚才安装的那个内核。删除了多余的内核后,就会什么都不显示!
- dpkg -l|grep linux-image | awk '{print $2}' | grep -v 'linux-image-[4-9].[0-9]*.'
我使用的VPS是
- root@bbr1:~# dpkg -l|grep linux-image | awk '{print $2}' | grep -v 'linux-image-[4-9].[0-9]*.'
- linux-image-3.16.0-4-amd64
- linux-image-amd64
3.16.0-4-amd64
内核的,所以删除这两个内核: linux-image-3.16.0-4-amd64、linux-image-amd64
。删除旧内核:
- apt-get purge 旧内核名称
删除旧内核的过程中会提示你是否继续,选择
- # !!!!示例!!!!
- # 比如我是有这两个内核,所以我把这两个删掉,不要照着我的这个步骤做,自己换成你VPS的内核名称!!!
- apt-get purge linux-image-3.16.0-4-amd64
- apt-get purge linux-image-amd64
- # !!!!示例!!!!
Y
,然后还会提示你是否终止删除内核的行为,选择 NO
。
- # VPS提示
- root@bbr1:~# apt-get purge linux-image-3.16.0-4-amd64
- Reading package lists... Done
- Building dependency tree
- Reading state information... Done
- The following packages were automatically installed and are no longer required:
- libuuid-perl linux-base
- Use 'apt-get autoremove' to remove them.
- The following packages will be REMOVED:
- linux-image-3.16.0-4-amd64* linux-image-amd64*
- 0 upgraded, 0 newly installed, 2 to remove and 7 not upgraded.
- After this operation, 164 MB disk space will be freed.
- Do you want to continue? [Y/n] y
- (Reading database ... 31152 files and directories currently installed.)
- Removing linux-image-3.16.0-4-amd64 (3.16.36-1+deb8u2) ...
- Ok, proceeding with removing running kernel image.
- /etc/kernel/postrm.d/initramfs-tools:
- update-initramfs: Deleting /boot/initrd.img-3.16.0-4-amd64
- /etc/kernel/postrm.d/zz-update-grub:
- Generating grub configuration file ...
- Found linux image: /boot/vmlinuz-4.10.1-040900rc8-generic
- Found initrd image: /boot/initrd.img-4.10.1-040900rc8-generic
- done
- The link /vmlinuz.old is a damaged link
- Removing symbolic link vmlinuz.old
- You may need to re-run your boot loader
- The link /initrd.img.old is a damaged link
- Removing symbolic link initrd.img.old
- You may need to re-run your boot loader
- Purging configuration files for linux-image-3.16.0-4-amd64 (3.16.36-1+deb8u2) ...
- # ================================================
- root@bbr1:~# apt-get purge linux-image-amd64
- Reading package lists... Done
- Building dependency tree
- Reading state information... Done
- The following packages were automatically installed and are no longer required:
- libuuid-perl linux-base
- Use 'apt-get autoremove' to remove them.
- The following packages will be REMOVED:
- linux-image-amd64*
- 0 upgraded, 0 newly installed, 1 to remove and 7 not upgraded.
- After this operation, 164 MB disk space will be freed.
- Do you want to continue? [Y/n] y
- (Reading database ... 31152 files and directories currently installed.)
- Removing linux-image-amd64 (3.16.36-1+deb8u2) ...
- Ok, proceeding with removing running kernel image.
- /etc/kernel/postrm.d/initramfs-tools:
- update-initramfs: Deleting /boot/initrd.img-amd64
- /etc/kernel/postrm.d/zz-update-grub:
- Generating grub configuration file ...
- Found linux image: /boot/vmlinuz-4.10.1-040900rc8-generic
- Found initrd image: /boot/initrd.img-4.10.1-040900rc8-generic
- done
- The link /vmlinuz.old is a damaged link
- Removing symbolic link vmlinuz.old
- You may need to re-run your boot loader
- The link /initrd.img.old is a damaged link
- Removing symbolic link initrd.img.old
- You may need to re-run your boot loader
- Purging configuration files for linux-image-amd64 (3.16.36-1+deb8u2) ...
- # ================================================
- # 最后在看一下内核是否只剩下教程安装的内核。
- root@bbr1:~# dpkg -l|grep linux-image | awk '{print $2}'
- linux-image-4.10.1-040900-generic
更新 grub 系统引导文件并重启VPS
- # 更新系统引导文件
- update-grub
- # 重启VPS,执行后SSH链接会断开,等十几秒再重新连接继续执行下面的启动命令。
- reboot
- # VPS提示
- root@bbr1:~# update-grub
- Generating grub configuration file ...
- Found linux image: /boot/vmlinuz-4.10.1-040900rc8-generic
- Found initrd image: /boot/initrd.img-4.10.1-040900rc8-generic
- done
开启bbr
执行这个保存生效更改。
- echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
- echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
- sysctl -p
- # VPS提示
- root@bbr1:~# sysctl -p
- net.ipv6.conf.all.accept_ra = 2
- net.core.default_qdisc = fq
- net.ipv4.tcp_congestion_control = bbr
关闭bbr
执行完上面的代码,就使用reboot重启VPS后才能关闭bbr,重启后再用下面的查看bbr状态代码,查看是否关闭了。
- sed -i '/net\.core\.default_qdisc=fq/d' /etc/sysctl.conf && sed -i '/net\.ipv4\.tcp_congestion_control=bbr/d' /etc/sysctl.conf
- sysctl -p
- reboot
查看bbr是否开启
执行下面命令,如果结果中有bbr,即证明你的内核已开启bbr。执行下面命令,看到有 tcp_bbr 模块,即说明bbr已启动
- sysctl net.ipv4.tcp_available_congestion_control
- lsmod | grep bbr
- # VPS提示
- root@bbr1:~# sysctl net.ipv4.tcp_available_congestion_control
- net.ipv4.tcp_available_congestion_control = bbr cubic reno
- # ================================================
- root@bbr1:~# lsmod | grep bbr
- tcp_bbr 20480 0
卸载BBR
BBR集成于内核中,所以卸载BBR=更换内核,教程:“Debian更换内核教程 —— 4.10.x(BBR) 降低内核版本为 支持锐速的内核”
裸 SS/锐速+SS/BBR+SS 速度对比
本人的测试环境是:晚上23:00点,联通运营商,美国渣渣VPS。各个地区和运营商都存在差别,我的测试 速度对比仅供参考。因为是半夜测试的,再加上用的美国垃圾小鸡,所以 裸SS的速度感人。
使用 锐速+SS 后,单线程下载测速,翻了十倍,Youtube 也能看 1080P流畅 了。
换成 BBR+SS 后,单线程又在 锐速+SS 的基础上翻了一倍,Youtube 速度有上升了一个档次 1440P 倒是勉强,1080P可以随便拖拉了。
虽然 Youtube 的数值不是很准,但是还是有点用的,数值太低同样也代表速度不行。
总其以上,锐速(ServerSpeed)的技术已经成熟、定型,加速效果还是不错的,但是不再更新和维护了。
而 TCP-BBR 属于新生的技术,处于开发初期,买没有完善成熟,未来的潜力相信还好更好。
所以总的来说:非折腾党,还是建议先使用锐速观望 TCP-BBR 一段时间,这是最稳妥的办法。
裸 SS
锐速+SS
BBR+SS
本文章安装步骤来自:https://github.com/iMeiji/shadowsocks_install/wiki/开启TCP-BBR拥塞控制算法
-------------
Debian更换内核教程 —— 4.10.x(BBR) 降低内核版本为 支持锐速的内核
前段时间BBR出世后,很多人都去尝鲜了,有的人觉得比锐速加速效果好,有的觉得不如锐速,总之加速效果不同因素影响都不同。而因为BBR是集成于内核中的一个功能,所以 卸载BBR=更换内核 ,但是很多人不知道怎么更换,一般都是直接重装系统,以回到支持安装锐速的内核版本,今天有人问我了,于是我就简单研究研究写个手动教程好,并不难。
测试环境
Debian 7 x64 系统,当前内核为 v4.10.1 (支持BBR的最新稳定版内核) 测试通过,Debian 8 暂时没测试(应该差不多的)。至于其他系统,步骤就完全不一样了,所以不做测试。
OpenVZ不支持更换内核,不支持 锐速和BBR,所以请不要尝试下面的步骤,否则后果自负!
更换步骤
准备工作
添加软件包源 并更新:
- echo -e "\ndeb http://ftp.debian.org/debian/ wheezy-backports main" >> /etc/apt/sources.list
- apt-get update
安装内核
查询可用内核列表:执行代码后可以看到很多内核版本,我们选择支持锐速的
- aptitude search linux-image | awk '{print $2}'
linux-image-3.2.0-4-amd64
内核,这个内核大部分Debian7 系统都是使用的这个,完美支持锐速和LotServer。锐速支持的内核看这里:传送门
安装内核:
- # VPS提示示例/64位 #
- # Debian 7 和 8 可能不一样,还有 64位和32位 内容也不一样。
- root@debian:~# aptitude search linux-image | awk '{print $2}'
- linux-image
- linux-image-2.6-amd64
- linux-image-3.16.0-0.bpo.4-amd64
- linux-image-3.16.0-0.bpo.4-amd64-dbg
- linux-image-3.2.0-4-amd64
- linux-image-3.2.0-4-amd64-dbg
- linux-image-3.2.0-4-rt-amd64
- linux-image-3.2.0-4-rt-amd64-dbg
- linux-image-4.10.1-041001-generic
- linux-image-amd64
- linux-image-amd64-dbg
- linux-image-rt-amd64
- # 示例 #
- apt-get -t wheezy-backports install linux-image-3.2.0-4-amd64
- # 示例 #
注意:安装内核中,会提示你是否继续Do you want to continue [Y/n]?
输入y
并回车继续。
- # VPS提示示例/64位 #
- # Debian 7 和 8 可能不一样,还有 64位和32位 内容也不一样。
- root@debian:~# apt-get -t wheezy-backports install linux-image-3.2.0-4-amd64
- Reading package lists... Done
- Building dependency tree
- Reading state information... Done
- The following extra packages will be installed:
- firmware-linux-free
- Suggested packages:
- linux-doc-3.2 debian-kernel-handbook
- The following NEW packages will be installed:
- firmware-linux-free linux-image-3.2.0-4-amd64
- 0 upgraded, 2 newly installed, 0 to remove and 85 not upgraded.
- Need to get 23.5 MB of archives.
- After this operation, 106 MB of additional disk space will be used.
- Do you want to continue [Y/n]? y
- Get:1 http://sfo1.mirrors.digitalocean.com/debian/ wheezy/main firmware-linux-free all 3.2 [20.7 kB]
- Get:2 http://security.debian.org/ wheezy/updates/main linux-image-3.2.0-4-amd64 amd64 3.2.86-1 [23.5 MB]
- Fetched 23.5 MB in 5s (4,546 kB/s)
- Preconfiguring packages ...
- Selecting previously unselected package linux-image-3.2.0-4-amd64.
- (Reading database ... 28911 files and directories currently installed.)
- Unpacking linux-image-3.2.0-4-amd64 (from .../linux-image-3.2.0-4-amd64_3.2.86-1_amd64.deb) ...
- Selecting previously unselected package firmware-linux-free.
- Unpacking firmware-linux-free (from .../firmware-linux-free_3.2_all.deb) ...
- Setting up linux-image-3.2.0-4-amd64 (3.2.86-1) ...
- Running depmod.
- Examining /etc/kernel/postinst.d.
- run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.2.0-4-amd64 /boot/vmlinuz-3.2.0-4-amd64
- update-initramfs: Generating /boot/initrd.img-3.2.0-4-amd64
- run-parts: executing /etc/kernel/postinst.d/zz-update-grub 3.2.0-4-amd64 /boot/vmlinuz-3.2.0-4-amd64
- Generating grub.cfg ...
- Found linux image: /boot/vmlinuz-4.10.1-041001-generic
- Found initrd image: /boot/initrd.img-4.10.1-041001-generic
- Found linux image: /boot/vmlinuz-3.2.0-4-amd64
- Found initrd image: /boot/initrd.img-3.2.0-4-amd64
- done
- Setting up firmware-linux-free (3.2) ...
- update-initramfs: deferring update (trigger activated)
- Processing triggers for initramfs-tools ...
- update-initramfs: Generating /boot/initrd.img-4.10.1-041001-generic
卸载内核
安装内核后,查看当前系统所有内核:
- dpkg -l|grep linux-image | awk '{print $2}'
卸载其余内核:
- # VPS提示示例/64位 #
- # Debian 7 和 8 可能不一样,还有 64位和32位 内容也不一样。
- root@debian:~# dpkg -l|grep linux-image | awk '{print $2}'
- linux-image-3.2.0-4-amd64
- linux-image-4.10.1-041001-generic
从上面示例中可以看到,除了刚才安装的
- apt-get purge 其余内核名称
linux-image-3.2.0-4-amd64
内核还有一个内核
linux-image-4.10.1-041001-generic
,我们需要卸载这个内核:注意:卸载内核中会提示你是否继续Do you want to continue [Y/n]?
输入y
并回车继续。
- # 示例 #
- apt-get purge linux-image-4.10.1-041001-generic
- # 示例 #
- # VPS提示示例/64位 #
- # Debian 7 和 8 可能不一样,还有 64位和32位 内容也不一样。
- root@debian:~# apt-get purge linux-image-4.10.1-041001-generic
- Reading package lists... Done
- Building dependency tree
- Reading state information... Done
- The following packages will be REMOVED:
- linux-image-4.10.1-041001-generic*
- 0 upgraded, 0 newly installed, 1 to remove and 68 not upgraded.
- After this operation, 220 MB disk space will be freed.
- Do you want to continue [Y/n]? y
- (Reading database ... 32396 files and directories currently installed.)
- Removing linux-image-4.10.1-041001-generic ...
- WARN: Proceeding with removing running kernel image.
- Examining /etc/kernel/postrm.d .
- run-parts: executing /etc/kernel/postrm.d/initramfs-tools 4.10.1-041001-generic /boot/vmlinuz-4.10.1-041001-generic
- update-initramfs: Deleting /boot/initrd.img-4.10.1-041001-generic
- run-parts: executing /etc/kernel/postrm.d/zz-update-grub 4.10.1-041001-generic /boot/vmlinuz-4.10.1-041001-generic
- Generating grub.cfg ...
- Found linux image: /boot/vmlinuz-3.2.0-4-amd64
- Found initrd image: /boot/initrd.img-3.2.0-4-amd64
- done
- The link /vmlinuz.old is a damaged link
- Removing symbolic link vmlinuz.old
- you may need to re-run your boot loader[grub]
- The link /initrd.img.old is a damaged link
- Removing symbolic link initrd.img.old
- you may need to re-run your boot loader[grub]
- Purging configuration files for linux-image-4.10.1-041001-generic ...
- Examining /etc/kernel/postrm.d .
- run-parts: executing /etc/kernel/postrm.d/initramfs-tools 4.10.1-041001-generic /boot/vmlinuz-4.10.1-041001-generic
- run-parts: executing /etc/kernel/postrm.d/zz-update-grub 4.10.1-041001-generic /boot/vmlinuz-4.10.1-041001-generic
结尾工作
清除上面添加的 软件包源:关闭 BBR:
- sed -i '/wheezy-backports/d' /etc/apt/sources.list
更新 grub 系统引导文件并重启VPS
- sed -i '/net\.core\.default_qdisc=fq/d' /etc/sysctl.conf && sed -i '/net\.ipv4\.tcp_congestion_control=bbr/d' /etc/sysctl.conf
- sysctl -p
- # 清除BBR启动代码并保存,执行并不会提示任何信息。
- update-grub
- # reboot是重启代码
- reboot
--------------------
- # VPS提示示例/64位 #
- # Debian 7 和 8 可能不一样,还有 64位和32位 内容也不一样。
- root@debian:~# update-grub
- Generating grub.cfg ...
- Found linux image: /boot/vmlinuz-3.2.0-4-amd64
- Found initrd image: /boot/initrd.img-3.2.0-4-amd64
- done
『原创』Debian/Ubuntu TCP拥塞控制技术 ——TCP-BBR 一键安装脚本
注意:TCP-BBR和锐速一样,不支持Openvz,查看本教程之前,请先确定你的VPS的虚拟化技术!注意:本教程涉及到VPS更换内核,所以如果步骤错误,或者VPS不兼容最新的内核,会导致无法开机等错误,请勿用于生产环境!!!!
BBR 简单介绍
BBR 是一个由谷歌社区开发的 TCP拥塞控制技术,目前处于开发初期,但是前景很棒,大家可以持续关注,同时BBR是集成与Linux最新版本的内核中的。具体什么是TCP拥塞控制技术,详细的我也不懂,我就用通俗一点的话解释一下,不一定准确,看一看理解一下就好了.
原始的TCP流量传输技术,流量管理很乱,我们把 TCP流量比喻成 公路上的汽车流量,而TCP传输隧道就是 公路,那么:
在原始的TCP流量传输中,一条十字路口公路,很多车流量,但是却没有红绿灯和交警,导致大家左挤右挤的堵车了,这就是没有合理的管理导致的。
而BBR和锐速等TCP流量控制技术,就是红绿灯+交警,他们就是在无人管理的十字路口,去合理指挥分配车流量,然后最大化的利用车流量,保证路面畅通.
系统要求
Debian / Ubuntu 14.04 +本脚本只在 Debian 7 / Debian 8 / Ubuntu 14.04 / Ubuntu 16.04 (均 x64位) 这几个系统中测试过脚本可以正常运行(Vultr)!
强烈推荐 Debian 7 x64,这个是我一直使用的系统,我的脚本在这个系统上面出错率最低。
至于为什么不支持 CentOS 等系统,主要是我不怎么用其他的系统,就不做支持了。
脚本版本
Ver: 1.0.11安装步骤
更换内核需要ROOT权限,所以如果你是普通用户 的话,需要ROOT账号权限,如果你是ROOT账号,那就忽略这个步骤:输入并回车后,会提示让你输入当前账号的密码,输入并回车后就可以继续下面的步骤了:
- sudo su
下载并运行脚本后,会自动检测并开始安装,首先会提示你输入要下载的内核版本,可以安装自定义版本的内核,也可以直接回车安装最新版本的内核(内核版本获取)!
- wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/bbr.sh && chmod +x bbr.sh && bash bbr.sh
注意:在Debian系统中,删除旧内核时,会提示你是否终止删除内核的行为(如下图),这个需要你选择
- 请输入 要下载安装的Linux内核版本(BBR) [ 格式: x.xx.xx ,例如: 4.10.12 ]
- [注意]内核版本列表请去这里获取:[ http://kernel.ubuntu.com/~kernel-ppa/mainline/ ]
- (默认回车,自动获取最新版本):4.10.10
<No>
(键盘方向键 选择,回车键 确认)。如果没有出错,内核更换完毕后,会提示是否立即重启VPS,直接回车或者输入
Y
。等待十几秒,VPS启动后,重新通过SSH连接VPS,进入
- 需要重启VPS后,才能开启BBR,是否现在重启 ? [Y/n] : y
- [注意] 重启VPS后,请重新运行脚本开启BBR: bash bbr.sh start
- [信息] VPS 重启中...
bbr.sh
脚本的目录,然后执行下面这个命令开启BBR。然后就会自动开启BBR。
- bash bbr.sh start
如果重启VPS后,无法连接,说明内核安装或与系统存在兼容性问题,无法正常启动,代表你的VPS当前系统无法使用BBR,请更换其他系统!
使用方法
- # 启动BBR,更换/升级内核并重启后,需要执行这个开启BBR!
- bash bbr.sh start
- # 关闭BBR
- bash bbr.sh stop
- # 查看BBR状态
- bash bbr.sh status
- # 升级BBR
- bash bbr.sh
- # 因为BBR是集成于内核中的,只是内核中的一部分,所以不一定要更新最新的内核,因为内核升级不一定是BBR升级。
注意:关闭BBR,需要重启VPS,所以脚本会提醒是否立即重启VPS。
卸载BBR
BBR集成于内核中,所以卸载BBR=更换内核.其他说明
注意:TCP-BBR必须是 2016-12-05 21:00 更新的 4.9.0-rc8 内核及以后的版本
才能开启,而锐速并不支持这个最新的内核版本,
所以TCP-BBR和锐速是不可能共存的。
更换内核后重启服务器无法启动 的问题
如果重启VPS后,无法连接,说明内核安装有问题 或 内核与系统存在兼容性问题,无法正常启动。这代表你的VPS当前系统不支持最新的内核版本,无法开启BBR,请更换其他系统尝试!
更新日志
2017年05月07日,版本 v1.0.11
1.新增 支持内核 4.11.x 后的版本—— 已知BUG:获取的版本号是 4.11 ,而安装后本地查到的版本号是 4.11.0 会无法匹配,提示不是最新版本,无视就好。
2017年04月25日,版本 v1.0.10
1.新增 安装内核时 可安装自定义内核版本(可升级/降级)2017年02月27日,版本 v1.0.9
1.新增 支持内核 4.1x.x 后的版本2017年01月27日,版本 v1.0.8
1.新增 自动检测最新内核版本功能,不需要每次内核一更新,脚本也要更新,自动检测代码来自泰迪的BBR脚本:https://teddysun.com/489.html
--------------------
CentOS/Debian/Ubuntu系统 TCP-BBR 一键安装脚本
本脚本适用环境
系统支持:CentOS 6+,Debian 7+,Ubuntu 12+虚拟技术:OpenVZ 以外的(KVM、Xen、VMware等)
内存要求:≥128M
日期 :2017 年 01 月 13 日
关于本脚本
- 本脚本已在 Vultr 上的 VPS 全部测试通过。
- 当脚本检测到 VPS 的虚拟方式为 OpenVZ 时,会提示错误,并自动退出安装。
- 某些服务商(如 Linode、DigitalOcean)可能需要首先将 VPS 配置为可自定义内核,然后 grub2 的配置才会生效。
- 脚本运行完重启发现开不了机的,打开 VPS 后台控制面板的 VNC, 开机卡在 grub 引导, 手动选择内核即可。
- 由于是使用最新版系统内核,最好请勿在生产环境安装,以免产生不可预测之后果。
使用方法
使用root用户登录,运行以下命令:安装完成后,脚本会提示需要重启 VPS,输入 y 并回车后重启。
- wget -N --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh && chmod +x bbr.sh && bash bbr.sh
重启完成后,进入 VPS,验证一下是否成功安装最新内核并开启 TCP BBR,输入以下命令:
- uname -r
- # 查看内核版本,含有 4.9.0 就表示 OK 了
- # ————————————
- sysctl net.ipv4.tcp_available_congestion_control
- # 返回值一般为:
- # net.ipv4.tcp_available_congestion_control = bbr cubic reno
- # ————————————
- sysctl net.ipv4.tcp_congestion_control
- # 返回值一般为:
- # net.ipv4.tcp_congestion_control = bbr
- # ————————————
- sysctl net.core.default_qdisc
- # 返回值一般为:
- # net.core.default_qdisc = fq
- # ————————————
- lsmod | grep bbr
- # 返回值有 tcp_bbr 模块即说明bbr已启动。
参考链接:
https://github.com/google/bbr/blob/master/Documentation/bbr-quick-start.mdhttp://elrepo.org/tiki/tiki-index.php
http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9/
from https://teddysun.com/489.html
---------------
开启TCP BBR拥塞控制算法
注意:不支持OpenVZ vps.BBR 目的是要尽量跑满带宽, 并且尽量不要有排队的情况, 效果并不比锐速差。
Linux kernel 4.9+ 已支持 tcp_bbr .
下面简单讲述基于KVM架构的VPS如何开启TCP BBR。
Debian 8 / Ubuntu 14
- 下载最新内核,最新内核查看这里
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10.9/linux-image-4.10.9-041009-generic_4.10.9-041009.201704080516_amd64.deb
- 安装内核
dpkg -i linux-image-4.*.deb
- 删除旧内核(可选)
dpkg -l|grep linux-image
apt-get purge 旧内核
- 更新 grub 系统引导文件并重启
update-grub
reboot
CentOS 6
- 下载更换内核
最新内核查看这里
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install kernel-ml -y
- 查看内核是否安装成功
rpm -qa | grep kernel
- 删除旧内核(可选)
rpm -ev 旧内核
- 更新 grub 系统引导文件并重启
sed -i 's:default=.*:default=0:g' /etc/grub.conf
reboot
开不了机的打开vps后台控制面板的vnc, 开机卡在 grub 引导, 只需要手动选择内核就可以了CentOS 7
- 下载更换内核
最新内核查看这里
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install kernel-ml -y
- 查看内核是否安装成功
rpm -qa | grep kernel
- 删除旧内核(可选)
rpm -ev 旧内核
- 更新 grub 系统引导文件并重启
egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \'
grub2-set-default 0 #default 0表示第一个内核设置为默认运行, 选择最新内核就对了
reboot
- 注意,某些服务商(如Digital Ocean)可能需要首先将VPS配置为可自定义内核,然后grub2的配置才会生效。
开启bbr
开机后uname -r
看看是不是内核4.9、4.10或4.11执行
lsmod | grep bbr
,如果结果中没有 tcp_bbr
的话就先执行modprobe tcp_bbr
echo "tcp_bbr" >> /etc/modules-load.d/modules.conf
执行echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
保存生效sysctl -p
执行
sysctl net.ipv4.tcp_available_congestion_control
sysctl net.ipv4.tcp_congestion_control
如果结果都有bbr
, 则证明你的内核已开启bbr.执行
lsmod | grep bbr
, 看到有 tcp_bbr 模块即说明 bbr 已启动 .from https://github.com/iMeiji/shadowsocks_install/wiki/%E5%BC%80%E5%90%AF-TCP-BBR-%E6%8B%A5%E5%A1%9E%E6%8E%A7%E5%88%B6%E7%AE%97%E6%B3%95
开源地址
https://github.com/google/bbr注意这不是Google官方的产品。
使用必读
不支持OpenVZ虚拟!安装前需要备份重要数据,安装完可能会导致系统无法启动!
系统无法修改请尝试修改引导!或者重装系统!
安装方式
Debian8/Ubuntu14
- 下载最新内核,最新内核查看这里
- 安装内核
- 删除其余内核
- 更新 grub 系统引导文件并重启
- 开启bbr
sysctl -p
执行
sysctl net.ipv4.tcp_available_congestion_control
如果结果中有
bbr
, 则证明你的内核已开启bbr执行
lsmod | grep bbr
, 看到有 tcp_bbr 模块即说明bbr已启动。CentOS7
评论有人已经成功。1)RMP安装(推荐)
然后保存之后yum update -y,就会更新到elrepo正式版4.9内核。
开启bbr
sysctl -p
然后修改系统启动引导文件:
或者执行:
sysctl -p
执行
sysctl net.ipv4.tcp_available_congestion_control
如果结果中有
bbr
, 则证明你的内核已开启bbr执行
lsmod | grep bbr
, 看到有 tcp_bbr 模块即说明bbr已启动。CentOS6
1)一键安装(推荐)
安装脚本(开源地址:https://github.com/52fancy/GooGle-BBR)
验证是否安装成功
如果失败,请尝试RMP安装。
2)RMP安装
RMP 地址:https://elrepo.org/linux/kernel
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
yum install -y https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-ml-4.9.0-1.el7.elrepo.x86_64.rpm
安装完成,修改启动引导:
nano /etc/grub.conf
修改成 default=0
保存然后重启
据人反馈:先把/etc/sysctl.conf 文件中 关于 net.ipv4.tcp_congestion_control的配置注释掉。
sysctl -p
执行
sysctl net.ipv4.tcp_congestion_control
如果结果中有
bbr
, 则证明你的内核已开启bbr.执行
lsmod | grep bbr
, 看到有 tcp_bbr 模块即说明bbr已启动。-------------
OpenVZ vps下,部署UML,启用BBR,为你单边加速
本人在 Debian 8 64 位下的 OpenVZ 测试成功( 2.6.32-042stab116.2 内核)。
有问题的朋友请尽量移步论坛: bbs.91yun.org ,在那边你可以得到更多网友和作者的回复!
请在部署 UML 前仔细阅读主机商的 Terms of Service 和 Acceptable Usage Policy ,以防被封禁主机,由此带来的损失由读者本人承担。 树立国人良好形象,切勿随意争议。前言
首先要提醒一下 如果本身自己的 OpenVZ 太低配的話,那麼 user-mode linux 跑起來會很艱難:最少 512MB RAM 以上才考慮吧, ( 91yun.org小编注:评论里有访客反馈在 128M 的 NAT 上也跑起来了) 建議配置是 1G RAM 。因為現時 user-mode linux 不支援多核心處理,所以 CPU 數量一個就夠了user-mode linux 相等放在 VPS 上開一台小小的 virtual machine ,不過不建議用這台 virtual machine 放一些重要的資料,畢竟 user-mode linux 只是設計用來測試新 kernel 的功能,論穩定度還是沒有正常系統好
先去 control panel 打開 TUN/TAP 的功能,如果是 SolusVM 的話通常 setting 就可以看到 TUN/TAP 的設定
前置安裝
設置 packet forwarding
先留下 port 22 給自己作為 ssh 連線之用.下載預先設定好的内核,然后解壓縮:
因為 rootfs 一開始只有 300MB 放了系統就幾乎沒容量,先擴大 image 的容量吧:
打開 user-mode linux
打開後先等一下,等到出現以下的內容:
打開新的 terminal 開新的 ssh 到機器.
login 是 root
而密碼是 91yun.org
在登入之後記得要改密碼
在進入之後會發現 …. 這個系統真的什麼都沒有,連 python 都沒有!這樣連 SSR 也跑不起來呀!
不過可以先跑一下指令
按 ctrl-a d
就可以離開了.
要再進去的話就用
screen -r
這樣就會例出所有 Detached 的 screen
例如 :
tips:
1. 暫時 user-mode linux 並沒有多核心支援,所以就算 host 有多於一個核心也不會對 user-mode linux 有影響2. 利用./vmlinux ubda=rootfs eth0=tuntap,tap0 mem=256m &可以把 user-mode linux 放到背景.
3. 一台 VZ 可以開多台 user-mode linux ,不過如果本身機器不夠強,就不要亂試了。
4. 可以為 user-mode linux 安一個 openssh ,那麼就可以由 Host 上傳文件到 user-mode linux 了, user-mode linux 也可以連回去host拿文件.
-------------
OpenVZ VPS安装User-mode Linux实现Google BBR加速
前言为啥要装 BBR?据说适合国情。主要目的还是练习 User-mode Linux (UML)。
安装 UML
先装工具链:
sudo apt-get install build-essential libncurses5-dev
1
sudo apt-get install build-essential libncurses5-dev
因为需要 BBR, 先弄到超前版内核树 net-next,还有对应 UML 的内核配置
cd ~
git clone git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git
cd net-next
make defconfig ARCH=um
也可以 export ARCH=um,方便一些。
配置内核使用 BBR:
make menuconfig ARCH=um
进入配置菜单,进入 Networking support → Networking options → TCP: advanced congestion control 页面,移到 BBR TCP,按两下空格直到变成 <*> BBR TCP。下方 Default TCP congestion control 回车选 BBR。一路 Exit,保存。
make ARCH=um vmlinux -j2 编译。
在 UML 中安装 Arch Linux
基本与在 Ubuntu 下安装新 Arch 一样。
先装一个只读的 rootfs
因为 UML 对 hostfs 的限制,hostfs 一定是只读的,而 OpenVZ 也没有 loop 设备,无法直接挂载磁盘镜像,故我们要先装个只读的 rootfs 来启动 UML, 在 UML 中挂镜像。(Ref:PeterCxy 的 Blog)
# 先下载 Arch 最新的 Bootstrap 包:
cd ~
wget http://mirror.rackspace.com/archlinux/iso/latest/archlinux-bootstrap-2016.12.01-x86_64.tar.gz
tar xzf archlinux-bootstrap-2016.12.01-x86_64.tar.gz
mv root.x86_64 root
sudo nano root/etc/resolv.conf
# 加上一行 nameserver 8.8.8.8,保存
sudo mount --rbind /proc root/proc
sudo mount --rbind /sys root/sys
sudo mount --rbind /dev root/dev
sudo mount -t tmpfs tmpfs root/tmp
sudo mount --rbind /root root/root
sudo nano root/etc/pacman.d/mirrorlist
# 搜索离你最近的国家镜像,去掉对应的注释
# 进入 chroot
sudo root/bin/arch-chroot root /bin/bash
# 此时已经进入 chroot 环境
pacman-key --init
pacman-key --populate archlinux
# 安装基础系统
pacman -Sy base
# 改控制台,也可以不改,通过 screen 连接 pts
systemctl enable getty@tty0
systemctl disable getty@tty1
# 退出 chroot
exit
# 解除 rbind
sudo umount root/{dev,proc,sys,tmp}
# 先下载 Arch 最新的 Bootstrap 包:
cd ~
wget http://mirror.rackspace.com/archlinux/iso/latest/archlinux-bootstrap-2016.12.01-x86_64.tar.gz
tar xzf archlinux-bootstrap-2016.12.01-x86_64.tar.gz
mv root.x86_64 root
sudo nano root/etc/resolv.conf
# 加上一行 nameserver 8.8.8.8,保存
sudo mount --rbind /proc root/proc
sudo mount --rbind /sys root/sys
sudo mount --rbind /dev root/dev
sudo mount -t tmpfs tmpfs root/tmp
sudo mount --rbind /root root/root
sudo nano root/etc/pacman.d/mirrorlist
# 搜索离你最近的国家镜像,去掉对应的注释
# 进入 chroot
sudo root/bin/arch-chroot root /bin/bash
# 此时已经进入 chroot 环境
pacman-key --init
pacman-key --populate archlinux
# 安装基础系统
pacman -Sy base
# 改控制台,也可以不改,通过 screen 连接 pts
systemctl enable getty@tty0
systemctl disable getty@tty1
# 退出 chroot
exit
# 解除 rbind
sudo umount root/{dev,proc,sys,tmp}
此时在 root 文件夹下就有了完整的 rootfs,可以启动 UML 了。
设置网络
首先在主机商的面板(SolusVM)打开 TUN/TAP 功能。一般能做 VPN(PPTP、L2TP等) 的 VPS 都有这个选项。
之后配置 TAP 设备:
sudo ip tuntap add tap0 mode tap
sudo ip addr add 10.0.0.1/24 dev tap0
sudo ip route add default via 10.0.0.1 dev venet0:0
sudo ip link set tap0 up
sudo iptables -P FORWARD ACCEPT
sudo iptables -t nat -A POSTROUTING -o venet0:0 -j MASQUERADE
安装 Arch 到镜像
cd ~/net-next
dd if=/dev/zero of=rootfs.img bs=1MB count=6000 # 创建一个 6GB 的镜像
mount -o remount,size=2G /dev/shm # 改一下 tmpfs 大小,防止爆内存
# 启动到 UML
sudo ./vmlinux root=/dev/root rootfstype=hostfs hostfs=./root ubd0=rootfs.img eth0=tuntap,tap0 mem=256m
cd ~/net-next
dd if=/dev/zero of=rootfs.img bs=1MB count=6000 # 创建一个 6GB 的镜像
mount -o remount,size=2G /dev/shm # 改一下 tmpfs 大小,防止爆内存
mem 是内存大小,此处取 256M(可以根据你的内存情况修改)。
此时已经有 UML 的 shell,可以开始安装系统了。用户名 root,没有密码。
ip link set eth0 up
ip addr add 10.0.0.2/24 dev eth0
ip route add default via 10.0.0.1 dev eth0
# 制作文件系统
mkfs.ext4 /dev/ubda
mount /dev/ubda /mnt
mkdir -p /mnt/var/lib/pacman
pacman -Sy base -r /mnt
pacman -Sy havaged -r /mnt # entropy 生成器
mount --rbind /proc /mnt/proc
mount --rbind /sys /mnt/sys
mount --rbind /dev /mnt/dev
mount -t tmpfs tmpfs /mnt/tmp
mount --rbind /root /mnt/root
chroot /mnt /bin/bash
nano /etc/pacman.d/mirrorlist # mirrorlist
ip link set eth0 up
ip addr add 10.0.0.2/24 dev eth0
ip route add default via 10.0.0.1 dev eth0
# 制作文件系统
mkfs.ext4 /dev/ubda
mount /dev/ubda /mnt
mkdir -p /mnt/var/lib/pacman
pacman -Sy base -r /mnt
pacman -Sy havaged -r /mnt # entropy 生成器
mount --rbind /proc /mnt/proc
mount --rbind /sys /mnt/sys
mount --rbind /dev /mnt/dev
mount -t tmpfs tmpfs /mnt/tmp
mount --rbind /root /mnt/root
chroot /mnt /bin/bash
nano /etc/pacman.d/mirrorlist # mirrorlist
编辑网络配置:
nano /etc/systemd/network/50-static.network
1
nano /etc/systemd/network/50-static.network
加入
[Match]
Name=eth0
[Network]
Address=10.0.0.2/24
Gateway=10.0.0.1
同上,enable 各项服务,配置 时区、locale 等:
sudo nano root/etc/resolv.conf
# 加上一行 nameserver 8.8.8.8,保存
systemctl enable systemd-networkd
systemctl enable getty@tty0
systemctl disable getty@tty1
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
sed -i 's/#en_US.UTF/en_US.UTF/' /etc/locale.gen
locale-gen
echo 'LANG=en_US.UTF-8' > /etc/locale.conf
echo 'umlarch' > /etc/hostname # 配置主机名
nano /etc/hosts # 加入 127.0.1.1 umlarch.localdomain umlarch
mkinitcpio -p linux # 应该不需要,以防万一
genfstab -U /mnt >> /mnt/etc/fstab # fstab
shutdown -h 0 # 关闭 UML
sudo nano root/etc/resolv.conf
# 加上一行 nameserver 8.8.8.8,保存
systemctl enable systemd-networkd
systemctl enable getty@tty0
systemctl disable getty@tty1
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
sed -i 's/#en_US.UTF/en_US.UTF/' /etc/locale.gen
locale-gen
echo 'LANG=en_US.UTF-8' > /etc/locale.conf
echo 'umlarch' > /etc/hostname # 配置主机名
nano /etc/hosts # 加入 127.0.1.1 umlarch.localdomain umlarch
mkinitcpio -p linux # 应该不需要,以防万一
genfstab -U /mnt >> /mnt/etc/fstab # fstab
shutdown -h 0 # 关闭 UML
现在配置已经基本完成,改变一下命令行,从新建的镜像启动:
sudo ./vmlinux root=/dev/ubda ubd0=rootfs.img eth0=tuntap,tap0 mem=256m
pacman-key --init
pacman-key --populate archlinux
搞定。
配置端口转发
先给自己留下 SSH 端口~
sudo iptables -t nat -A PREROUTING -p tcp --dport 22 -j RETURN
然后其他的端口全转发走啦:
sudo iptables -t nat -A PREROUTING -i venet0 -j DNAT --to-destination 10.0.0.2
安装 shadowsocks-go
做了 AUR 源,见 https://github.com/ProfFan/shadowsocks-go 。
Clone 后 makepkg -si 即可。
Updates
无法进入 chroot
关于unshare
问题,参见 here 。关于 Arch 的
chroot
环境配置,请参考官方文档。配置中无此选项
BBR 已经进入 4.9 内核树,直接 clone 官方的 master 分支(git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git)即可。Reference
https://vincent.bernat.im/en/blog/2011-uml-network-lab.htmlhttp://sylphy.hatenablog.jp/entry/2016/06/23/223449
https://github.com/PeterCxy/Blog/blob/master/_posts/tech/2015-12-12-user-mode-linux-in-openvz.md
https://wiki.archlinux.org/index.php/Installation_guide#Installation
https://wiki.archlinux.org/index.php/Pacman/Package_signing#Initializing_the_keyring
本文转自: https://blog.amayume.net/openvz-vps-an-zhuang-user-mode-linux-yi-shi-xian-bbr-yong-sai-kong-zhi/
---------------
OpenVZ下开启BBR拥塞控制
1
2
3
4
| dd if = /dev/zero of=alpine_mini bs=1M count=150 mkfs.ext4 -L ROOT alpine_mini mkdir alpine mount -o loop alpine_mini alpine |
1
2
3
4
5
6
7
8
9
10
11
| REL= "v3.5" REL=${REL:-edge} MIRROR=${MIRROR:-http: //nl .alpinelinux.org /alpine } REPO=$MIRROR/$REL /main ARCH=$( uname -m) ROOTFS=${ROOTFS:-alpine} APKV=`curl -s $REPO/$ARCH /APKINDEX . tar .gz | tar -Oxz | grep -a '^P:apk-tools-static$' -A1 | tail -n1 | cut -d: -f2` mkdir tmp curl -s $REPO/$ARCH /apk-tools-static- ${APKV}.apk | tar -xz -C tmp sbin /apk .static tmp /sbin/apk .static --repository $REPO --update-cache --allow-untrusted --root $ROOTFS --initdb add alpine-base printf '%s\n' $REPO > $ROOTFS /etc/apk/repositories |
1
2
3
4
5
| # # /etc/fstab: static file system information # # <file system> <dir> <type> <options> <dump> <pass> LABEL=ROOT / auto defaults 1 1 |
1
2
3
| mkdir alpine /etc/shadowsocks-go cp /usr/local/bin/ss-goserver alpine /usr/local/bin cp /etc/shadowsocks-go/config .json alpine /etc/shadowsocks-go |
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
| # max open files fs. file -max = 51200 # max read buffer net.core.rmem_max = 67108864 # max write buffer net.core.wmem_max = 67108864 # default read buffer net.core.rmem_default = 65536 # default write buffer net.core.wmem_default = 65536 # max processor input queue net.core.netdev_max_backlog = 4096 # max backlog net.core.somaxconn = 4096 # resist SYN flood attacks net.ipv4.tcp_syncookies = 1 # reuse timewait sockets when safe net.ipv4.tcp_tw_reuse = 1 # turn off fast timewait sockets recycling net.ipv4.tcp_tw_recycle = 0 # short FIN timeout net.ipv4.tcp_fin_timeout = 30 # short keepalive time net.ipv4.tcp_keepalive_time = 1200 # outbound port range net.ipv4.ip_local_port_range = 10000 65000 # max SYN backlog net.ipv4.tcp_max_syn_backlog = 4096 # max timewait sockets held by system simultaneously net.ipv4.tcp_max_tw_buckets = 5000 # turn on TCP Fast Open on both client and server side net.ipv4.tcp_fastopen = 3 # TCP receive buffer net.ipv4.tcp_rmem = 4096 87380 67108864 # TCP write buffer net.ipv4.tcp_wmem = 4096 65536 67108864 # turn on path MTU discovery net.ipv4.tcp_mtu_probing = 1 #BBR net.core.default_qdisc = fq net.ipv4.tcp_congestion_control = bbr |
1
| umount . /alpine |
1
| apt-get install build-essential libncurses5-dev bc screen |
1
2
3
4
5
6
| wget https: //cdn .kernel.org /pub/linux/kernel/v4 .x /linux-4 .10.1. tar .xz tar xf linux-4.10.1. tar .xz rm linux-4.10.1. tar .xz cd linux-4.10.1 make defconfig ARCH=um make menuconfig ARCH=um |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| UML-specific options ==> [*] Force a static link Device Drivers ==> [*] Network device support ==> <*> Universal TUN /TAP device driver support [*] Networking support ==> Networking options ==> [*] IP: TCP syncookie support ==> [*] TCP: advanced congestion control ==> <*> BBR TCP ==> <*> Default TCP congestion control (BBR) ==> [*] QoS and /or fair queueing ==> <*> Quick Fair Queueing scheduler (QFQ) ==> <*> Controlled Delay AQM (CODEL) ==> <*> Fair Queue Controlled Delay AQM (FQ_CODEL) ==> <*> Fair Queue |
1
2
| make ARCH=um vmlinux strip -s vmlinux |
1
2
3
4
5
6
7
| D_I=`ip route show 0 /0 | sort -k 7 | head -n 1 | sed -n 's/^default.* dev \([^ ]*\).*/\1/p' ` sudo ip tuntap add tap0 mode tap sudo ip addr add 10.0.0.1 /24 dev tap0 sudo ip link set tap0 up sudo iptables -P FORWARD ACCEPT sudo iptables -t nat -A POSTROUTING -o ${D_I} -j MASQUERADE sudo iptables -t nat -A PREROUTING -i ${D_I} -p tcp --dport 9000:19000 -j DNAT --to-destination 10.0.0.2 |
1
| sudo . /vmlinux ubda=alpine_mini rw eth0=tuntap,tap0 mem=64m |
1
| screen /dev/pts/X |
1
| rc-update add local default |
1
2
| dd if = /dev/zero of= /swapfile bs=1M count=64 chmod 600 /swapfile |
1
2
3
4
5
6
7
8
9
| #!/bin/sh # swap on /sbin/mkswap /swapfile /sbin/swapon /swapfile # fix net sleep 3 /etc/init .d /networking restart # ss /usr/bin/nohup /usr/local/bin/ss-goserver -c /etc/shadowsocks-go/config .json > /dev/null 2>&1 & |
1
| chmod +x /etc/local .d /my .start |
1
| apk add curl |
rc-update add networking
不过还是得加
/etc/init.d/networking restart
-----------
更换内核启用 BBR
替换内核
$ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10.3/linux-image-4.10.3-041003-generic4.10.3-041003.201703142331amd64.deb
$ dpkg -i linux-image-*.deb
$ dpkg -l | grep linux-image $ apt purge linux-image-4.4.0-66-generic
$ update-grub $ reboot
启用 tcp_bbr
$ echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf $ echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf $ sysctl -p
$ sysctl net.ipv4.tcp_available_congestion_control $ sysctl net.ipv4.tcp_congestion_control $ lsmod | grep bbr
tcp_bbr
字样则表示 BBR 已经工作。Google BBR是一个TCP加速优化工具,类似于锐速,可用于优化 TCP 连接。最近一下就火起来了,说明还是有牛逼的地方,咱也别落后,用起来。
GitHub 地址为:https://github.com/google/bbr
仔细看了看,GitHub 主页上有明确的说明“This is not an official Google product.” 说明这其实不是 Google 的官方项目,但是是在 Google 的 GitHub 上,比较奇怪。
为了启用 BBR,如果是 KVM 或者 XEN 架构的 VPS 可以直接更换内核,Kernel 4.9 及以后已经合并了 BBR 的代码。
由于 OpenVZ 不能更换内核,所以只能用其他方式,比如 lkl 或者 uml,可以使用我写的一键安装脚本:
更换内核属于危险操作,请不要用于生产环境,可能会造成无法开机,切记!
至于加速效果,有人反馈比锐速好,有人反馈比锐速弱。我测试后感觉效果还是不错的,由于是 Kernel 官方支持,稳定性绝对有保障。
安装 BBR
1.一键安装脚本
网上有 BBR 的一键安装脚本,来自 @秋水逸冰:
https://teddysun.com/489.html
系统支持:CentOS 6+,Debian 7+,Ubuntu 12+
1 2 3 |
wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh chmod +x bbr.sh ./bbr.sh |
2.手动安装
Ubuntu x64,可以直接到 Ubuntu 的 ppa 仓库里下载:http://kernel.ubuntu.com/~kernel-ppa/mainline/
网页拉到最后,看最新的内核,当前最新的稳定版是 v4.10.13:http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10.13/
下载内核文件:
1 |
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10.13/linux-image-4.10.13-041013-generic_4.10.13-041013.201704290147_amd64.deb |
32位下载:
1 |
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10.13/linux-image-4.10.13-041013-generic_4.10.13-041013.201704290147_i386.deb |
其他内核版本请去上面的链接寻找。
下载完成之后可以开始安装了:
1 |
sudo dpkg -i linux-image-4.10*.deb |
安装完成之后可以删除多余的内核:
1 |
dpkg -l | grep linux-image | awk '{print $2}' | grep -v 'linux-image-4.10.13-041013' | sudo xargs dpkg --purge |
然后更新一下 grub:
1 2 3 4 5 |
# sudo update-grub Generating grub configuration file ... Found linux image: /boot/vmlinuz-4.10.13-041013-generic Found initrd image: /boot/initrd.img-4.10.13-041013-generic done |
请确保至少存在一个内核,要不然会无法启动!!!
重启 vps:
1 |
sudo reboot |
重启之后,查看一下当前的内核:
1 2 |
# uname -r 4.10.13-041013-generic |
已经是 4.10 了,现在可以启用 BBR 了:
1 2 |
sudo bash -c 'echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf' sudo bash -c 'echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf' |
1 |
sysctl -p |
使配置生效。
然后可以检查一下:
1 2 |
# sysctl net.ipv4.tcp_available_congestion_control net.ipv4.tcp_available_congestion_control = bbr cubic reno |
1 2 |
# lsmod | grep bbr tcp_bbr 20480 14 |
结果里边已经有 BBR 了,说明启用成功。没成功的话,再重启一下 VPS。
Debian 的手动安装方法可以看这里:https://moonagic.com/try-bbr/
from http://web.archive.org/web/20211207082401/https://blog.kuoruan.com/115.html
-------
https://github.com/liulilittle/Multiple-bbr-implementations