如何配置 QEMU 虚拟机网络

本文介绍了QEMU的四种网络通信方法,重点关注用户协议栈和TAP/bridge模式。TAP/bridge是实现QEMU与外部网络通信的关键,通过创建虚拟网桥和TAP设备,实现虚拟机与物理网络的桥接。配置过程中涉及到网桥的创建、接口管理及DHCP获取IP地址,最后通过指定QEMU启动参数实现网络连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于 QEMU 的网络策略
QEMU 提供 4 种网络通信方法,它们分别是:

User mode stack:用户协议栈方式,这种方式的大概原理是在 QEMU 进程中实现一个协议栈,这个协议栈可以被视为一个主机与虚拟机之间的 NAT 服务器,它负责将 QEMU 所模拟的系统网络请求转发到外部网卡上面,从而实现网络通信。但是不能将外面的请求转发到虚拟机内部,并且虚拟机 VLAN 中的每个接口必须放在 10.0.2.0 子网中。
socket: 为 VLAN 创建套接字,并把多个 VLAN 连接起来。
TAP/bridge:最重要的一种通信方式,我们想要实现 QEMU 虚拟机和外部通信就需要使用这种方式。
VDE:也是用于连接 VLAN 的,如果没有 VLAN 连接需求基本用不到。
重点解释一下 tap 模式,TAP 属于 LInux 内核支持的一种虚拟化网络设备,还有 TUN 也属于这种设备,它们完全由软件模拟实现,TUN/TAP 负责在内核协议栈和用户进程之间传送协议数据单元。TUN 工作在网络层,而 TAP 工作在数据链路层,TUN 负责与应用程序交换 IP 数据包,而 TAP 与应用程序交换以太网帧。所以 TUN 经常涉及路由,而 TAP 常用于网络桥接。

所谓桥接可以简单理解为在两张网卡之间搭一座桥,一端有数据就可以通过桥走到另一端,对于实现 QEMU 虚拟机通信正合适。桥接技术在 VMWARE 中非常常用,我们设置虚拟机网络的时候就能看见桥接选项,实际上 VMware 在物理机上虚拟化了 3 张网卡,分别负责桥接、仅主机、共享网络。

具体的配置过程
(首先确定你的机器支持 TAP/TUN 虚拟设备)

首先安装如下软件

apt-get install bridge-utils        # 虚拟网桥工具
apt-get install uml-utilities       # UML(User-mode linux)工具

添加网桥,大部分操作都需要 root 权限:

ifconfig <你的网卡名称(能上网的那张)> down    # 首先关闭宿主机网卡接口
brctl addbr br0                     # 添加名为 br0 的网桥
brctl addif br0 <你的网卡名称>        # 在 br0 中添加一个接口
brctl stp br0 off                   # 如果只有一个网桥,则关闭生成树协议
brctl setfd br0 1                   # 设置 br0 的转发延迟
brctl sethello br0 1                # 设置 br0 的 hello 时间
ifconfig br0 0.0.0.0 promisc up     # 启用 br0 接口
ifconfig <你的网卡名称> 0.0.0.0 promisc up    # 启用网卡接口
dhclient br0                        # 从 dhcp 服务器获得 br0 的 IP 地址
brctl show br0                      # 查看虚拟网桥列表
brctl showstp br0                   # 查看 br0 的各接口信息

当配置完成之后执行 ifconfig 结果应该如下:

在这里插入图片描述

此时网桥已经得到了 IP,并且能够连接网络的网卡 enp0s5 也加入了网桥,此时我们的网桥状态大致是这种情况
在这里插入图片描述

桥的一端连接到 enp0s5,我们只需要再把另一端接到 QEMU 虚拟机(准确的说是 VLAN )上面就可以了。

创建一个 TAP 设备,作为 QEMU 一端的接口:

tunctl -t tap0 -u root              # 创建一个 tap0 接口,只允许 root 用户访问
brctl addif br0 tap0                # 在虚拟网桥中增加一个 tap0 接口
ifconfig tap0 0.0.0.0 promisc up    # 启用 tap0 接口
brctl showstp br0                   # 显示 br0 的各个接口

此时网桥的信息应该是:
在这里插入图片描述

这样就相当于把两张网卡通过网桥连起来了:

在这里插入图片描述

现在只需要启动镜像,指定网络连接模式是 TAP 即可。

sudo qemu-system-mipsel -M malta -kernel vmlinux-3.2.0-4-4kc-malta -hda debian_squeeze_mipsel_standard.qcow2 -append "root=/dev/sda1 console=tty0" -nographic -net nic -net tap,ifname=tap0,script=no,downscript=no

