当前位置: 首页 > news >正文

Ubuntu 安装 KVM 虚拟化

1. Ubuntu 安装 KVM 虚拟化

KVM 是 Linux 内核中一个基于 hypervisor 的虚拟化模块,它允许用户在 Linux 操作系统上创建和管理虚拟机。
在这里插入图片描述

如果机器的CPU不支持硬件虚拟化扩展,是无法使用KVM(基于内核的虚拟机)直接创建和运行虚拟机的。此时最多只能使用QEMU的完全软件仿真模式来运行虚拟机,但是性能会极度低下。

检查您的 CPU 是否支持虚拟化:

运行以下命令,输出大于0,说明KVM与系统兼容,可以安装。

egrep -c 'vmx|svm' /proc/cpuinfo

或者安装cpu-checker工具。

apt install -y cpu-checker

它应该输出:

root@ubuntu:~# kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used

Vmware workstation可以通过编辑虚拟机处理器选项,开启嵌套虚拟化。
在这里插入图片描述

环境信息:

  • 安装环境:vmware workstation
  • 操作系统:ubuntu 22.04 LTS

安装kvm软件包

配置主机名

root@ubuntu:~# hostnamectl set-hostname kvm-host

更新系统

apt update -y

安装必要的包:

## qemu+kvm
apt install -y qemu-kvm 
## libvirt
apt install -y virt-manager libvirt-daemon-system virtinst libvirt-clients
## bridge tool
apt install -y bridge-utils

安装包说明:

  • qemu-kvm - 为 KVM 管理程序提供硬件模拟的软件程序
  • libvirt-daemon-system - 将 libvirt 守护程序作为系统服务运行的配置文件
  • libvirt-clients - 用来管理虚拟化平台的软件
  • bridge-utils - 用来配置网络桥接的命令行工具
  • virtinst - 用来创建虚拟机的命令行工具

一旦软件包被安装好,libvirt 守护程序将会自动启动。你可以通过运行下面的命令验证:

root@kvm-host:~# systemctl is-active libvirtd
active

用户添加到 KVM 和 Libvirt 组

想要创建和管理虚拟机,你需要添加你的用户到libvirtkvm用户组。

sudo usermod -aG kvm $USER
sudo usermod -aG libvirt $USER

网络设置

在libvirt 安装过程中,一个被称为 virbr0 的桥接设备默认被创建。这个设备使用 NAT 来连接客户机到外面的世界。

查看网卡变化,新增了一个virtbr0的网桥接口。

root@kvm-host:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:15:cb:54 brd ff:ff:ff:ff:ff:ffaltname enp2s1inet 192.168.93.9/24 brd 192.168.93.255 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe15:cb54/64 scope link valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000link/ether 52:54:00:93:99:53 brd ff:ff:ff:ff:ff:ffinet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0valid_lft forever preferred_lft forever

运行 brctl 工具来列出当前的网桥和它们连接的接口:

root@kvm-host:~# brctl show
bridge name     bridge id               STP enabled     interfaces
virbr0          8000.525400939953       yes

默认网络设置适合大部分 Ubuntu 用户,但是有限制,由于虚拟机地址段为私有IP地址,你只能从虚拟机所在宿主机访问虚拟机地址,无法从外部网络访问虚拟机地址。

Libvirt默认NAT网络模式原理图:
在这里插入图片描述

如果需要从外部连接虚拟机,需要创建一个新的网桥,将该网桥桥接到物理网卡,以便虚拟机配置物理网段的IP地址,进而实现通过外部网络直连虚拟机。

下载 cloud image 镜像

下面以默认NAT网络模式为例,介绍使用 ubuntu cloud image 快速启动虚拟机。

jammy(Ubuntu Server 22.04 LTS)为例

# 官方源
wget https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img# 国内源
wget https://mirrors.tuna.tsinghua.edu.cn/ubuntu-cloud-images/jammy/current/jammy-server-cloudimg-amd64.img

安装guestfs-tools 镜像定制工具

apt install -y guestfs-tools

创建镜像模板目录

mkdir -p /var/lib/libvirt/images/templates

复制镜像到模板目录

cp jammy-server-cloudimg-amd64.img /var/lib/libvirt/images/templates/

定制镜像参数

