前述

我们知道无论是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 虚拟机网卡探究的更多相关文章

  1. 基于QMP实现对qemu虚拟机进行交互

    本文详解QMP,包含qmp.hmp.qemu-guest-agent的介绍.工作原理.配置方法.范例 小慢哥的原创文章,欢迎转载 目录 ▪ QMP介绍 ▪ QMP语法 ▪ 单独使用qemu,启用QMP ...

  2. 没有国产主机,怎么开发:交叉编译和QEMU虚拟机

    1. 背景 近期国产化的趋势越来越浓,包括国产操作系统.国产CPU等.时隔十多年,QQ for Linux也更新了.做为软件开发人员,"有幸"也需要适配国产化.至于国产化的意义等就 ...

  3. 利用QMP和QEMU虚拟机交互的几种方式

    QMP是一种基于JSON格式的传输协议,我们能利用它与一个QEMU虚拟机实例进行交互,例如查询,更改虚拟机的状态,获取设备信息等等.下面是几种创建QMP的方法以及对其它的一些基本命令的使用: 1.基于 ...

  4. Hyper-V下的Linux虚拟机网卡丢失问题原因及解决办法

    Hyper-V下的Linux虚拟机网卡丢失问题原因及解决办法   虚拟化大势所趋 公司推行了虚拟化,全部用的是Microsoft Windows 2008 R2 Enterprise with Hyp ...

  5. 当Azure里的虚拟机网卡被禁用

    当Azure里的虚拟机网卡被禁用了之后…… 这样的想法来自于一个假设,如果网卡被禁用之后,用户该如何处理,Azure又该如何处理,对于设置在虚拟机中的禁用网卡选项是否还有存在的意义?通常情况下,点选了 ...

  6. vmware克隆Centos6.7虚拟机网卡无法启动问题

    快速处理办法: cat /etc/sysconfig/network-scripts/ifcfg-eth0 sed -i '/UUID/d' /etc/sysconfig/network-script ...

  7. vmware克隆Centos6.4虚拟机网卡无法启动问题

    vmware克隆Centos6.4虚拟机网卡无法启动问题                 2014-02-26 16:44:54 标签:老男孩培训 vmware克隆问题 网卡无法启动          ...

  8. VM虚拟机网卡LAN区段模拟内网使用教程

    目录   1. 测试环境   2. 设置LAN区段并测试    2.1. 添加LAN区段    2.2. 在虚拟机中设置静态IP地址    2.3. 测试同一LAN区段的主机是否可以联通    2.4 ...

  9. Qemu虚拟机 玩树莓派最新版系统 (截止2017-04-10)

    Qemu虚拟机可以玩 树莓派,大家都知道了吧.可是网上的教程好老,都是2012年的.我按照教程下载了最新版版本的树莓派系统怎么也跑不起来. 研究了好久,终于找到一个简单的方法,特意分享出来.转载请注意 ...

随机推荐

  1. 【Flutter 实战】一文学会20多个动画组件

    老孟导读:此篇文章是 Flutter 动画系列文章第三篇,后续还有动画序列.过度动画.转场动画.自定义动画等. Flutter 系统提供了20多个动画组件,只要你把前面[动画核心](文末有链接)的文章 ...

  2. angular schametics 使用记录

    什么是 schametics Schematics是Angular团队发布的一个代码生成工具.它提供了API,可以操作文件并在Angular项目中添加新的依赖项,ng cli 创建模板就是用它. 它也 ...

  3. java基础-01:dos命令

    进入cmd方式 win + r 输入 cmd 随便进入一个文件夹 在导航栏输入cmd,回车即进入命令行 命令 盘符切换:直接输入 E: ,回车即可 查看文件夹下所有目录:dir 切换目录: cd 跨盘 ...

  4. MySQL经典练习题及答案,常用SQL语句练习50题

    表名和字段 –1.学生表 Student(s_id,s_name,s_birth,s_sex) –学生编号,学生姓名, 出生年月,学生性别 –2.课程表 Course(c_id,c_name,t_id ...

  5. Spring Cloud Admin健康检查 邮件、钉钉群通知

    源码地址:https://github.com/muxiaonong/Spring-Cloud/tree/master/cloudadmin Admin 简介 官方文档:What is Spring ...

  6. MySQL数据库时间字段按年月日显示并多字段去重查询

    应用服务长久运行,难免要导出一些统计报表. 现在有一个日志表,记录了各种日志,需要导出十月份的登录日志,要求时间按日期显示,且每天用户登陆要去重. 先看日志表的字段构成: logType等于2的是登陆 ...

  7. selenium定位方法(二)

    selenium定位方法(二)  1.xpath定位:xpath是在XML中查找节点所在的路径的表达式 1)绝对路径的Xpath表达式 例:/html/body/div/div[1]/ul//li[3 ...

  8. zookeeper简单实现注册与发现以及其他基本操作

    添加依赖 <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookee ...

  9. Vue H5拖拽实例

    需求:需要把左侧的数据表,拖拽到右侧的表关联区域 左侧数据表HTML: <h3 class="data-block">数据表</h3> <a-inpu ...

  10. 用Python的Pandas和Matplotlib绘制股票KDJ指标线

    我最近出了一本书,<基于股票大数据分析的Python入门实战 视频教学版>,京东链接:https://item.jd.com/69241653952.html,在其中给出了MACD,KDJ ...