文档章节

3、KVM的虚拟机网络配置

刘付kin
 刘付kin
发布于 2016/12/11 02:31
字数 2157
阅读 231
收藏 1
点赞 0
评论 0
KVM

#问题: 在KVM中创建的虚拟机如何访问外网和被外网访问呢?

#有三种方式:bridge、NAT、host-only(什么都不配,使用回环网卡)

他们都需要:bridge-utils 和 tunctl 的支持。

  • 1、brctl是Linux下用来管理以太网桥,在内核中建立、维护、检查网桥配置的命令

  • 2、tunctl是用来指定tap还是tun模式的。

    在计算机网络中,TUN与TAP是操作系统内核中的虚拟网络设备。不同于普通靠硬件网路板卡实现的设备,这些虚拟的网络设备全部用软件实现,并向运行于操作系统上的软件提供与硬件的网络设备完全相同的功能。

    TAP等同于一个以太网设备,它操作第二层数据包如以太网数据帧。TUN模拟了网络层设备,操作第三层数据包比如IP数据封包。

一:使用最基础的qemu-kvm绑定的方式,创建桥接模式(bridge)

架构图如下:

输入图片说明

  • 1、要安装bridge-utils tunctl

      yum install bridge-utils tunctl
    
  • 2、添加一个br0网桥(桥接类型)

      brctl addbr br0
      ifconfig br0 up
    
  • ##hypervisor的etho也需要绑定到bridge上。

  • 3、一步执行完成(注意修改成自己的IP)

    brctl addif br0 eth0 && brctl stp br0 on && ifconfig eth0 0.0.0.0 && ifconfig br0 192.168.33.250 netmask 255.255.255.0 && route add default gw 192.168.33.1

  • 4、创建TAP类型虚拟网卡设备,用于绑定虚拟机的网卡绑定

      tunctl -b -t vnet0
      ifconfig vnet0 up
      brctl addif br0 vnet0
      brctl show
    
  • 5、创建虚拟机并关联网卡(指定vnet0就知道要绑定到那个bridge了)

    /usr/libexec/qemu-kvm -m 4096 -smp 1 -boot order=cd -hda /cloud/Centos.img -net nic -net tap,ifname=vnet0,script=no,downscript=no

  • 6、创建虚拟机并关联网卡并添加mac地址

    /usr/libexec/qemu-kvm -m 2048 -smp 1 -boot order=cd -hda /cloud/Centos.img -net nic,macaddr=52:54:00:12:34:57 -net tap,ifname=vnet0,script=no,downscript=no

二:使用libvirt创建bridge和NAT两种方式(很通用,把信息写在xml文件中,可重用)

libvirt是一套免费、开源的支持Linux下主流虚拟化工具的C函数库,其旨在为包括Xen在内的各种虚拟化工具提供一套方便、可靠的编程接口,支持与C,C++,Ruby,Python,JAVA等多种主流开发语言的绑定。当前主流Linux平台上默认的虚拟化管理工具virt-manager(图形化),virt-install(命令行模式)等均基于libvirt开发而成。

Libvirt库是一种实现 Linux 虚拟化功能的 Linux API,它支持各种虚拟机监控程序,包括 Xen 和 KVM,以及 QEMU 和用于其他操作系统的一些虚拟产品

libvirtd进程启动的时候,会创建一个用于NAT的虚拟网桥virtbr0。如果需要使用bridge的话,那么需要借助brctl创建br0,绑定hypervisor的eth0网卡到这个br0上,这样它上面的虚拟机才能够利用hypervisor的eth0访问外网。

NAT和bridge组合的架构图如下:

输入图片说明

  • 1、安装libvirt

      yum install libvirt
    
  • 2、启动libvirt

      service libvirtd start
    
  • 3、启动后会多一个virbr0网桥,该网桥是NAT类型