export image=/var/lib/libvirt/images/templates/jammy-server-cloudimg-amd64.img
virt-customize -a $image --run-command 'adduser ubuntu'
virt-customize -a $image --run-command 'echo "ubuntu:ubuntu123" | chpasswd'
virt-customize -a $image --run-command 'adduser ubuntu sudo'
virt-customize -a $image --run-command 'apt update -y'
virt-customize -a $image --run-command 'apt install -y qemu-guest-agent'

参数说明:

  • 创建 ubuntu 用户,密码为 ubuntu123,并赋予sudo权限
  • 更新系统软件索引(可选)
  • 安装必要的软件包(可选)

创建虚拟机

创建虚拟机存储路径并复制镜像模板

mkdir -p /var/lib/libvirt/images/ubuntu01
cp /var/lib/libvirt/images/templates/jammy-server-cloudimg-amd64.img /var/lib/libvirt/images/ubuntu01/

使用virt-install命令创建虚拟机

virt-install \--name ubuntu01 \--vcpus 1 \--memory 2048 \--disk path=/var/lib/libvirt/images/ubuntu01/jammy-server-cloudimg-amd64.img \--os-variant ubuntu22.04 \--import \--noautoconsole

参数说明:

  • --name:可选,指定虚拟机名称
  • --vcps:可选,指定虚拟机cpu大小
  • --memory:可选,指定虚拟机内存大小
  • --disk path:必选,指定虚拟机镜像位置
  • --os-variant:必选,指定虚拟机操作系统类型
  • --import :必选,指定虚拟机安装方式,安装方式不同该参数不同
  • --noautoconsole:可选,不指定该参数virt-install命令将始终处于挂起状态,需要另开窗口登录虚拟机

说明:使用osinfo-query命令可以列出--os-variant选项支持的所有参数。

$ apt install -y libosinfo-bin
$ osinfo-query os

命令示例输出如下

root@kvm-host:~# virt-install \--name ubuntu01 \--vcpus 1 \--memory 2048 \--disk path=/var/lib/libvirt/images/ubuntu01/jammy-server-cloudimg-amd64.img \--os-variant ubuntu22.04 \--import \--noautoconsoleStarting install...
Creating domain...                                                                                                                                                                   |    0 B  00:00:00     
Domain creation completed.
root@kvm-host:~#

创建虚拟机后,查看网口及网桥变化,主机新增vnet0网卡,网桥新增vnet0接口,说明虚拟机连接到了网桥上。

root@kvm-host:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:15:cb:54 brd ff:ff:ff:ff:ff:ffaltname enp2s1inet 192.168.93.9/24 brd 192.168.93.255 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe15:cb54/64 scope link valid_lft forever preferred_lft forever
3: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether 52:54:00:93:99:53 brd ff:ff:ff:ff:ff:ffinet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0valid_lft forever preferred_lft forever
4: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master virbr0 state UNKNOWN group default qlen 1000link/ether fe:54:00:fc:fe:df brd ff:ff:ff:ff:ff:ffinet6 fe80::fc54:ff:fefc:fedf/64 scope link valid_lft forever preferred_lft foreverroot@kvm-host:~# brctl show
bridge name     bridge id               STP enabled     interfaces
virbr0          8000.525400939953       yes             vnet0

查看虚拟机运行状态

root@kvm-host:~# virsh listId   Name       State
--------------------------1    ubuntu01   runningroot@kvm-host:~# 

使用virsh console命令连接到虚拟机,使用上面定义的用户密码ubuntu/ubuntu123登录到虚拟机

virsh console ubuntu01

示例命令输出如下:

root@kvm-host:~# virsh console ubuntu01 
Connected to domain 'ubuntu01'
Escape character is ^] (Ctrl + ])ubuntu login: ubuntu
Password: 
Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-100-generic x86_64)* Documentation:  https://help.ubuntu.com* Management:     https://landscape.canonical.com* Support:        https://ubuntu.com/proSystem information as of Fri Mar 15 11:31:43 UTC 2024System load: 0.0458984375      Memory usage: 8%   Processes:       114Usage of /:  81.3% of 1.96GB   Swap usage:   0%   Users logged in: 0Expanded Security Maintenance for Applications is not enabled.1 update can be applied immediately.
1 of these updates is a standard security update.
To see these additional updates run: apt list --upgradableEnable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro statusThe programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.ubuntu@ubuntu:~$ 
ubuntu@ubuntu:~$ cat /etc/os-release 
PRETTY_NAME="Ubuntu 22.04.4 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.4 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
ubuntu@ubuntu:~$ 

