作者:Chancel, 更新:2023 Apr 23, 字数:3678, 已阅:21
KVM (Kernel-based Virtual Machine) 是一种开源虚拟化技术,它是 Linux 内核的一部分。KVM 能够将 Linux 系统转化为一个 hypervisor,允许多个虚拟机在同一台物理服务器上运行。KVM 可以在 x86 架构的服务器上运行,并支持多种操作系统,包括 Linux、Windows、BSD 等,KVM 提供了高性能、安全性和可扩展性。
安装Ubuntu2204后,安装KVM软件
sudo apt update
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
sudo systemctl enable libvirtd
sudo systemctl start libvirtd
查看当前网络配置,网络配置文件位于 /etc/netplan/00-installer-config.yaml
,内容参考如下
network:
ethernets:
eno1: # 这是我的物理网卡,通过`ip a`可以确认,这里配置静态IPV4和动态IPV6
dhcp4: no
dhcp6: yes
bridges:
virbr1: # 创建一个桥接网卡,设置IP与DNS
dhcp4: no
addresses: [192.168.1.100/24]
nameservers:
addresses:
- 114.114.114.114
routes: # Ubuntu2204取消了Gateway4的写法,采用路由写法,`192.168.1.1` 是我的网关(路由器)
- to: default
via: 192.168.1.1
on-link: true
interfaces: [eno1] # 桥接到我的物理网卡
使上述配置生效
sudo netplan apply --debug
以下是检查桥接网络的方法(来自fabianlee.org)
# 查看所有桥接状态
sudo networkctl -a
# 查看virbr1状态
sudo networkctl status virbr1
# 显示所有桥接信息
brctl show
# 查看virbr1的网络信息
ip a show virbr1
此时你的网络配置看起来应该类似如下,virbr1
即我们配置的桥接网卡
➜ netplan ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master virbr1 state UP group default qlen 1000
link/ether 1c:69:7a:0c:a5:be brd ff:ff:ff:ff:ff:ff
altname enp0s31f6
3: virbr1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 72:de:2b:99:77:26 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.100/24 brd 192.168.1.255 scope global virbr1
valid_lft forever preferred_lft forever
确认virbr1
信息正常后,我们开始创建KVM的桥接网络配置,首先是编辑 /tmp/host-bridge.xml
文件,文件内容如下
<network>
<name>host-bridge</name>
<forward mode="bridge"/>
<bridge name="virbr1"/>
</network>
让kvm读取这个文件作为网络配置
virsh net-define /tmp/host-bridge.xml
virsh net-start host-bridge
virsh net-autostart host-bridge
检查是否设置成功,检查方法如下,请确保Autostart
和State
输出正常
➜ sudo virsh net-list --all
Name State Autostart Persistent
--------------------------------------------------
host-bridge active yes yes
再修改 /etc/sysctl.conf
文件,添加允许ipv4转发,如下
net.ipv4.ip_forward=1
让上述ipv4
转发设置生效
sudo sysctl -p
KVM的桥接网络便配置结束
创建一个Alpine3.16
操作系统的虚拟机,附带VNC远程,创建指令如下
sudo virt-install \
-n Alpine3.16 \
--description "Test VM with Alpine3.16" \
--os-type=Linux \
--os-variant=Alpine3.16 \
--ram=512 \
--vcpus=2 \
--disk path=/var/lib/libvirt/images/Alpine3.16.img,bus=virtio,size=64 \
--graphics vnc,listen=127.0.0.1 --noautoconsole \
--cdrom /var/lib/libvirt/images/Alpine3.16.iso
通过VNC+SSH隧道
的方式连接到这个虚拟机,顺利完成安装,安装完成先关机,再编辑虚拟机的配置文件
sudo virsh edit Alpine3.16
添加如下部分配置
<interface type='network'>
<source network='host-bridge'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
配置Alpine3.16
静态IP为192.168.1.101,访问192.168.1.1
没有问题则表示桥接网络配置成功
参考资料