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

QEMU网络配置

文章目录

  • 1. 前言
  • 2. 测试环境
  • 3. 配置步骤
    • 3.1 host 配置
      • 3.1.1 检查 host 对 TUN/TAP 和 网桥的支持情况
      • 3.1.2 网桥一端的建立:创建网桥设备,并添加 host 网卡到网桥
      • 3.1.3 网桥另一端的建立:TUN/TAP 配置
    • 3.2 guest 端的配置
  • 4. 参考链接

1. 前言

限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。

2. 测试环境

本文分析基于 linux-4.14.132 内核代码分析,运行环境 Ubuntu 16.04.4 LTS + QEMU emulator version 2.5.0 + ARM vexpress-a9rootfs 基于 ubuntu-base-16.04-core-armhf.tar.gz 制作。

3. 配置步骤

QEMU 网络配置支持多种模式,本篇就 TAP 方式展开,其它方式不在此讨论。在此,先对测试环境做一下说明。QEMU 运行在 Ubuntu 16.04.4 系统下,也即后文题到的 hostlinux-4.14.132 + ubuntu-base-16.04-core-armhf.tar.gz 运行于 QEMU 模拟的 ARM vexpress-a9 板型环境下(也即后文提到的 guest)。

3.1 host 配置

3.1.1 检查 host 对 TUN/TAP 和 网桥的支持情况

查询 host 当前的内核配置,是否支持 TUN/TAP网桥 功能:

$ cat /boot/config-`uname -r` | grep "CONFIG_TUN"
CONFIG_TUN=y
# CONFIG_TUN_VNET_CROSS_LE is not set
$ cat /boot/config-`uname -r` | grep "CONFIG_BRIDGE="
CONFIG_BRIDGE=m

我们看到,当前 host 的 TUN/TAP 随内核一起启动,而网桥支持则是以内核模块的方式提供,这意味着我们需要手动加载 bridge.ko (网桥支持功能内核模块)。但不必担心,后面提到的工具 brctl 会帮我们加载该模块。
如果上述查询没有开启 CONFIG_TUNCONFIG_BRIDGE 中的任一个,则接下来的操作无法完成。

3.1.2 网桥一端的建立:创建网桥设备,并添加 host 网卡到网桥

sudo ifconfig ens33 down
sudo brctl addbr br0 # 创建网桥设备 br0
sudo brctl addif br0 ens33 # 添加网口 ens33 到网桥 br0
sudo brctl stp br0 off # 关闭网桥 br0 的生成树协议
sudo brctl setfd br0 1 # 设置网桥 br0 转发延迟为1秒
sudo brctl sethello br0 1 # 设置网桥 br0 'hello time' 为1秒
sudo ifconfig br0 0.0.0.0 promisc up # 设置网桥 br0 为混杂模式
sudo ifconfig ens33 0.0.0.0 promisc up # 设置网桥 ens33 为混杂模式
sudo dhclient br0 # 为网桥 br0 获取 IP

上面假设 host 用来上网的网卡为 ens33,如果你的机器有所不同,修改它。在这之后,建立了网桥 br0 ,并且加网卡 ens33 加入了网桥,目前的拓扑如下图:

Internet <-> en33 <-> br0 -> ???

也就是说,我们建立 hostguest 通信的一端,打 ??? 的一端尚未连接好。可以通过如下命令查看网桥 br0 的信息:

sudo brctl show br0
sudo brctl showstp br0

3.1.3 网桥另一端的建立:TUN/TAP 配置

在此建立网桥的另一端 tap0 ,它一边通过网桥 br0 连接到 host 的网卡 ens33;另一边连接到运行于 QEMU 内的 guest 虚拟网卡。我们来看建立 tap0 的操作步骤:

sudo tunctl -t tap0 -u `whoami` # 建立 tap0,仅限当前用户使用,也可指定其它用户,如 root
sudo brctl addif br0 tap0 # 将 tap0 添加到网桥 br0
sudo ifconfig tap0 0.0.0.0 promisc up # 将 tap0 设置为混杂模式

