参考
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