本文记录一下安装和配置过程,服务器依旧是使用的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
配置nat网络
查看当前的网络,默认情况下有一个名为的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
准备iso镜像
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的硬盘以及网卡驱动,这里就不详细说明了,可以参考我的这篇文章,步骤是一模一样的:
在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网关/子网掩码等信息可参考这篇文章查看:
安装并配置ndppd
安装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
配置radvd
如果你想实现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
https://github.com/saschpe/libvirt-hook-qemu
https://jamielinux.com/docs/libvirt-networking-handbook
https://www.smoothnet.org/qemu-tpm
https://forums.centos.org/viewtopic.php?t=71454&start=10
Configure KVM Networking With virsh, nmcli and brctl in Linux
最新评论
5211314
能不能教我 一点不会