此时,我们的连接拓扑变成了如下结构:

				      host                 guest----------------------       ----
Internet <-> | en33 <-> br0 -> tap0 | <-> | ??? |----------------------       -----

到此,host 的配置完成了,现在我们用 QEMU 来启动 guest

sudo qemu-system-arm \-M vexpress-a9 -smp 4 -m 512M \-kernel $1/output/arch/arm/boot/zImage \-dtb $1/output/arch/arm/boot/dts/vexpress-v2p-ca9.dtb \-append "root=/dev/mmcblk0 rw rootfstype=ext4 console=ttyAMA0" \-sd rootfs/arm-ubuntu-16.04.img \-nographic \-net nic -net tap,ifname=tap0,script=no,downscript=no

重点是参数序列:

-net nic -net tap,ifname=tap0,script=no,downscript=no
-net nic: 让 QEMU 虚拟一张 guest 网卡,将是后文看到的 eth0 ;
-net tap,ifname=tap0,script=no,downscript=no: 主要意思是 host tap0 连接 guest(eth0)和 host 的通信

3.2 guest 端的配置

QEMU 启动 guest 后,登录 guest 系统,先查看网卡信息:

$ ifconfig -a
eth0      Link encap:Ethernet  HWaddr 52:54:00:12:34:56  inet addr:192.168.0.10  Bcast:192.168.0.255  Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:43 errors:0 dropped:0 overruns:0 frame:0TX packets:25 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:4824 (4.8 KB)  TX bytes:2258 (2.2 KB)Interrupt:31 lo        Link encap:Local Loopback  inet addr:127.0.0.1  Mask:255.0.0.0UP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

上面看到 eth0lo 。上面看到 eth0 已经有了 IP,事实上,这是配置后结果,初始 eth0 是没有 IP 的,需要对文件 /etc/network/interfaces 进行如下配置:

# interfaces(5) file used by ifup(8) and ifdown(8)
# Include files from /etc/network/interfaces.d:
#source-directory /etc/network/interfaces.dauto lo
iface lo inet loopbackauto eth0
iface eth0 inet dhcp

保存文件 /etc/network/interfaces 重启网口 eth0 ,然后检查是否能上网了:

$ ping www.baidu.com
PING www.baidu.com (14.119.104.189) 56(84) bytes of data.
64 bytes from 14.119.104.189: icmp_seq=1 ttl=55 time=10.4 ms
64 bytes from 14.119.104.189: icmp_seq=2 ttl=55 time=17.8 ms
64 bytes from 14.119.104.189: icmp_seq=3 ttl=55 time=9.48 ms
^C
--- www.baidu.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2012ms
rtt min/avg/max/mdev = 9.485/12.603/17.876/3.750 ms

最终,形成了如下的网络拓扑结构:

				      host                      guest----------------------       ---------------
Internet <-> | en33 <-> br0 -> tap0 | <-> | 虚拟网卡 eth0 |----------------------       ---------------

好了,已经可以上网了,工作结束,休息下,喝杯茶 ~~

4. 参考链接

https://blog.csdn.net/HaiLanLin/article/details/109845929
https://blog.csdn.net/OnlyLove_/article/details/124536607
https://blog.csdn.net/u014022631/article/details/53411557
https://blog.csdn.net/qq_41146650/article/details/126465032
https://wiki.qemu.org/Documentation/Networking#Network_Basics

相关文章:

QEMU网络配置

文章目录1. 前言2. 测试环境3. 配置步骤3.1 host 配置3.1.1 检查 host 对 TUN/TAP 和 网桥的支持情况3.1.2 网桥一端的建立&#xff1a;创建网桥设备&#xff0c;并添加 host 网卡到网桥3.1.3 网桥另一端的建立&#xff1a;TUN/TAP 配置3.2 guest 端的配置4. 参考链接1. 前言 …...

windows安装tomcat

