lala.im:openSUSE Leap15.3安装KVM开设Windows11小鸡

運維技術·lala.im · 2021-12-18 · 71 人浏览

原文地址:https://lala.im/8232.html,請支持原作者!該處僅作轉載。

文章目录
本文记录一下安装和配置过程,服务器依旧是使用的kimsufi。这种安装方式和proxmox相比较之下,我觉得算各有优劣吧。
此安装方法最大的一个优势就是libvirt默认配置好了一个nat网络,如果是开nat小鸡等于是开箱即用,省去了配置网络的麻烦。劣势自然就是没有图形化界面,开小鸡的配置都得通过命令行。
得益于suse的全家桶,安装非常简单,执行下面的命令即可:

sudo zypper up
sudo zypper in -t pattern kvm_server kvm_tools

这会帮你把所有需要用到的软件包全部都装上,包括swtpm,ovmf(uefi)这类开设windows11小鸡需要用到的软件包。
启动libvirtd,检查运行状态:

sudo systemctl enable --now libvirtd
sudo systemctl status libvirtd

然后把防火墙的区域设置为trusted:

sudo firewall-cmd --set-default-zone=trusted
sudo firewall-cmd --reload

查看当前的网络,默认情况下有一个名为的default的网络处于没有开启的状态:

sudo virsh net-list --all

这个default网络就是自带的nat网络,你可以查看它的配置进行确认:

sudo virsh net-edit default

如果没有特殊需求的话,不需要改它的配置,直接开启这个网络并设置开机自启即可:

sudo virsh net-start default
sudo virsh net-autostart default

检查网卡:

ip a

正常情况下,可以发现机器多出了一个名为virbr0的网卡:

7: virbr0:  mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 52:54:00:3a:33:78 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever

libvirt有两个默认目录:

/var/lib/libvirt/boot // 存放各种iso镜像
/var/lib/libvirt/images // 存放虚拟机的硬盘

我们把virtio驱动的iso下载上面的boot目录内:

sudo -i
cd /var/lib/libvirt/boot
wget https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso
exit

windows11的iso也是如此,可以在这里获取下载链接:
https://www.microsoft.com/zh-cn/software-download/windows11
现在就可以开设windows11小鸡了:

sudo virt-install \
--name windows11 \
--memory 4096 \
--vcpus 4 \
--cpu host-passthrough \
--boot uefi \
--machine q35 \
--cdrom /var/lib/libvirt/boot/win11.iso \
--disk /var/lib/libvirt/boot/virtio-win.iso,device=cdrom,bus=sata \
--disk size=200,bus=virtio,cache=writeback,format=qcow2 \
--network bridge=virbr0,model=virtio \
--tpm backend.type=emulator,backend.version=2.0,model=tpm-tis \
--graphics vnc,port=5901,listen=0.0.0.0,password=imlala

以下是对上面所用到的参数注释:

name windows11 // 虚拟机的名字
memory 4096 // 4g内存
vcpus 4 // 4核心cpu
cpu host-passthrough // 设置小鸡的cpu模型与母鸡一致
boot uefi // 使用ovmf(uefi)固件
machine q35 // 机型q35
cdrom /var/lib/libvirt/boot/win11.iso // windows11的iso
disk /var/lib/libvirt/boot/virtio-win.iso,device=cdrom,bus=sata // virtio驱动的iso
disk size=200,bus=virtio,cache=writeback,format=qcow2 // 小鸡的硬盘200g,使用virtio驱动并设置缓存模式为回写,硬盘格式qcow2(支持快照)
network bridge=virbr0,model=virtio // 网络选择桥接之前默认启用的virbr0网卡,并使用virtio驱动
tpm backend.type=emulator,backend.version=2.0,model=tpm-tis // 模拟tpm2.0
graphics vnc,port=5901,listen=0.0.0.0,password=imlala // 开启vnc,端口5901,密码imlala

打开vnc即可开始安装,如果vnc连接比较慢,没来得及回车进入windows11的安装界面,这时候小鸡应该会自动进入bios的界面,在这个界面选择第一个启动项启动即可。
在windows11准备安装期间,需要安装virtio的硬盘以及网卡驱动,这里就不详细说明了,可以参考我的这篇文章,步骤是一模一样的:
Kimsufi独服使用Proxmox7创建Windows11小鸡

在windows11准备安装完成后,机器会自动关机,此时重新开机即可继续安装:

sudo virsh start windows11

以上就完成了所有的配置。下面这些配置是可选的。
使用默认的nat网络配置,母鸡与小鸡之间的网络是互通的,并且小鸡也能直接访问外部网络,但此时外部网络是访问不到小鸡的。如果要让外部网络也能访问到小鸡则需要用到端口转发。原则上你只需要写几条firewalld或者iptables规则即可,但是这里我介绍一个比较实用的方法。
首先查看小鸡的ip:

sudo virsh domifaddr windows11 --source arp

看到ip地址是192.168.122.232:

 Name       MAC address          Protocol     Address
-------------------------------------------------------------------------------
 vnet7      52:54:00:f3:bb:4b    ipv4         192.168.122.232/0

