Linux虚拟机如何搭建两台主机并实现网络互通?

在Linux环境中建立两台虚拟主机是常见的实验或生产环境配置需求,通常可通过虚拟化技术(如KVM、Xen)或容器技术(如Docker)实现,本文以KVM(Kernel-based Virtual Machine)为例,详细讲解在Linux系统(以Ubuntu 22.04 LTS为例)中创建和管理两台虚拟主机的完整流程,包括环境准备、虚拟机安装、网络配置及系统优化等关键步骤。

Linux虚拟机如何搭建两台主机并实现网络互通?

环境准备:安装KVM虚拟化平台

在创建虚拟机前,需确保宿主机硬件支持虚拟化(CPU的VT-x/AMD-V功能),并安装KVM及相关管理工具,以Ubuntu为例,执行以下命令:

# 更新系统软件包列表
sudo apt update && sudo apt upgrade -y
# 安装KVM及依赖工具
sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager
# 验证KVM模块是否加载
lsmod | grep kvm
# 若输出kvm_intel或kvm_amd,表示模块已加载成功
# 将当前用户添加到libvirt组,避免使用sudo执行虚拟机管理命令
sudo usermod -aG libvirt $USER
newgrp libvirt  # 重新加载用户组权限

创建虚拟磁盘文件

虚拟机需要独立的磁盘文件存储系统数据,使用qemu-img工具创建两个虚拟磁盘(分别对应两台虚拟机),格式为qcow2(支持动态扩容):

# 创建第一台虚拟机的磁盘(20GB)
qemu-img create -f qcow2 /var/lib/libvirt/images/vm1_disk.qcow2 20G
# 创建第二台虚拟机的磁盘(20GB)
qemu-img create -f qcow2 /var/lib/libvirt/images/vm2_disk.qcow2 20G

准备虚拟机安装镜像

下载Linux发行版ISO镜像(如Ubuntu Server 22.04 ISO),并将其复制到宿主机的镜像存储目录(/var/lib/libvirt/images/),便于虚拟机安装时使用:

# 示例:下载Ubuntu Server 22.04 ISO(需提前通过wget或其他工具获取)
wget https://releases.ubuntu.com/22.04.3/ubuntu-22.04.3-live-server-amd64.iso -P /var/lib/libvirt/images/

创建第一台虚拟机(vm1)

通过virt-install命令创建并安装第一台虚拟机,过程中需指定虚拟机名称、内存、CPU、磁盘、镜像及网络配置:

sudo virt-install 
  --name vm1 
  --memory 2048 
  --vcpus 2 
  --disk path=/var/lib/libvirt/images/vm1_disk.qcow2,format=qcow2 
  --cdrom /var/lib/libvirt/images/ubuntu-22.04.3-live-server-amd64.iso 
  --network network=default 
  --graphics spice 
  --os-variant ubuntu22.04

参数说明:

  • --name:虚拟机名称(唯一标识);
  • --memory:分配内存大小(MB);
  • --vcpus:虚拟CPU核心数;
  • --disk:指定磁盘路径及格式;
  • --cdrom:安装镜像路径;
  • --network:网络配置(default为libvirt默认的NAT网络);
  • --graphics:图形显示协议(spice/vnc),用于远程连接虚拟机控制台;
  • --os-variant:优化系统安装参数(匹配发行版版本)。

安装过程中,通过virt-viewer工具连接虚拟机图形界面(或使用virsh console vm1进入文本安装界面),按提示完成系统安装(如选择语言、时区、创建用户等)。

Linux虚拟机如何搭建两台主机并实现网络互通?

创建第二台虚拟机(vm2)

重复类似步骤创建第二台虚拟机,需确保名称、磁盘路径等参数唯一:

sudo virt-install 
  --name vm2 
  --memory 2048 
  --vcpus 2 
  --disk path=/var/lib/libvirt/images/vm2_disk.qcow2,format=qcow2 
  --cdrom /var/lib/libvirt/images/ubuntu-22.04.3-live-server-amd64.iso 
  --network network=default 
  --graphics spice 
  --os-variant ubuntu22.04

虚拟机网络配置

默认情况下,虚拟机通过NAT模式接入网络,宿主机作为网关,虚拟机可访问外部网络,但外部无法直接访问虚拟机,若需实现虚拟机之间或外部访问,需调整网络配置。

查看虚拟机网络状态

# 查看libvirt默认网络
virsh net-list --all
# 查看虚拟机网络接口
virsh domiflist vm1
virsh domiflist vm2

配置静态IP(可选)

若需为虚拟机分配固定IP,可在虚拟机内部修改网络配置,以Ubuntu为例:
编辑/etc/netplan/01-netcfg.yaml文件(文件名可能因版本不同),内容如下:

network:
  version: 2
  ethernets:
    enp1s0:  # 虚拟机网卡名称(通过`ip a`查看)
      dhcp4: no
      addresses: [192.168.122.100/24]  # 自定义IP(需在NAT网段范围内)
      gateway4: 192.168.122.1          # 宿主机NAT网关
      nameservers:
        addresses: [8.8.8.8, 1.1.1.1]

执行netplan apply使配置生效,两台虚拟机分别分配不同IP(如vm1:192.168.122.100,vm2:192.168.122.101)。

创建桥接网络(实现外部访问)

若需让虚拟机直接接入宿主机所在物理网络(如通过局域网访问),需创建桥接网络:

# 安装桥接工具
sudo apt install -y bridge-utils
# 创建网桥接口
sudo brctl addbr br0
# 将宿主机物理网卡(如ens33)加入网桥,并配置静态IP
sudo ip addr add 192.168.1.100/24 dev br0  # 宿机IP
sudo ip link set ens33 up
sudo brctl addif br0 ens33
sudo ip link set br0 up
# 修改libvirt默认网络为桥接模式(或创建新网络)
# 编辑 /etc/libvirt/qemu/network.xml,将<network>中的<forward mode='nat'/>改为<forward mode='bridge'/>
# 重启libvirt网络服务
sudo systemctl restart libvirtd

创建虚拟机时,通过--network bridge=br0参数使用桥接网络,虚拟机将获得与宿主机同网段的IP,实现外部访问。

Linux虚拟机如何搭建两台主机并实现网络互通?

虚拟机管理常用命令

# 启动虚拟机
virsh start vm1
# 关闭虚拟机( graceful shutdown)
virsh shutdown vm1
# 强制关闭(相当于电源键)
virsh destroy vm1
# 查看虚拟机状态
virsh list --all
# 进入虚拟机控制台(文本模式)
virsh console vm1
# 暂停/恢复虚拟机
virsh suspend vm1
virsh resume vm1
# 删除虚拟机(需先关闭)
virsh undefine vm1

虚拟机性能优化建议

  1. 磁盘性能:若虚拟机需频繁读写,可使用cache=nonecache=writeback参数调整磁盘缓存模式,避免I/O瓶颈:
    # 修改虚拟机磁盘配置
    virsh attach-disk vm1 --source /path/to/disk.qcow2 --target vdb --cache writeback
  2. CPU/内存:通过virsh edit vm1修改XML配置,调整CPU亲和性或内存超分比例,避免资源竞争。
  3. 网络优化:若虚拟机网络流量大,可启用virtio网卡驱动(默认已支持),提升网络吞吐量。

虚拟机配置对比表

以下为两台虚拟机的典型配置对比示例:

配置项 vm1 vm2
名称 vm1 vm2
内存 2GB 2GB
CPU核心数 2 2
磁盘路径 /var/lib/libvirt/images/vm1_disk.qcow2 /var/lib/libvirt/images/vm2_disk.qcow2
磁盘大小 20GB(动态扩容) 20GB(动态扩容)
网络模式 NAT(默认) 桥接(br0)
静态IP 168.122.100 168.1.101
操作系统 Ubuntu 22.04 LTS Server Ubuntu 22.04 LTS Server
SSH端口 22 22

相关问答FAQs

问题1:如何解决虚拟机无法连接外网的问题?
解答:首先检查虚拟机网络模式是否为NAT,并确认宿主机已开启IP转发(sysctl net.ipv4.ip_forward返回1),若为NAT模式,可通过virsh net-dhcp-default查看DHCP分配的IP范围,确保虚拟机获取到有效IP,若仍无法访问,检查宿主机防火墙(如ufw)是否阻止了出站流量,执行sudo ufw allow out放行。

问题2:如何实现两台虚拟机之间的文件共享?
解答:可通过以下方式实现:

  1. NFS共享:在一台虚拟机上安装NFS服务(sudo apt install nfs-kernel-server),导出共享目录(如/srv/share),另一台虚拟机通过mount命令挂载该目录;
  2. Samba共享:若需Windows兼容性,安装Samba(sudo apt install samba),配置共享目录并设置访问权限;
  3. SCP/Rsync:通过SSH协议直接传输文件,例如在vm1上执行scp /path/to/file user@vm2_ip:/remote/path

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞热舞
上一篇 2025-09-26 12:33
下一篇 2025-09-26 12:53

相关推荐

  • 负载均衡下的任务调度是如何实现的?

    负载均衡下的任务调度一、任务调度与负载均衡概述在分布式计算环境中,任务调度和负载均衡是两个关键的概念,任务调度是指将任务分配给可用的计算节点,而负载均衡则是为了保证系统的性能和可靠性,均衡各个节点上的负载,本文将从任务调度和负载均衡两个方面来讨论分布式计算中的相关问题,二、任务调度任务调度是分布式计算中的关键问……

    2024-11-08
    001
  • 电话外呼系统如何提升企业沟通效率?

    电话外呼系统是一种自动化的通信技术,用于管理并优化电话营销、客户支持和提醒服务。它通过预设的脚本自动拨打电话,提高效率,降低成本,同时收集通话数据用于分析和改进未来的营销策略。

    2024-08-01
    005
  • 负载均衡SLB遇到问题时,我们该如何应对?

    负载均衡(Server Load Balancer,简称SLB)是一种网络流量分发控制服务,旨在将访问流量根据转发策略分配到后端多台云服务器(ECS实例),以扩展应用系统的服务能力并提升其可用性,以下是关于负载均衡SLB的详细介绍:一、负载均衡SLB概述负载均衡SLB通过设置虚拟服务地址,将位于同一地域的多台云……

    2024-11-29
    002
  • 未成年用户适合使用哪些类型的服务器?

    未成年可以使用的服务器通常是指专为未成年人设计的在线平台或游戏服务器,这些服务器会有严格的年龄限制和内容过滤机制,以确保提供的内容适合未成年人浏览和使用,同时保护他们不受不适宜信息的影响。

    2024-08-10
    0012

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

QQ-14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信