tap的方式使用qemu建立虚拟机NAT网络

[b]基本概念:[/b]
vm:虚拟机
主机:建立虚拟机的服务器


[b]需求:用nat的方式,利用qemu建立一个虚拟机,使虚拟机可以访问外网[/b]
目前主机的ip为192.168.139.85
想设置vm的ip段为192.168.122.0段,dhcp自动获取ip,并访问外网

[b]基本原理[/b]:
[color=darkred]
使用tap的方式建立vm,
建立一个网桥virbr0,
把这个网桥作为网关192.168.122.1,
把tap绑定到这个网桥virbr0上,
tap设备是通到vm里面的eth0的,
所以建立的所有vm都在网桥上就可以互相访问,
在主机上使用dnsmasq建立dhcp服务,绑定到virbr0上,
这样所有绑定到网桥的vm即可使用dhcp服务,
在vm中使用dhclient就可以获取到主机dhcp服务提供的ip地址,
在主机上设置nat的iptables,
然后打开系统的转发功能。
[/color]


[b]需要安装[/b]:qemu,tap,brctl,iptables,需要一个内核文件bzImage,一个操作系统镜像文件hda.img
[b]环境[/b]:Ubuntu 14.04.4 LTS

[b]一.建立一个120M的简版linux的镜像hda.img,要求支持ip,ifconfig,iptables,dhclient等网络命令[/b]
建立方法

debootstrap --variant=minbase --include=util-linux,dhcp-client,ssh,vim,make,psmisc,mini-httpd,net-tools,iproute,iputils-ping,procps,telnet,iptables,wget,tcpdump,curl,gdb,binutils,gcc,libc6-dev,lsof,strace --exclude=locales,aptitude,gnupg,cron,udev,tasksel,rsyslog,groff-base,manpages,gpgv,man-db,apt,debian-archive-keyring,sysv-rc,sysvinit,insserv,python2.6 --arch i386 etch etch 'http://archive.debian.org/debian'

这个debootstrap命令国内可能不通,去aws上操作吧,如果已经有了可用的img文件,直接看第二步

具体细节参考:[b]使用qemu的建立基本的虚拟机[/b] [url]http://haoningabc.iteye.com/blog/2306941[/url]
得到bzImage的内核文件和hda.img的操作系统镜像

[b]二.使用qemu建立虚拟机,配置主机的网络[/b]

qemu-system-i386 -kernel bzImage -drive file=hda.img,if=ide,cache=none -append "console=ttyS0 root=/dev/sda rw rdinit=/sbin/init notsc=1" -nographic -boot order=dc,menu=on -net nic,vlan=0,macaddr=52:54:00:12:34:22,model=e1000,addr=08 -net tap,name=haha,ifname=tap1,script=no,downscript=no

-kernel 指定内核文件bzImage
-append 配合kernel使用的内核参数,这里指定了启动文件/sbin/init
-drive 指定硬盘文件 hda.img,也可以用 -hda hda.img
-nographic 不用图形化界面,如果没有这个就要指定-vnc 0.0.0.0:1参数通过vncviewer访问了
例如

qemu-system-i386 -kernel /root/jslinux/obj/linux-x86-basic/arch/i386/boot/bzImage -drive file=hda_hasbacking_file.qcow2,if=ide,cache=none -append "root=/dev/sda rw rdinit=/sbin/init notsc=1" -vnc 0.0.0.0:1 -boot order=dc,menu=on -net nic,vlan=0,macaddr=52:54:00:12:34:22,model=e1000,addr=08 -net tap,name=haha,ifname=tap1,script=no,downscript=no

-boot 是设置启动参数,d为光驱,c为第一个硬盘,
-net 指定网络配置([b]这里重要[/b])
一共有三种
[color=red]-net nic [/color]必须有的基本配置,macaddr 设置mac地址,model是网卡的类型,可以model=?查看有哪些类型
[color=red]-net tap [/color]使用桥接模式的,需要指定启动script=和关闭downscript,
fd是指向已经有的tap设备,name是在monitor模式使用info network看到的名字,ifname是tap设备在主机中的名字
[color=red]-net user [/color]用户模式,qemu使用Slirp实现了一整套tcp/ip协议栈

