当前位置: 首页 > 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 …...

M2LOrder模型轻量化对比:Web端与移动端部署可行性评估

M2LOrder模型轻量化对比&#xff1a;Web端与移动端部署可行性评估 最近在折腾一个挺有意思的事儿&#xff0c;就是把一个原本跑在服务器上的AI模型&#xff0c;想办法塞到手机里或者浏览器里。这个模型叫M2LOrder&#xff0c;主要干的是情感分析的活儿。你可能会想&#xff0c…...

GLM-Image创新应用:基于算法的艺术风格探索

GLM-Image创新应用&#xff1a;基于算法的艺术风格探索 当AI算法遇见艺术创作&#xff0c;会碰撞出怎样的火花&#xff1f;GLM-Image正在重新定义数字艺术的可能性边界。 1. 引言&#xff1a;算法与艺术的完美融合 在数字艺术创作领域&#xff0c;传统工具往往需要艺术家具备深…...

STC8H上跑smallRTOS51:从源码下载到多任务调度的完整实战(附避坑指南)

STC8H实战smallRTOS51&#xff1a;从零构建多任务系统的全流程解析 作为一名长期使用STM32的嵌入式开发者&#xff0c;第一次接触STC8H时&#xff0c;裸机编程的局限性让我倍感束缚。当项目复杂度上升&#xff0c;多任务管理成为刚需&#xff0c;我决定在STC8H上移植smallRTOS5…...

windows关闭shift和ctrl切换输入法

...

Blender Python API实战:AI辅助3D建模自动化脚本开发

1. 为什么需要AI辅助Blender脚本开发 第一次打开Blender时&#xff0c;相信很多人都会被它复杂的界面吓到。密密麻麻的菜单栏、数不清的快捷键、各种专业术语...作为一个从Maya转战Blender的老3D设计师&#xff0c;我完全理解这种挫败感。但后来发现&#xff0c;Blender最强大的…...

开源小模型怎么选?Qwen1.5-0.5B-Chat轻量化优势解析

开源小模型怎么选&#xff1f;Qwen1.5-0.5B-Chat轻量化优势解析 1. 为什么需要轻量级小模型&#xff1f; 当我们谈论AI大模型时&#xff0c;很多人首先想到的是那些需要高端GPU、动辄几十GB内存的庞然大物。但在实际应用中&#xff0c;特别是个人开发者、中小企业或者教育场景…...

nli-distilroberta-base案例集锦:12个已落地NLI应用场景与技术实现要点

nli-distilroberta-base案例集锦&#xff1a;12个已落地NLI应用场景与技术实现要点 1. 项目概述 nli-distilroberta-base是一个基于DistilRoBERTa模型的自然语言推理(NLI)Web服务&#xff0c;专门用于判断两个句子之间的关系。这个轻量级但强大的模型能够快速准确地分析句子对…...

从XJTUSE编译原理小测出发:手把手教你用Python实现一个简易的词法分析器

从理论到实践&#xff1a;用Python构建词法分析器的完整指南 编译原理常被视为计算机科学中的"玄学"——课堂上听得云里雾里&#xff0c;考试时全靠死记硬背。但当我第一次用Python实现了一个能识别简单算术表达式的词法分析器后&#xff0c;那些抽象的状态转换图、有…...

AI显微镜-Swin2SR惊艳效果展示:电子包浆表情包高清还原作品集

AI显微镜-Swin2SR惊艳效果展示&#xff1a;电子包浆表情包高清还原作品集 你有没有遇到过这种情况&#xff1f;在网上看到一个特别有趣的表情包&#xff0c;但图片糊得连五官都看不清&#xff0c;上面还叠加了无数层水印和压缩痕迹&#xff0c;俗称“电子包浆”。想保存下来当…...

专为AI打造的浏览器:内存占用仅为Chrome的1/9、比Chrome快11倍(Docker部署教程,支持飞牛nas等服务器部署)

文章目录 📖 介绍 📖 🏡 演示环境 🏡 📒 轻量级无头浏览器介绍与Docker部署指南 📒 📝 工具介绍 🎯 为什么选择它 🔧 Docker Compose 快速部署 💡 连接进行自动化操作 ⚠️ 注意事项 📊 性能对比 🎯 适用场景 ⚓️ 相关链接 ⚓️ 📖 介绍 📖 在自动…...