切换到root用户,输入ubuntu用户的密码ubuntu123

ubuntu@ubuntu:~$ sudo -i
[sudo] password for ubuntu: 
root@ubuntu:~# 
root@ubuntu:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000link/ether 52:54:00:fc:fe:df brd ff:ff:ff:ff:ff:ff
root@ubuntu:~# 

可以看到网卡未获取任何IP地址,通过主机上的网桥接口virbr0可以确认网桥地址段默认为192.168.122.0/24,网关地址为192.168.122.1/24,该地址段和网关就是虚拟机可用的地址段和网关。

确认虚拟机网卡名称为enp1s0,虚拟机中创建网卡配置文件

cat >/etc/netplan/00-installer-config.yaml<<EOF
network:version: 2ethernets:enp1s0:dhcp4: falseaddresses:- 192.168.122.10/24nameservers:addresses:- 223.5.5.5- 223.6.6.6routes:- to: defaultvia: 192.168.122.1
EOF

启用网卡配置

root@ubuntu:~# chmod 600 /etc/netplan/00-installer-config.yaml
root@ubuntu:~# netplan apply 

查看虚拟机网口状态为UP,并且配置了IP地址:

root@ubuntu:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 52:54:00:fc:fe:df brd ff:ff:ff:ff:ff:ffinet 192.168.122.10/24 brd 192.168.122.255 scope global enp1s0valid_lft forever preferred_lft foreverinet6 fe80::5054:ff:fefc:fedf/64 scope link valid_lft forever preferred_lft forever

测试虚拟机访问外部网络

root@ubuntu:~# ping www.baidu.com -c 4
PING www.a.shifen.com (183.2.172.42) 56(84) bytes of data.
64 bytes from 183.2.172.42 (183.2.172.42): icmp_seq=1 ttl=127 time=7.56 ms
64 bytes from 183.2.172.42 (183.2.172.42): icmp_seq=2 ttl=127 time=8.46 ms
64 bytes from 183.2.172.42 (183.2.172.42): icmp_seq=3 ttl=127 time=8.63 ms
64 bytes from 183.2.172.42 (183.2.172.42): icmp_seq=4 ttl=127 time=8.40 ms--- www.a.shifen.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3007ms
rtt min/avg/max/mdev = 7.556/8.262/8.627/0.416 ms
root@ubuntu:~# 

退出虚拟机执行exit命令,然后按键盘快捷键ctrl + ]

