Skip to content

Instantly share code, notes, and snippets.

@simonid
Last active May 14, 2024 16:44
Show Gist options
  • Save simonid/4a444f32930a4763732e3c278e53a479 to your computer and use it in GitHub Desktop.
Save simonid/4a444f32930a4763732e3c278e53a479 to your computer and use it in GitHub Desktop.
OPENVZ使用加速插件

OpenVZ使用加速插件

注意,有些双倍发包的加速插件是不符合IDC的规定的,如果过度使用可能会被封

补充说明:OVZ都会有超售的情况,实际体验上还是远不如KVM,所以会出现装了插件,但是提速不明显的情况

OpenVZ使用魔改BBR

openvz使用魔改的BBR大致有2个版本:UML、LKL
它们都要求升级内核(最新版本的Linux内核(4.9-rc8)内部集成了BBR)

介绍一个一键插件,来自:
3款BBR+BBR魔改安装脚本+教程

要求

系统支持:CentOS 6+,Debian 7+,Ubuntu 12+
虚拟技术:OpenVZ 以外的,比如 KVM、Xen、VMware 等
内存要求:≥128M
注意: 脚本运行完重启发现开不了机的,打开 VPS 后台控制面板的 VNC, 开机卡在 grub 引导, 手动选择内核即可。

下载并运行

wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh
chmod +x bbr.sh
./bbr.sh

重启后查看内核:

uname -r

检查是否开启:

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已启动

上述方法本人使用暂时无效,内核升级不一定适用于所有OVZ的机器

LKL版本

不仅是ovz可用,其他虚拟化方式也是可以用的(有一台vmware原本是用升级内核的方法来装bbr,但是后来安装了多个版本的内核都出现了kernel-panic,使用这个解决) 补充说明:升级内核的方法应该谨慎考虑,一旦出现kernel-panic就无法开机,只能重建了

本人使用的是这个脚本
注意,在使用前要在VPS的控制面板把TUN/TAP功能打开做NAT表(部分OVZ没有这项功能)

wget --no-check-certificate https://github.com/91yun/uml/raw/master/lkl/install.sh && bash install.sh

检查:
运行top,如果有haproxy就成功了

ping 10.0.0.2

能通说明成功

如果修改转发端口:

修改 /root/lkl/run.sh ,查找 9000-9999 ,改成你想要的端口段
修改 /root/lkl/haproxy.cfg 查找 9000-9999 ,改成你想要的端口段
重启 vp

其他OVZ可用加速插件

其他可用的加速插件有kcptun(需要客户端支持)、finalspeed(需要客户端支持)、netspeed。但是这些插件都是双倍发包的,以为流量翻倍,且容易被封。如果不是丢包严重的情况下不建议使用


还有一个锐速魔改版,实现原理是升级内核

OVZ安装BBR的另外一个方法

这个方法是网友提供,详情参考:
OpenVZ 平台 Google BBR 加速 TCP 之 Rinetd 方式

这里转发原文:

简介