这里写自定义目录标题tomcat官网下载安装包并解压环境变量配置启动tomcat访问http://localhost:8080/修复启动出现乱码问题tomcat官网下载安装包并解压 环境变量配置 系统环境变量新增&#xff1a; 变量名&#xff1a;CATALINA_HOME 变量值&#xff1a;tomcat的安装目录 编辑…...

刷题记录:牛客NC23051华华和月月种树 树链剖分+离线加点

传送门:牛客 题目描述: 华华看书了解到&#xff0c;一起玩养成类的游戏有助于两人培养感情。所以他决定和月月一起种一棵树。因为华华现在也是信息学高手了&#xff0c;所以他们种的树是信息学意义下的。 华华和月月一起维护了一棵动态有根树&#xff0c;每个点有一个权值。刚…...

年薪20W软件测试工程师必备的6大技能(建议收藏)

软件测试 随着软件开发行业的日益发展&#xff0c;岗位需求量和行业薪资都不断增长&#xff0c;想要入行的人也是越来越多&#xff0c;但不知道从哪里下手&#xff0c;今天&#xff0c;就给大家分享一下&#xff0c;软件测试行业都有哪些必会的方法和技术知识点&#xff0c;作…...

【存储】RAID2.0+、多路径技术、磁盘可靠性技术

RAID2.0RAID 2.0技术RAID技术发展RAID 2.0软件逻辑对象RAID 2.0基本原理硬盘域Storage Pool & TierDisk Group&#xff08;DG&#xff09;LD&#xff08;逻辑磁盘&#xff09;Chunk&#xff08;CK&#xff09;Chunk Group&#xff08;CKG&#xff09;ExtentGrainVolume &am…...

Vue 2

文章目录1. 简介2. 第一个Vue程序3. 指令3.1 判断循环3.2 操作属性3.3 绑定事件3.4 表单中数据双向绑定3.5 其他内置指令3.6 自定义指令4. 组件4.1 全局注册4.2 局部注册4.3 组件通讯4.4 单文件组件5. 组件插槽5.1 单个插槽5.2 具名插槽5.3 作用域插槽6. 内置组件6.1 component…...

Ubuntu 安装 Docker Engine

【参考】Install Docker Engine on Ubuntu | Docker Documentation: https://docs.docker.com/engine/install/ubuntu/ 【参考】Docker CE 镜像源站-阿里云开发者社区 https://developer.aliyun.com/article/110806 【规范】模仿 Docker 文档&#xff0c;Ubuntu, Docker 首字母…...

SpringBoot入门 - 添加内存数据库H2

上文我们展示了通过学习经典的MVC分包结构展示了一个用户的增删查改项目&#xff0c;但是我们没有接入数据库&#xff1b;本文将在上文的基础上&#xff0c;增加一个H2内存数据库&#xff0c;并且通过Spring 提供的数据访问包JPA进行数据查询。准备知识点在介绍通过Spring JPA接…...

高质量数字化转型创新发展大会暨中国信通院“铸基计划”年度会议成功召开

2023年3月3日&#xff0c;由中国信通院主办的高质量数字化转型创新发展大会暨中国信通院“铸基计划”年度会议在北京成功召开。本次大会深度展示了中国信通院在数字化领域的工作成果&#xff0c;并全面展望了2023年行业的数字化发展趋势。同时&#xff0c;大会发布了中国信通院…...

2023年如何通过软考初级程序员?

初级的考试难度不大&#xff0c;稍微有点编程基础&#xff0c;认真备考应该没什么大问题。 先清楚大纲&#xff1a; 高效备考&#xff01;理清考点&#xff0c;针对性复习 科目一&#xff1a;综合知识 75道单项选择题&#xff0c;1题1分&#xff0c;时长150分钟&#xff1b;…...

视频自动播放的实现与问题解决

