KVM
Haixin Pang 八月 21, 2025 #NOTE相关
virbr0 桥接网络配置
virbr0 是 libvirt 默认创建的桥接网络接口,允许虚拟机通过宿主机的网络连接到外部网络。它通常配置为 NAT 模式,这意味着虚拟机可以访问外部网络,但外部网络无法直接访问虚拟机。
配置文件位于 /etc/libvirt/qemu/networks/default.xml。
环境
检查CPU虚拟化支持
输出大于0表示支持。
安装相关软件包
Debian/Ubuntu
Manjaro
添加当前用户到 libvirt 和 kvm 组
检查并启动 libvirtd 服务与默认网络
安装Ubuntu虚拟机
下载Ubuntu ISO
准备硬盘
配置
创建 user-data 文件:
#cloud-config
hostname: np-ubuntu18
manage_etc_hosts: true
users:
- name: phx2
sudo: ALL=(ALL) NOPASSWD:ALL
groups: users, admin
home: /home/phx2
shell: /bin/bash
lock_passwd: false
ssh_pwauth: true
disable_root: false
chpasswd:
list: |
vmadm:password
expire: false
按实际情况修改 hostname、users 和 chpasswd。
创建 meta-data 空文件
生成 seed 文件
创建虚拟机
# sudo virt-install --name np-ubuntu18 --os-variant ubuntu18.04 --vcpus 2 --ram 2048 --location $iso_path --network bridge=virbr0,model=virtio --graphics none --extra-args='console=ttyS0,115200n8 serial' --disk path=/var/lib/libvirt/images/ubuntu18.qcow2,size=40,format=qcow2,bus=virtio
--name:虚拟机名称--os-variant:操作系统版本--vcpus:虚拟CPU数量--ram:内存大小(MB)--location:安装介质路径(ISO文件路径)--network:网络配置,这里使用桥接模式--graphics none:无图形界面,使用命令行安装--extra-args:传递给安装程序的额外参数,这里配置为使用串口控制台--disk:磁盘配置,这里创建一个40GB的QCOW2格式磁盘
完整脚本
# qemu-img create -F qcow2 -b ./$VM_IMAGE -f qcow2 ./$VM_NAME.qcow2 10G
# cat >network-config <<EOF
# ethernets:
# $INTERFACE:
# addresses:
# - $IP_ADDR/24
# dhcp4: false
# gateway4: 192.168.122.1
# match:
# macaddress: $MAC_ADDR
# nameservers:
# addresses:
# - 1.1.1.1
# - 8.8.8.8
# set-name: $INTERFACE
# version: 2
# EOF
# cloud-localds -v --network-config=network-config ./$VM_NAME-seed.qcow2 user-data meta-data
virt-install
安装 Windows 10
准备virt-install
下载 Windows 10 ISO 和 VirtIO 驱动
&clcid=0x409&culture=en-us&country=US
安装
注意
安装时需要加载 VirtIO 驱动
在安装过程中,当提示选择磁盘时,选择加载驱动程序,然后选择 VirtIO 驱动的w10目录
安装完毕之后需要更新驱动
- 打开
设备管理器 - 右键点击需要更新的设备,选择
更新驱动程序 - 选择
浏览计算机以查找驱动程序软件 - 选择
D:\(假设 VirtIO 驱动挂载在D盘)进行更新(根目录即可)
取消virtio-win.iso的挂载
执行以下命令取消挂载:
注意如果虚拟机正在运行,需要添加--live参数
网络配置
前面提到 virbr0 是 libvirt 默认创建的桥接网络接口,允许虚拟机通过宿主机的网络连接到外部网络。它通常配置为 NAT 模式,这意味着虚拟机可以访问外部网络,但外部网络无法直接访问虚拟机。
我们可以通过配置桥接网络来实现虚拟机与宿主机在同一局域网内通信。
配置桥接网络
配置宿主机桥接接口
libvirt 桥接网络需要宿主机上有一个桥接接口。这里以创建一个名为 virbr1 的桥接接口为例。
编辑宿主机的网络配置文件,一般需要根据具体的网络管理工具进行配置,例如Netplan、NetworkManager或systemd-networkd。这里以systemd-networkd为例:
创建一个新的网络设备/etc/systemd/network/20-bridge-br1.netdev:
[NetDev]
virbr1
bridge
创建桥接接口配置文件/etc/systemd/network/30-bridge-br1.network:
[Match]
virbr1
[Network]
DHCP=yes
修改宿主机的物理网络接口配置文件,可能是/etc/systemd/network/89-ethernet.network,具体文件名根据实际情况而定:
[Match]
enp5s0
[Network]
virbr1
然后重启systemd-networkd服务:
编辑libvirt网络配置文件
新建一个桥接网络配置文件br1.xml,内容如下:
br1
f1e12345-abcd-4e67-9876-123456abcdef
name:网络名称,可以自定义uuid:网络的唯一标识符,可以使用uuidgen命令生成forward mode='bridge':设置为桥接模式bridge name:桥接接口名称,需要与宿主机上的桥接接口名称一致
定义并启动新网络
配置虚拟机使用新网络
在创建虚拟机时,使用--network bridge=virbr1,model=virtio参数指定使用新的桥接网络。
或者直接修改已有虚拟机的网络配置:
将网络部分修改为:
<!-- 替换为实际的MAC地址 -->
保存并退出后,重启虚拟机使配置生效: