OpenVZ 开启 BBR 之最简方法 - Linux Kernel Library

    转自 https://www.v2ex.com/t/353778

    *** 序 ***

    首先感谢 91yun 的 linhua :
    https://www.91yunbbs.com/discussion/comment/1382/#Comment_1382

    2 个相关链接:
    https://www.netdevconf.org/2.1/session.html?tazaki
    https://github.com/lkl/linux

    *** 教程从这里开始 ***

    # 先去 VPS 的 Panel 里打开 TUN/TAP 功能

    # 创建一个 tap0
    ip tuntap add tap0 mode tap
    ip addr add 10.0.0.1/24 dev tap0
    ip link set tap0 up

    # 打通 tap0 和 host 之间的网络
    iptables -P FORWARD ACCEPT
    iptables -t nat -A POSTROUTING -o venet0 -j MASQUERADE

    # 假设我们准备在 443 端口开启 BBR
    iptables -t nat -A PREROUTING -i venet0 -p tcp --dport 443 -j DNAT --to-destination 10.0.0.2

    # 安装 haproxy ,并禁止开机自启
    apt-get install haproxy
    update-rc.d haproxy disable

    # 新建一个 /root/haproxy/haproxy.cfg
    # 假设你原来的 server 监听的是 12580 端口, BBR 的端口开在 443 。

    global
    user haproxy
    group haproy


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

    listen shadowsocks
    bind 10.0.0.2:443
    server server1 10.0.0.1:12580

    # 下载 Linux Kernel Library ,解压到 /root/haproxy
    # https://drive.google.com/file/d/0ByqeeKN198fcdDVLMmVKakl5VE0/view?usp=sharing
    tar -xzvf liblkl-hijack.so.tgz

    # 是时候开启 haproxy 为 BBR 过桥了,以下命令必须一行打完
    LD_PRELOAD=/root/haproxy/liblkl-hijack.so LKL_HIJACK_NET_QDISC="root|fq" LKL_HIJACK_SYSCTL="net.ipv4.tcp_congestion_control=bbr;net.ipv4.tcp_wmem=4096 65536 67108864" LKL_HIJACK_NET_IFTYPE=tap LKL_HIJACK_NET_IFPARAMS=tap0 LKL_HIJACK_NET_IP=10.0.0.2 LKL_HIJACK_NET_NETMASK_LEN=24 LKL_HIJACK_NET_GATEWAY=10.0.0.1 LKL_HIJACK_OFFLOAD="0x8883" haproxy -f /root/haproxy/haproxy.cfg

    *** 大功告成! ***

    现在可以用客户端连上试试看了
    12580 是原来 server 的端口
    443 是开启 BBR 以后的端口

    *** 后记 ***

    # 如果需要把原来 12580 端口的 UDP 协议也转发到 443 端口,可以添加以下命令
    iptables -t nat -A PREROUTING -i venet0 -p udp --dport 443 -j REDIRECT --to-port 12580




    更新脚本

    # 既然你们都喜欢快餐,那我提供一个脚本吧。
    # 手动调试成功后,就可用下面脚本设置开机自启。

    # 安装 supervisor ,添加配置文件,用于开机自启
    # /etc/supervisor/conf.dhaproxy-lkl.conf

    [program:haproxy-lkl]
    command=/root/haproxy/haproxy-lkl-start
    autostart=true
    autorestart=true
    redirect_stderr=true
    stdout_logfile=/root/haproxy/haproxy-lkl_stdout.log
    stdout_logfile_maxbytes=1MB
    stderr_logfile=/root/haproxy/haproxy-lkl_stderr.log
    stderr_logfile_maxbytes=1MB

    # haproxy 配 Linux Kernel Library 的启动脚本。
    # 原来的服务监听 12580 端口。开启 BRR 后,新的监听端口在 443 。
    # /root/haproxy/haproxy-lkl-start

    #!/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 443 -j DNAT --to-destination 10.0.0.2
    iptables -t nat -A PREROUTING -i venet0 -p tcp --dport 443 -j DNAT --to-destination 10.0.0.2

    iptables -t nat -D PREROUTING -i venet0 -p udp --dport 443 -j REDIRECT --to-port 12580
    iptables -t nat -A PREROUTING -i venet0 -p udp --dport 443 -j REDIRECT --to-port 12580

    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 /root/haproxy/haproxy.cfg

    # Enjoy~~~




    https://www.91yun.org/archives/6281

    LKL 使用前置需求


    1. LKL 要求 ldd 的版本至少在 2.14 ,目前我测试下来,如果不想折腾建议直接安装 CentOS7 , Debian8 和 Ubuntu16
    2. 安装包只使用 64bit 的系统。
    3. 默认的端口转发只转发了 9000-9999 的端口,如果你不想费心修改,请把 ssr 等应用的端口设在这个范围
    4. 只适用 openvz ,请他虚拟请参考 原帖 自己折腾。。


    一键

    https://github.com/91yun/uml/raw/master/lkl/install.sh

    另外的一键

    https://github.com/nanqinlang-tcp/tcp_nanqinlang


    rinted方案

    https://github.com/mixool/rinetd


    ping 10.0.0.2

    如果 10.0.0.2 能 ping 通说明成功, ping 不通说明失败


    如果修改转发端口


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






标签: bbr ovz