54:
00:
da:
c3:
dc'/>
虚拟机启动后,验证网络接口是否正常:
#brctlshow
bridgenamebridgeidSTPenabledinterfaces
br08000.4437e64a62adnoeth0
vnet0
NAT方式的影响
网桥方式的配置与虚拟机支持模块安装时预置的虚拟网络桥接接口virbr0没有任何关系,配置网桥方式时,可以把virbr0接口(即NAT方式里面的default虚拟网络)删除。
#virshnet-destroydefault
#virshnet-undefinedefault
#servicelibvirtdrestart
NAT模式
问题
客户机安装完成后,需要为其设置网络接口,以便和主机网络,客户机之间的网络通信。
事实上,如果要在安装时使用网络通信,需要提前设置客户机的网络连接。
KVM客户机网络连接有两种方式:
∙用户网络(UserNetworking):
让虚拟机访问主机、互联网或本地网络上的资源的简单方法,但是不能从网络或其他的客户机访问客户机,性能上也需要大的调整。
NAT方式。
∙虚拟网桥(VirtualBridge):
这种方式要比用户网络复杂一些,但是设置好后客户机与互联网,客户机与主机之间的通信都很容易。
Bridge方式。
本文主要解释NAT方式的配置。
NAT方式原理
NAT方式是kvm安装后的默认方式。
它支持主机与虚拟机的互访,同时也支持虚拟机访问互联网,但不支持外界访问虚拟机。
检查当前的网络设置:
#virshnet-list--all
NameStateAutostart
-----------------------------------------
defaultactiveyes
default是宿主机安装虚拟机支持模块的时候自动安装的。
检查当前的网络接口:
#ifconfig
eth0Linkencap:
EthernetHWaddr44:
37:
E6:
4A:
62:
AD
inet6addr:
fe80:
:
4637:
e6ff:
fe4a:
62ad/64Scope:
Link
UPBROADCASTRUNNINGMULTICASTMTU:
1500Metric:
1
RXpackets:
987782errors:
0dropped:
0overruns:
0frame:
0
TXpackets:
84155errors:
0dropped:
0overruns:
0carrier:
0
collisions:
0txqueuelen:
1000
RXbytes:
109919111(104.8MiB)TXbytes:
12695454(12.1MiB)
Interrupt:
17
loLinkencap:
LocalLoopback
inetaddr:
127.0.0.1Mask:
255.0.0.0
inet6addr:
:
:
1/128Scope:
Host
UPLOOPBACKRUNNINGMTU:
16436Metric:
1
RXpackets:
4errors:
0dropped:
0overruns:
0frame:
0
TXpackets:
4errors:
0dropped:
0overruns:
0carrier:
0
collisions:
0txqueuelen:
0
RXbytes:
240(240.0b)TXbytes:
240(240.0b)
virbr0Linkencap:
EthernetHWaddr52:
54:
00:
B9:
B0:
96
inetaddr:
192.168.122.1Bcast:
192.168.122.255Mask:
255.255.255.0
UPBROADCASTRUNNINGMULTICASTMTU:
1500Metric:
1
RXpackets:
0errors:
0dropped:
0overruns:
0frame:
0
TXpackets:
2126errors:
0dropped:
0overruns:
0carrier:
0
collisions:
0txqueuelen:
0
RXbytes:
0(0.0b)TXbytes:
100387(98.0KiB)
virbr0-nicLinkencap:
EthernetHWaddr52:
54:
00:
B9:
B0:
96
BROADCASTMULTICASTMTU:
1500Metric:
1
RXpackets:
0errors:
0dropped:
0overruns:
0frame:
0
TXpackets:
0errors:
0dropped:
0overruns:
0carrier:
0
collisions:
0txqueuelen:
500
RXbytes:
0(0.0b)TXbytes:
0(0.0b)
其中virbr0是由宿主机虚拟机支持模块安装时产生的虚拟网络接口,也是一个switch和bridge,负责把容分发到各虚拟机。
几个虚拟机管理模块产生的接口关系如下图:
从图上可以看出,虚拟接口和物理接口之间没有连接关系,所以虚拟机只能在通过虚拟的网络访问外部世界,无法从网络上定位和访问虚拟主机。
virbr0是一个桥接器,接收所有到网络192.168.122.*的容。
从下面命令可以验证:
#brctlshow
bridgenamebridgeidSTPenabledinterfaces
virbr08000.525400b9b096yesvirbr0-nic
#route
KernelIProutingtable
DestinationGatewayGenmaskFlagsMetricRefUseIface
192.168.122.0*255.255.255.0U000virbr0
同时,虚拟机支持模块会修改iptables规则,通过命令可以查看:
#iptables-tnat-L-nv
ChainPREROUTING(policyACCEPT16924packets,2759Kbytes)
pktsbytestargetprotoptinoutsourcedestination
ChainPOSTROUTING(policyACCEPT2009packets,125Kbytes)
pktsbytestargetprotoptinoutsourcedestination
42131847MASQUERADEall--**192.168.122.0/24!
192.168.122.0/24----------->这条是关键,它配置了NAT功能。
ChainOUTPUT(policyACCEPT2011packets,125Kbytes)
pktsbytestargetprotoptinoutsourcedestination
#iptables-tfilter-L-nv
ChainINPUT(policyACCEPT0packets,0bytes)
pktsbytestargetprotoptinoutsourcedestination
174ACCEPTudp--virbr0*0.0.0.0/00.0.0.0/0udpdpt:
53---->由libvirt脚本自动写入
00ACCEPTtcp--virbr0*0.0.0.0/00.0.0.0/0tcpdpt:
53---->由libvirt脚本自动写入
3984ACCEPTudp--virbr0*0.0.0.0/00.0.0.0/0udpdpt:
67---->由libvirt脚本自动写入
00ACCEPTtcp--virbr0*0.0.0.0/00.0.0.0/0tcpdpt:
67---->由libvirt脚本自动写入
178K195MACCEPTall--**0.0.0.0/00.0.0.0/0stateRELATED,ESTABLISHED---->iptables的系统预设
2168ACCEPTicmp--**0.0.0.0/00.0.0.0/0---->iptables的系统预设
1148216KACCEPTall--lo*0.0.0.0/00.0.0.0/0---->iptables的系统预设
160ACCEPTtcp--**0.0.0.0/00.0.0.0/0stateNEWtcpdpt:
22---->iptables的系统预设
165642721KREJECTall--**0.0.0.0/00.0.0.0/0reject-withicmp-host-prohibited---->iptables的系统预设
ChainFORWARD(policyACCEPT0packets,0bytes)
pktsbytestargetprotoptinoutsourcedestination
37263485KACCEPTall--*virbr00.0.0.0/0192.168.122.0/24stateRELATED,ESTABLISHED---->由libvirt脚本自动写入
3491399KACCEPTall--virbr0*192.168.122.0/240.0.0.0/0---->由libvirt脚本自动写入
00ACCEPTall--virbr0virbr00.0.0.0/00.0.0.0/0---->由libvirt脚本自动写入
00REJECTall--*virbr00.0.0.0/00.0.0.0/0reject-withicmp-port-unreachable---->由libvirt脚本自动写入
00REJECTall--virbr0*0.0.0.0/00.0.0.0/0reject-withicmp-port-unreachable---->由libvirt脚本自动写入
00REJECTall--**0.0.0.0/00.0.0.0/0reject-withicmp-host-prohibited---->iptables的系统预设
ChainOUTPUT(policyACCEPT181Kpackets,138Mbytes)
pktsbytestargetprotoptinoutsourcedestination
如果没有default的话,或者需要扩展自己的虚拟网络,可以使用命令重新安装NAT。
NAT方式的适用围
桌面主机虚拟化。
创建步骤
#virshnet-define/usr/share/libvirt/networks/default.xml
此命令定义一个虚拟网络,default.xml的容:
default
也可以修改xml,创建自己的虚拟网络。
标记为自动启动:
#virshnet-autostartdefault
Networkdefaultmarkedasautostarted
启动网络:
#virshnet-startdefault
Networkdefaultstarted
网络启动后可以用命令brctlshow查看和验证。
修改/etc/sysctl.conf中参数,允许ip转发:
net.ipv4.ip_forward=1
客户机安装
客户机安装时注意,网络要选择用NAT方式。
图形化的方式:
文本方式:
编辑修改虚拟机配置文件/etc/libvirt/qemu/v1.xml,增加如下容
54:
00:
4f:
1b:
07'/>
虚拟机启动后,验证网络接口是否正常:
#brctlshow
bridgenamebridgeidSTPenabledinterfaces
virbr08000.525400b9b096yesvirbr0-nic
vnet0
Bridge方式的影响
Bridge方式配置出来的接口对NAT方式没有影响,因为NAT方式并没有使用物理网卡。
但作为客户机,只能选择其中的一种。
客户机动态迁移
源机和目的机rhel版本必须一致
1源端建立nfs
Vi/etc/exports
/var/lib/libvirt/images*.example.(rw,no_root_squash,sync)
2在目的端mountnfs
#mountstorage_host:
/var/lib/libvirt/images/var/lib/libvirt/images
3在目的端执行virsh
#virshmigrate--liveGuestNameDestinationURL
DestinationURL指的是目的机的主机名或ip
例如:
#virshmigrate--liveguest1-rhel6-64qemu+ssh:
//host2.example./system
客户机自动启动
virshautostartTestServer
DomainTestServermarkedasautostarted
#virshautostart--disableTestServer
DomainTestServerunmarkedasautostarted
改变diskimage大小
#qemu-imgresizefilename[+|-]size[K|M|G|T]
查看vol信息
#virshvol-info/images/secondimage.img
Name:
secondimage.img
Type:
file
Capacity:
20.00GB
Allocation:
136.00KB
创建存储池
基于分区
先分区,格式化
1定义分区
#virshpool-define-asguest_images_fsfs--/dev/sdc1-"/guest_images"
Poolguest_images_fsdefined
guest_images_fspool名称
/devsdc1分区
/guest_imagesmount点
2确认
#virshpool-list--all
NameStateAutostart
-----------------------------------------
defaultactiveyes
guest_images_fsinactiveno
3建立mount点
#virshpool-buildguest_images_fs
Poolguest_images_fsbuilt
#ls-la/guest_images
total8
drwx------.2rootroot4096May3119:
38.
dr-xr-xr-x.25rootroot4096May3119:
38..
#virshpool-list--all
NameStateAutostart
-----------------------------------------
defaultactiveyes
guest_images_fsinactiveno
4启动存储池
#virshpool-startguest_images_fs
Poolguest_images_fsstarted
#virshpool-list–all
NameStateAutostart
-----------------------------------------
defaultactiveyes
guest_images_fsactiveno
5自动启动
#virshpool-autostartguest_images_fs
Poolguest_images_fsmarkedasautostarted
#virshpool-list--all
NameStateAutostart
-----------------------------------------
defaultactiveyes
guest_images_fsactiveyes
6确认存储池
#virshpool-infoguest_images_fs
Name:
guest_images_fs
UUID:
c7466869-e82a-a66c-2187-dc9d6f0877d0
State:
running
Capacity:
458.39GB
Allocation:
197.91MB
Available:
458.20GB
#mount|grep/guest_images
/dev/sdc1on/guest_imagestypeext4(rw)
#ls-la/guest_images
total24
drwxr-xr-x.3rootroot4096May3119:
47.
dr-xr-xr-x.25rootroot4096May3119:
38..
drwx------.2rootroot16384May3114:
18lost+found
基于目录
1定义存储池
#virshpool-define-asguest_images_dirdir----"/guest_images"
Poolguest_images_dirdefined
2确认
#virshpool-list--all
NameStateAutostart
-----------------