接下来我们试验虚拟机的网络配置功能,KVM虚拟机网络配置主要有两种方式:NAT方式和Bridge方式。今天我们主要理解和实验NAT方式的网络配置。

NAT方式是kvm安装后的默认方式,它支持主机与虚拟机的互访,同时也支持虚拟机访问互联网,但不支持外界访问虚拟机,因为NAT的全称是Network Address Translation(网络地址转换),即虚拟机和主机在一个特定的内部子网内,虚拟机的网络数据在经过物理机网络的时候进行ip伪装,这样所有虚拟机出去的网络数据都相当于是物理机出去的数据,也就是说,我们可以分配给使用nat网络的虚拟机一个内网ip,而这个内网ip的虚拟机访问出去的时候外部网络看到的是物理机的外网ip,这样做的用处就是实现多个虚拟机共享物理主机的外网ip,节省外网ip地址。

NAT的逻辑原理图如下:

上图中的“virbr0”就充当了一个虚拟网络交换机的作用,所有虚拟机要跟外界通信都先通过这个virbr0。那么virbr0是如何在主机上创建出来的呢?virbr0又如何起作用的?虚拟机如何使用virbr0作为其网络交换机?

1.        virbr0的创建

libvirt默认使用了一个名为default的nat网络,这个网络默认使用virbr0作为桥接接口,使用dnsmasq来为使用nat网络的虚拟机提供dns及dhcp服务,dnsmasq生效后的配置文件默认保存在以下路径:

/var/lib/libvirt/dnsmasq/default.hostsfile   mac&&ip绑定的配置文件

/var/lib/libvirt/dnsmasq/default.leases  dhcp分配到虚拟机的ip地址列表

/var/lib/libvirt/network/default.xml default网络的配置文件

打开default.xml可以看到:

<!--

WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY  TO BE

OVERWRITTEN AND LOST. Changes to this xml configuration should be made  using:

virsh net-edit default

or other application using the libvirt API.

-->

<networkstatus>

<class_id  bitmap='0-2'/>

<floor sum='0'/>

<network>

<name>default</name>

<uuid>cfbccd14-664c-4d02-91ef-ef3b1e168f61</uuid>

<forward mode='nat'>

<nat>

<port  start='1024' end='65535'/>

</nat>

</forward>

<bridge name='virbr0'  stp='on' delay='0' />

<ip  address='192.168.122.1' netmask='255.255.255.0'>

<dhcp>

<range  start='192.168.122.2' end='192.168.122.254' />

</dhcp>

</ip>

</network>

从上面的配置里可以清楚的看到网络名称是“default”, 网桥名称是”virbr0”,forward模式是“nat”,虚拟机可以dhcp的地址范围等。

ifconfig可以看到:

Virbr0已经被成功的虚拟出来了。

2.        virbr0如何工作

本质上说libvirt所实现的这种nat网络是通过物理机的iptables规则来实现的,也即是在虚拟机数据经过nat表的postrouting链出去的时候对其进行了伪装。

如下图所示:

# iptables –t nat –L –nv

该主机上的设置表明对source是192.168.122.0网段的所有数据包,如果destination不是192.168.122.0网段(即不是同一子网的虚拟机或主机),那么都用主机的IP地址进行伪装。这样当虚拟机访问外网的时候,外网只看到了主机的IP地址,而看不到虚拟机的实际内网地址。

3.        虚拟机如何配置virbr0

虚拟机的定义XML中的interface定义如下:

<interface type='bridge'>

<mac  address='52:54:00:7b:a8:d8'/>

<source bridge='virbr0'/>

<target dev='vnet0'/>

<model  type='virtio'/>

</interface>

上面的source bridge就指向了“virbr0”,虚拟机从dnsmasq获取到192.168.122.0网段的一个IP地址

启动虚拟机后,运行“ifconfig”, 可以看到有个叫vnet0的网络接口被创建出来,这就是该虚拟机的虚拟网络接口。

再运行“brctlshow”看看:

很清楚,这个虚拟机的vnet0网络接口是加入在virbr0这个虚拟网桥的,所以这个虚拟机的网络数据都需要这个virbr0转发。

最后来看一下,虚拟机里面的IP情况:

可以看到这个虚拟机的IP地址是192.168.122.10,网关、DHCP服务器地址和DNS服务器地址都是192.168.122.1,192.168.122.1又是什么呢?就是主机上这个virbr0的IP地址。

Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(十五)的更多相关文章

  1. Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(八)

    Libvirt 是用c写的一个管理虚拟机及其资源(如网络.存储和外设等)的工具库,它不仅支持KVM/QEMU,它还支持xen,Vmware,OpenVZ和VirtualBox等其他HyperVisor ...

  2. Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(三)

    原则上来说,qemu, libvirt, libusb, usbredir, spice等都可以通过 apt-get install的方式从Ubuntu源在线安装.但是这样如果碰到一点问题,就比较难办 ...

  3. Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(十六)

    今天我们继续实验Bridge方式的网络配置. Bridge的逻辑原理图如下: 上图中的“br0”就充当了一个桥的作用,主机上的物理网口eth0等根据需要加入到这个桥里面,所有虚拟机要跟外界通信都通过这 ...

  4. Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(十三)

    今天我们实验libvirt提供的快照功能,快照可以用于系统恢复,防止安装了某些软件或中病毒等情况导致系统损毁的情况. 一.快照类型 1)        磁盘快照 内部的:快照驻留在原来的镜像文件内部 ...

  5. Mac下搭建基于PlatformIO的嵌入式开发环境(STM32开发)

    PlatformIO简介 PlatformIO是开源的物联网开发生态系统.提供跨平台的代码构建器.集成开发环境(IDE),兼容 Arduino,ESP8266和mbed等 支持在Windows.Lin ...

  6. 小白秒懂的Windows下搭建基于pytorch的深度学习环境

    配置环境总体思路 1.依据python版本选择对应Anaconda版本: 2.依据显卡驱动版本选择对应的CUDA版本: 3.依据CUDA版本选择对应的cudnn和pytorch版本. 一.Anacon ...

  7. Windows 7下 搭建 基于 ssh 的sftp 服务器

    Windows  xp 下 搭建 基于  ssh 的sftp 服务器,服务器端可以用 freesshd,F-secure server等,filezilla server不可用,之前傻乎乎的用file ...

  8. ubuntu12.10下OpenFoam的编译

    最近在ubuntu12.10下编译OpenFoam,遇到一些问题,小记一下. 首先到官网下载源码包(我这里下载的是OpenFOAM-2.3.0.tgz,ThirdParty-2.3.0.tgz). 1 ...

  9. [IDS]CentOS6.6下搭建基于snort+barnyard2+base的入侵检测系统,超详细!!!

    最详细的CentOS6.6下搭建基于snort+barnyard2+base的入侵检测系统免责声明一.如果因为使用本文档照成损失(系统崩溃.数据丢失等),作者不承担任何责任.二.本文档只是个人使用本文 ...

随机推荐

  1. webkit内核下的mouseup后mousemove自动触发问题及解决方法

    如题,就以chrome为代表举例说明遇到mousemove的问题. 为body分别绑定onmousedown.onmousemove.onmouseup,并为触发时打印至控制台.代码如下(同学不要忘记 ...

  2. SQL 2005 中查询或执行另外的数据库操作的方法

    原文:SQL 2005 中查询或执行另外的数据库操作的方法 摘要: 如果,你想在一台数据库服务器上,查询另一个台数据服务器的数据该如何做呢?如果,你想在同一台数据服务器上,在不同的数据库之间查询数据, ...

  3. 快速构建Windows 8风格应用35-触控输入

    原文:快速构建Windows 8风格应用35-触控输入 引用 Windows 8设备通常具有多点触摸屏,用户可以同时使用多个手指来进行不同的输入交互,如点击.拖动或收缩等手势操作.另外Windows ...

  4. 初识Python-web框架的这两天

    前段时间打算学习python,其实时间蛮紧张的,看看文字教程,累了就看视频教程.算是把基本的语法过了一遍,但是OOP就费了好大的气力 ,C里有的对象,继承,等等等,还算能理解.不过高级点的就理解起来吃 ...

  5. JS字符串数字互转

    JS是一种弱类型的脚本语言,为变量赋值是会自动转换为相应的类型,例如: var a = 1; alert(a + 1);//结果为2 自动识别为数字类型进行数学运算 var b = '1'; aler ...

  6. 使用GDB调试器(一)

    使用GDB调试器 GDB概要---- GDB是GNU开源组织公布的一个强大的UNIX下的程序调试工具.也许,各位比較喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但假设你是在UNIX平台下做软 ...

  7. C#/ASP.NET/AJAX

      C#/ASP.NET/AJAX ASP.NET 4.5新特性一:强类型数据绑定(Strongly-Type Data-Bindings) 摘要: 随着ASP.NET 4.5的发布提供了很多的新特性 ...

  8. MVC框架的插件与拦截器基础

    自制MVC框架的插件与拦截器基础 上篇谈到我自己写的MVC框架,接下来讲讲插件及拦截器! 在处理一些通用的逻辑最好把它封装一个插件或者拦截器,以便日后可以直接拿过来直接使用.在我的框架中可以通过继承以 ...

  9. 为ASP.NET MVC应用程序读取相关数据

    为ASP.NET MVC应用程序读取相关数据 2014-05-08 18:24 by Bce, 299 阅读, 0 评论, 收藏, 编辑 这是微软官方教程Getting Started with En ...

  10. Python3.4入门之ifelse错误解决方案

    笔者用的是Python3.4 开始接触到ifelse语句 发现这样---C:\Users\Administrator>python e:\Python34\ifelse.py--去执行的时候老是 ...