一般nic必须有,tap和user选一个使用

这里注意使用[color=red]-net tap,ifname=tap1[/color] 建立tap设备.


建立虚拟机后,
主机ip link show
发现多了个tap1设备
建立一个网桥,
把tap1绑定到桥上,

#建立网桥
brctl addbr virbr0
ip link set tap1 up
#把tap绑定到网桥
brctl addif virbr0 tap1

#设置nat的iptables

iptables -t nat -A POSTROUTING -s "192.168.122.0/255.255.255.0" ! -d "192.168.122.0/255.255.255.0" -j MASQUERADE


#设置linux内核的转发

echo 1 >/proc/sys/net/ipv4/ip_forward
#ifconfig eth0 promisc


[b]三.主机上启动dnsmasq服务,提供dhcp的server功能,
注意参数指向刚建的virbr0桥上[/b]

dnsmasq --strict-order --except-interface=lo --interface=virbr0 --listen-address=192.168.122.1 --bind-interfaces --dhcp-range=192.168.122.2,192.168.122.254 --conf-file="" --pid-file=/var/run/qemu-dhcp-virbr0.pid --dhcp-leasefile=/var/run/qemu-dhcp-virbr0.leases --dhcp-no-override

关键点是[color=red]--interface=virbr0 [/color]
--dhcp-range 设置网段范围

[b]四.在虚拟机中,dhcp配置网络[/b]
[color=red]注意这里是在vm里面操作的,上面的都是在主机上操作[/color]

ip link set eth0 up
#获取ip
dhclient
#测试ping 网关
ping 192.168.122.1
ping www.baidu.com
#查看
ifconfig eth0
#成功设置ip 192.168.122.37
cat /etc/resolv.conf
#发现dns也自动建立了
#ip route查看路由
#也可以自己设置网关和ip
#route add default gw 192.168.122.1 netmask 255.255.255.0

[img]http://dl2.iteye.com/upload/attachment/0118/2212/ebc449d3-f159-31bc-b5c9-10404c4522ab.png[/img]

如果使用普通桥接参考 [b]桥接的方式使用qemu建立虚拟机[/b]:[url]http://haoningabc.iteye.com/blog/2306736[/url]


[b]端口映射:[/b]

在vm中启动http服务,开启80端口:

mini-httpd
netstat -nltp|grep 80

在主机上

iptables -t nat -A PREROUTING -p tcp -d 192.168.139.85 --dport 81 -j DNAT --to 192.168.122.37:80

192.168.139.85是主机ip
192.168.122.37是vm的ip
把vm的80端口映射到主机81上,
注意这里,在主机上netstat -nltp|grep 81是看不到的

iptables -t nat -L

查看变化
如果要删掉这条规则,把-A换成-D
访问http://192.168.139.85:81 就访问到vm内部了
window下配置qemu虚拟机联网 启动虚拟机,查看ip是否自动分配,如果已经分配,那么就完成了。安装tap网卡,改名为tap0。 阅读详情

相关推荐

创建NAT模式KVM虚拟机

创建NAT模式KVM虚拟机

qq_56182387的博客 358

qemu网络NAT配置

qemu的nat网络配置

sunyun1990的专栏 1401

QEMU虚拟机网络配置终极指南:从NAT隔离到手动设置静态IP(Ubuntu Server版)

本文是QEMU虚拟机网络配置的终极指南,针对Ubuntu Server环境,详细讲解了如何从默认的NAT隔离模式切换到更灵活的手动配置。文章深入剖析了TAP设备桥接模式,提供了从创建TAP设备、绑定MAC地址到在虚拟机内设置静态IP的完整命令行操作步骤,并解决了DHCP失效和配置持久化等常见问题,旨在帮助用户构建稳定、可控的服务器虚拟化网络环境。

