Summary
使用libvirt安装完qemukvm虚拟机,而且发觉虚拟机不能上网,虚拟机想要上网,有好多中技巧。
我们称Guest机器为虚拟机,Host机器为开机运行的真实机器。
KVM虚拟机网路配置通常的两种形式:
NAT的网路结布光:
Bridge的网路结布光:
简单介绍(Host-Only也是网路配置的一种形式,这儿只说它的概念)
桥接
桥接网路是指本地数学网卡和虚拟网卡通过VMnet0虚拟交换机进行桥接,化学网卡和虚拟网卡在拓扑图上处于同等地位,这么化学网卡和虚拟网卡就相当于处于同一个网关,虚拟交换机就相当于一台现实网路中的交换机,所以两个网卡的IP地址也要设置为同一公网。所以当我们要在局域网使用虚拟机,对局域网其他pc提供服务时,比如提供ftp,提供ssh,提供http服务,这么就要选择桥接模式。
例如
大学宿舍里有一个路由器,宿舍里四个人连接这个路由器,路由器的wanip就不理会了,
这个ip是动态获取的,而lanip默认是192.168.1.1,子网掩码是255.255.255.0。
而其他四个人是自动获取ip,假设四个人的ip是:
A:192.168.1.100/255.255.255.0,
B:192.168.1.101/255.255.255.0,
C:192.168.1.102/255.255.255.0,
D:192.168.1.103/255.255.255.0
那么虚拟机的ip可以设置的ip地址是192.168.1.2-192.168.1.99,192.168.1.104-192.168.1.254
(网络地址全0和全1的除外,再除去ABCD四个人的ip地址)
那么虚拟机的ip地址可以设置为192.168.1.98/255.255.255.0,设置了这个ip地址,
ABCD这四个人就可以通过192.168.1.98访问虚拟机了,如果虚拟机需要上外网,
那么还需要配置虚拟机的路由地址,就是192.168.1.1了,这样,虚拟机就可以上外网了,
但是,上网我们一般是通过域名去访问外网的,所以我们还需要为虚拟机配置一个dns服务器,
我们可以简单点,把dns服务器地址配置为google的dns服务器:8.8.8.8,到此,虚拟机就可以上网了。
NAT
NAT模式中,就是让虚拟机利用NAT(网路地址转换)功能,通过寄主机器所在的网路来访问网段。
NAT模式中,虚拟机的网卡和化学网卡的网路,不在同一个网路,虚拟机的网卡,是提供的一个虚拟网路。
NAT和桥接的比较:
(1)NAT模式和桥接模式虚拟机都可以上内网。
(2)因为NAT的网路在一个虚拟网路里,所以局域网其他主机是难以访问虚拟机的,而宿主机可以访问虚拟机,虚拟机可以访问局域网的所有主机,由于真实的局域网相对于NAT的虚拟网路,就是NAT的虚拟网路的内网,不懂的人可以查查NAT的相关知识。
(3)桥接模式下,多个虚拟机之间可以相互访问;NAT模式下,多个虚拟机之间也可以互相访问。
假如你建一个虚拟机,只是给自己用,不须要给局域网其他人用,这么可以选择NAT,虽然NAT模式下的虚拟系统的TCP/IP配置信息是由VMnet8(NAT)虚拟网路的DHCP服务器提供的,只要虚拟机的网络配置是DHCP,这么你不须要进行任何其他的配置,只须要寄主机器能访问互联网即可,就可以让虚拟机联网了。
例如
你想建多个虚拟机集群,作为测试使用,而宿主机可能是一个笔记本,ip不固定。
这种应用场景,我们需要采用nat模式了,但是我们要考虑一个问题,
虚拟机之间是需要互访的,默认采用dhcp,虚拟机的ip每次重启,ip都是不固定的,
所以我们需要手工设置虚拟机的ip地址。 但是我们对虚拟机网卡所在的虚拟网络的信息还一无所知,
例如虚拟机网络的路由地址,子网掩码,所以我们需要先查下nat虚拟网络的信息。(可以用#ifconfig 查看)
例如子网ip显示为192.168.233.0,子网掩码是255.255.255.0,那路由地址呢,其实就是网关IP了,
都是同个东西,这里是192.168.233.2。
接下来就好办了,在对应的虚拟机设置好ip,子网掩码,路由地址就可以上外网了,至于dns可以设置为8.8.8.8.
Host-Only
在Host-Only模式下linux启动盘制作工具,虚拟网路是一个全封闭的网路,它惟一才能访问的就是主机。虽然Host-Only网路和NAT网路很相像,不同的地方就是Host-Only网路没有NAT服务,所以虚拟网路不能联接到Internet。主机和虚拟机之间的通讯是通过VMwareNetworkAdepterVMnet1虚拟网卡来实现的。
Host-Only的宗旨就是构建一个与外界隔绝的内部网路,来提升外网的安全性。这个功能似乎对普通用户来说没有多大意义,但小型服务协会经常借助这个功能。假如你想为VMnet1网关提供路由功能,那就须要使用RRAS,而不能使用XP或2000的ICS,由于ICS会把外网的IP地址改为192.168.0.1,但虚拟机是不会给VMnet1虚拟网卡分配这个地址的,这么主机和虚拟机之间就不能通信了。
NAT形式
客户机安装完成后,需要为其设置网络接口,以便和主机网络,客户机之间的网络通信。
事实上,如果要在安装时使用网络通信,需要提前设置客户机的网络连接。
NAT形式原理
NAT方法是kvm安装后的默认形式。它支持主机与虚拟机的互访,同时也支持虚拟机访问互联网,但不支持外界访问虚拟机。
检测当前的网路设置:
default是宿主机安装虚拟机支持模块的时侯手动安装的。
检测当前的网路插口:
其中virbr0是由宿主机虚拟机支持模块安装时形成的虚拟网路插口,也是一个switch和bridge,负责把内容分发到各虚拟机。
几个虚拟机管理模块形成的插口关系如右图:
从图上可以看出,虚拟插口和化学插口之间没有联接关系,所以虚拟机只能在通过虚拟的网路访问外部世界,难以从网路上定位和访问虚拟主机。
virbr0是一个桥接器,接收所有到网路192.168.122.*的内容。从下边命令可以验证:
同时,虚拟机支持模块会更改iptables规则redhat虚拟机网络配置,通过命令可以查看:
iptables -t nat -L -nv
iptables -t filter -L -nv
假如没有default的话,或则须要扩充自己的虚拟网路,可以使用命令重新安装NAT。
NAT方法的适用范围
桌面主机虚拟化。
创建步骤
virsh net-define /usr/share/libvirt/networks/default.xml
此命令定义一个虚拟网路,default.xml的内容:
也可以更改xml,创建自己的虚拟网路。
标记为手动启动:
启动网路:
virsh net-start default
网路启动后可以用命令brctlshow查看和验证。
更改/etc/sysctl.conf中参数,容许ip转发:
net.ipv4.ip_forward=1
安装顾客机时注意:网路要选择用NAT形式。
文本形式安装:(这儿不介绍图形化界面)
编辑更改虚拟机配置文件/etc/libvirt/qemu/v1.xml,降低如下内容:
<interface type='network'>
<mac address='52:54:00:4f:1b:07'/>
<source network='default'/>
<model type='virtio'/>
<a style='color:#0000CC;font-size:16px;' ddress type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
虚拟机启动后,验证网路插口是否正常:
Bridge形式的影响
Bridge形式配置下来的插口对NAT方法没有影响linux之家,由于NAT方法并没有使用数学网卡。但作为顾客机,只能选择其中的一种。
Bridge形式
Bridge形式原理
Bridge形式即虚拟集线器的网路联接形式,是顾客机和子网上面的机器能否互相通信。可以使虚拟机成为网路中具有独立IP的主机。
桥接网路(也叫化学设备共享)被用作把一个化学设备复制到一台虚拟机。集线器多用作中级设置,非常是主机多个网路插口的情况。
如上图,集线器的基本原理就是创建一个桥接插口br0,在化学网卡和虚拟网路插口之间传递数据。
Bridge方法的适用范围
服务器主机虚拟化。
集线器形式配置步骤
1、编辑更改网路设备脚本文件,降低集线器设备br0
# vi /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO=static
IPADDR=10.0.112.39
NETMASK=255.255.255.0
GATEWAY=10.0.112.1
DEFROUTE=yes
上述配置将虚拟网卡配置在了10.0.112.*网关。若果不须要静态地址,可以把配置地址的相关项屏蔽。如:
DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO=dhcp
2、编辑更改网路设备脚本文件,更改网卡设备eth0
DEVICE=”eth0”
NM_CONTROLLED=”no”
ONBOOT=”yes”
TYPE=Ethernet
BOOTPROTO=none
BRIDGE=”br0”
NAME=”Systemeth0”
HWADDR=44:37:E6:4A:62:AD
NM_CONTROLLED这个属性值,按照RedHat公司的文档是必须设置为“no”的(这个值为“yes”表示可以由服务NetworkManager来管理。NetworkManager服务不支持桥接,所以要设置为“no”。),但实际上发觉设置为“yes”没有问题。通信正常。
3、重启网路服务
#service network restart
4、校验桥接插口
#brctl show
bridge name bridge id STP enabled interfaces
br0 8000.4437e64a62ad no eth0
顾客机配置顾客机安装时注意,网路要选择用br0桥接方法。
文本形式:(同样只介绍文本形式)
编辑更改虚拟机配置文件/etc/libvirt/qemu/v1.xml,降低如下内容
虚拟机启动后redhat虚拟机网络配置,验证网路插口是否正常:
# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.4437e64a62ad no eth0
vnet0
NAT形式的影响
集线器形式的配置与虚拟机支持模块安装时预置的虚拟网路桥接插口virbr0没有任何关系,配置集线器方法时,可以把virbr0插口(即NAT方法上面的default虚拟网路)删掉。
# virsh net-destroy default
# virsh net-undefine default
# service libvirtd restart