Rinetd 这种方式其实两三个月前就已经有了,是 v2ex 网友 @linhua 的成果,他直接将 BBR 内置到了 Rinetd 里边,比较方便的就能配置出来。也就是由于配置比较简单,我本来没想再写这个的一键配置脚本(@linhua 实现了一个 https://github.com/linhua55/lkl_study),但由于很多朋友使用 haproxy 的方式失败了,网上的脚本也只支持 Ubuntu 16 和 CentOS 7 以上的系统,我还是决定再写一个通用的 rinetd-bbr 一键脚本。
ps:正在写,过一段时间再发布。先写一下手动搭建的方法。

手动搭建

仅支持 64 位系统。
1.下载文件到 /usr/bin/rinetd-bbr:

wget -O /usr/bin/rinetd-bbr https://github.com/linhua55/lkl_study/releases/download/v1.2/rinetd_bbr_powered

2.设置权限

chmod a+x /usr/bin/rinetd-bbr

3.创建配置文件

vi /etc/rinetd-bbr.conf

输入以下内容

# bindadress bindport connectaddress connectport
 
0.0.0.0 443 0.0.0.0 443

其中的 443 请改为你的端口
IP 地址统一写 0.0.0.0

4.获取接口名称

# 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.2/32 scope host venet0
    inet 10.10.10.10/32 brd 10.10.10.10 scope global venet0:0

看具有公网 IP 的接口名称(比如我的公网 IP 是 10.10.10.10),上面这种的接口是 venet0:0 而不是 venet0
搬瓦工的 OpenVZ 应该都是 venet0:0 接口。

5.启动

/usr/bin/rinetd-bbr -f -c /etc/rinetd-bbr.conf raw venet0:0 &

注意:将最后的接口改为你上面获取到的接口。在命令最后面加 & 以使其能后台运行。 验证
正常情况下的输出:

[    0.000000] Linux version 4.10.0+ (root@gcc) (gcc version 4.9.4 (Ubuntu 4.9.4-2ubuntu1~14.04.1) ) #1 Mon Jul 31 04:50:50 UTC 2017
[    0.000000] bootmem address range: 0x7f2acc000000 - 0x7f2acffff000
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 16159
[    0.000000] Kernel command line:  virtio_mmio.device=268@0x1000000:1
[    0.000000] PID hash table entries: 256 (order: -1, 2048 bytes)
[    0.000000] Dentry cache hash table entries: 8192 (order: 4, 65536 bytes)
[    0.000000] Inode-cache hash table entries: 4096 (order: 3, 32768 bytes)
[    0.000000] Memory available: 64492k/0k RAM
[    0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] NR_IRQS:4096
[    0.000000] lkl: irqs initialized
[    0.000000] clocksource: lkl: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns
[    0.000001] lkl: time and timers initialized (irq2)
[    0.000003] pid_max: default: 4096 minimum: 301
[    0.000021] Mount-cache hash table entries: 512 (order: 0, 4096 bytes)
[    0.000023] Mountpoint-cache hash table entries: 512 (order: 0, 4096 bytes)
[    0.009053] console [lkl_console0] enabled
[    0.009056] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.009128] NET: Registered protocol family 16
[    0.009265] clocksource: Switched to clocksource lkl
[    0.009324] NET: Registered protocol family 2
[    0.009418] TCP established hash table entries: 512 (order: 0, 4096 bytes)
[    0.009421] TCP bind hash table entries: 512 (order: 0, 4096 bytes)
[    0.009503] TCP: Hash tables configured (established 512 bind 512)
[    0.009971] UDP hash table entries: 128 (order: 0, 4096 bytes)
[    0.009976] UDP-Lite hash table entries: 128 (order: 0, 4096 bytes)
[    0.010060] virtio-mmio: Registering device virtio-mmio.0 at 0x1000000-0x100010b, IRQ 1.
[    0.010186] workingset: timestamp_bits=62 max_order=14 bucket_order=0
[    0.010203] virtio-mmio virtio-mmio.0: Failed to enable 64-bit or 32-bit DMA.  Trying to continue, but this might not work.
[    0.010350] NET: Registered protocol family 10
[    0.010849] Segment Routing with IPv6
[    0.010859] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
[    0.010993] Warning: unable to open an initial console.
[    0.011006] This architecture does not have kernel memory protection.
[    2.169284] random: fast init done

查看 iptables 规则:

# iptables -t raw -nL
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:443 /* LKL_RAW */
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:443 /* LKL_RAW */
 
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

已经有两条规则了。

Windows上的mtr测试命令工具
该工具包括PING和tracert两种测试。具体使用方法及对照的参数如下:
Hostname:到目的服务器要经过的每个主机IP或名称
Nr:经过节点的数量;一般第一个是当地宽带商的网关
Loss%:ping 数据包回复失败的百分比;藉此判断,那个节点(线路)出现故障,是服务器所在机房还是国际路由干路
Sent:已經传送的数据包数量
Recv:成功接收的数据包数量
Best:回应时间的最小值
Avrg:平均回应时间
Worst:回应时间的最大值
Last:最后一个数据包的回应时间
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment