为 OpenVZ 虚拟化的 VPS 开启 BBR 加速

鸟枪换大炮

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
2
wget -O /usr/bin/rinetd-bbr https://github.com/linhua55/lkl_study/releases/download/v1.2/rinetd_bbr_powered
chmod +x /usr/bin/rinetd-bbr

创建配置文件

1
vim /etc/rinetd-bbr.conf
1
2
# bindaddress bindport connectaddress connectport
0.0.0.0 port 0.0.0.0 port

将 port 改为自己的 ss 端口,两个 address 不用动。

记录网卡

1
2
3
4
5
6
7
8
9
10
# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: venet0: <BROADCAST,POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
link/void
inet 127.0.0.1/32 scope host venet0
inet x.x.x.x/32 brd x.x.x.x scope global venet0:0

记录包含自己公网 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
2
yum install supervisor
vim /etc/supervisord.d/rinetd-bbr.ini

rinetd-bbr.ini:

1
2
3
4
5
6
7
8
[program:rinetd-bbr]
command=/usr/bin/rinetd-bbr -f -c /etc/rinetd-bbr.conf raw venet0:0
autostart=true
autorestart=true
startsecs=30
startretries=3
stdout_logfile=/opt/rinetd-bbr.log
stdout_logfile_maxbytes=20MB

注意替换 venet0:0

启动:

1
2
systemctl start supervisord
systemctl enable supervisord

Systemd

创建一个 systemd service,让 systemd 替我们管理。

1
vim /usr/lib/systemd/system/rinetd-bbr.service
1
2
3
4
5
6
7
8
9
[Unit]
Description=Rinetd BBR Accelerate Service

[Service]
Type=simple
ExecStart=/usr/bin/rinetd-bbr -f -c /etc/rinetd-bbr.conf raw venet0:0

[Install]
WantedBy=multi-user.target

注意将 venet0:0 替换成自己的接口地址。

启动:

1
2
3
systemctl daemon-reload
systemctl start rinetd-bbr
systemctl enable rinetd-bbr

测试

我的两个 $5/年 的 OpenVZ 虚拟化的 VPS 在开启 BBR 加速之后,通过 YouTube 测速均有了 10 倍有余的网速提升,可谓“鸟枪换大炮”。

可能出现的问题

Firewalld

rinetd-bbr 需要设置 iptables 的 raw 表,如果 Firewalld 在运行可能会导致设置失败。请关闭 Firewalld。通过:

1
iptables -t raw -L

查询是否设置成功,如果设置成功应该有如下输出:

1
2
3
4
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anyware anyware tcp dpt:你的port /* LKL_RAW */
DROP tcp -- anyware anyware tcp dpt:你的port /* LKL_RAW */

不支持 Systemd

某些系统不支持 Systemd,比如 CentOS 6 以及 Debian、Ubuntu 等的低版本。可以使用 Supervisor,注意需要从 pip 安装,从源里安装的 Supervisor 可能版本太低,需要调整的配置很多,从 pip 中安装的 Supervisor 可以直接运行

1
echo_supervisord_conf > /etc/supervisord.conf

生成默认配置文件。其他配置请参考其他博客。

参考链接

-------------本文结束感谢阅读-------------
  • 本文标题:为 OpenVZ 虚拟化的 VPS 开启 BBR 加速
  • 本文作者:xlui
  • 发布时间:2018年11月30日 - 17:11
  • 最后更新:2019年08月11日 - 12:08
  • 本文链接: https://xlui.me/t/openvz-bbr/
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明出处!