一、前言 页面加载一个视频并且自动播放,这个需求看起来非常简单,实现起来感觉也非常简单;但是,实际做起来还是有几处容易产生问题的地方卡住进度。本文讨论基于Vue3的项目在实现页面加载视频后的自动播放遇到的几个问题。 二、页面实现 页面实现非常简单。在页面上放置一个…...

ThreadLocal 理解及面试

一、ThreadLocal 引用关系 图解关系说明&#xff1a; 每个线程拥有自己的 ThreadLocalMap 属性&#xff1b;ThreadLocalMap 的存储结构为 Entry[] 数组&#xff1b;Entry的Key是ThreadLocal类型且弱引用指向ThreadLocal对象&#xff0c;Value是我们自己定义的泛型值对象&#…...

巾帼绽芬芳 一起向未来(中篇)

编者按&#xff1a;为了隆重纪念纪念“三八”国际妇女节113周年&#xff0c;快来与你全方位、多层次分享交流“三八”国际妇女节的前世今生。分上篇&#xff08;节日简介、节日发展和节日意义&#xff09;、中篇&#xff08;节日活动宗旨和世界各国庆祝方式&#xff09;和下篇&…...

Qt学习2-Qt Creator新建项目小tips(哔站视频学习记录)

放送两个小tips: 1、MinGW和MSVC的区别 QT学习笔记&#xff08;二&#xff09;&#xff1a;QT MinGW 和 MSVC 编译方式_Leon_Chan0的博客-CSDN博客 2、如何安装QT对应版本的MSVC (1)问题描述&#xff1a;Qt5.12.8支持MSVC2015和MSVC2017&#xff0c;但是系统安装的是Visual…...

React-高阶组件

认识高级组件 高阶函数的维基百科定义:至少满足以下条件之一 1、接受一个或多个函数作为输入; 2、输出一个函数; JavaScript中比较常见的 filter、map、reduce 都是高阶函数 那么说明是高阶组件呢? 高阶组件的英文是 Higher-Order Components&#xff0c;简称为 HOC;官方的…...

python学习——【第一弹】

前言 Python是一种跨平台的计算机程序设计语言&#xff0c;是ABC语言的替代品&#xff0c;属于面向对象的动态类型语言&#xff0c;最初被设计用于编写自动化脚本&#xff0c;随着版本的不断更新和语言新功能的添加&#xff0c;越来越多被用于独立的、大型项目的开发。 从这篇…...

数据结构——链表讲解(1)

作者&#xff1a;几冬雪来 时间&#xff1a;2023年3月3日 内容&#xff1a;数据结构链表讲解 目录 前言&#xff1a; 链表的概念&#xff1a; 1.为什么要有链表&#xff1a; 2.链表的运行原理&#xff1a; 3.链表的形态多少&#xff1a; 4.单链表的代码书写&#xff1…...

docker部署MySQL主从服务

一.主从同步流程关于MySQL主从复制主要同步的是binlog日志&#xff0c;涉及到三个线程&#xff0c;一个运行在主节点&#xff08;log dump thread&#xff09;&#xff0c;其余两个(I/O thread, SQL thread)运行在从节点&#xff0c;如下图所示:当主库数据发生变更时&#xff0…...

儿童护目台灯哪种好用?几款真的保护视力的台灯品牌推荐

儿童眼睛还未发育完全&#xff0c;眼睛比较脆弱&#xff0c;但是现在的小孩子学习任务也比较繁重&#xff0c;经常晚上看书写字&#xff0c;所以选择合适的护眼台灯来保护眼睛很重要。 选择儿童护目台灯需要注意以下几个方面&#xff1a; &#xff08;一&#xff09;色温和亮…...

游戏逆向基础之OD找CALL实践

在逆向中除了分析数据之外&#xff0c;另外一个重要的工作就是找算法&#xff0c;找CALL 例如各种功能函数&#xff1a;攻击CALL,走路CALL,喊话CALL等等 以及加密解密等算法需要我们先锁定其位置&#xff0c;然后进行逆向分析。 最常见方法一 API函数下断&#xff0c;例如send …...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...