关机:

sudo virsh shutdown windows11

安装libvirt-hook-qemu:

sudo zypper in -t pattern devel_basis
sudo zypper in git
cd /usr/local/src
sudo git clone https://github.com/saschpe/libvirt-hook-qemu.git
cd libvirt-hook-qemu
sudo make install

编辑libvirt-hook-qemu配置文件:

sudo nano /etc/libvirt/hooks/hooks.json

修改里面的配置为如下所示:

{
    "windows11": {
        "interface": "virbr0",
        "private_ip": "192.168.122.232",
        "port_map": {
            "tcp": [[33389, 3389],[8443, 443]]
        }
    }
}

注释:

windows11 // 对应小鸡的name,哪台小鸡需要做端口转发就写哪台的名字
virbr0 // 对应nat网卡的名字
private_ip // 小鸡的ip
[[33389, 3389],[8443, 443]] // 33389是母鸡的端口,3389是小鸡的端口

重启libvirtd:

sudo systemctl restart libvirtd

开机:

sudo virsh start windows11

使用这种方式可以轻松的管理小鸡要转发的端口,并且随小鸡重启生效,也不用担心规则失效的问题。
kimsufi服务器是有很多ipv6可用的,如果你想开设拥有独立ipv6的小鸡,可以看看下面的配置。在分配这些ipv6之前,我们需要先创建一个桥接网卡。
这里我使用yast2来完成。(重要:接下来截图的步骤,必须一步步来,顺序不能颠倒,否则机器的网络会失联)
启动yast:

sudo yast2

第一步,找到system–>network settings进入,点击add添加设备:

範例
第二步,类型选择bridge:

範例
第三步,配置网桥的ipv4地址,同时在additional addresses这里点击add添加一个ipv6地址,用于给母鸡配置ipv6:

範例
[第四步非常重要]
第四步,不要在Bridged Devices界面选择要桥接的设备,直接选择Next完成配置,让yast先把这个br0网桥设备建立好。
接着在Routing界面添加两条路由,配置好br0这个网桥的ipv4网关以及ipv6网关,同时启用ipv6转发:

範例
第五步,编辑之前建立好的br0网桥,在Bridged Devices界面选择要桥接的设备:

範例
最终正确的配置:

範例
上述配置中需要用到的ipv4/ipv4网关/ipv6/ipv6网关/子网掩码等信息可参考这篇文章查看:
Kimsufi独服安装openSUSE Leap15.3

安装ndppd:

sudo zypper in ndppd

编辑ndppd配置文件:

sudo nano /etc/ndppd.conf

修改配置为如下所示:

proxy br0 {
  rule 2001:41d0:x:xxxx::/64 {
    static
  }
}

启动ndppd并设置开机自启:

sudo systemctl enable --now ndppd

如果你想实现slacc自动分配ipv6地址,可以编辑radvd的配置文件:

sudo nano /etc/radvd.conf

修改配置为如下所示:

interface br0
{
        AdvSendAdvert on;
        prefix 2001:41d0:x:xxxx::/64 {
                AdvOnLink on;
                AdvAutonomous on;
                AdvRouterAddr on;
        };
        RDNSS 2001:4860:4860::8888 {
        };
};

启动radvd并设置开机自启:

sudo systemctl enable --now radvd

给刚才新建的windows11小鸡添加网卡:

sudo virsh attach-interface \
--domain windows11 \
--type bridge \
--source br0 \
--model virtio \
--config \
--live

要移除添加的网卡,首先查看小鸡所拥有网卡的mac地址:

sudo virsh domiflist windows11

回显如下:

 Interface   Type     Source   Model    MAC
-----------------------------------------------------------
 vnet0       bridge   br0      virtio   52:54:00:c1:7f:cb
 vnet1       bridge   virbr0   virtio   52:54:00:f3:bb:4b

指定网卡的mac地址进行移除:

sudo virsh detach-interface \
--domain windows11 \
--type bridge \
--mac 52:54:00:c1:7f:cb \
--config \
--live

你也可以使用virt-install在部署小鸡的时候直接添加多个网卡,一个示例配置:

sudo virt-install \
...
--network bridge=virbr0,model=virtio \
--network bridge=br0,model=virtio \
...

以上配置的网络,无论是ipv4还是ipv6都实现了自动分配地址,小鸡内无需做额外的配置。
ipv4是libvirt自带的dhcp服务来分配,ipv6是我们手动配置的radvd来分配。win系统如果不能自动分配到dns服务器,自己手动设置一个即可。
感谢以下网站提供的帮助:
https://wiki.libvirt.org/page/Networking#Arbitrary_changes_to_the_network\nhttps://github.com/saschpe/libvirt-hook-qemu\nhttps://jamielinux.com/docs/libvirt-networking-handbook\nhttps://www.smoothnet.org/qemu-tpm\nhttps://forums.centos.org/viewtopic.php?t=71454&start=10
Configure KVM Networking With virsh, nmcli and brctl in Linux

運維技術 lala.im
Theme Jasmine by Kent Liao