鸟枪换大炮
BBR 是 Google 开源的一款拥塞控制算法(congestion control algorithm),将其应用于 VPS 时可以极大地加快我们的网络传输速度。当然,目前国内应用最广泛的就是给酸酸
提速。从 Linux 内核版本 4.9 开始,该算法已内置其中。
所以如果我们想使用 Linux 内置的 BBR 进行加速,首先需要内核版本在 4.9 以上。但是因为 OpenVZ 虚拟化的 Linux 主机并非独立的,所以也就不能更换内核,无法用上 BBR 加速。
OpenVZ 是操作系统级别的虚拟化技术,即运行在 Linux 系统上,在底层系统上运行一层应用,通过虚拟化技术将一个服务器安装成多个操作系统实例,这样每个实例就是一个 VPS。这样做的好处是易于理解和低权重开销,并且应用无需通过虚拟指令即可直接运行在 CPU 上,应用拥有更好的性能。
KVM 相对于 OpenVZ 是完全虚拟的,各个 VPS 实例之间不共用宿主机的内核,各自独立。OpenVZ 不超售情况下表现优于 KVM,但是 OpenVZ 一般超售十分严重,相对价格也比较便宜。
但是 BBR 只是一款加密算法,为什么受限于内核我们就无法使用呢?所以神通广大的网友就各显手段,其中以 @linhua 提供的解决方案最为简单有效。他直接将 BBR 内置到了 Rinetd 中,利用 Rinetd 重定向的功能配合 BBR 加速,从而使 OpenVZ 架构的 VPS 也可以用上 BBR 加速。
安装
下载脚本并添加运行权限
1 | wget -O /usr/bin/rinetd-bbr https://github.com/linhua55/lkl_study/releases/download/v1.2/rinetd_bbr_powered |
创建配置文件
1 | vim /etc/rinetd-bbr.conf |
1 | # bindaddress bindport connectaddress connectport |
将 port 改为自己的 ss 端口,两个 address 不用动。
记录网卡
1 | # ip addr |
记录包含自己公网 ip 地址一行最后的网卡地址,比如上面的输出中 x.x.x.x
是我的 ip,那么相应的接口名称就是 venet0:0
。
启动
有多种方式来启动。
直接命令行运行
1 | /usr/bin/rinetd-bbr -f -c /etc/rinetd-bbr.conf raw venet0:0 & |
注意最后面加了一个 &
,为了让命令在后台运行。这种方式如果服务器重启就必须自己手动再运行一遍,不推荐。
Supervisor
安装 Supervisor:
1 | yum install supervisor |
rinetd-bbr.ini
:
1 | [program:rinetd-bbr] |
注意替换 venet0:0
。
启动:
1 | systemctl start supervisord |
Systemd
创建一个 systemd service,让 systemd 替我们管理。
1 | vim /usr/lib/systemd/system/rinetd-bbr.service |
1 | [Unit] |
注意将 venet0:0
替换成自己的接口地址。
启动:
1 | systemctl daemon-reload |
测试
我的两个 $5/年 的 OpenVZ 虚拟化的 VPS 在开启 BBR 加速之后,通过 YouTube 测速均有了 10 倍有余的网速提升,可谓“鸟枪换大炮”。
可能出现的问题
Firewalld
rinetd-bbr
需要设置 iptables 的 raw
表,如果 Firewalld 在运行可能会导致设置失败。请关闭 Firewalld。通过:
1 | iptables -t raw -L |
查询是否设置成功,如果设置成功应该有如下输出:
1 | Chain PREROUTING (policy ACCEPT) |
不支持 Systemd
某些系统不支持 Systemd,比如 CentOS 6 以及 Debian、Ubuntu 等的低版本。可以使用 Supervisor,注意需要从 pip 安装,从源里安装的 Supervisor 可能版本太低,需要调整的配置很多,从 pip 中安装的 Supervisor 可以直接运行
1 | echo_supervisord_conf > /etc/supervisord.conf |
生成默认配置文件。其他配置请参考其他博客。