在kvm主机上查看虚拟机网卡IP地址(依赖虚拟机中的qemu-guest-agent

root@kvm-host:~# virsh domifaddr ubuntu01 --source agentName       MAC address          Protocol     Address
-------------------------------------------------------------------------------lo         00:00:00:00:00:00    ipv4         127.0.0.1/8-          -                    ipv6         ::1/128enp1s0     52:54:00:fc:fe:df    ipv4         192.168.122.10/24-          -                    ipv6         fe80::5054:ff:fefc:fedf/64

默认虚拟机不会随主机开机自动启动,可以使用以下命令配置随宿主机自动启动

root@kvm-host:~# virsh autostart  ubuntu01

如果需要删除虚拟机,需要先将虚拟机关机

root@kvm-host:~# virsh shutdown ubuntu01

确认虚拟机已关机

root@kvm-host:~# virsh list --allId   Name       State
----------------------------    ubuntu01   shut off

然后执行以下命令删除虚拟机

root@kvm-host:~# virsh undefine ubuntu01

如果需要彻底删除虚拟机,则进一步删除虚拟机磁盘文件

root@kvm-host:~# rm -rf /var/lib/libvirt/images/ubuntu01/

2. 配置网桥共享物理网卡

桥接网络与其他虚拟机共享主机的真实网络接口,以连接到外部网络。因此,每个 VM 都可以直接绑定到任何可用的 IPv4 或 IPv6 地址,就像一台物理计算机一样。

默认情况下,KVM 设置了一个专用虚拟网桥,以便所有 VM 都可以在主机内相互通信。它提供自己的子网和 DHCP 来配置虚拟机的网络,并使用 NAT 访问主机网络。

查看 KVM 默认虚拟接口的 IP 地址:

root@kvm-host:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:15:cb:54 brd ff:ff:ff:ff:ff:ffaltname enp2s1inet 192.168.93.9/24 brd 192.168.93.255 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe15:cb54/64 scope link valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000link/ether 52:54:00:93:99:53 brd ff:ff:ff:ff:ff:ffinet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0valid_lft forever preferred_lft forever

可以看到,KVM默认网络virbr0使用192.168.122.1/24 IP地址。所有虚拟机都将使用192.168.122.0/24 IP 范围内的 IP 地址,主机操作系统可通过192.168.122.1访问。应该能够从虚拟机操作系统内部通过 ssh 进入主机操作系统(位于 192.168.122.1)并使用 scp 来回复制文件。

如果您只从主机本身访问内部的 VM 就可以了。但是,无法从网络中的其他远程系统访问虚拟机。

为了从其他远程主机访问虚拟机,必须设置一个在主机网络上运行的公共网桥,并使用主机网络上的任何外部 DHCP 服务器。通俗地说,我们将使所有虚拟机使用主机系统使用的相同 IP 系列。

如果你打算从本机(Ubuntu 22.04)之外访问 KVM 虚拟机,你必须将虚拟机的网卡映射至网桥。virbr0 网桥是 KVM 安装完成后自动创建的,仅做测试用途。

物理桥接网络示意图:
在这里插入图片描述

禁用 KVM默认网络

接下来,我们应该禁用 KVM 为自己安装的默认网络。查看默认网络

root@kvm-host:~# virsh net-list Name      State    Autostart   Persistent
--------------------------------------------default   active   yes         yes

使用命令删除默认的 KVM 网络:

virsh net-destroy default
virsh net-undefine default

查看网桥及网桥接口都已经被删除

root@kvm-host:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:15:cb:54 brd ff:ff:ff:ff:ff:ffaltname enp2s1inet 192.168.93.9/24 brd 192.168.93.255 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe15:cb54/64 scope link valid_lft forever preferred_lft forever
root@kvm-host:~# brctl show
root@kvm-host:~# 

设置 KVM 公共网桥

现在,让我们设置 KVM 公共网桥以在创建新 VM 时使用。查找网络接口ens33的MAC地址:

root@kvm-host:~# ip a show 

或者你可以运行命令,它将在 serial: 条目中输出 MAC 地址。

lshw -C network

为 VM(虚拟机)创建桥接网络。首先查看主机网卡默认配置

root@kvm-host:~# cat /etc/netplan/00-installer-config.yaml 
# This is the network config written by 'subiquity'
network:ethernets:ens33:addresses:- 192.168.93.9/24gateway4: 192.168.93.2nameservers:addresses:- 114.114.114.114- 8.8.8.8search: []version: 2

修改后如下,清除主机网卡ens33上的IP信息,转移到br0网桥上

$ sudo nano /etc/netplan/00-installer-config.yaml
network:ethernets:ens33:dhcp4: falsedhcp6: falsebridges:br0:interfaces: [ ens33 ]dhcp4: falsedhcp6: falseaddresses: [192.168.93.9/24]macaddress: 00:0c:29:15:cb:54routes:- to: defaultvia: 192.168.93.2nameservers:addresses: ["223.5.5.5","223.6.6.6"]parameters:stp: falseforward-delay: 4version: 2

请注意:需要将 br0macaddress 设置为在上面找到的 ens33 的 MAC 地址。

测试网卡配置是否正确

netplan generate

确认检查无报错,使用 Netplan 应用更改

netplan apply

使用 ip addr 命令查看更改,如下所示:

root@kvm-host:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000link/ether 00:0c:29:15:cb:54 brd ff:ff:ff:ff:ff:ffaltname enp2s1
6: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether 00:0c:29:15:cb:54 brd ff:ff:ff:ff:ff:ffinet 192.168.93.9/24 brd 192.168.93.255 scope global br0valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe15:cb54/64 scope link valid_lft forever preferred_lft forever
root@kvm-host:~# 

查看netplan创建的网桥及网桥上的接口

root@kvm-host:~# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.000c2915cb54       no              ens33

添加网桥到KVM

使用以下内容创建文件 br0.xml

mkdir -p /etc/kvm/
cat >/etc/kvm/host-bridge.xml<<EOF
<network><name>host-bridge</name><forward mode="bridge"/><bridge name="br0"/>
</network>
EOF

例如,该文件可能位于Linux 用户主目录中。如果在 root 下,它可能是/root/br0.xml

  • name – 虚拟网络的简称。它可以是任何字母数字字符串
  • forward – 表示虚拟网络必须连接到物理网络。 mode=“bridge” 在我们的例子中意味着正在连接到在 libvirt 之外创建的网桥。
  • bridge – 确定要连接的网桥的名称。
virsh net-define /etc/kvm/host-bridge.xml
virsh net-start host-bridge
virsh net-autostart host-bridge

查看新增的网络

root@kvm-host:~# virsh net-listName          State    Autostart   Persistent
------------------------------------------------host-bridge   active   yes         yes

现在,安装 KVM 后,您可以继续在 KVM 上创建 Ubuntu 22.04 虚拟机。

测试创建虚拟机

新建虚拟机ubuntu02,创建存储路径并复制镜像模板

mkdir -p /var/lib/libvirt/images/ubuntu02
cp /var/lib/libvirt/images/templates/jammy-server-cloudimg-amd64.img /var/lib/libvirt/images/ubuntu02/

运行同样命令创建虚拟机

virt-install \--name ubuntu02 \--vcpus 1 \--memory 2048 \--disk path=/var/lib/libvirt/images/ubuntu02/jammy-server-cloudimg-amd64.img \--os-variant ubuntu22.04 \--import \--noautoconsole

连接到ubuntu02虚拟机

root@kvm-host:~# virsh console ubuntu02

确认虚拟机网卡名称为enp1s0,虚拟机中创建网卡配置文件,注意这次配置的虚拟机IP与主机同一个网段。

cat >/etc/netplan/00-installer-config.yaml<<EOF
network:version: 2ethernets:enp1s0:dhcp4: falseaddresses:- 192.168.93.100/24nameservers:addresses:- 223.5.5.5- 223.6.6.6routes:- to: defaultvia: 192.168.93.2
EOF

启用网卡配置

root@ubuntu:~# chmod 600 /etc/netplan/00-installer-config.yaml
root@ubuntu:~# netplan apply 

查看虚拟机网口状态为UP,并且配置了IP地址:

root@ubuntu:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 52:54:00:d0:fd:76 brd ff:ff:ff:ff:ff:ffinet 192.168.93.100/24 brd 192.168.93.255 scope global enp1s0valid_lft forever preferred_lft foreverinet6 fe80::5054:ff:fed0:fd76/64 scope link valid_lft forever preferred_lft forever

测试虚拟机访问外部网络

root@ubuntu:~# ping www.baidu.com -c 4
PING www.a.shifen.com (183.2.172.185) 56(84) bytes of data.
64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=1 ttl=128 time=7.60 ms
64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=2 ttl=128 time=7.66 ms
64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=3 ttl=128 time=7.32 ms
64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=4 ttl=128 time=7.35 ms--- www.a.shifen.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3006ms
rtt min/avg/max/mdev = 7.321/7.484/7.662/0.148 ms
root@ubuntu:~# 

测试外网访问虚拟机

C:\Users\pc>ping 192.168.93.100正在 Ping 192.168.93.100 具有 32 字节的数据:
来自 192.168.93.100 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.93.100 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.93.100 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.93.100 的回复: 字节=32 时间<1ms TTL=64192.168.93.100 的 Ping 统计信息:数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):最短 = 0ms,最长 = 1ms,平均 = 0msC:\Users\pc>