rock5的博客 539

QEMU虚拟机怎么配置网络才能主机和虚拟机都通

当打开QEMU虚拟机配置界面的时候,可以看到多种网络模型。而其中默认使用的是NAT,你会发现,当你创建完虚拟机直接去配置网络之后,网络是不通的。 然后切换为其他模式之后,你会发现,要么是虚拟机IP可以通,但是物理机IP又不通了,要么就是物理机IP通,虚拟机IP不通,对于我们来说,我们肯定是希望物理机和虚拟机通能通过该网卡后,都是正常使用网络。 默认网络是NAT 在物理机上新建一个桥接网络 (vi /etc/sysconfig/network-scripts/ifcfg-br0)

wang_sandking的博客 4691

qemu网络启动模式配置

   学习时间:2011/12/6 1 tap/tun启动模式(虚拟机启动网络参数-net nic –net tap) Qemu的tap初始化脚本缺省是/etc/qemu-ifup,内容如下: #!/bin/sh /sbin/ifconfig $1 192.168.0.11 如果不存在tun内核模块,可以自己编译。TUN模块的内核配置项位于: Device

txxm127的专栏 1770

VIVADO中的IP核在MATLAB中仿真

VIVADO中的IP核在MATLAB中仿真项目简述VIVADO建立FFT IP核MATLAB调用FFT IP核 项目简述 我们都会用MATLAB进行算法验证,但是经常会发现如果VIVADO中调用了IP核,那么最终会发现VIVADO与MATLAB之间的数据不可以统一的对应起来。那么,MATLAB验证的效果就会大大下降,那么可不可以想办法将VIVADO中的IP核封装成一个函数在MATLAB中调用呢?答案是可以的。这篇博客主要以FFT的IP核为例讲解封装成一个函数并且成功在MATLAB中调用。 本次实验所使用的软

zhangningning1996的博客 6991

第24讲 | 云中网络:自己拿地成本高,购买公寓更灵活

云计算中的网络(1)——云中网络 数据中心里面堆着一大片一大片的机器,用网络连接起来,机器数目一旦非常多,人们就发现,维护这么一大片机器还挺麻烦的,有好多不灵活的地方。 采购不灵活:如果客户需要一台电脑,那就需要自己采购、上架、插网线、安装操作系统,周期非常长。一旦采购了,一用就 N 年,不能退货,哪怕业务不做了,机器还在数据中心里留着。 运维不灵活:一旦需要扩容 CPU、内存、硬盘,都需要去机房手动弄,非常麻烦。 规格不灵活:采购的机器往往动不动几百 G 的内存,而每个应用往往可能只需要 4 核

qq_37756660的博客 318

RV1126开发板性能实测:网络、温度与功耗全解析

本文对RV1126开发板进行了全面的性能实测,重点分析了网络性能、温度表现与功耗特性。测试发现UDP带宽可达500Mbps,但TCP性能受限于协议栈;散热设计对持续性能至关重要,大板子在AI推理和视频推流中表现更稳定。为嵌入式开发者提供了真实的选型参考和优化建议。

d3e4f的博客 264

如何配置 QEMU 虚拟机网络

User mode stack:用户协议栈方式,这种方式的大概原理是在 QEMU 进程中实现一个协议栈,这个协议栈可以被视为一个主机与虚拟机之间的 NAT 服务器,它负责将 QEMU 所模拟的系统网络请求转发到外部网卡上面,从而实现网络通信。特别说明一下参数含义:-net nic 表示希望 QEMU 在虚拟机中创建一张虚拟网卡,-net tap 表示连接类型为 TAP,并且指定了网卡接口名称(就是刚才创建的 tap0,相当于把虚拟机接入网桥)。现在只需要启动镜像,指定网络连接模式是 TAP 即可。

JL-LOVE 1万+

Mac版UltraEdit 18.00.0.19破解教程:终端一行命令搞定(附版本适配指南)

