0%

路由性能过剩 来玩虚拟机之 libvirt 初体验

路由性能过剩? 内存条和硬盘还不是你自己加的(
不得已要用 Windows? 被 Windows 支配的恐惧(

为什么选择 libvirt?
Vmware 要付费 不开源
Virtualbox 经常滚挂 用过了,换个口味

服务端

在路由器上安装 libvirt

1
sudo pacman -S libvirt

安装 ebtablesdnsmasq 提供 NAT/DHCP 支持,
安装 bridge-utils 以提供 bridge 支持,
安装 openbsd-netcat 提供 SSH 远程管理支持。

注: gnu-netcat 和 openbsd-netcat 鱼和熊掌不可兼得

因为我路由器已经装有 dnsmasq 了,这里只安装 ebtables

1
sudo pacman -S ebtables bridge-utils openbsd-netcat

如果只用 bridge 功能的话 ebtables 也不用安装了, 但不安装的话 libvirtd 的日志里面会有个没有 ebtables 的报错,还是装一下吧。

启用并启动 libvirtd.service

1
sudo systemctl enable --now libvirtd.service

至此服务器端配置就结束了,是不是超级简单呢?

客户端

libvirt 提供了命令行管理程序 virsh 用于在命令行里面管理虚拟机,但是用命令行管理虚拟机过于硬核了吧(x

人生苦短,我选 GUI 客户端。

GUI 客户端有这样一些:

  • GNOME Boxes
  • Libvirt Sandbox
  • Remote Viewer
  • Qt VirtManager
  • Virtual Machine Manager

听说 Virtual Machine Manager 不错,Remote Viewer 是它的轻量级版本。我不是 GNOME 用户,然后另外两个软件源里没包。

果断选择 virt-manager

安装 virt-manager:

1
sudo pacman -S virt-manager

启动之后界面长这个样子:

连接到 libvirt 服务器

选择菜单 File -> Add Connection…

我要用 KVM,所以 Hypervisor 我选 QEMU/KVM

然后勾选 Connect to remote host over SSH

填好 Username 和 Hostname:

PS: 如果连接失败可能是你服务器上的用户没有加入 libvirt 组

ssh 到服务器上将用户添加到 libvirt 组

1
sudo gpasswd -a edward libvirt

创建虚拟机

成功连上之后就可以右键 New 来创建虚拟机

选择引导方式: 祖传PXE网络引导

选择系统类型:

然后设置 RAM 大小,CPU 核心数, 创建虚拟磁盘。

网络设置:

因为我路由器上已经有一个局域网的 bridge 叫做 br0 了,这里直接就用起来,选择 _Specify shared device name_并填入br0
就可以直接把虚拟机加入我们局域网的 LAN 侧。

点击 Finish 就能看到我们祖传的 netboot.lan 引导界面了:

Windows 怎么装就不用说了吧(x 祖传PE

使用 RDP 连接 Windows

故意把虚拟机配置为和其他设备在同一个局域网里面是有道理的,就是方便RDP的使用,毕竟 virtmanager 到路由器还套了层 SSH 协议,效率比较低,为了更流畅的桌面体验,既然已经装好了就换上RDP吧。

首先查看虚拟机网卡的MAC地址,然后用 dnsmasq 给虚拟机的网卡分配一个固定ip:

1
2
# win10-vm
dhcp-host=aa:bb:cc:dd:ee:ff,192.168.123.56

然后在系统设置中开启 Remote Desktop

然后就可以用支持 RDP 的远程桌面客户端,xfreerdp 或者 KRDC 来连接:
KRDC 实际上就是 KDE 对 xfreerdp 的再封装,降低了 xfreerdp 的使用门槛,
同时 KRDC 还支持 VNC, 支持使用 kwallet 保存密码,还是比较方便的。

如果你比较细心的话,就发现我在 Sound 那里选择了 Disable Sound,
然后在 Extra Options: 里面加入了 /sound:sys:pulse,format:1,quality:high,
因为 KRDC 的默认传给 xfreerdp/sound 参数声音听起来实在是辣耳朵(x

  • /scale-desktop:120 将桌面app缩放到 120%, 取值范围: 100-500
  • /scale-device:140 将应用商店APP缩放到 140%, 取值: 100 | 140 | 180

p.s. 如果你的字体看起来很丑的话,那多半是没开 Clear Type, 不知道为啥没有自动打开