输入图片说明

  • 4、如果需要虚拟机中还有一个网卡用于桥接,被外部网络使用,那么需要再创建一个网桥br0,用于hypervisor的eth0端口桥接

      virsh iface-bridge eth0 br0
    
      其实它就是利用了brctl的功能,实现创建网桥,并且把eth0绑定在上面而已,也可以使用brctl
    
      brctl addif br0 eth0 && brctl stp br0 on && ifconfig eth0 0.0.0.0 && ifconfig br0 192.168.33.250 netmask 255.255.255.0 && route add default gw 192.168.33.1
    
  • 5、有了这两个网桥之后,我们就可以创建一个xml文件,把虚拟机的信息写在里面,然后使用libvirt的virsh命令创建虚拟机、删除虚拟机、克隆虚拟机等等,可见笔记 ====> 1、kvm虚拟机介绍和使用(命令行版)

    配置文件如下:centos-base.xml(可以放在任何地方)

      <domain type="kvm">
      	<!--虚拟机名称-->
      	<name>centos-twocar</name>
      	<!--最大内存,单位mb-->
      	<memory unit="MiB">4096</memory>
      	<!--可用内存,单位k-->
      	<currentMemory unit="MiB">2048</currentMemory>
      	<!--虚拟cpu个数-->
      	<vcpu>2</vcpu> 
    
      	<os>
      		<type arch="x86_64">hvm</type>
      		<!-- 硬盘启动 -->
      		<boot dev="hd" />
      		<!--光盘启动-->
      		<boot dev="cdrom" />
      	</os>
    
      	<features>
      		<acpi />
      		<apic />
      		<pae />
      	</features>
    
      	<clock offset="localtime" />
      	<on_poweroff>destroy</on_poweroff>
      	<on_reboot>restart</on_reboot>
      	<on_crash>destroy</on_crash>
    
      	<devices>
      		<!--指定基于那个虚拟化平台,也可以指定为xen-->
      		<emulator>/usr/libexec/qemu-kvm</emulator>
    
      		<disk type="file" device="disk">
      			<driver name="qemu" type="qcow2" />
      			<!--目的镜像>路径,设置为本虚拟化I/O-->
      			<source file="/kvmhypervisor/centos-twocar.qcow2" /> 
      			<target dev="vda" bus="virtio" />
      		</disk>
    
      		<disk type="file" device="cdrom">
      			<!--光盘镜像路径 -->
      			<source file="/kvmhypervisor/CentOS-6.7-x86_64-bin-DVD1.iso" />
      			<target dev="hdb" bus="ide" />
      		</disk>
    
      		<!--配置第一个网卡,指定他的网络为:NAT(virbr0是libvirtd进程提供的NAT网桥)-->
      		<interface type="bridge">
      			<mac address='06:64:12:00:00:52'/>	
      			<!--当前主机网桥的名称-->
      			<source bridge="virbr0" />
      			<model type='virtio'/>
      		</interface>
    
      		<!--配置第二个网卡,指定他的网络为:bridge(br0是利用brctl命令创建的)-->
      		<interface type="bridge">
      			<!--mac地址不能一样-->
      			<mac address='06:64:12:00:00:53'/>	
      			<!--当前主机网桥的名称-->
      			<source bridge="br0" />
      			<model type='virtio'/>
      		</interface>
    
      		<input type="mouse" bus="ps2" />
      		<!--vnc端口号自动分配,可以通过virsh vncdisplay来查询-->
      		<graphics type="vnc" port="5901" autoport="no" listen="0.0.0.0" keymap="en-us" passwd='abcd'/>
      	</devices>
      </domain>
    

-6、 上面配置中,重点理解那个网络接口配置<interface>

- 1、mac地址在“同一网段”不能够重复
- 2、明确虚拟机需要几个网卡,每个网卡它是属于什么网络模式:bridge还是NAT
- 3、记住网卡配置的顺序,因为在安装操作系统的时候,第一个<interface>对应着eth0,第二个<interface>对应着eth1,以此类推。

#思考:为什么只需要在配置文件中指定网卡绑定在那个网桥上就行了?

  • 1、因为virsh利用了brctl和tunctl的功能,所以只要告诉它,这个端口绑定在哪个桥上,他就会自动创建vnet0、vnet1等虚拟设备,然后再绑定到网桥上。也就是对vrctl和tunctl结合封装。

  • 2、其实它是通过改变vi /etc/sysconfig/network-scripts/ifcfg-eth0

  • 3、同时创建了一个网桥vi /etc/sysconfig/network-scripts/ifcfg-br0

#virsh命令的网络操作部分

  • 1、查看系统中已经有ip地址的端口

      iface-list
    
  • 2、查看系统中,可用的网段

      net-list
    
  • 3、创建一个网桥br0,同时创建一个虚拟网卡vnet0,并且将eth0绑定到br0的vnet0上。

      iface-bridge eth0 br0 //只要这一句,就把上面的工作做完了,很方便
    
      它其实在/etc/sysconfig/network-scripts下
      对ifcfg-eth0文件进行了修改
      同时创建了ifcfg-br0文件
    
  • 4、删除一个网桥br0 (他会绑定在他上面的端口,剥离出来,同时把ip还给他们,好智能)

      iface-unbridge br0
    
      它其实在/etc/sysconfig/network-scripts下
      删除ifcfg-br0文件
      同时把ip信息给回eth0
    
  • 5、删除一个网段

      net-destroy default
    

