1、桥接:创建一个虚拟桥设备,将虚拟机连接至桥设备上,再给桥设备配置一个IP地址,作为宿主机与外部通信的地址,即可完成与外网的通信(一起使用物理网卡的硬件功能),不过此时虚拟机使用的公网地址;
2、隔离:仅将需要互相通信的虚拟机的后半段网卡添加到同一个虚拟的桥设备上,即可完成虚拟机之间的通信,且与外网乃至是物理机隔离;
3、路由:将虚拟机关联至虚拟桥设备上,再给桥设备配置一个与虚拟机同段的ip地址(内网地址)作为虚拟机的网关(物理网卡是连接外网的,所以应该与内网IP地址不是一个段),最后再打开物理主机的核心转达功能,即可让虚拟机可以ping外部主机,但是外部主机无法发送相应包,因为外部主机没有到达虚拟机的路由;
4、NAT:在路由模型的基础上,为其配置SNAT规则,即可完成真正的虚拟机与外网通信,且自己使用的是内网地址;但是这样还有一个问题,就是外网不能主动访问内网的虚拟机,除非再为其配置DNAT规则;
通过 ip link add 可以创建多种类型的虚拟网络设备,在 man ip link 中可以得知有以下类型的device:
Virtual Ethernet Port Aggregator。它是HP在虚拟化支持领域对抗Cisco的VN-Tag的技术。
解决了虚拟机之间网络通信的问题,特别是位于同一个宿主机内的虚拟机之间的网络通信问题。
VN-Tag在标准的协议头中增加了一个全新的字段,VEPA则是通过修改网卡驱动和交换机,通过发夹弯技术回注报文。
TUN是Linux系统里的虚拟网络设备,它的原理和使用在 Kernel Doc 和 Wiki 做了比较清楚的说明。
TUN设备模拟网络层设备(network layer),处理三层报文,IP报文等,用于将报文注入到网络协议栈。
应用程序(app)可以从物理网卡上读写报文,经过处理后通过TUN回送,或者从TUN读取报文处理后经物理网卡送出。
创建:
创建之后,使用 ip addr 就会看见一个名为”tun-default”的虚拟网卡
可以对tun-default设置IP:
使用open/write等文件 *** 作函数从fd中进行读取 *** 作,就是在收取报文,向fd中写入数据,就是在发送报文。
TAP是Linux系统里的虚拟网络设备,它的原理和使用在 Kernel Doc 和 Wiki 做了比较清楚的说明。
不同于TUN的是,TAP设备模拟链路层设备(link layer),处理二层报文,以太网帧等。
TAP设备的创建过程和TUN类似,在ioctl设置的时候,将类型设置为IFF_TAP即可。
TAP设备与TUN设备的区别在于:
有时我们可能需要一块物理网卡绑定多个 IP 以及多个 MAC 地址,虽然绑定多个 IP 很容易,但是这些 IP 会共享物理网卡的 MAC 地址,可能无法满足我们的设计需求,所以有了 MACVLAN 设备,其工作方式如下:
MACVLAN 会根据收到包的目的 MAC 地址判断这个包需要交给哪个虚拟网卡。单独使用 MACVLAN 好像毫无意义,但是配合之前介绍的 network namespace 使用,我们可以构建这样的网络:
采摘
创建一个基于eth0的名为macv1的macvlan网卡:
macvlan支持三种模式,bridge、vepa、private,在创建的时候设置“mode XXX”:
bridge模式,macvlan网卡和物理网卡直接可以互通,类似于接入到同一个bridge。
vepa模式下,两个macvlan网卡直接不能直接通信,必须通过外部的支持“发夹弯”交换机才能通信。
private模式下,macvlan发出的广播包(arp等)被丢弃,即使接入了支持“发夹弯”的交换机也不能发现其它macvlan网卡,除非手动设置mac。
MACVTAP 是对 MACVLAN的改进,把 MACVLAN 与 TAP 设备的特点综合一下,使用 MACVLAN 的方式收发数据包,但是收到的包不交给 network stack 处理,而是生成一个 /dev/tapX 文件,交给这个文件:
由于 MACVLAN 是工作在 MAC 层的,所以 MACVTAP 也只能工作在 MAC 层,不会有 MACVTUN 这样的设备。
ipvlan和macvlan的区别在于它在ip层进行流量分离而不是基于mac地址,同属于一块宿主以太网卡的所有ipvlan虚拟网卡的mac地址都是一样的。
[图片上传失败...(image-d98b6f-1597455459947)]
veth设备是成对创建的:
创建之后,执行 ip link 就可以看到新创建的veth设备:
注意veth设备前面的ID, 58: 和 59: ,一对veth设备的ID是相差1的,并且系统内全局唯一。可以通过ID找到一个veth设备的对端。
veth设备理解
Intermediate Functional Block device,连接 ifb 中做了很详细的介绍。
libvirt是一套免费、开源的支持Linux下主流虚拟化工具libvirt 比较和用例模型的C函数库,其旨在为包括Xen在内的各种虚拟化工具提供一套方便、可靠的编程接口,支持与C,C++,Ruby,Python等多种主流开发语言的绑定。当前主流Linux平台上默认的虚拟化管理工具virt-manager(图形化),virt-install(命令行模式)等均基于libvirt开发而成。Linux下虚拟化工具llibvirt安装步骤:
by TANG Jia
本测试通过的版本号为:ubuntu12.04、libvirt1.1.2
安装libvirt:
1,安装virtinst
apt get installvirtinst
安装libvirt之前首先安装virtinst目的是为了使后面编译安装libvirt时,覆盖安装virtinst时自带的libvirt的版本,这点很重要。之后才能编译安装libvirt.
2,下载libvirt1.1.2,解压缩,切换至libvirt1.1.2目录
下载libvirt压缩包网址:ftp://libvirt.org/libvirt/
3,如果你直接执行./configure,会提示你缺少很多包,所以先安装包:
apt-get install libxml++2.6-2 libxml++2.6-dev
apt-get install libdevmapper-dev
apt-get install libpciaccess-dev
apt-get install python-dev
apt-get install libnl-dev
4,安装完依赖包后,在当前目录下执行 ./configure--prefix=/usr
(其中--prefix选项为指定安装路径)。
执行成功,部分输出如下:
configure:Readline:no
configure:Python:yes
configure:DTrace:no
configure:numad:no
configure:XML Catalog:/etc/xml/catalog
configure:Init script:check
configure:Char device locks:/var/lock
configure:
configure:Privileges
configure:
configure:QEMU:root:root
configure:
5,编译:make
安装:makeinstall
至此libvirtd安装成功!
6,启动libvirt服务
service libvirt-bin start
万万要注意啦,libvirt-daemon是由libvirt-bin来启动的,而不是libvirtd,libvirt-bin是一个符号链接/etc/init.d/libvirt-bin->/lib/init/upstart-job,后者是一个shell脚本。
同样,停止libvirt服务就是service libvrit-bin stop
以上 *** 作的正确性仅限于在ubuntu上安装libvirt,重点是第1步和第6步,这和网上很多博文所讲的libvirt安装有些差异,比如很多没有第1步,第6步启动libvirt为service libvirtd
start,这会报错为libvirtd:unrecognizedservice.
第2,3,4,5步的下载、编译、安装在任何版本的Linux上都一致。
libvirt 提供一种虚拟机监控程序不可知的 API 来安全管理运行于主机上的来宾 *** 作系统。希望以上对llibvirt安装流程介绍对大家有所帮助。关注系统部落,锁定电脑系统下载!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)