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

qemu启动后网络怎么设置?配合qemu-system-riscv64的命令设置

QEMU启动的时候,可以选择组网方式,一般有两种选择,user模式和tap模式

user模式就是用NAT,tap模式就是用bridge网桥模式。以前也有过一次实践:FreeBSD RISCV 在QEME中实践-网络配置_pkg.txz: not found-CSDN博客

user NAT模式

参数设置类似这样

-netdev user,id=net0,ipv6=off,hostfwd=tcp::8022-:22 -netdev -device virtio-net-device,netdev=net0

这样的好处是省心省力,不用考虑再去设置任何东西,QEMU仿真系统启动之后,直接就能通过nat访问外网。 关键是user模式可以直接在普通用户下使用。所以建议使用user模式。

tap 网桥模式

QEMU启动后的网络设置通常涉及将QEMU虚拟机的网卡与宿主机网卡绑定,以实现虚拟机和宿主机之间的网络连通。参数设置类似这样:

-netdev tap,id=net0,ipv6=off,hostfwd=tcp::8022-:22,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown, -device virtio-net-device,netdev=net0

好处是网桥可以让虚拟机互相之间也能通信,但是缺点就是配置复杂,费时费力。另外tap模式需要在管理员权限下使用,普通用户无权限运行。

以下是一般步骤:

  1. 创建TAP虚拟网卡
    在宿主机上,你需要创建一个TAP虚拟网卡。这可以通过ip tuntap命令来完成。例如:

    sudo ip tuntap add dev tap0 mode tap
    sudo ip link set dev tap0 up

    这将创建一个名为tap0的TAP设备,并将其设置为活动状态。

  2. 配置TAP设备IP地址
    接下来,你需要为TAP设备配置一个IP地址。这可以通过ip address add命令来完成。例如:

    sudo ip address add dev tap0 192.168.2.128/24

    这将为tap0设备分配IP地址192.168.2.128,并设置子网掩码为255.255.255.0

  3. QEMU启动参数
    当启动QEMU虚拟机时,你需要使用-net nic-net tap参数来指定虚拟机的网卡和TAP设备。例如:

    qemu-system-x86_64 -hda /path/to/your/disk.img -net nic -net tap,ifname=tap0,script=/etc/qemu-ifup

    其中,-hda参数指定虚拟机的磁盘映像文件,-net nic参数创建一个新的虚拟网卡,-net tap参数将该虚拟网卡与TAP设备tap0绑定。script=/etc/qemu-ifup指定了一个脚本,该脚本在QEMU启动时会被调用,用于配置TAP设备的网络设置。

  4. 配置/etc/qemu-ifup脚本(可选):
    /etc/qemu-ifup脚本用于在QEMU启动时配置TAP设备的网络设置。这个脚本的具体内容取决于你的网络环境和需求。一个简单的示例脚本可能只是简单地启动TAP设备,但更复杂的脚本可能会配置路由、防火墙规则等。

  5. 测试网络连接
    一旦QEMU虚拟机启动并配置了网络,你就可以在虚拟机内部使用ping命令或其他网络工具来测试与宿主机的网络连接了。

请注意,上述步骤可能因你的操作系统、QEMU版本和网络环境的不同而略有差异。确保参考适用于你的具体情况的文档和教程。

在Ubuntu24.04下实践

