可信计算_Qemu02_VMWare上使用Qemu7.0.0 实现X86_64系统上运行ARM架构虚拟机

71次阅读
没有评论

共计 3741 个字符,预计需要花费 10 分钟才能阅读完成。


title: 可信计算_Qemu02_VMWare上使用Qemu7.0.0 实现X86_64系统上运行ARM架构虚拟机 date: 2022-05-19 18:52:48.023 updated: 2022-06-06 18:15:00.265 url: /archives/kxjsqemu02 categories:

  • 可信计算 tags:
  • 可信计算
  • 虚拟化

1 上一篇回顾

在上一篇中,我们已经实现了在X86系统上跑起来了ARM架构的虚拟机,虽然有些小插曲,但无伤大雅。我们本此的目的就是,解决Qemu虚拟机不能访问外网的问题。 在 https://wiki.archlinux.org/title/QEMU#Running_virtualized_system 中给出了很多种访问外网的方式,我们使用桥接的方式实现。

网上的设置方法主要有两种:NAT和桥接,也叫做user mode network和tap/tun network。

NAT 就是虚拟机里的guestOS通过host的物理网卡eth0,连接上网。该方法方便设置,缺点是其他机器难以访问到guest。要求host机器创建虚拟网卡tap0,guest机器和该网卡tap0设置为统一网段,并以tap0的地址作为网关,host机器上的物理网卡eth0为该tap0做NAT。

因此需要安装Uml-utilites以生成虚拟网卡tap0,tunctl -t tap0

桥接:基本思想是host机器上,物理网卡eth0和虚拟网卡tapN建立网桥,guestOS通过tapN连接上网,这样guestOS和host都处于物理局域网内,其他机器也可以访问guestOS。 需要安装以下两个包,bridge-tils和Uml-utilites,前者用于建立桥接,后者用于生成虚拟网卡。

虚拟机启动命令:

qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios QEMU_EFI.fd -nographic -drive if=none,file=ubuntu16.04-arm64.img,id=hd0 -device virtio-blk-device,drive=hd0

2 系统环境

  • 主机:X86_64,win 11,安装了VMWare,
  • VMWare安装了CentOS 7虚拟机,X86_64版本,能访问外网NAT模式
  • CentOS中安装了Qemu 7.0.0,Qemu中运行的是Ubuntu 16.04 Server ARM64架构版虚拟机,不能访问外网

接下来我们称CentOS为宿主机,Qemu中的Ubuntu 16.04为虚拟机:

  • 宿主机ip配置:可信计算_Qemu02_VMWare上使用Qemu7.0.0 实现X86_64系统上运行ARM架构虚拟机
  • Qemu虚拟机配置:可信计算_Qemu02_VMWare上使用Qemu7.0.0 实现X86_64系统上运行ARM架构虚拟机

因为我们的启动命令没有添加网络访问方式,Qemu虚拟机目前状况:无法访问百度,开始使用桥接方式联通虚拟机:可信计算_Qemu02_VMWare上使用Qemu7.0.0 实现X86_64系统上运行ARM架构虚拟机

