Summary

使用libvirt安装完qemu kvm虚拟机,但是发现虚拟机不能上网,虚拟机想要上网,有很多中方法。
我们称Guest机器为虚拟机,Host机器为开机运行的真实机器。

KVM虚拟机网络配置一般的两种方式:

* NAT (默认上网) 虚拟机利用host机器的ip进行上网.对外显示一个ip
* Bridge 将虚拟机桥接到host机器的网卡上,guest和host机器都通过bridge上网.对外不同的ip
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模式下,虚拟网络是一个全封闭的网络,它唯一能够访问的就是主机。其实Host-Only网络和NAT网络很相似,不同的地方就是Host-Only网络没有NAT服务,所以虚拟网络不能连接到Internet。主机和虚拟机之间的通信是通过VMware
Network Adepter VMnet1虚拟网卡来实现的。

  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规则,通过命令可以查看:
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
网络启动后可以用命令brctl show 查看和验证。

修改/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'/> <address type='pci' domain='0x0000' bus=
'0x00' slot='0x03' function='0x0'/> </interface>
虚拟机启动后,验证网络接口是否正常:


Bridge方式的影响
Bridge方式配置出来的接口对NAT方式没有影响,因为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.1DEFROUTE=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=”System eth0”
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,增加如下内容
<interface type='bridge'> <mac address='52:54:00:da:c3:dc'/> <source
bridge='br0'/> <model type='virtio'/> <address type='pci' domain='0x0000'
bus='0x00' slot='0x03' function='0x0'/> </interface>
虚拟机启动后,验证网络接口是否正常:
# brctl show bridge name bridge id STP enabled interfaces br0 8000.4437e64
a62ad no eth0 vnet0
NAT方式的影响


网桥方式的配置与虚拟机支持模块安装时预置的虚拟网络桥接接口virbr0没有任何关系,配置网桥方式时,可以把virbr0接口(即NAT方式里面的default虚拟网络)删除。
# virsh net-destroy default # virsh net-undefine default # service libvirtd
restart

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信