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

2023-05-16

转载自  cgjvcd 最终编辑  cgjvcd

QEMU虚拟机网络的缺省模式是NAT方式,即虚拟机可以通过host访问外网,但host和外网无法访问虚拟机。如果要想让host访问虚拟机,则可以使用TAP方式。 

1、确认host的内核支持TAP/TUN设备 
使用TAP方式的前提是host的内核支持TAP/TUN。现在的linux发行版一般都通过内核模块的方式支持TAP/TUN。如果host存在 /dev/net/tun 设备文件,则说明它支持TAP/TUP。如果不存在这个设备文件,则可以试试执行 
modprobe tun 
命令。 
如果不存在tun内核模块,可以自己编译。TUN模块的内核配置项位于: 
Device Driver --> Networking support --> Universal TUN/TAP device driver support 
编译好的模块位于linux源码目录下的 
drivers/net/tun.ko,需要把它拷贝到 
/lib/modules/<kernel-release>/kernel/drivers/net/ 
目录,并执行 
depmod 
命令重建模块依赖关系。 

2、编写QEMU的TAP初始化脚本 
QEMU的TAP初始化脚本缺省是 /etc/qemu-ifup,它的内容很简单: 
#!/bin/sh 
/sbin/ifconfig $1 192.168.0.11 
/etc/qemu-ifup文件需要增加可执行的权限。 

3、虚拟机的网络设置 
虚拟机的启动命令行增加网络参数 
-net nic -net tap 
即可启动TAP网络模式。注意:因为创建TAP网卡需要root权限,所以必须用root用户启动QEMU。 
虚拟机启动后,用ifconfig命令设置网络,要求它的IP与host的tap网口的IP(即在上个步骤里qemu-ifup文件中设置的IP)处于同一网段。例如: 
ifconfig eth0 192.168.0.110 netmask 255.255.255.0 

再验证与host的联网: 
在虚拟机上执行 
ping 192.168.0.11 
在host机上执行 
ping 192.168.0.110 
都应能正确ping通,说明虚拟机与host已正常联网,host机通过192.168.0.110与虚拟机通信。 

4、使普通用户能执行 
上面的方法美中不足的是必须用root用户启动QEMU虚拟机。要使普通用户能执行,需要写一个执行QEMU的脚本 qemu-tap: 
#!/bin/sh 
USERID=`whoami` 
iface=`sudo tunctl -b -u $USERID` 
ranmac=$(echo -n DE:AD:BE:EF ; for i in `seq 1 2`; \ 
do echo -n `echo ":$RANDOM$RANDOM" | cut -n -c -3` ;done) 
qemu $@ -net nic,vlan=0,macaddr=$ranmac -net tap,vlan=0,ifname=$iface 
sudo tunctl -d $iface $> /dev/null 
脚本中的tunctl命令是user mode linux ,在debian系统要安装uml-utilities软件包。另外,还需要用visudo命令配置普通用户执行tunctl命令的权限。 

这个脚本源自http://calamari.reverse-dns.net:980/cgi-bin/moin.cgi/FrequentlyAskedQuestions#head-2511814cb92c14dbe1480089c04f83c281117a86,详细说明请参考原文。 

5、虚拟机通过host连接internet 
现在实现了虚拟机和host的联网,如果需要虚拟机连接internet,则要在host设置NAT: 
echo 1 > /proc/sys/net/ipv4/ip_forward 
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE 

有关NAT联网的其他信息,也可参考我的另一篇文章:http://linuxman.blog.ccidnet.com/blog-htm-do-showone-uid-60710-type-blog-itemid-205940.html 

