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

    发布时间:2017-3-2 20:21 Thursday 作者:苏苏 阅读(4326)

      来源:https://blog.amayume.net/openvz-vps-an-zhuang-user-mode-linux-yi-shi-xian-bbr-yong-sai-kong-zhi/




      两个字,折腾。

      前言

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

      安装 UML

      先装工具链:

      sudo apt-get install build-essential libncurses5-dev 

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

      cd ~ 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 0  
      systemctl disable 1 # 退出 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 0  
      systemctl disable 1
      
      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 

      Updates

      无法进入 chroot

      关于unshare问题,参见 here 。

      关于 Arch 的 chroot 环境配置,请参考官方文档

      配置中无此选项

      BBR 已经进入 4.9 内核树,直接 clone 官方的 master 分支(git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git)即可。

      Reference

      https://vincent.bernat.im/en/blog/2011-uml-network-lab.html

      http://sylphy.hatenablog.jp/entry/2016/06/23/223449

      https://github.com/PeterCxy/Blog/blob/master/_posts/tech/2015-12-12-user-mode-linux-in-openvz.md

      https://wiki.archlinux.org/index.php/Installation_guide#Installation

      https://wiki.archlinux.org/index.php/Pacman/Package_signing#Initializing_the_keyring



    特别申明:若无说明,文章均为原创,转载时请注明本文地址,谢谢合作!
    本文链接:

    本站仅为分享信息,绝对不是推荐,所有内容均仅代表个人观点,读者购买风险自担。如果你非要把风险推苏苏头上,不要这么残忍,好吗?

    本站保证在法律范围内您的个人信息不经由本站透露给任何第三方。

    所有网络产品均无法保证在中国任何地区,任何时间,任何宽带均有相同的访问体验,那种号称某机房绝不抽风的不是骗子就是呵呵.

    任何IDC都有倒闭和跑路的可能,备份永远是最佳选择,服务器也是机器,不勤备份是对自己极不负责的表现.

    加入群2:334931096    加入群1:569839985

    欢迎IDC提交优惠信息或者测试样机,提交信息请Eamil至admin@138vps.com,苏苏不保证一定会进行发布。

    但请IDC留意以下内容:

    无官方正式首页、无可用联络方式暂不发布;

    曾经有过倒闭和跑路经历者重开不到6个月不做发布;

    从本日起(2016-07-18)不接受任何形式的免费赞助和VPS馈赠,不接受任何评测报告的投稿,不接受任何付费发布和付费删除评论,所有IDC若有必要提交测试样机,请在7日后自行删除。