#总结:

  • 虚拟机的网络有多种方式:bridge、NAT、host-only(什么都不配,只是用回环网卡)

  • 配置的方法有多种,常用的有:

    • 1、直接使用qemu-kvm和brctl结合的方式

    • 2、使用libvirtd进程提供的virbr0可以创建NAT

    • 使用libvirtd和brctl结合可以创建bridge

  • 其中用的最多的是第二种方式,方便简单快捷,只需要你知道配置文件怎么弄即可,也就是重点在那个<interface>中。

  • 如果只是创建NAT,是的机器能够上网,什么都不用配置,只需要在<interface>中指定网桥为virbr0即可。

  • 如果想要机器能够使用secureCRT来连接,那么就需要使用桥接的方式为虚拟机加一个网卡,使得虚拟机的IP地址和hypervisor在同一个网段,或者利用hypervisor的eth0别名,给这个别名指定一个ip地址,然后利用iptables的映射方式。

    • 在虚拟机上配置一个网卡

      • 创建一个br0的网桥,同时把eth0绑定在上面
      • 在<interface>中指定网桥为br0即可
    • 使用hypervisor的eth0别名ip加上iptables映射实现

      • ifconfig eth0:1 192.168.33.101/24

      • 设置宿主机iptables允许tcp8022端口通过

        iptables -I INPUT -p tcp --dport 8022 -j ACCEPT

      • 设置nat表的PREROUTING链,将访问192.168.50.150 tcp 8022端口的数据转发到10.0.0.11的22号端口

        iptables -t nat -A PREROUTING -d 192.168.52.201 -p tcp -m tcp --dport 8022 -j DNAT --to-destination 10.0.0.11:22

      • 要实现SNAT功能,必须让filter表的FORWARD链允许转发

        iptables -t filter -I FORWARD -p all -s 10.0.0.0/24 -j ACCEPT

        iptables -t filter -I FORWARD -p all -d 10.0.0.0/24 -j ACCEPT

如何开启hypervisor的网络转发功能?

vi /etc/sysctl.conf

修改里面的一个参数
net.ipv4.ip_forward = 1

libvirt的工作目录为:/var/lib/libvirt/

© 著作权归作者所有

共有 人打赏支持
刘付kin
粉丝 6
博文 100
码字总数 72832
作品 0
深圳
redhat6.5下安装配置kvm虚拟机

-------------------------- 一、前言 二、环境 三、安装与配置 四、创建kvm虚拟机 五、管理kvm虚拟机 六、克隆kvm虚拟机 七、网络配置(bridge) 附1:宿主机执行以下指令(shutdown,reboot)虚...

_诺千金
2014/10/13
0
0
基于Linux命令行KVM虚拟机的安装配置与基本使用

背景 由于生产环境的服务器并不会安装桌面环境,简单操作的图形化安装也不适合批量部署安装。因此,我还是更倾向于在命令下安装配置KVM虚拟机。结合了一些资料和个人使用的状况,我大致列出了...

PeanutLike
2016/07/24
2.9K
3
CentOS7安装KVM虚拟机详解

基于 CentOS Linux release 7.2.1511 (Core) 的环境下命令行的方式安装KVM的详细过程。 https://github.com/jaywcjlove/handbook 检测是否支持KVM KVM 是基于 x86 虚拟化扩展(Intel VT 或者 ...

shengerjianku
05/24
0
0
基于Linux命令行KVM虚拟机的安装配置与基本使用

背景 由于生产环境的服务器并不会安装桌面环境,简单操作的图形化安装也不适合批量部署安装。因此,我还是更倾向于在命令下安装配置KVM虚拟机。结合了一些资料和个人使用的状况,我大致列出了...

linuxprobe
2016/07/31
7
0
WebVirtMgr 基于Centos7.3的KVM虚拟化管理平台安装

KVM是centos下面的虚拟机,是一个比较好用的一种虚拟化技术,但是通常来说服务器跑Centos很少会安装图形界面,使用命令来管理虚拟机也是比较麻烦的,所以有一种web的虚拟化管理平台就很方便了...

q6246436
2017/11/14
0
0
开源虚拟化 KVM 视频教程在51CTO上线了

  《开源虚拟化KVM极速入门》视频教程,正式在51CTO上线了!   访问地址:http://edu.51cto.com/course/courseid-6815.html   由浅入深、循序渐进地掌握开源虚拟化KVM的体系结构、构建...

