三个快速简便的自制 Qemu KVM VPS 方案!——几乎可以在任何 Linux 发行版上轻松实现! 三个快速简便的自制 Qemu KVM VPS 方案!——几乎可以在任何 Linux 发行版上轻松实现!

三个快速简便的自制 Qemu KVM VPS 方案!——几乎可以在任何 Linux 发行版上轻松实现!

介绍

KVM标志

您可以轻松在自己现有的 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服务器。