6、Windows主机的配置
如果host是windows系统,则配置方法如下:
(1)安装windows系统的TAP驱动程序
可下载openvpn安装程序(http://openvpn.net/index.php/downloads.html),只安装其中的TAP驱动。
(2)在windows的控制面板的网络连接设置程序中设置TAP网卡的IP和netmask等参数,并把网卡名称改为tap
(3)虚拟机启动命令行中增加网络参数
-net nic -net tap,ifname=tap

http://linuxman.jiang.blog.ccidnet.com/blog-htm-do-showone-uid-60710-type-blog-itemid-1472386.html


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用TAP方式让QEMU虚拟机与host联网 的相关文章

随机推荐

  • java任意进制转换

    摘要 我们日常常用的是十进制 计算机是基于二进制的 xff0c 计算机常用的还有十六进制 八进制 本文主要介绍如何实现十进制和任意进制 间转换 计算思想 如果用 0123456789abcdefghijklmnopqrstuvwxyzABC
  • c++与java的应用区别

    文章目录 简介不同点关注点接口调用优化运行方式知识架构java不擅长的地方 基本就这些了 简介 一点粗鄙的总结 xff0c 肯定不全面 java我只接触了 后端部分 不同点 c 43 43 基本上你可以应用在所有的领域 xff0c 但是在后
  • HTTP基本认证(Basic Authentication)

    什么是HTTP基本认证 当打开浏览器访问网页时 xff0c 浏览器弹出一个包含用户名 密码输出项的对话框 xff0c 当用户输入用户名 密码后发送给服务器 xff0c 服务器验证通过后 xff0c 会显示相应的信息 这一认证的过程 xff0
  • Nginx(四):http服务器静态文件查找的实现

    上一篇nginx的文章中 xff0c 我们理解了整个http正向代理的运行流程原理 xff0c 主要就是事件机制接入 xff0c header解析 xff0c body解析 xff0c 然后遍历各种checker xff0c 直到处理成功为
  • 计算机网络-第3章 物理层

    期末考试篇 1 物理层定义了哪四方面的特性 xff1f 机械 xff1a 指明接口所用接线器的形状和尺寸 引脚数目和排列 固定和锁定装置 电气 xff1a 指明在接口电缆的各条线上出现的电压的范围 功能 xff1a 指明某条线上出现的某一电
  • jetson nano ubuntu18.04 ROS安装

    历时一天 xff0c 因为之前用手机热点 xff0c 即使换源了下载还是很慢 今天用校园网以后好了很多了 xff08 校园网还是挺好用的 xff09 xff0c 期间也踩了点坑 xff0c 记录一下 xff0c 也希望能帮到看这篇博客的你
  • 认识c++(二)

    上次说到c 43 43 变量类型 xff0c 接下来说c 43 43 变量作用域 作用域是程序的一个区域 xff0c 一般来说有三个地方可以定义变量 xff1a 1 函数或一个代码块内部声明的变量 xff0c 称为局部变量 2 函数参数的定
  • 老猿学5G扫盲贴:NEF、NRF、AF、UPF以及DN的功能

    专栏 xff1a Python基础教程目录 专栏 xff1a 使用PyQt开发图形界面Python应用 专栏 xff1a PyQt入门学习 老猿Python博文目录 NEF xff1a Network Exposure Function x
  • moviepy音视频剪辑:与大小相关的视频变换函数crop、even_size、margin、resize介绍

    前往老猿Python博文目录 一 引言 在 moviepy音视频剪辑 xff1a moviepy中的剪辑基类Clip详解 介绍了剪辑基类的fl fl time fx方法 xff0c 在 moviepy音视频剪辑 xff1a 视频剪辑基类Vi
  • moviepy音视频开发专栏文章目录

    前往老猿Python博文目录 moviepy音视频开发专栏 为收费专栏 对应免费专栏为 PyQt moviepy音视频剪辑实战 这2个专栏基于老猿阅读moviepy1 03版本的源代码以及大量测试验证的基础上 详细介绍moviepy主要音视
  • 使用PyQt开发图形界面Python应用专栏目录

    前往老猿Python博文目录 本专栏为收费专栏的文章目录 xff0c 对应的免费专栏为 PyQt入门知识目录 xff0c 两个专栏都为基于PyQt的Python图形界面开发基础教程 xff0c 只是收费专栏中的内容介绍更深入 案例代码更全
  • 《OpenCV-Python初学者疑难问题集》专栏目录

    本专栏为免费专栏 https blog csdn net LaoYuanPython article details 109160152 OpenCV Python图形图像处理专栏 的伴生付费专栏 xff0c 用于发布一些学习OpenCV
  • 使用Python+Moviepy 5行代码实现两视频顺序拼接

    老猿Python博文目录 xff1a https blog csdn net LaoYuanPython 一 引言 最近看到好几篇类似 n行Python代码 的博文 xff0c 看起来还挺不错 xff0c 简洁 实用 xff0c 传播了知识
  • 图像滤波基础知识:图像与波的关系以及图像噪声知识

    前往老猿Python博文目录 https blog csdn net LaoYuanPython 一 引言 老猿对图像处理基础知识非常缺乏 xff0c 所以OpenCV Python的学习进度很慢 xff0c 很多基础概念和原理的东西花了大
  • 用Python通过摄像头进行视频录制

    老猿Python博文目录 xff1a https blog csdn net LaoYuanPython 用Python通过摄像头进行视频录制 一 引言 要实现摄像头录播摄像信息 xff0c 通过Python有很多种实现方式 xff0c 老
  • 计算机四级网络工程师——操作系统部分题目笔记汇总【1~10题】

    计算机四级笔记 操作系统部分 xff1a xff08 1 10题 xff09 因篇幅过长 xff0c 为保证学习质量 xff0c 遂将其分成四部分 xff08 四篇博客 xff09 每10题为一篇 xff0c 其他题目在我的计算机四级考试网
  • 一文带你读懂PyQt:用Python做出与C++一样的GUI界面应用程序

    一 简介 Python标准库更多的适合处理后台任务 xff0c 唯一的图形库tkinter使用起来很不方便 xff0c 所以后来出现了针对Python图形界面开发的扩展库 xff0c 今天老猿要介绍的是主流Python图形界面扩展库之一的P
  • Python中可迭代对象是什么?

    Python中可迭代对象 Iterable 并不是指某种具体的数据类型 xff0c 它是指存储了元素的一个容器对象 xff0c 且容器中的元素可以通过 iter 方法或 getitem 方法访问 iter 方法的作用是让对象可以用for i
  • 老猿Python博客文章目录索引

    本目录提供老猿Python所有相关博文的一级目录汇总 xff0c 带星号的为付费专栏 xff1a 一 专栏列表 本部分为老猿所有专栏的列表 xff0c 每个专栏都有该专栏置顶的博文目录 xff1a Python基础教程目录PyQt入门学习
  • 用TAP方式让QEMU虚拟机与host联网

    转载自 cgjvcd 最终编辑 cgjvcd QEMU虚拟机网络的缺省模式是NAT方式 xff0c 即虚拟机可以通过host访问外网 xff0c 但host和外网无法访问虚拟机 如果要想让host访问虚拟机 xff0c 则可以使用TAP方式