介绍

您可以轻松在自己现有的 Linux 机器上启动额外的 KVM VPS!
你想尝试不同的Linux发行版吗?或者尝试你最喜欢的发行版的不同配置?
想不想在保持你熟悉的、已安装的系统安全不变的情况下,安装并测试一些你不太确定的复杂系统?
或许,和我们许多人一样,您没有多余的IP地址。您可以轻松地在现有网络连接上运行额外的KVM VPS。
您是在笔记本电脑、台式机、VPS 还是已安装 Linux 系统的专用服务器上工作?
您能否在终端中输入或复制粘贴几行代码?
如果您想获得以上所有好处,请继续阅读。
让我们在现有的Linux系统内部搭建一个或十几个我们自己的Linux虚拟专用服务器(VPS)吧!这应该适用于几乎所有Linux发行版的较新版本。
滑溜溜
由于我们使用了Slirp,因此既不需要额外的IP地址,也不需要任何特殊的网络设置。Slirp提供了QEMU内置的默认网络系统。
Slirp 似乎被低估了!通常会提到两个问题。首先,Slirp 的网络速度被认为“慢”。其次,对于非特权用户,Slirp 不支持ICMP 协议,因此 ping 命令无法工作。
对我来说,Slirp 的速度对于日常使用来说已经足够了。Ping 功能非常实用,而且我们大多数人都能用 Slirp 实现 ping 通。我们大多数人在自己的机器和 VPS 上都拥有 root 权限。而且,作为 root 用户,我们可以在自己的机器上创建供自己使用的 VPS,而无需过分担心安全问题。
三个简单的VPS食谱,使用Slirp
这里有三个快速搭建VPS的方案。首先是最简单的VPS,任何非特权用户都可以创建。我们将这个非特权用户命名为“leb-vps”。接下来,我们将该用户添加到kvm组,这样就可以在基础VPS上安装KVM插件,从而提升其速度。最后,我们以root用户身份启动VPS,以便ping命令能够正常工作。
简单易用的VPS
这个简单易行的方案适用于没有root权限的非特权用户。这台VPS没有KVM,所以速度会比较慢。此外,ping命令也无法使用。
首先,获取一张图片:
适用于 Debian sid:
root@debian:~# wget https://cloud.debian.org/images/cloud/sid/daily/latest/debian-sid-nocloud-amd64-daily.qcow2
leb-vps@debian:~$ wget https://cloud.debian.org/images/cloud/sid/daily/latest/debian-sid-nocloud-amd64-daily.qcow2
如果您更喜欢 Red Hat,Fedora rawhide 镜像可在https://openqa.fedoraproject.org/nightlies.html 获取。
接下来,以非特权用户(“leb-vps”)的身份进入 tmux:
leb-vps@debian:~$ tmux
然后启动VPS:
leb-vps@debian:~$ qemu-system-x86_64 -nographic -m 1G -hda \
> /home/leb-vps/debian-sid-nocloud-amd64-daily.qcow2
你会看到很多行启动信息滚动显示。可能会有大约一分钟或更长时间的停顿。最终,你会看到登录提示。登录名是“root”。无需密码。
至于内存大小,我还尝试将“-m”标志设置为256M和0.5G。两者都成功启动了。
这台 Slirp VPS 内置了默认的网络功能。它使用与主机相同的 IP 地址,但不支持 ICMP 协议,因此 ping 命令无法工作:
root@localhost:~# ping -c 2 www.google.com
PING www.google.com (142.251.45.68) 56(84) bytes of data.
— www.google.com ping 统计信息 —
已发送 2 个数据包,已接收 0 个数据包,丢包率 100%,耗时 1022 毫秒
root@localhost:~# curl icanhazip.com
66.11.114.203
root@localhost:~# curl -6 icanhazip.com
2602:ffc5:105:40f::203
root@localhost:~#
VPS搭配美味的KVM酱汁!
要使用 KVM 创建 VPS,需要 root 权限,或者至少是 kvm 用户组的成员。在 Debian sid 系统中,kvm 用户组默认存在:
root@debian:~# grep kvm /etc/group
kvm:x:110:
root@debian:~# ls -l /dev | grep kvm
crw-rw---- 1 root kvm 10, 232 May 19 20:33 kvm
crw-rw---- 1 root kvm 10, 238 May 19 20:33 vhost-net
crw-rw---- 1 root kvm 10, 241 May 19 20:33 vhost-vsock
root@debian:~#
让我们将用户 leb-kvm 添加到 kvm 用户组:
root@debian:~# usermod -a -G kvm leb-vps
root@debian:~#
接下来我们成为 leb-vps:
root@debian:~# su - leb-vps
你会发现这台VPS启动速度更快,因为它使用了KVM。但是ping命令仍然无法正常工作。这里有一个供用户leb-vps用来启动VPS的小脚本。
别忘了在 tmux 中运行脚本。
leb-vps@debian:~$ cat start-slirp-kvm-vps.sh
#!/bin/bash
# Start qemu and kvm with user mode "slirp" networking.
# Please see http://www.linux-kvm.org/page/Networking
# Default login "root". No password needed.
qemu-system-x86_64 \
-nographic \
-cpu 主机 -启用-kvm \
-m 1G \
-hda /home/leb-vps/debian-sid-nocloud-amd64-daily.qcow2
leb-vps@debian:~$
正如预期的那样,ping 命令无法正常工作。但我们的主机系统的 IP 地址确实具备网络连接能力。
root@localhost:~# ping -c 2 www.google.com
PING www.google.com (142.250.138.104) 56(84) bytes of data.
— www.google.com ping 统计信息 —
已发送 2 个数据包,已接收 0 个数据包,丢包率 100%,耗时 1013 毫秒
root@localhost:~# curl icanhazip.com
66.11.114.203
root@localhost:~# curl -6 icanhazip.com
2602:ffc5:105:40f::203
root@localhost:~#
以 root 用户身份进行 Ping 操作
以下是一个可供 root 用户使用的脚本,用于启动一个带有正常工作 ping 功能的 slirp KVM VPS:
root@debian:~# cat start-qemu-kvm-slirp.sh
#!/bin/bash
# Start qemu with user mode "slirp" networking.
# Please see http://www.linux-kvm.org/page/Networking
# Default login "root". No password needed.
qemu-system-x86_64 \
-nographic \
-cpu 主机 -启用-kvm \
-m 1G \
-hda /root/debian-sid-nocloud-amd64-daily.qcow2
root@debian:~#
要启动 VPS,请启动 tmux,然后从 tmux 内部运行脚本。
root@debian:~# tmux
root@debian:~# /root/start-qemu-kvm-slirp.sh
这次ICMP成功了:
root@localhost:~# ping -c 2 www.google.com
PING www.google.com (142.251.45.68) 56(84) bytes of data.
64 bytes from dfw25s48-in-f4.1e100.net (142.251.45.68): icmp_seq=1 ttl=255 time=s
64 bytes from dfw25s48-in-f4.1e100.net (142.251.45.68): icmp_seq=2 ttl=255 time=s
— www.google.com ping 统计信息 —
已发送 2 个数据包,已接收 2 个数据包,丢包率为 0%,耗时 1002 毫秒
rtt 最小值/平均值/最大值/标准差 = 2.251/2.352/2.453/0.101 毫秒
root@localhost:~# curl -4 icanhazip.com
66.11.114.203
root@localhost:~# curl -6 icanhazip.com
2602:ffc5:105:40f::203
root@localhost:~#
虚拟化的硬件支持
如果创建虚拟机时遇到问题,原因之一可能是硬件不支持虚拟化。运行以下脚本可以告诉我们硬件虚拟化支持是否已启用。
root@debian:~# cat cpu-virt.sh
#!/bin/bash
# From https://github.com/masonr/yet-another-bench-script/blob/master/yabs.sh
# Lines 210-212
# Thanks to Mason and yabs developers!
CPU_VIRT=$(cat /proc/cpuinfo | grep 'vmx\|svm')
[[ -z “$CPU_VIRT” ]] && CPU_VIRT=”\xE2\x9D\x8C Disabled” || CPU_VIRT=”\xE2\x9C\x94 Enabled”
echo -e “VM-x/AMD-V : $CPU_VIRT”
root@debian:~#
安装 Qemu
你可能需要安装 tmux 和 qemu。
apt-get update && apt-get upgrade -y
apt-get install tmux qemu-system
图像验证
Debian 云镜像的校验和可在以下网址找到: https://cloud.debian.org/images/cloud/sid/daily/latest/SHA512SUMS。
leb-vps@debian:~$ wget -q https://cloud.debian.org/images/cloud/sid/daily/latest/SHA512SUMS
leb-vps@debian:~$ sha512sum --ignore-missing -c SHA512SUMS
debian-sid-nocloud-amd64-daily.qcow2: OK
leb-vps@debian:~$
请在启动和运行镜像之前进行验证,因为启动和运行镜像会更改镜像。
如何戒烟
要退出 tmux 而保持 VPS 运行,请键入“Ctrl-b”,然后键入“d”。
重新进入 tmux 和已运行的 VPS:
tmux attach
停止 VPS 并退出 tmux:
shutdown -h now
VPS 关闭后,当命令提示符返回时,输入“exit”。
使用su - leb-vps成为非特权用户后,要返回 root 用户,请键入“exit”。
其他资源
当我第一次尝试 KVM 技巧时, Linux-KVM.org 的网络配置页面对我帮助很大。
或许世界上最详尽的 qemu 教程来自张东利。
结论
我们可以使用三种方法来使用qemu的默认网络工具slirp。我们可以创建不使用KVM的用户级qemu虚拟机,启用KVM组的用户级虚拟机(使用KVM),以及使用root权限启动并支持ICMP的KVM服务器。