配置SSH远程登录,修改以下两项

# vim /etc/ssh/sshd_config
PermitRootLogin yes
PasswordAuthentication yes

删除其他ssh配置,为root用户设置密码。

# rm -rf /etc/ssh/sshd_config.d/60-cloudimg-settings.conf
# ssh-keygen -A
# passwd root

重启sshd服务

systemctl restart sshd

测试通过SSH连接到虚拟机

C:\Users\pc>ssh root@192.168.93.100
root@192.168.93.100's password:
Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-100-generic x86_64)* Documentation:  https://help.ubuntu.com* Management:     https://landscape.canonical.com* Support:        https://ubuntu.com/proSystem information as of Fri Mar 15 12:28:35 UTC 2024System load:  0.0048828125      Processes:               116Usage of /:   81.7% of 1.96GB   Users logged in:         1Memory usage: 9%                IPv4 address for enp1s0: 192.168.93.100Swap usage:   0%Expanded Security Maintenance for Applications is not enabled.1 update can be applied immediately.
1 of these updates is a standard security update.
To see these additional updates run: apt list --upgradableEnable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro statusFailed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settingsLast login: Fri Mar 15 12:28:35 2024 from 192.168.93.1
root@ubuntu:~#

参考:https://docs.nvidia.com/dgx/bp-dgx/dgx2-kvm-networking.html

