參考
https://www.v2ex.com/t/353778
確認(rèn)vps能開啟TUN/TAP功能
ls -al /dev/net/tun
創(chuàng)建tap0接口
ip tuntap add tap0 mode tap
ip addr add 10.0.0.1/24 dev tap0
ip link set tap0 up
低版本ip命令不能創(chuàng)建tap接口,此時也可以用tunctl命令創(chuàng)建tap接口囤屹。
yum install tunctl
tunctl -u root
打通tap0和host之間的網(wǎng)絡(luò)
iptables -P FORWARD ACCEPT
sysctl -w net.ipv4.ip_forward=1
準(zhǔn)備在60822端口開啟BBR
iptables -t nat -A PREROUTING -i venet0 -p tcp --dport 60822 -j DNAT --to-destination 10.0.0.2
安裝haproxy 并禁止開機(jī)自啟
yum install haproxy
systemctl disable haproxy
編輯haproxy.cfg
新建一個/etc/haproxy/haproxy.cfg(原有的cfg備份起來)
ss監(jiān)聽的是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/
開啟轉(zhuǎn)發(fā)
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是上海電信的站點
確認(rèn)是否在用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 翠肘,只有調(diào)回BBR才會正常。
查看so加載情況
lsof -p pidof haproxy
|grep -i .so |grep -i lkl
協(xié)議混淆
有的運營商會對http辫秧,https以外的tcp協(xié)議QoS束倍。
BBR的有效范圍
如果丟包率:0%~15%(0%線路品質(zhì)很好,無需加速)
可以用 iperf3測試一下TCP的丟包率
服務(wù)端
iperf3 -s -f M -V -p 3340
客戶端
iperf3 -c 服務(wù)器 IP -f M -V -R -k 1000 -b 3M -l 1400 -w 8192 -p 3340
發(fā)送1000個包,查看重傳的包的個數(shù)
丟包率 = 重傳的包個數(shù) / 1000