相互通信指的是:主机(host)和虚拟主机(Vhost)能相互访问,宿主机及同一个局域网中的其他计算机能够访问到虚拟机,虚拟机也能访问到网络中的其它机器(当然包括宿主机)。在我们接触的应用中,最常见的应该是互传文件了(比如:校内ftp),几秒钟一部电影还是十分令人赏心悦目。虚拟机访问外网的意思是虚拟机可以像一台真实主机一样访问Internet。为实现这两个目的,我们需要在已经安装好的linux Vhost上完成一些配置。
虚拟机及linux版本:
--VMware workstation 11, --Linux distribution: CentOS 7.1
首先了解下虚拟机接入网络常见的三种方式:(1)桥接模式( Bridged Adapter) (2)NAT模式(Network Address Translation) (3)仅主机模式( Host-only Adapter)
1.Bridged Adapter模式它是通过主机网卡,架设了一条桥,直接连入到网络中了。因此,它使得虚拟机能被分配到一个网络中的独立IP,所有网络功能完全和在网络中的真实机器一样。在桥接模式下,你需要手工为虚拟系统配置IP地址、子网掩码,而且还要和宿主机器处于同一网段,这样虚拟系统才能和宿主机器进行通信。同时也可以手工配置它的IP,DNS服务器,网关等信息,以实现通过局域网的网关或通过交换机访问外网(不过我们一般都是选择更加直接的方式NAT来访问外网,不需要较复杂的配置)。
虚拟机与主机关系:可以相互访问,因为虚拟机在真实网络段中有独立IP,主机与虚拟机处于同一网络段中,彼此可以通过各自IP相互访问。 虚拟机与网络中其他主机关系:可以相互访问,同样因为虚拟机在真实网络段中有独立IP,虚拟机与所有网络其他主机处于同一网络段中,彼此可以通过各自IP相互访问。 虚拟机与虚拟机关系: 可以相互访问,原因同上。
特点:独占网络中的一个ip,所以需要为Vhost设置一个独立的静态IP,但值得注意的是:如果主机是直接用拨号上网的,不是通过路由,那么此方式不可用,这就包括了在上一篇文章中吐槽过的锐捷客户端校园网,貌似好多学校都是用这个,默默地躲在宿舍角哭(po)泣(gai)一分钟...
2.NAT模式是最简单的实现虚拟机上网的方式, 在vmware里默认为VMnet8虚拟交换机,它将虚拟系统的IP地址转换成宿主机的IP地址,从而借用宿主机访问其他主机及外网。可以这样理解:Vhost访问网络的所有数据都是由主机提供的,vhost并不真实存在于网络中,主机与网络中的任何机器都不能查看和访问到Vhost的存在。
虚拟机与主机关系: 只能单向访问,虚拟机可以通过网络访问到主机,主机无法通过网络访问到虚拟机。因为虚拟机并没有属于自己的独立IP,就好比你去其它的学校找童鞋玩,你可以借你同学的学号用到该学校的资源,但是你并没有在这间学校注册学号,那么该学校的个体就不知道你的存在了。 虚拟机与网络中其他主机的关系: 只能单向访问,虚拟机可以访问到网络中其他主机,其他主机不能通过网络访问到虚拟机。 虚拟机与虚拟机之间的关系: 相互不能访问,虚拟机与虚拟机各自完全独立,相互间无法通过网络访问彼此。
3.主机模式,这是一种比较复杂的模式,需要有比较扎实的网络基础知识才能玩转。可以说前面两种模式下所实现的功能,在这种模式下,都可以通过设置虚拟机及网卡被实现。我们可以理解为Vbox在主机中模拟出一张专供虚拟机使用的网卡,所有虚拟机都是连接到该网卡上的,我们可以通过设置这张网卡来实现上网及其他很多功能,比如(网卡共享、网卡桥接等)。在host-only模式中,虚拟系统无法上网,但所有(Vmware创建的多个Vhost)的虚拟系统是可以相互通信的。
虚拟机与主机关系 :默认不能相互访问,双方不属于同一IP段,host-only网卡默认IP段为192.168.56.X 子网掩码为255.255.255.0,后面的虚拟机被分配到的也都是这个网段。通过网卡共享、网卡桥接等,可以实现虚拟机于主机相互访问。
虚拟机与网络主机关系 :默认不能相互访问,原因同上,通过设置,可以实现相互访问。 虚拟机与虚拟机关系 :默认可以相互访问,都是同处于一个网段。
下面我们就linux centos7如何实现宿主机与虚拟机之间的相互通信及虚拟机访问外网来进行相应的配置:
关闭防火墙首先得先关掉linux CentOS 7.1系统的防火墙,安装完之后是默认开启的。在之前的版本中,关闭防火墙等服务的命令是“service iptables stop”,从RHEL7开始,使用systemctl工具来管理服务程序,包括了service和chkconfig。执行关闭防火墙和开机时禁用防火墙命令,这样以后防火墙都是关闭状态了,待到“猴年马月”,我们再来打开防火墙,哈哈,这个梦想还是可以实现的~关闭之后应该是下面这个状态。 "# systemctl status firewalld.service" --查看防火墙状态"# systemctl stop firewalld.service" --关闭防火墙"# systemctl disable firewalld.service" --开机时禁用防火墙"# systemctl restart firewalld.service" --重启防火墙服务
宿主机与虚拟机之间通信(桥接模式)在虚拟机的开启页面,选择桥接模式( Bridged Adapter),从上面我们可以知道桥接模式下,默认的网卡为 VMnet0,不用我们设置。终端键入“su”,输入管理账户密码进入root用户。 进入网卡配置文件目录 “cd/etc/sysconfig/network-scripts”可以使用ls -l(或者 ll)查看目录下的文件,centos7的网卡配置文件名为“ifcfg-eno16777736”编辑文件 "vi ifcfg-eno16777736",修改下面标红的字段。BOOTPROTO表示获取IP的方式: "dhcp"表示自动获取,static是固定IP,none是手动。ONBOOT=yes表示开机自动启用网卡。IPADDR设定虚拟机的独立IP,在网桥模式下需要和Host IP在同一个网段下。关于什么叫同一个网段,计算机网络课程已经有了十分详细的介绍,不过记忆这东西,此一时非彼一时,所以我们还是来复习一遍吧。重启网络服务”systemctl restart network.service“,尝试主机与虚拟机互ping,若都能ping通,则完成了通信,就可以happy地下载个FTP客户端互传文件了。如不能ping通,检查下防火墙的状态,看是否关闭了。
IP是由四段数字组成,在此,我们先来了解一下3类常用的IP A类IP段 0.0.0.0 到127.255.255.255
B类IP段 128.0.0.0 到191.255.255.255 C类IP段 192.0.0.0 到223.255.255.255 A类的默认子网掩码255.0.0.0 一个子网最多可以容纳1677万多台电脑
B类的默认子网掩码255.255.0.0 一个子网最多可以容纳6万台电脑 C类的默认子网掩码255.255.255.0 一个子网最多可以容纳254台电脑
要想在同一网段,必需做到网络标识相同,那网络标识怎么算呢? 算法只要把IP和子网掩码的每位数AND就可以了。
AND方法:0和1=00和0=01和1=1
如:And192.168.0.1,255.255.255.0,先转换为二进制,然后AND每一位
IP11000000.10101000.00000000.00000001 子网掩码11111111.11111111.11111111.00000000 得出AND结果 11000000.10101000.00000000.00000000 转换为十进制192.168.0.0,这就是网络标识。
TYPE=Ethernet BOOTPROTO="none" DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no NAME=eno16777736 UUID=bac415b6-83a1-4d7c-b7f9-783d31d34741 DEVICE=eno16777736 ONBOOT=yes IPADDR=192.168.1.10 GATEWAY=192.168.1.1
虚拟机访问外网(NAT模式)
在虚拟机的开启页面,选择NAT模式,从上面我们可以知道NAT模式下,默认的网卡为 VMnet8,需要我们去手动开启VMnet8网卡。先后顺序为:先开启网卡,后开启虚拟机,如果先开启虚拟机,会出现网卡不能驱动的异常。终端键入“su”,输入管理账户密码进入root用户。 进入网卡配置文件目录 “cd/etc/sysconfig/network-scripts”,编辑文件 "vi ifcfg-eno16777736"将ONBOOT="no"改为yes,再添加BOOTPROTO="dhcp"重启网络服务”systemctl restart network.service“,尝试使用虚拟机ping百度,若能ping通,则可以使用linux自带的火狐浏览器在网络的海洋里自由地畅游了~
TYPE=Ethernet BOOTPROTO="dhcp" #自动获取 DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no NAME=eno16777736 UUID=bac415b6-83a1-4d7c-b7f9-783d31d34741 DEVICE=eno16777736 ONBOOT=yes