QEMU系统模式如何桥接外网

一、引言

qemu是一种通用的开源计算机仿真器和虚拟器。qemu共有两种操作模式:

  1. 系统模式:能够在任意支持的架构上为任何机器运行一个完整的操作系统
  2. 用户模式仿真:能够在任意支持的架构上为另一个Linux/BSD运行程序

在进行IoT固件模拟的过程中,我们需要进调试的时候需要能够启动系统级的qemu模拟,那么就需要使用系统模式,有的环境需要连网络,那么就需要使用桥接的方法,本文介绍了系统模式的无网络情况、内网情况和外网连接的情况的模拟方式,满足大部分实际需求。

二、环境准备

测试主机为Ubuntu 20.04 64位系统,以mips架构的Linux系统模拟为例。

1、qemu安装

方法一:apt源安装

sudo apt install qemu-system

方法二:源码安装(可以使用较新版本的qemu)

wget https://download.qemu.org/qemu-8.2.0.tar.xz
tar xf qemu-8.2.0.tar.xz
cd qemu-8.2.0
./configure
make
make install

安装好后,查看是否能正常运行

2、下载镜像

选择其中2个进行下载:

wget https://people.debian.org/~aurel32/qemu/mips/debian_squeeze_mips_standard.qcow2
wget https://people.debian.org/~aurel32/qemu/mips/vmlinux-2.6.32-5-4kc-malta

三、QEMU系统模式-无网络

测试是否能够正常启动,启动命令:

sudo qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda debian_squeeze_mips_standard.qcow2 -append "root=/dev/sda1 console=tty0" -nographic

启动完成后,输入账户root,密码root登录系统

四、QEMU系统模式-内网

使用上面的启动命令,启动的系统是没有网络的,如果需要加入网络,可以使用以下命令:

# 安装工具
sudo apt install -y bridge-utils uml-utilities

# 创建网桥
sudo brctl addbr br0
sudo ifconfig br0 192.168.88.1/24 up

# 创建tap0接口,并添加到网桥
sudo tunctl -t tap0
sudo ifconfig tap0 192.168.88.10/24 up
sudo brctl addif br0 tap0

启动系统,设置IP

# 启动系统
sudo qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda debian_squeeze_mips_standard.qcow2 -append "root=/dev/sda1 console=tty0" -nographic  -netdev tap,id=tapnet,ifname=tap0,script=no -device e1000,netdev=tapnet

设置IP与tap0一个网段,可以ping通同网段主机,但不能连接外网

五、QEMU系统模式-桥接外网

配置桥接网络,如果是静态IP,需要手动设置。

sudo ifconfig ens33 down                      # 首先关闭宿主机网卡ens33接口
sudo brctl addbr br1                          # 添加名为 br1 的网桥
sudo brctl addif br1 ens33                    # 在 br1 中添加一个接口
sudo brctl stp br1 off                        # 如果只有一个网桥,则关闭生成树协议
sudo brctl sethello br1 1                     # 设置 br1 的 hello 时间
sudo ifconfig br1 0.0.0.0 promisc up          # 启用 br1 接口
sudo ifconfig ens33 0.0.0.0 promisc up        # 启用 宿主机网卡ens33接口
sudo dhclient br1                             # 从 dhcp 服务器获得 br1 的 IP 地址
sudo ifconfig ens33 up                        # 再次启动宿主机网卡ens33接口

sudo tunctl -t tap1                           # 创建一个 tap1 接口
sudo brctl addif br1 tap1                     # 在虚拟网桥中增加一个 tap1 接口
sudo ifconfig tap1 0.0.0.0 promisc up         # 启用 tap1 接口

启动镜像

sudo qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda debian_squeeze_mips_standard.qcow2 -append "root=/dev/sda1 console=tty0" -nographic  -netdev tap,id=net1,ifname=tap1,script=no -device e1000,netdev=net1

启动后,镜像中可以ping通外网了。

六、参考连接

https://blog.csdn.net/Ga4ra/article/details/123996944

https://blog.csdn.net/qq_43390703/article/details/120978954

留下评论

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