dbtrain
2016/08/20
0
0
三种方式在CentOS 7搭建KVM虚拟化平台

KVM 全称是基于内核的虚拟机(Kernel-based Virtual Machine),它是一个 Linux的一个内核模块,该内核模块使得 Linux变成了一个Hypervisor:它由 Quramnet开发,该公司于 2008年被 Red Hat ...

杨书凡
06/16
0
0
转-红帽企业版6.0 KVM虚拟机实战攻略

from: http://www.searchvirtual.com.cn/showcontent46584.htm 在2010年4月发布的RHEL 6.0 Beta版中,去掉了Xen,这也许是第一个不包含Xen Hypervisor的知名Linux发行版。KVM 是指基于 Linu...

玉龙
2011/05/04
0
1
如何在 Ubuntu 18.04 服务器上安装和配置 KVM

KVM(基于内核的虚拟机)是一款为类 Linux 系统提供的开源的全虚拟化解决方案,KVM 使用虚拟化扩展(如 Intel VT 或 AMD-V)提供虚拟化功能。无论何时我们在任何 Linux 机器上安装 KVM,都会...

12%
06/03
0
0
如何为Ubuntu 15.04安装和配置KVM

KVM (Kernel Based Virtual Machine) 是一个免费的虚拟化工具,它与 VMware、Hyper-V 类似,也可以让我们在主机操作系统中创建虚拟机。KVM 在开源界已经被非常广泛地使用,这主要得益于它能够...

Toby_Ligtt
2016/03/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spark Streaming + Kafka Integration Guide

The Spark Streaming integration for Kafka 0.10 is similar in design to the 0.8 Direct Stream approach. It provides simple parallelism, 1:1 correspondence between Kafka partition......

刺猬一号
12分钟前
0
0
数据结构与算法2

一个数组的例子,实现查找,显示和删除的功能。 在这个数组中存储的数据类型是long型,使用long型为的是表明这是数据,而int型被用来表示下标。通常数据结构存储的数据项包含有好几个字段,所...

沉迷于编程的小菜菜
22分钟前
0
0
Python3 基于 requests 批量下载图片

Python3 基于 requests 批量下载图片 import requestsheaders = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8','Accept-Encod......

leeyi
23分钟前
0
0
java获取当前时间所在一周的周一和周日日期

/** * 当前时间所在一周的周一和周日时间 * @param time 当前时间 * @return */ public static Map getWeekDate(String time) { Map map = new HashedMap(); SimpleDateFormat sdf = new Si......

小弱鸡
55分钟前
0
0
Redis数据的导出和导入(dump和load方式)

网上有些文章已经不再适用,本人也是踩了些坑,在此记录下。 迁移redis数据一般有如下3种方式: 第三方工具redis-dump,redis-load aof机制,需要开启aof功能 rdb存储机制 这里介绍第一种方式...

iplusx
今天
2
0
ElasticSearch 高亮显示大文档搜索结果

2016年12月,我们开始研究Ambar——一个文档搜索系统。Ambar使用ElasticSearch作为核心搜索引擎。 在Ambar开发的过程中,我们处理了很多与ES相关的问题,我们想分享我们得到的宝贵经验。让我...

九州暮云
今天
1
0
Python 使用 pywifi 模块 破解wifi密码

git https://github.com/awkman/pywifi 常见常量 from pywifi import const# Define interface status.IFACE_DISCONNECTED = 0IFACE_SCANNING = 1IFACE_INACTIVE = 2IFACE_CONNEC......

阿豪boy
今天
2
0
phpstorm使用Iedis

phpstorm的redis插件Iedis是真好用 看了网上挺多的文章,但是由于我系统还是ubuntu,就有点尴尬了,现在破解之后,留个笔记,即使自己之后有需要也可以很快翻阅 先下载资源 资源下载 zip压缩...

贤郎--均灵
今天
0
0
第三章 spring-bean之FactoryBeanRegistrySupport(4)

前言 从FactoryBeanRegistrySupport类的名字可以看出FactoryBeanRegistrySupport负责FactoryBean的注册与支持。如果想知道FactoryBean相关的资料,请阅读spring-bean中关于FactoryBean的解读...

鸟菜啊
今天
0
0
CentOS “Destination Host Unreachable”问题解决办法

挑战极速安装CentOS时遇到局域网主机不能通信的情况: [root@zjd network-scripts]# ping 8.8.8.8PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.64 bytes from 8.8.8.8: icmp_seq=1 ttl=......

wffger
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部