本文为Mac用户提供了UltraEdit的合法替代方案与授权指南,强调破解软件的法律风险和安全隐忧。推荐使用VS Code、Sublime Text等开源或商业编辑器,结合终端工具如Vim/Neovim,实现高效文本编辑。同时详细介绍了UltraEdit的官方授权选项,帮助开发者在遵守软件许可的前提下提升工作效率。

k9l0m1的博客 355

已解决-Parallels Desktop 16 网络初始化失败:您的虚拟机将继续正常运作,但将无法连接网络

我是月球挖掘机,相信不少打工人为了尝鲜已经更新了MacOS 11 Big Sur,当然,苹果每次的系统大更新,都会给我们软件的功能无法使用惊喜,这次的也不例外。 这个问题是我在更新macOS Big Sur之后,Parallels Desktop打开虚拟机后,提示: 报错信息 网络初始化失败:您的虚拟机将继续正常运作,但将无法连接网络 这是我的软件版本: 起初我以为是我的虚拟机坏了,结果重装了一遍虚拟机,没有任何用处。我开始在网上找方法,只能找到那个使用命令行打开软件的命令,除此之外没有了

月球挖掘机 5万+

qemu启动后网络怎么设置?配合qemu-system-riscv64的命令设置

QEMU启动的时候,可以选择组网方式,一般有两种选择,user模式和tap模式user模式就是用NAT,tap模式就是用bridge网桥模式。

skywalk8163的专栏 3767

RK3568平台(电源篇)电源域IO配置

在kernel之前需要修改电源域,主控电源域的IO电平要与对接外设芯片的IO电平匹配,还要注意软件的电压配置要跟硬件的电压一致,否则,最坏的情况可能会导致IO的损坏。其实就是管理 IO 输出的电平;假如硬件上 IO 电源域配置为 3.3V,则 IO 输出最大电平为 3.3V;同理 IO 电源域硬件配置为 1.8V,则 IO 输出最大电平是 1.8V;这样有利于 IO 电平的灵活配置;

weixin_49303682的博客 3478

QEMU 网络配置一把梭

转载自:https://wzt.ac.cn/2019/09/10/QEMU-networking/ 好文章,记下来防止以后找不到!!以下是原文内容: 最近复现一些路由器的漏洞,由于架构和主机不一样,所以需要利用 qemu 进行固件模拟。在配置模拟环境的时候遇到了致命的问题–QEMU 虚拟机不能联通网络。 其实之前复现 CVE 的时候就遇到过,问了几个大佬也没有好的解决办法,最后按照某篇教程配置了一下,用户模式(单文件模拟)可以连接网络,鉴于之前也是参考网上的教程,并没有详细了解背后的原理,我专门去

梦饮三千的博客 3833

华为OD机试 - 荒岛求生 - 栈Stack(Python/JS/C/C++ 新系统 100分)

每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 2838

构建AI招聘助手:提高人才筛选与匹配效率

人工成本高:传统招聘过程涉及大量的简历筛选和面试安排,需要耗费大量的人力和时间。匹配效率低:简历筛选过程中,人为因素可能导致信息遗漏或误判,影响匹配效果。招聘周期长:从职位发布到最终录用,传统招聘流程往往耗时较长,影响企业业务发展。机器学习(Machine Learning)是一门让计算机通过数据和经验来学习并改进性能的学科。自然语言处理(Natural Language Processing,NLP)是计算机科学领域与人工智能领域中的一个重要方向,旨在让计算机能够理解和解释人类语言。

AI天才研究院 1303

qemu虚拟机与外部网络的通信

一、基本概念 为了使虚拟机能够与外界通信,Qemu需要为虚拟机提供网络设备。Qemu支持的常用网卡包括NE2000、rtl8139、pcnet32等。命令行上用-net nic为虚拟机创建虚拟机网卡。例如,qemu的命令行选项 -net nic,model=pcnet 表示为虚拟机添加一块pcnet型的以太网卡。如果省略model参数则...