相关文章:

Ubuntu 安装 KVM 虚拟化

1. Ubuntu 安装 KVM 虚拟化 KVM 是 Linux 内核中一个基于 hypervisor 的虚拟化模块&#xff0c;它允许用户在 Linux 操作系统上创建和管理虚拟机。 如果机器的CPU不支持硬件虚拟化扩展&#xff0c;是无法使用KVM(基于内核的虚拟机)直接创建和运行虚拟机的。此时最多只能使用…...

SA3D:基于 NeRF 的三维场景分割方法

Paper: Cen J, Zhou Z, Fang J, et al. Segment anything in 3d with nerfs[J]. Advances in Neural Information Processing Systems, 2024, 36. Introduction: https://jumpat.github.io/SA3D/ Code: https://github.com/Jumpat/SegmentAnythingin3D SA3D 是一种用于 NeRF 表…...

mysql实战开发之 mysql 删除一张表某个字段的sql语句

有一张表, 我需要删除这张表其中的某一个或者某几个字段, 相信大家在日常开发中应该会遇到这种情况, 然后刚好自己接触的项目安装的mysql关闭了允许远程连接的设置, 也就是说不允许使用类似于navicat 等可视化工具连接, 那么就没办法通过可视化工具直接去通过鼠标操作就可以 完…...

Selenium控制已运行的Edge和Chrome浏览器——在线控制 | 人机交互(详细启动步骤和bug记录)

文章目录 前期准备1. 浏览器开启远程控制指令&#xff08;1&#xff09;Edge&#xff08;2&#xff09;Chrome 2. 执行python代码&#xff08;1&#xff09;先启动浏览器后执行代码&#xff08;2&#xff09;通过代码启动浏览器&#xff08;3&#xff09;Bug问题记录1&#xff…...

【Miniconda】Linux系统中 .condarc 配置文件的位置一般在哪里

【Miniconda】Linux系统中 .condarc 配置文件的位置一般在哪里 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望得到…...

数据结构——动态顺序表

数据结构的动态顺序表有以下几个操作&#xff1a;创建&#xff0c;销毁&#xff0c;初始化&#xff0c;增删查改和打印以及内存空间不够时的扩容 本文的宏定义&#xff1a; #define SeqTypeData int 1.动态顺序表的创建 typedef struct SeqListInit{//动态顺序表的创建SeqT…...

Android Studio实现内容丰富的安卓宠物医院管理系统

获取源码请点击文章末尾QQ名片联系&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动 项目编号128 1.开发环境android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.系统公告 3.宠物社区&#xff08;可发布宠物帖子&#xf…...

华为OD机试真题-启动多任务排序-2024年OD统一考试(C卷)

题目描述: 一个应用启动时,会有多个初始化任务需要执行,并且任务之间有依赖关系,例如A任务依赖B任务,那么必须在B任务执行完成之后,才能开始执行A任务。 现在给出多条任务依赖关系的规则,请输入任务的顺序执行序列,规则采用贪婪策略,即一个任务如果没有依赖的任务,则…...

在没有推出硬盘的情况下,重启mac电脑,外接移动硬盘无法加载显示?

一、mac磁盘工具显示未装载 1.打开终端&#xff0c;输入 diskutil list查看当前硬盘列表&#xff0c;大多数时候&#xff0c;可以解决。 二、使用命令行装载硬盘 执行上面命令后&#xff0c;仍不起作用&#xff0c;则手动挂载&#xff0c;在命令行输入如下内容&#xff1a; …...