特别说明一下参数含义:-net nic 表示希望 QEMU 在虚拟机中创建一张虚拟网卡,-net tap 表示连接类型为 TAP,并且指定了网卡接口名称(就是刚才创建的 tap0,相当于把虚拟机接入网桥)。

script 和 downscript 两个选项的作用是告诉 QEMU 在启动系统的时候是否调用脚本自动配置网络环境,如果这两个选项为空,那么 QEMU 启动和退出时会自动选择第一个不存在的 tap 接口(通常是 tap0)为参数,调用脚本 /etc/qemu-ifup 和 /etc/qemu-ifdown。由于我们已经配置完毕,所以这两个参数设置为 no 即可。

等到镜像 boot 完毕,在命令行中 ping 一下百度:
在这里插入图片描述

至此网络配置成功。

参考链接
https://blog.csdn.net/u014022631/article/details/53411557

https://shadow-file.blogspot.com/2013/05/running-debian-mips-linux-in-qemu.html

### 在 QEMU 中安装和配置 Alpine Linux 的指南 要在 QEMU 中安装和配置 Alpine Linux,可以按照以下内容操作。以下是详细的步骤说明: #### 1. 准备工作 确保系统中已安装 QEMU 和相关工具。如果尚未安装,可以通过以下命令安装: ```bash sudo apt update && sudo apt install -y qemu-system-x86_64 qemu-utils ``` 下载 Alpine Linux 的 ISO 镜像文件。可以从官方站点获取最新版本的镜像文件: ```bash wget https://dl-cdn.alpinelinux.org/alpine/v3.17/releases/x86_64/alpine-virt-3.17.0-x86_64.iso ``` 此外,还需要创建一个虚拟磁盘文件(例如使用 QCOW2 格式)以存储操作系统: ```bash qemu-img create -f qcow2 alpine.qcow2 10G ``` #### 2. 启动 QEMU 并安装 Alpine Linux 启动 QEMU 并挂载 Alpine Linux 的 ISO 文件进行安装。以下是启动命令示例: ```bash qemu-system-x86_64 \ -smp 2 \ -m 2048 \ -drive file=alpine.qcow2,if=virtio \ -netdev user,id=n1,hostfwd=tcp::2222-:22 \ -device virtio-net,netdev=n1 \ -cdrom alpine-virt-3.17.0-x86_64.iso \ -boot d \ -nographic ``` 上述命令解释如下: - `-smp 2`:分配两个虚拟 CPU。 - `-m 2048`:分配 2048 MB 内存。 - `-drive file=alpine.qcow2,if=virtio`:指定虚拟磁盘文件并使用 VirtIO 接口[^5]。 - `-netdev user,id=n1,hostfwd=tcp::2222-:22`:设置网络,并将主机的 2222 端口转发到虚拟机的 22 端口。 - `-device virtio-net,netdev=n1`:使用 VirtIO 网络设备。 - `-cdrom alpine-virt-3.17.0-x86_64.iso`:挂载 Alpine Linux 的 ISO 文件。 - `-boot d`:从 CD-ROM 引导。 - `-nographic`:禁用图形界面,仅通过终端交互。 #### 3. 安装 Alpine Linux 启动后,进入 Alpine Linux 的安装界面。根据提示选择语言、键盘布局等选项。在安装过程中,需要执行以下步骤: - **格式化磁盘**:使用 `setup-disk` 命令对虚拟磁盘进行分区和格式化。 - **配置网络**:通过 `setup-network` 设置网络接口。 - **设置 root 密码**:使用 `passwd` 命令为 root 用户设置密码。 - **安装 SSH 服务**:运行 `apk add openssh` 安装 SSH 服务,并启用 SSH 登录[^4]。 #### 4. 配置 Alpine Linux 完成安装后,重新启动虚拟机并进入系统。可以执行以下操作进行进一步配置: - **切换 APK 源**:将默认的 APK 包源替换为国内镜像源以加速软件包下载: ```bash echo "http://mirror.tuna.tsinghua.edu.cn/alpine/v3.17/main" > /etc/apk/repositories echo "http://mirror.tuna.tsinghua.edu.cn/alpine/v3.17/community" >> /etc/apk/repositories apk update ``` - **安装 Docker**:如果需要使用容器化技术,可以安装 Docker 及其相关工具: ```bash apk add docker docker-compose rc-update add docker boot service docker start ``` #### 5. 测试与验证 安装完成后,可以通过以下方式测试虚拟机的功能: - 使用 SSH 登录虚拟机: ```bash ssh root@localhost -p 2222 ``` - 验证 Docker 是否正常工作: ```bash docker run hello-world ``` --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值