3 宿主机配置

  1. 安装工具包 yum install uml-utilities bridge-utils -y
  2. 使用TAP后端前,需要确认你的宿主机的内核支持TAP网络接口: /dev/net/tun 文件存在则说明支持。
    [root@centos7 ~]# ls /dev/net
    tun
    

    如果没有这样的文件,可以尝试手工创建:

    sudo mkdir /dev/net
    sudo mknod /dev/net/tun c 10 200
    sudo /sbin/modprobe tun
    
  3. 创建网桥br0网桥可以理解为就是一个交换机,我们现在要做的就是创建交换机,并且将Centos上的物理网卡ens32绑定在br0上,我们可以使用brctl命令来进行创建,也可以通过编辑配置文件手动配置桥接网卡。 配置文件修改参考:CentOS 网桥配置,静态IP配置brctl创建虚拟网卡详解
    systemctl stop NetworkManager # 先关闭networkmanager
    
    cp /etc/sysconfig/network-scripts/ifcfg-ens32 /etc/sysconfig/network-scripts/ifcfg-br0 #根据自己的网卡进行替换ens32
    
    vim /etc/sysconfig/network-scripts/ifcfg-ens32 # 编辑ens32
    
    修改 ifcfg-ens32 的以下几项:
    TYPE="Ethernet"
    BRIDGE=br0    //添加这一行
    BOOTPROTO="none"
    #IPADDR="192.168.134.129"                          //注释掉这几行
    #PREFIX="24"
    #GATEWAY="192.168.134.2"
    #DNS1="8.8.8.8"
    
    vim /etc/sysconfig/network-scripts/ifcfg-br0 # 编辑br0
    修改 ifcfg-br0 的以下几项:
    TYPE="Bridge"	//这一行修改为Bridge
    BOOTPROTO="none"
    NAME="br0"	//修改设备名称为br0
    # UUID="xxxx"	//这一行注释
    DEVICE="br0"	//修改设备为br0
    IPADDR="192.168.134.129"
    PREFIX="24"
    GATEWAY="192.168.134.2"
    DNS1="8.8.8.8"
    
    # 重启网络
    systemctl  restart network
    

    查看网卡配置 ip addr可信计算_Qemu02_VMWare上使用Qemu7.0.0 实现X86_64系统上运行ARM架构虚拟机

    可以看到ens32已经没有ip了,ping一下百度看能不能访问外网,可以看到没有问题。可信计算_Qemu02_VMWare上使用Qemu7.0.0 实现X86_64系统上运行ARM架构虚拟机

  4. 配置 qemu-ifup文件 这个文件在我创建的过程中,并没有生成,我们自己创建: 该文件用于后续启动虚拟机时,指定执行的脚本。
    vim /etc/qemu-ifup #创建文件,添加以下内容
    ------------
    #!/bin/sh
    sudo tunctl -t $1 -u root  #创建tap,每一个虚拟机对应一个tap
    sudo ifconfig $1 up #启动tap
    sudo brctl addif br0 $1 #将tap绑定到我们创建的网桥上
    -----------
    或者,如果tunctl不存在
    #!/bin/sh
    sudo ip tuntap add dev $1 mode tun user root
    sudo ifconfig $1 up
    sudo brctl addif br0 $1
  5. 配置 qemu-ifdown文件 这个文件在我创建的过程中,并没有生成,我们自己创建: 该文件用于后续关闭虚拟机时,指定执行的脚本。
    vim /etc/qemu-ifdown #创建文件,添加以下内容
    ------------
    #!/bin/sh
    sudo ifconfig $1 down # 关闭tap
    sudo brctl delif br0 $1 # 断开与br0的连接
    -----------
    
  6. 赋予脚本执行权限 sudo chmod +x /etc/qemu*
  7. 启动虚拟机,在之前的启动参数上添加-net nic -net tap,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown 完整的启动命令如下:
    qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios QEMU_EFI.fd -nographic -drive if=none,file=ubuntu16.04-arm64.img,id=hd0 -device virtio-blk-device,drive=hd0 -net nic -net tap,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown
    
  8. 虚拟机启动后,我们查看虚拟机网络配置变化:可信计算_Qemu02_VMWare上使用Qemu7.0.0 实现X86_64系统上运行ARM架构虚拟机可以看到,Qemu虚拟机ubuntu ip地址已经变成了192.168.134.128,变成了与宿主机CentOS的br0同网段的ip地址。我们再看一下宿主机CentOS网络配置有什么变化,应该是要生成一个tap设备。可信计算_Qemu02_VMWare上使用Qemu7.0.0 实现X86_64系统上运行ARM架构虚拟机果然生成了一个tap设备tap0,我们查看网桥br0的接口:brctl show br0可信计算_Qemu02_VMWare上使用Qemu7.0.0 实现X86_64系统上运行ARM架构虚拟机可以看到,tap0已经绑定到br0上。
  9. 最后测试,是否成功:虚拟机目前已经获得ip地址:192.168.134.128 1)虚拟机Ubuntu访问外网:可信计算_Qemu02_VMWare上使用Qemu7.0.0 实现X86_64系统上运行ARM架构虚拟机2)虚拟机访问VMware上CentOS宿主机(192.168.134.129):可信计算_Qemu02_VMWare上使用Qemu7.0.0 实现X86_64系统上运行ARM架构虚拟机3)虚拟机访问本机Win11(192.168.134.1):可信计算_Qemu02_VMWare上使用Qemu7.0.0 实现X86_64系统上运行ARM架构虚拟机4)VMWare上宿主机CentOS访问Qemu虚拟机ubuntu:可信计算_Qemu02_VMWare上使用Qemu7.0.0 实现X86_64系统上运行ARM架构虚拟机5)本机Win11 访问Qemu虚拟机ubuntu:可信计算_Qemu02_VMWare上使用Qemu7.0.0 实现X86_64系统上运行ARM架构虚拟机通过上述测试,发现已经能正常访问外网、VMware上的宿主机以及最终的Win11 宿主机。都能互相访问,网络配置成功。

4 扩展

我们查看虚拟机ubuntu的网络配置文件: cat /etc/network/interfaces可信计算_Qemu02_VMWare上使用Qemu7.0.0 实现X86_64系统上运行ARM架构虚拟机发现他是自动配置ip,我们也可以设置为静态ip,是可以设置的,效果如下,需要修改DNS等,不然无法访问外网。这里面需要重启,不然网络设置不会生效。参考:https://www.likecs.com/show-203632114.html可信计算_Qemu02_VMWare上使用Qemu7.0.0 实现X86_64系统上运行ARM架构虚拟机

参考链接:

正文完
 
landery
版权声明:本站原创文章,由 landery 2023-03-07发表,共计3741字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)