C++笔记:从零开始一步步手撕高阶数据结构AVL树

文章目录 高度平衡二叉搜索树实现一颗AVL树结点与树的描述——定义类AVL树的插入操作步骤1&#xff1a;按照二叉搜索树的方法插入结点步骤2&#xff1a;自底向上调整平衡因子步骤3&#xff1a;触发旋转操作&#xff08;AVL树平衡的精髓&#xff09;右单旋左单旋左右双旋右左双旋…...

CodeSys通过C函数接口调用Qt

文章目录 1.背景介绍2.修改makefile2.1.将编译器由c改成c2.2.使能opencv库2.3.使能Qt库 3.在代码中使用Qt库函数 1.背景介绍 建议先查看之前的文章【CodeSys中调用C语言写的动态库】&#xff0c;了解如何创建一个能够被codesys调用的动态库。 假如想要在函数中使用Qt或者第三方…...

线性代数笔记18--行列式公式、代数余子式

1. 行列式公式推导 二阶行列式推导 [ a b c d ] [ a 0 c d ] [ 0 b c d ] [ a 0 0 d ] [ a 0 c 0 ] [ 0 b c 0 ] [ 0 b 0 d ] [ a 0 0 d ] − [ b 0 0 c ] a d − b c \begin{align} \begin{bmatrix} a & b \\ c & d \end{bmatrix}& \begin{bmatrix} a &…...

最新2024年项目基金撰写与技巧及GPT融合应用

随着社会经济发展和科技进步&#xff0c;基金项目对创新性的要求越来越高。申请人需要提出独特且有前瞻性的研究问题&#xff0c;具备突破性的科学思路和方法。因此&#xff0c;基金项目申请往往需要进行跨学科的技术融合。申请人需要与不同领域结合&#xff0c;形成多学科交叉…...

Java八股文(Element Plus)

Java八股文のElement Plus Element Plus Element Plus 什么是Element UI 和 Element Plus&#xff1f; Element UI 和 Element Plus 是基于 Vue.js 的一套非常受欢迎的开源 UI 组件库&#xff0c;用于快速构建具有现代化设计和丰富交互效果的前端界面。 Element UI 和 Element…...

【Hadoop】Hadoop概述与核心组件

目录 Hadoop概述Hadoop 发展历史Hadoop 三大发行版本1.Apache Hadoop&#xff08;常用&#xff09;2.Cloudera Hadoop3.Hortonworks Hadoop优势优势总结——4高&#xff08;高可靠、高扩展、高效、高容错&#xff09; Hadoop组成1.HDFS管理者&#xff1a;NameNode&#xff08;n…...

3D地图在BI大屏中的应用实践

前言 随着商业智能的不断发展&#xff0c;数据可视化已成为一项重要工具&#xff0c;有助于用户更好地理解数据和分析结果。其中&#xff0c;3D地图作为一种可视化工具&#xff0c;已经在BI大屏中得到了广泛地应用。 3D地图通过将地理信息与数据相结合&#xff0c;以更加直观…...

JavaScript 进阶(二)

一、深入对象 1.1创建对象三种方式 1. 利用对象字面量创建对象 2. 利用 new Object 创建对象 3.利用构造函数创建对象 1.2 构造函数 构造函数 &#xff1a; 是一种特殊的函数&#xff0c;主要用来初始化对象。 使用场景&#xff1a; 常规的 {...} 语法允许创建一个对象。…...

基于ssm+layui的图书管理系统

基于ssmlayui的图书管理系统 账户类型分为&#xff1a;管理员&#xff0c;用户管理员私有功能用户私有功能公共功能技术栈功能实现图 视频演示 账户类型分为&#xff1a;管理员&#xff0c;用户 图书管理系统主要登录账户类型为管理员账户与用户账户 管理员私有功能 账户管理…...

2024年最新阿里云和腾讯云云服务器价格租用对比

2024年阿里云服务器和腾讯云服务器价格战已经打响&#xff0c;阿里云服务器优惠61元一年起&#xff0c;腾讯云服务器61元一年&#xff0c;2核2G3M、2核4G、4核8G、4核16G、8核16G、16核32G、16核64G等配置价格对比&#xff0c;阿腾云atengyun.com整理阿里云和腾讯云服务器详细配…...

