QEMU 虚拟机网卡探究
前述
我们知道无论是VMware,Virtual Box还是HyperV 都支持 NAT/Bridge/Host-Only 三种上网方式。其中 NAT 是我最常用,最熟悉的。
需要说明的是,无论是NAT 还是 Bridge, 虚拟机与宿主机、虚拟机与虚拟机、虚拟机与外网、宿主机与外网之间都是通的!!!(不要相信CSDN某些人的博客,实践出真知!)
下面就用qemu 模拟实现下 NAT与Bridge。无论哪种本质上都是在宿主机侧的设置,因为虚拟机的IP网关设置不属于必须操作!
注:建议看完NAT自己实现下host-only模式. host-only 虚拟机是不通外网的(提示,按照NAT的步骤,但不设置防火墙试试)
NAT
NAT实现需要借助于防火墙,这里用iptables来做转发与网络地址转换!
涉及到虚拟机网卡 vnet0(虚拟机起来后,host端生成的网卡,不是虚拟机内的网卡),网桥 br,宿主机网卡 enp1s0
iptable与更详细的设置参考
宿主机设置:
brctl addbr br # 创建网桥
brctl addif br vnet0 # 添加成员
ifconfig br up
报文转发流程图
# 出栈
虚拟机网卡(eth0)-> 虚拟机网卡(vnet0)->网桥(br)---- iptable forward -----宿主机网卡(enp1s0)->发出
# 入栈
虚拟机网卡(eth0)<- 虚拟机网卡(vnet0)<-网桥(br)---- iptable forward -----宿主机网卡(enp1s0)<-收到
如上,需要配置iptable的转发,让报文能够从 br 转到 enp1s0 上,这步很重要(host-only 可以跳过)。(需要 /proc/sys/net/ipv4/ip_forward 为 1)
# 1. 简单粗暴的操作
iptables -F # 清空防火墙规则
iptables -P FORWARD ACCEPT # 接受所有转发
# 2. 也可以这样,定义精细的规则
iptables -A FORWARD -i br -o enp1s0 -j ACCEPT
iptables -A FORWARD -o br -i enp1s0 -j ACCEPT
另外要知道 NAT 发出的报文原地址是enp1s0 的地址,这就要求iptable也要做地址转换(host-only 可以跳过)
iptable -t nat -A POSTROUTING -s 192.168.122.0/24 -j MASQUERADE
至此,NAT 设置完毕,设置地址ping测试就行了
# 宿主机
ifconfig br 192.168.122.1/24
# 虚拟机内
ifconfig eth0 192.168.122.10/24
ip route add default via 192.168.122.1 dev eth0
这时候在虚拟机 eth0 上测试 ping 8.8.8.8 是ok的
虚拟机:

宿主机:

Bridge
网桥比较简单,这里是自己摸索的,因为没查到资料,不保证和VMWare 之类虚拟机方案一样。
宿主机报文转发流程图
# 出栈
网桥(br)-> 宿主机网卡(enp1s0)->发出
# 入栈
网桥(br)<- 宿主机网卡(enp1s0)<-收到
虚拟机报文转发流程图
思考为什么这时候不需要iptable做 forward 规则(因为vnet0,enp1s0 都是网桥子网卡,这时候相当于二层交换机的两个端口,因此是互通的,不需要三层的iptable支持转发)
# 出栈
虚拟机网卡(eth0)-> 虚拟机网卡(vnet0)->网桥(br)-> 宿主机网卡(enp1s0)->发出
# 入栈
虚拟机网卡(eth0)<- 虚拟机网卡(vnet0)<-网桥(br)<- 宿主机网卡(enp1s0)<-收到
宿主机设置:
brctl addbr br
brctl addif br enp1s0 # 添加网卡
brctl addif br vnet0 # 添加网卡
ifconfig br up
# 注意此时宿主机网卡不能配置地址,或者说配置地址也没用,需要把地址配置到网桥br上
ifconfig br 192.168.100.125/24
ip route add default via 192.168.100.1 dev br
宿主机:

虚拟机:

然后在虚拟机做dhcp,或者手动配置(手动配置需要确保地址与宿主机网卡地址在同一网段,比如地址设为 192.168.100.10/24)
现在在虚拟机ping 网关,主机或者8.8.8.8 都是通的
QEMU 虚拟机网卡探究的更多相关文章
- 基于QMP实现对qemu虚拟机进行交互
本文详解QMP,包含qmp.hmp.qemu-guest-agent的介绍.工作原理.配置方法.范例 小慢哥的原创文章,欢迎转载 目录 ▪ QMP介绍 ▪ QMP语法 ▪ 单独使用qemu,启用QMP ...
- 没有国产主机,怎么开发:交叉编译和QEMU虚拟机
1. 背景 近期国产化的趋势越来越浓,包括国产操作系统.国产CPU等.时隔十多年,QQ for Linux也更新了.做为软件开发人员,"有幸"也需要适配国产化.至于国产化的意义等就 ...
- 利用QMP和QEMU虚拟机交互的几种方式
QMP是一种基于JSON格式的传输协议,我们能利用它与一个QEMU虚拟机实例进行交互,例如查询,更改虚拟机的状态,获取设备信息等等.下面是几种创建QMP的方法以及对其它的一些基本命令的使用: 1.基于 ...
- Hyper-V下的Linux虚拟机网卡丢失问题原因及解决办法
Hyper-V下的Linux虚拟机网卡丢失问题原因及解决办法 虚拟化大势所趋 公司推行了虚拟化,全部用的是Microsoft Windows 2008 R2 Enterprise with Hyp ...
- 当Azure里的虚拟机网卡被禁用
当Azure里的虚拟机网卡被禁用了之后…… 这样的想法来自于一个假设,如果网卡被禁用之后,用户该如何处理,Azure又该如何处理,对于设置在虚拟机中的禁用网卡选项是否还有存在的意义?通常情况下,点选了 ...
- vmware克隆Centos6.7虚拟机网卡无法启动问题
快速处理办法: cat /etc/sysconfig/network-scripts/ifcfg-eth0 sed -i '/UUID/d' /etc/sysconfig/network-script ...
- vmware克隆Centos6.4虚拟机网卡无法启动问题
vmware克隆Centos6.4虚拟机网卡无法启动问题 2014-02-26 16:44:54 标签:老男孩培训 vmware克隆问题 网卡无法启动 ...
- VM虚拟机网卡LAN区段模拟内网使用教程
目录 1. 测试环境 2. 设置LAN区段并测试 2.1. 添加LAN区段 2.2. 在虚拟机中设置静态IP地址 2.3. 测试同一LAN区段的主机是否可以联通 2.4 ...
- Qemu虚拟机 玩树莓派最新版系统 (截止2017-04-10)
Qemu虚拟机可以玩 树莓派,大家都知道了吧.可是网上的教程好老,都是2012年的.我按照教程下载了最新版版本的树莓派系统怎么也跑不起来. 研究了好久,终于找到一个简单的方法,特意分享出来.转载请注意 ...
随机推荐
- 攻防世界-web(进阶)-NewsCenter
打开文件发现有个搜索框,考虑是XSS或SQL注入,输入弹框语句不显示考虑到SQL注入,抓包将抓包信息保存为txt,用sqlmap爆破. 输入:sqlmap -r “sql.txt”,输出如下数据库版本 ...
- jQuery的事件与 动画
什么是事件: 事件的本质是委托. Jquery的 方法: $().css(); $().click(); 等等. 鼠标的事件: 区别在于:mouseover与mouseout再进入或离开后会执行这两个 ...
- 报错:无效的列类型: 1111;must be specified for all nullable parameters.
org.springframework.jdbc.UncategorizedSQLException: Error setting null parameter. Most JDBC drivers ...
- RFC2474 - Definition of the Differentiated Services Field (DS Field) in the IPv4 and IPv6 Headers的双语版
RFC2474 - Definition of the Differentiated Services Field (DS Field) in the IPv4 and IPv6 Headers英文版 ...
- install-newton部署安装--------计算节点部署安装
#################################################################################################### ...
- Linux的CentOs系统查看CPU个数、核心数、线程数
1.查看CPU物理个数 grep 'physical id' /proc/cpuinfo | sort -u | wc -l 或 cat /proc/cpuinfo| grep "physi ...
- Robot Framework(8)——脚本语法示例记录
大神写了一个Robot Framework的脚本,好多语法之前没接触过,就有了这篇,记录下来一起学习,欢迎纠错 第二三四五列,一般是入参,红色的表示必填的入参.浅灰色表示选填的入参.深灰色表示无需填写 ...
- 自己搭建的集群,启动hadoop时slave节点的datanode没有启起来怎么办?
自己搭建的集群,启动hadoop 集群是,发现slave节点的datanode没有启动,查了资料发现是因为我在启动集群前,执行了这个命令: hadoop namenode -format 这个指令会重 ...
- 基于id3算法根据房价数据进行画图预测python
根据已给的波士顿房价数据,对波斯顿房价进行预测.即,实现给出若干条件(如房间数.社区的低收入阶层的比率和镇上学生与教师数量比例的部分数据),要能说出给出的条件是否能够有效进行预测,如可以做有效预测,则 ...
- 【翻译】.NET 5 Preview8发布
[翻译].NET 5 Preview8发布 今天,.NET 5预览8发布了,对于.NET5.0的功能开发已经完成了,这必须要排除待处理的bug,预览8是最后一次预览版本.预计11月正式的.NET5.0 ...