接下来我们试验虚拟机的网络配置功能,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. Beginning Python From Novice to Professional (5) - 条件与循环

    条件与循环 条件运行: name = raw_input('What is your name? ') if name.endswith('Gumby'): print 'Hello, Mr.Gumb ...

  2. ASP.Net MVC请求处理流程

    ASP.Net MVC请求处理流程 好听的歌 我一直觉得看一篇文章再听一首好听的歌,真是种享受.于是,我在这里嵌入一首好听的歌,当然你觉得不想听的话可以点击停止,歌曲 from 王菲 <梦中人& ...

  3. C#备份还原MySql数据库

    原文:C#备份还原MySql数据库 项目结束,粘点代码出来让Google或Baidu一下,原因是现在还搜不到这么现成的 调用MySql的工具mysqldump来实现. 类Cmd来实现调用cmd命令, ...

  4. hdu149850 years, 50 colors (多个最小顶点覆盖)

    50 years, 50 colors Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...

  5. PDF解决方案(1)--文件上传

    相关专题链接 PDF解决方案(1)--文件上传 PDF解决方案(2)--文件转PDF PDF解决方案(3)--PDF转SWF PDF解决方案(4)--在线浏览 前言:最近参与了一个项目,客户要求把系统 ...

  6. 关于标准I/O缓冲区和fork函数

    标准I/O库提供缓冲的目的是尽可能减少使用read和write调用的次数.标准I/O提供三个类型的缓冲:全缓冲.行缓冲和不带缓冲.标准输入(stdin)和标准输出(stdout)是行缓冲,标准出错(s ...

  7. .NET 开源了,Visual Studio 开始支持 Android 和 iOS 程序编写并自带 Android 模拟器

    .NET 开源了,Visual Studio 开始支持 Android 和 iOS 程序编写并自带 Android 模拟器 北京时间今天凌晨的 Connect(); 大会上,多少程序员的假想成为现实. ...

  8. 方向梯度直方图(HOG)和颜色直方图的一些比較

    近期在学习视频检索领域的镜头切割方面的知识,发现经常使用的方法是直方图的方法,所以才专门有时间来学习下.查看到这两种直方图的时候,感觉有点接近,好像又不同,放在这做个比較.大部分还是百科的内容,只是对 ...

  9. Scala Web 框架——Lift(一)准备工作

    [Lift]Scala Web 框架——Lift(一)准备工作 Lift 官方网站:http://liftweb.net/ 下载 http://liftweb.net/download 下载.zip压 ...

  10. Oracle 11g+FluentNHibernate AutoMapping组合尝试

    一次Oracle 11g+FluentNHibernate AutoMapping组合尝试 本文的上下文环境 操作系统:Win7 x64 Ultimate开发工具:Visual Studio 2013 ...