双指针算法_复写零

题目&#xff1a; 给一个固定长度的数组arr&#xff0c;将数组中出现的每一个0都复写一遍&#xff0c;并且将其余元素都往右移动 且不要再超过数组长度的位置写入元素&#xff0c;在数组上直接修改 示例&#xff1a; 双数组模拟操作&#xff1a; 从示例来看&#xff0c;因为…...

自习室预订系统|基于springboot框架+ Mysql+Java+B/S架构的自习室预订系统设计与实现(可运行源码+数据库+设计文档+部署说明)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 学生功能模块 管理员功能登录前台功能效果图 系统功能设计 数据库E-R图设计 lunwen参…...

基于Java+SpringMVC+vue+element宠物管理系统设计实现

基于JavaSpringMVCvueelement宠物管理系统设计实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取源…...

用miniconda建立PyTorch、Keras、TensorFlow三个环境

一、配置清华镜像conda源 由于网络问题&#xff0c;直接使用conda默认的源下载包可能会非常慢。为了解决这个问题&#xff0c;可以配置国内镜像源来加速包的下载。清华大学TUNA协会提供了一个常用的conda镜像源。下面是如何配置清华镜像源的步骤&#xff1a; 1. 配置清华conda…...

【QT 5 +Linux下qt软件点击.sh脚本运行+Dconf编辑器+学习他人文章+番外篇:点击脚本运行软件】

【QT 5 Linux下qt软件点击.sh脚本运行Dconf编辑器学习他人文章番外篇&#xff1a;点击脚本运行软件】 1、前言2、实验环境3、自我学习总结-本篇总结1、说明&#xff1a;代替qt的快捷方式2、适用性更广3、了解工具&#xff1a;Dconf编辑器注意事项&#xff1a; 4、参考链接-感谢…...

多模态大模型Claude 3正式接入集简云与语聚!对标GPT-4且支持中文

自OpenAI发布GPT-4以来&#xff0c;引发了业务模式与应用使用的巨大变革&#xff0c;掀起了各大企业对于多模态大模型的研究热潮。3月初&#xff0c;AnthropicClaude在官网正式发布Claude 3系列多模态大模型&#xff0c;据了解&#xff0c;该模型在多个维度上超越了GPT-4&#…...

.NET后端返回File文件,及前端处理直接在浏览器下载

后端代码 [AllowAnonymous] public System.Web.Mvc.ActionResult ExportByteExcel(string datatab, string columnnames, string schemecode) { 返回excel。 string ReportName "ExcelTemplete" DateTime.Now.Ticks.ToString(); …...

如何压缩图片文件大小?教大家几种方法

当图片文件较大时&#xff0c;图片压缩可以有效的缩小图片kb&#xff0c;从而使图片储存起来更加方便&#xff0c;也可以解决上传时图片大小被限制的问题&#xff0c;那么我们有什么方法可以简单快速的将图片大小压缩呢&#xff1f;下面就来给大家分享几个如何修改照片大小kb的…...

Qt 如何搭建Lua的运行环境

一、Lua简介 Lua 是一种强大的、高效的、轻量级的、可嵌入的脚本语言。它支持过程&#xff08;procedural&#xff09;编程、面向对象编程、函数式编程以及数据描述。Lua 是动态类型的&#xff0c;运行速度快&#xff0c;支持自动内存管理&#xff0c;因此被广泛用于配置、脚本…...

产品推荐 - ALINX XILINX FPGA开发板 Artix-7 XC7A100T-2FGG484I

01开发板介绍 此款开发板采用核心板扩展板的模式&#xff0c;方便用户对核心板的二次开发利用。FPGA使用的是Xilinx公司的ARTIX-7系列的芯片&#xff0c;型号为XC7A100T-2FGG484I。在核心板使用了2片MICRON公司的MT41J256M16HA-125 DDR3芯片&#xff0c;组合成32bit的数据总线…...

Github 2024-03-16 开源项目日报Top10

根据Github Trendings的统计,今日(2024-03-16统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目5非开发语言项目2TypeScript项目1C++项目1Lua项目1Swift项目1《Hello 算法》:动画图解、一键运行的数据结构与算法教程 创建周期:4…...