whatday的专栏 4748

一、OpenSM 架构部署及原理详解

OpenSM 是 InfiniBand 网络的核心组件,通过自动化的拓扑发现、路由计算和状态维护,确保网络的高效运行。部署时需关注配置文件参数、路由算法选择和高可用性设计,调试时可借助日志和诊断工具快速定位问题。

jundao1997的专栏 1128

配置KVM虚拟机使用的NAT网络

配置KVM虚拟机使用的NAT网络 一、NAT的概念 对于专用网内部的一些主机,已经分配了本地的IP(即本地局域网IP),但又想和因特网上的主机通信时,可使用NAT(Network Address Translation,网络地址转换)方法解决问题。 使用NAT实现通信的方式有3种: 1.静态转换(Static Nat):内部网络私有IP地址转换为公有IP地址时,IP地址对是一对一的,是一成不变的。 2.动态转换(Dynamic Nat):内IP转换为公IP,IP地址不确定的,随机的,所有被授权访问Int

Cys_33的博客 4776

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

qemu VM 设置网络

本文介绍如何为由qemu启动的VM(虚拟机)配置网络,使得VM可以访问host网络和外部网络,以及可以让host以及外部通过网络访问VM的服务(比如web/http). 这里使用tun/tap虚拟设备为VM配置网络,qemu的命令参数如下,关于tun/tap,参考blog,和物理网卡一样可以配置IP、可以发送数据。 -device e1000,mac=00:16:3e:01:01:01,netdev=net0 -netdev tap,id=net0,ifname=tap1,script=no,down

2404

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

用TAP方式让QEMU虚拟机与host联网

转载自 cgjvcd最终编辑 cgjvcd QEMU虚拟机网络的缺省模式是NAT方式,即虚拟机可以通过host访问外网,但host和外网无法访问虚拟机。如果要想让host访问虚拟机,则可以使用TAP方式。  1、确认host的内核支持TAP/TUN设备  使用TAP方式的前提是host的内核支持TAP/TUN。现在的linux发行版一般都通过内核模块的方式支持TAP/TUN。如果ho

larryliuqing的专栏-xxx 9730

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

从零构建QEMU虚拟网络:TAP与桥接的深度解析与实践

本文深入解析了QEMU虚拟网络中TAP设备与桥接技术的核心原理,提供了在Ubuntu 22.04环境下构建高效虚拟网络架构的完整实践指南。通过详细的配置步骤和性能优化建议,帮助开发者掌握虚拟网络部署的关键技术,实现接近原生网络的性能表现。

l3m4n的博客 602

linux qemu的使用教程,详解QEMU网络配置的方法

今天给大家介绍一下QEMU网络配置的方法。qemu两种上网方式:user mode network :这种方式实现虚拟机上网很简单,类似vmware里的nat,qemu启动时加入-user-net参数,虚拟机里使用dhcp方式,即可与互联网通信,但是这种方式虚拟机与主机的通信不方便。tap/tun network :这种方式要比user mode复杂一些,但是设置好后 虚拟机互联网 虚拟机主机 通...

weixin_36150816的博客 2504

QEMU 通过网络实现共享文件

在启动 QEMU 时,使用 -netdev user 和 -device virtio-net 参数来配置 NAT 网络。为了在虚拟机重启后自动挂载共享文件夹,可以将挂载命令添加到 /etc/fstab 文件中。选项用于指定共享目录的路径、安全模型以及挂载点等参数。是一种高效且灵活的文件共享方式,它基于 9p 文件系统协议。如果能够成功 ping 通,说明虚拟机已经可以访问外网。虚拟机启动后,QEMU 会自动为虚拟机分配一个。将需要共享的文件放入此目录中。

Liuqz2009的专栏 2207
上一篇: qemu建立基本的虚拟机
下一篇: socket的方式使用qemu建立虚拟机
linux内核控
博客等级 码龄19年 41粉丝 638原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值