openvz开启bbr

参考
https://www.v2ex.com/t/353778

确认vps能开启TUN/TAP功能

ls -al /dev/net/tun

创建tap0接口

ip tuntap add tap0 mode tap
ip addr add 10.0.0.1/24 dev tap0
ip link set tap0 up

低版本ip命令不能创建tap接口,此时也可以用tunctl命令创建tap接口。
yum install tunctl
tunctl -u root

打通tap0和host之间的网络

iptables -P FORWARD ACCEPT
sysctl -w net.ipv4.ip_forward=1

准备在60822端口开启BBR

iptables -t nat -A PREROUTING -i venet0 -p tcp --dport 60822 -j DNAT --to-destination 10.0.0.2

安装haproxy 并禁止开机自启

yum install haproxy
systemctl disable haproxy

编辑haproxy.cfg

新建一个/etc/haproxy/haproxy.cfg(原有的cfg备份起来)
ss监听的是60399,BBR端口为60822。

global
user haproxy
group haproxy

defaults
mode tcp
timeout connect 5s
timeout client 60s
timeout server 60s

listen go-ss2
bind 10.0.0.2:60822
server server1 10.0.0.1:60399

下载Linux Kernel Library

https://drive.google.com/file/d/0ByqeeKN198fcdDVLMmVKakl5VE0/view?usp=sharing
tar -xzvf liblkl-hijack.so.tgz
把liblkl-hijack.so保存到/root/haproxy/

开启转发

export LD_PRELOAD=/root/haproxy/liblkl-hijack.so
export LKL_HIJACK_NET_QDISC="root|fq"
export LKL_HIJACK_SYSCTL="net.ipv4.tcp_congestion_control=bbr;net.ipv4.tcp_wmem=4096 65536 67108864"
export LKL_HIJACK_NET_IFTYPE=tap
export LKL_HIJACK_NET_IFPARAMS=tap0
export LKL_HIJACK_NET_IP=10.0.0.2
export LKL_HIJACK_NET_NETMASK_LEN=24
export LKL_HIJACK_NET_GATEWAY=10.0.0.1
export LKL_HIJACK_OFFLOAD="0x8883"
export LKL_HIJACK_DEBUG=1
haproxy -f /etc/haproxy/haproxy.cfg

脚本

以上配置手工配置成功后,可以写个haproxy-bbr.sh脚本。通过supervisior方便管理。

#!/bin/sh

ip tuntap add tap0 mode tap
ip addr add 10.0.0.1/24 dev tap0
ip link set tap0 up

iptables -P FORWARD ACCEPT

iptables -t nat -D PREROUTING -i venet0 -p tcp --dport 60822 -j DNAT --to-destination 10.0.0.2
iptables -t nat -A PREROUTING -i venet0 -p tcp --dport 60822 -j DNAT --to-destination 10.0.0.2

export LD_PRELOAD=/root/haproxy/liblkl-hijack.so
export LKL_HIJACK_NET_QDISC="root|fq"
export LKL_HIJACK_SYSCTL="net.ipv4.tcp_congestion_control=bbr;net.ipv4.tcp_wmem=4096 65536 67108864"
export LKL_HIJACK_NET_IFTYPE=tap
export LKL_HIJACK_NET_IFPARAMS=tap0
export LKL_HIJACK_NET_IP=10.0.0.2
export LKL_HIJACK_NET_NETMASK_LEN=24
export LKL_HIJACK_NET_GATEWAY=10.0.0.1
export LKL_HIJACK_OFFLOAD="0x8883"
export LKL_HIJACK_DEBUG=1

haproxy -f /etc/haproxy/haproxy.cfg

测试

测试vps到本地电信的速度

pip install speedtest-cli
speedtest-cli --server 3633
3633是上海电信的站点

确认是否在用BBR

LKL_HIJACK_DEBUG=1打开kernel log, 把LKL_HIJACK_SYSCTL="net.ipv4.tcp_congestion_control=neko",会看到 lkl_sys_write /proc/sys/net/ipv4/tcp_congestion_control: Bad error code ,只有调回BBR才会正常。

查看so加载情况

lsof -p pidof haproxy |grep -i .so |grep -i lkl

协议混淆

有的运营商会对http,https以外的tcp协议QoS。

BBR的有效范围

如果丢包率:0%~15%(0%线路品质很好,无需加速)
可以用 iperf3测试一下TCP的丢包率
服务端
iperf3 -s -f M -V -p 3340
客户端
iperf3 -c 服务器 IP -f M -V -R -k 1000 -b 3M -l 1400 -w 8192 -p 3340
发送1000个包,查看重传的包的个数
丢包率 = 重传的包个数 / 1000

推荐阅读更多精彩内容