OpenVZ VPS安装User-mode Linux实现Google BBR加速
本文介绍OpenVZ虚拟VPS安装Google BBR!
该教程博主并未尝试,请酌情使用。自行备份重要数据。
其他虚拟或者独服请参考另一篇文章:
前言
为啥要装 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 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://blog.amayume.net/openvz-vps-an-zhuang-user-mode-linux-yi-shi-xian-bbr-yong-sai-kong-zhi/
版权声明:
作者:我是小马甲~
链接:https://fandai.gezi.workers.dev/3198.html
来源:如有乐享
文章版权归作者所有,未经允许请勿转载。
Floopy
割了动脉喝脉动