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-a9
,rootfs
基于 ubuntu-base-16.04-core-armhf.tar.gz
制作。
3. 配置步骤
QEMU 网络配置支持多种模式,本篇就 TAP 方式
展开,其它方式不在此讨论。在此,先对测试环境做一下说明。QEMU 运行在 Ubuntu 16.04.4 系统
下,也即后文题到的 host
;linux-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_TUN
或 CONFIG_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 -> ???
也就是说,我们建立 host
和 guest
通信的一端,打 ???
的一端尚未连接好。可以通过如下命令查看网桥 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)
上面看到 eth0
和 lo
。上面看到 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 网桥一端的建立:创建网桥设备,并添加 host 网卡到网桥3.1.3 网桥另一端的建立:TUN/TAP 配置3.2 guest 端的配置4. 参考链接1. 前言 …...

windows安装tomcat
这里写自定义目录标题tomcat官网下载安装包并解压环境变量配置启动tomcat访问http://localhost:8080/修复启动出现乱码问题tomcat官网下载安装包并解压 环境变量配置 系统环境变量新增: 变量名:CATALINA_HOME 变量值:tomcat的安装目录 编辑…...
刷题记录:牛客NC23051华华和月月种树 树链剖分+离线加点
传送门:牛客 题目描述: 华华看书了解到,一起玩养成类的游戏有助于两人培养感情。所以他决定和月月一起种一棵树。因为华华现在也是信息学高手了,所以他们种的树是信息学意义下的。 华华和月月一起维护了一棵动态有根树,每个点有一个权值。刚…...

年薪20W软件测试工程师必备的6大技能(建议收藏)
软件测试 随着软件开发行业的日益发展,岗位需求量和行业薪资都不断增长,想要入行的人也是越来越多,但不知道从哪里下手,今天,就给大家分享一下,软件测试行业都有哪些必会的方法和技术知识点,作…...

【存储】RAID2.0+、多路径技术、磁盘可靠性技术
RAID2.0RAID 2.0技术RAID技术发展RAID 2.0软件逻辑对象RAID 2.0基本原理硬盘域Storage Pool & TierDisk Group(DG)LD(逻辑磁盘)Chunk(CK)Chunk Group(CKG)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 文档,Ubuntu, Docker 首字母…...

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

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

2023年如何通过软考初级程序员?
初级的考试难度不大,稍微有点编程基础,认真备考应该没什么大问题。 先清楚大纲: 高效备考!理清考点,针对性复习 科目一:综合知识 75道单项选择题,1题1分,时长150分钟;…...
视频自动播放的实现与问题解决
一、前言 页面加载一个视频并且自动播放,这个需求看起来非常简单,实现起来感觉也非常简单;但是,实际做起来还是有几处容易产生问题的地方卡住进度。本文讨论基于Vue3的项目在实现页面加载视频后的自动播放遇到的几个问题。 二、页面实现 页面实现非常简单。在页面上放置一个…...

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

巾帼绽芬芳 一起向未来(中篇)
编者按:为了隆重纪念纪念“三八”国际妇女节113周年,快来与你全方位、多层次分享交流“三八”国际妇女节的前世今生。分上篇(节日简介、节日发展和节日意义)、中篇(节日活动宗旨和世界各国庆祝方式)和下篇&…...

Qt学习2-Qt Creator新建项目小tips(哔站视频学习记录)
放送两个小tips: 1、MinGW和MSVC的区别 QT学习笔记(二):QT MinGW 和 MSVC 编译方式_Leon_Chan0的博客-CSDN博客 2、如何安装QT对应版本的MSVC (1)问题描述:Qt5.12.8支持MSVC2015和MSVC2017,但是系统安装的是Visual…...

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

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

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

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

儿童护目台灯哪种好用?几款真的保护视力的台灯品牌推荐
儿童眼睛还未发育完全,眼睛比较脆弱,但是现在的小孩子学习任务也比较繁重,经常晚上看书写字,所以选择合适的护眼台灯来保护眼睛很重要。 选择儿童护目台灯需要注意以下几个方面: (一)色温和亮…...
游戏逆向基础之OD找CALL实践
在逆向中除了分析数据之外,另外一个重要的工作就是找算法,找CALL 例如各种功能函数:攻击CALL,走路CALL,喊话CALL等等 以及加密解密等算法需要我们先锁定其位置,然后进行逆向分析。 最常见方法一 API函数下断,例如send …...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...

【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案
在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。 一、系统核心功能架构&…...

C++--string的模拟实现
一,引言 string的模拟实现是只对string对象中给的主要功能经行模拟实现,其目的是加强对string的底层了解,以便于在以后的学习或者工作中更加熟练的使用string。本文中的代码仅供参考并不唯一。 二,默认成员函数 string主要有三个成员变量,…...
Android屏幕刷新率与FPS(Frames Per Second) 120hz
Android屏幕刷新率与FPS(Frames Per Second) 120hz 屏幕刷新率是屏幕每秒钟刷新显示内容的次数,单位是赫兹(Hz)。 60Hz 屏幕:每秒刷新 60 次,每次刷新间隔约 16.67ms 90Hz 屏幕:每秒刷新 90 次,…...