这台Ubuntu24.04是在Windows10下的仿真环境,网络信息:

ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 172.25.183.186  netmask 255.255.240.0  broadcast 172.25.191.255inet6 fe80::215:5dff:fe3c:d3f6  prefixlen 64  scopeid 0x20<link>ether 00:15:5d:3c:d3:f6  txqueuelen 1000  (Ethernet)RX packets 3295  bytes 4999578 (4.9 MB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 2264  bytes 160405 (160.4 KB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0inet6 ::1  prefixlen 128  scopeid 0x10<host>loop  txqueuelen 1000  (Local Loopback)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

创建tap0虚拟网卡

sudo ip tuntap add dev tap0 mode tap
sudo ip link set dev tap0 up

用ifconfig tap0看看新加的tap0口:

tap0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500ether 3e:93:14:dc:94:1c  txqueuelen 1000  (Ethernet)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

如果想删除,使用del命令删除tap0

 sudo ip tuntap del  tap0 mode tap

配置TAP设备IP地址


接下来,需要为TAP设备配置一个IP地址。这可以通过ip address add命令来完成。例如:

sudo ip address add dev tap0  172.25.183.187/20

这将为tap0设备分配ip地址172.25.183.187,并设置子网掩码为255.255.240.0

QEMU启动仿真

QEMU启动参数
当启动QEMU虚拟机时,需要使用-net nic-net tap参数来指定虚拟机的网卡和TAP设备。例如在这篇文档里:在Ubuntu下运行QEMU仿真FreeBSD riscv64系统-CSDN博客

user NAT模式

使用user启动NAT为:

qemu-system-riscv64 -machine virt -m 2048M -smp 6 -nographic \-kernel u-boot.bin \-drive file=FreeBSD-14.2-RELEASE-riscv-riscv64-zfs.raw,format=raw,id=hd0 -device virtio-blk-device,drive=hd0 \-netdev user,id=net0,ipv6=off,hostfwd=tcp::8022-:22 \-netdev tap -device virtio-net-device,netdev=net0

这样就可以NAT上网了!

 tap网桥模式(未成功)

加上tap设备桥接后的QEMU启动命令为:

sudo qemu-system-riscv64 -machine virt -m 2048M -smp 6 -nographic     -kernel u-boot.bin     -drive file=FreeBSD-14.2-RELEASE-riscv-riscv64-zfs.raw,format=raw,id=hd0 -device virtio-blk-device,drive=hd0     -netdev tap,id=net0   -device virtio-net-device,netdev=net0

不过启动的时候报错:W: /etc/qemu-ifup: no bridge for guest interface found

所以网络还没调好。

调试

如何看qemu支持的网卡

qemu-system-aarch64 -M virt -nic model=help

 显示

MESA: error: ZINK: failed to choose pdev
glx: failed to create drisw screen
NVD3D10: CPU cyclestats are disabled on client virtualization
NVD3D10: CPU cyclestats are disabled on client virtualization
Available NIC models:
e1000
e1000-82544gc
e1000-82545em
e1000e
i82550
i82551
i82557a
i82557b
i82557c
i82558a
i82558b
i82559a
i82559b
i82559c
i82559er
i82562
i82801
igb
ne2k_pci
pcnet
rtl8139
tulip
virtio-net-pci
virtio-net-pci-non-transitional
virtio-net-pci-transitional
vmxnet3

http://www.lryc.cn/news/507762.html

相关文章:

  • 如何测量分辨率
  • 汇总贴:cocos creator
  • [N1CTF 2018]eating_cms
  • 重拾设计模式--建造者模式
  • 【机器学习】以机器学习为翼,翱翔网络安全创新苍穹
  • 人工智能在VR展览中扮演什么角色?
  • mysql,创建数据库和用户授权核心语句
  • 日期区间选择器插件的操作流程
  • 【WRF教程第3.2期】预处理系统 WPS详解:以4.5版本为例
  • 深度学习的DataLoader是什么数据类型,为什么不可用来索引
  • 物理信息神经网络(PINN)八课时教案
  • Linux setfacl 命令详解
  • 电商环境下的财务ERP系统架构
  • Linux相关概念和易错知识点(25)(信号原理、操作系统的原理、volatile)
  • 线上问题——频繁 Full GC 问题的排查思路
  • 《探秘 Qt Creator Manual 4.11.1》
  • level2逐笔委托查询接口
  • 在Linux系统安装配置 MySQL 和 hive,hive配置为远程模式
  • 如何写好一份科技报告
  • ARM学习(38)多进程多线程之间的通信方式
  • 《图解机器学习》(杉山将著)第一部分绪论学习笔记
  • 【WPF】RenderTargetBitmap的使用
  • 编辑, 抽成组件
  • 使用C#绘制具有平滑阴影颜色的曼德布洛特集分形
  • 【批量生成WORD和PDF文件】根据表格内容和模板文件批量创建word文件,一次性生成多个word文档和批量创建PDF文件
  • 低延迟!实时处理!中软高科AI边缘服务器,解决边缘计算多样化需求!
  • 内旋风铣削知识再学习
  • Redis 7.x如何安装与配置?保姆级教程
  • SLAAC如何工作?
  • 电脑丢失dll文件一键修复的多种方法分析,电脑故障修复攻略