OpenVZ uml 开启 BBR 之最小镜像,仅需16M内存!

    OpenVZ VPS安装User-mode Linux实现Google BBR加速

    本文转自: https://blog.amayume.net/openvz-vps-an-zhuang-user-mode-linux-yi-shi-xian-bbr-yong-sai-kong-zhi/

    http://51.ruyo.net/p/3198.html



    本文介绍OpenVZ虚拟VPS安装Google BBR!

    该教程博主并未尝试,请酌情使用。自行备份重要数据。

    其他虚拟或者独服请参考另一篇文章:

    >>> Google BBR 优化算法,实现TCP加速


    前言

    为啥要装 BBR?据说适合国情。主要目的还是练习 User-mode Linux (UML)。


    安装 UML

    先装工具链:

    sudo apt-get install build-essential libncurses5-dev

    因为需要 BBR, 先弄到超前版内核树 net-next,还有对应 UML 的内核配置

    git clone git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git  
    cd net-next  
    make defconfig ARCH=um

    也可以 export ARCH=um,方便一些。

    配置内核使用 BBR:

    make menuconfig ARCH=um

    进入配置菜单,进入 Networking support → Networking options → TCP: advanced congestion control 页面,移到 BBR TCP,按两下空格直到变成 <*> BBR TCP。下方 Default TCP congestion control 回车选 BBR。一路 Exit,保存。

    make ARCH=um vmlinux -j2 编译。


    在 UML 中安装 Arch Linux

    基本与在 Ubuntu 下安装新 Arch 一样。


    先装一个只读的 rootfs

    因为 UML 对 hostfs 的限制,hostfs 一定是只读的,而 OpenVZ 也没有 loop 设备,无法直接挂载磁盘镜像,故我们要先装个只读的 rootfs 来启动 UML, 在 UML 中挂镜像。(Ref:PeterCxy 的 Blog)

    # 先下载 Arch 最新的 Bootstrap 包:
    cd ~  
    wget http://mirror.rackspace.com/archlinux/iso/latest/archlinux-bootstrap-2016.12.01-x86_64.tar.gz  
    tar xzf archlinux-bootstrap-2016.12.01-x86_64.tar.gz  
    mv root.x86_64 root  
    sudo nano root/etc/resolv.conf  
    # 加上一行 nameserver 8.8.8.8,保存
    sudo mount --rbind /proc root/proc  
    sudo mount --rbind /sys root/sys  
    sudo mount --rbind /dev root/dev  
    sudo mount -t tmpfs tmpfs root/tmp  
    sudo mount --rbind /root root/root  
    sudo nano root/etc/pacman.d/mirrorlist  
    # 搜索离你最近的国家镜像,去掉对应的注释
    # 进入 chroot
    sudo root/bin/arch-chroot root /bin/bash  
    # 此时已经进入 chroot 环境
    pacman-key --init  
    pacman-key --populate archlinux  
    # 安装基础系统
    pacman -Sy base  
    # 改控制台,也可以不改,通过 screen 连接 pts
    systemctl enable getty@tty0  
    systemctl disable getty@tty1  
    # 退出 chroot
    exit  
    # 解除 rbind
    sudo umount root/{dev,proc,sys,tmp}
    此时在 root 文件夹下就有了完整的 rootfs,可以启动 UML 了。


    设置网络

    首先在主机商的面板(SolusVM)打开 TUN/TAP 功能。一般能做 VPN(PPTP、L2TP等) 的 VPS 都有这个选项。

    之后配置 TAP 设备:

    sudo ip tuntap add tap0 mode tap  
    sudo ip addr add 10.0.0.1/24 dev tap0  
    sudo ip route add default via 10.0.0.1 dev venet0:0  
    sudo ip link set tap0 up  
    sudo iptables -P FORWARD ACCEPT  
    sudo iptables -t nat -A POSTROUTING -o venet0:0 -j MASQUERADE

    安装 Arch 到镜像

    cd ~/net-next  
    dd if=/dev/zero of=rootfs.img bs=1MB count=6000 # 创建一个 6GB 的镜像  
    mount -o remount,size=2G /dev/shm # 改一下 tmpfs 大小,防止爆内存
     
    # 启动到 UML
    sudo ./vmlinux root=/dev/root rootfstype=hostfs hostfs=./root ubd0=rootfs.img eth0=tuntap,tap0 mem=256m

    mem 是内存大小,此处取 256M(可以根据你的内存情况修改)。
    此时已经有 UML 的 shell,可以开始安装系统了。用户名 root,没有密码。

    ip link set eth0 up  
    ip addr add 10.0.0.2/24 dev eth0  
    ip route add default via 10.0.0.1 dev eth0
     
    # 制作文件系统
    mkfs.ext4 /dev/ubda  
    mount /dev/ubda /mnt  
    mkdir -p /mnt/var/lib/pacman  
    pacman -Sy base -r /mnt  
    pacman -Sy havaged -r /mnt # entropy 生成器
     
    mount --rbind /proc /mnt/proc  
    mount --rbind /sys /mnt/sys  
    mount --rbind /dev /mnt/dev  
    mount -t tmpfs tmpfs /mnt/tmp  
    mount --rbind /root /mnt/root
     
    chroot /mnt /bin/bash  
    nano /etc/pacman.d/mirrorlist # mirrorlist
    编辑网络配置:

    nano /etc/systemd/network/50-static.network

    加入

    [Match]
    Name=eth0
     
    [Network]
    Address=10.0.0.2/24  
    Gateway=10.0.0.1

    同上,enable 各项服务,配置 时区、locale 等:

    sudo nano root/etc/resolv.conf
    # 加上一行 nameserver 8.8.8.8,保存
     
    systemctl enable systemd-networkd  
    systemctl enable getty@tty0  
    systemctl disable getty@tty1
     
    ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime  
    sed -i 's/#en_US.UTF/en_US.UTF/' /etc/locale.gen  
    locale-gen  
    echo 'LANG=en_US.UTF-8' > /etc/locale.conf  
    echo 'umlarch' > /etc/hostname # 配置主机名  
    nano /etc/hosts # 加入 127.0.1.1 umlarch.localdomain umlarch  
    mkinitcpio -p linux # 应该不需要,以防万一  
    genfstab -U /mnt >> /mnt/etc/fstab # fstab  
    shutdown -h 0 # 关闭 UML


    现在配置已经基本完成,改变一下命令行,从新建的镜像启动:

    sudo ./vmlinux root=/dev/ubda ubd0=rootfs.img eth0=tuntap,tap0 mem=256m  
    pacman-key --init  
    pacman-key --populate archlinux

    搞定。


    配置端口转发


    先给自己留下 SSH 端口~

    sudo iptables -t nat -A PREROUTING -p tcp --dport 22 -j RETURN


    然后其他的端口全转发走啦:

    sudo iptables -t nat -A PREROUTING -i venet0 -j DNAT --to-destination 10.0.0.2

    安装 shadowsocks-go

    做了 AUR 源,见 https://github.com/ProfFan/shadowsocks-go 。

    Clone 后 makepkg -si 即可。


    --------------------------------------------------------------------------------------------------------------------------------------------------------------


    以下全文转载自 https://plus.google.com/108855478531549571757/posts/DabLxwHAwGH


    【原创】OpenVZ uml 开启 BBR 之最小镜像,仅需16M内存!

    # 转帖请注明出处,这是最起码的尊重。
    # 世界本就如此艰难,何必还要让它更艰难呢。

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

    # 下载定做好的kernel和rootfs并传到VPS上
    https://drive.google.com/open?id=0ByqeeKN198fcNm04a1pBSzdXU3M

    # 解压并进入目录
    tar -xzvf alpine_16m.tgz
    cd alpine_16m

    # 安装uml的包
    apt-get install uml-utilities

    # 为uml创建一个虚拟网口
    ip tuntap add tap0 mode tap
    ip addr add 10.0.0.1/24 dev tap0
    ip link set tap0 up

    # 打通uml和host之间的网络
    echo '1' > /proc/sys/net/ipv4/ip_forward
    iptables -P FORWARD ACCEP
    iptables -t nat -A POSTROUTING -o venet0 -j MASQUERADE

    # 转发host的30022端口到uml的ssh方便以后管理
    # 端口可以在uml里的/etc/init.d/dropbear文件里修改
    # 默认用户名和密码都是root,登录后请立即修改!
    iptables -t nat -A PREROUTING -i venet0 -p tcp --dport 30022 -j DNAT --to-destination 10.0.0.2

    # 转发host的38388端口到uml的ss-libev
    # 端口可以在uml里的/etc/shadowsocks-libev/config.json文件里修改
    iptables -t nat -A PREROUTING -i venet0 -p tcp --dport 38388 -j DNAT --to-destination 10.0.0.2
    iptables -t nat -A PREROUTING -i venet0 -p udp --dport 38388 -j DNAT --to-destination 10.0.0.2

    # 可以打开uml了,分配了16M内存给它吧
    nohup ./vmlinux ubda=alpine_16m rw eth0=tuntap,tap0 mem=16M > /dev/null &

    # 打开ss客户端,ip是你原来VPS的ip,默认端口:38388,密码:barfoo!,加密方式:rc4-md5。

    Enjoy!

    后记1:各位喜欢折腾的,下面链接是 Alpine Linux v3.5.2 开好BBR的 uml 纯净版底包。推荐32M内存启动后 ,折腾各种软件包用。e.g. "apk add wget"
    https://drive.google.com/open?id=0ByqeeKN198fccHd4dE5YbmN6R00





    其他资料:


    alpine



    Warning: You will need Kernel version 2.6.22 or later to use apk-tools-static

    Download the latest apk static package (replace ${version} with actual version):

    wget ${mirror}/latest-stable/main/x86_64/apk-tools-static-${version}.apk

    .apk packages are just gzipped tarballs, unpack using:

    tar -xzf apk-tools-static-*.apk
    Install the alpine base installation onto the chroot

    ./sbin/apk.static -X ${mirror}/latest-stable/main -U --allow-untrusted --root ${chroot_dir} --initdb add alpine-base #--arch x86





    魔改版一键

    https://liyuans.com/archives/altered-bbr-onekey-script-collection.html






标签: bbr ovz