记得刚玩虚拟机的时候总觉得虚拟机联网是一件很麻烦的事情,现在搞清楚了就感觉很简单。
虚拟机网络模式
VirtualBox中有4中网络连接方式:
NAT
Bridged Adapter
Internal
Host-only Adapter
VMWare中有三种,其实他跟VMWare 的网络连接方式都是一样概念,只是比VMWare多了Internal方式。
要让自己(或别人)理解深刻,方法就是做比较和打比方,比较之间的不同和相同,拿熟知的事物打比方。先来一张图,通过这张图就很容易看出这4种方式的区别:

1、NAT
NAT:Network Address Translation,网络地址转换
虚拟机与主机的关系:只能单向访问,虚拟机可以通过网络访问到主机,主机无法通过网络访问到虚拟机。
虚拟机与网络中其他主机的关系:只能单向访问,虚拟机可以访问到网络中其他主机,其他主机不能通过网络访问到虚拟机。
虚拟机与虚拟机的关系:相互不能访问,虚拟机与虚拟机各自完全独立,相互间无法通过网络访问彼此。
2、Bridged Adapter(网桥模式)
虚拟机与主机的关系:可以相互访问,因为虚拟机在真实网络段中有独立IP,主机与虚拟机处于同一网络段中,彼此可以通过各自IP相互访问。
虚拟机于网络中其他主机的关系:可以相互访问,同样因为虚拟机在真实网络段中有独立IP,虚拟机与所有网络其他主机处于同一网络段中,彼此可以通过各自IP相互访问。
虚拟机与虚拟机的关系:可以相互访问,原因同上。
3、Internal(内网模式)
虚拟机与主机的关系:不能相互访问,彼此不属于同一个网络,无法相互访问。
虚拟机与网络中其他主机的关系:不能相互访问,理由同上。
虚拟机与虚拟机的关系:可以相互访问,前提是在设置网络时,两台虚拟机设置同一网络名称。如上配置图中,名称为intnet。
4、Host-only Adapter(主机模式)
虚拟机与主机的关系:默认不能相互访问,双方不属于同一IP段,host-only网卡默认IP段为192.168.56.X 子网掩码为255.255.255.0,后面的虚拟机被分配到的也都是这个网段。通过网卡共享、网卡桥接等,可以实现虚拟机于主机相互访问。
虚拟机与网络主机的关系:默认不能相互访问,原因同上,通过设置,可以实现相互访问。
虚拟机与虚拟机的关系:默认可以相互访问,都是同处于一个网段。
示例
比如我想让主机连接虚拟机,又想让虚拟机可以联网,根据上面的内容可以知道,网桥模式 跟 NAT模式 是可以上网的,但是网桥模式会跟主机在同一个网段,局域网内机器多的情况下IP容易变,不利于我们连接,但是nat模式我们又没法跟虚拟机连接。
所以最佳方案就是虚拟机设置双网卡:
卡1:NAT (用以连接网络)
卡2:Host-only Adapter (用以主机互通,设置静态IP)
示例1
Alpine 双网卡设置
vi /etc/network/interfaces
修改为
auto loiface lo inet loopbackauto eth0iface eth0 inet staticaddress 10.0.2.20gateway 10.0.2.1netmask 255.255.255.0auto eth1iface eth1 inet staticaddress 192.168.56.14netmask 255.255.255.0
说明
eth0 代表网卡1的配置,ip地址可以设置在10.0.2.内,我这里设置为10.0.2.20 eth1 代表网卡2的配置,可以在宿主机的ipconfig命令查看
所以我这里设置为192.168.56.14
设置完重启networking(如下方法任选一条就可以):
sudo /etc/init.d/networking restart
sudo service networking restart
sudo ifdown eth0sudo ifup eth0
完成之后 能ping通baidu就说明起作用了
示例2
centos7.6 双网卡设置
首先 ip addr命令看一下网络配置
我这里其实已经设置好了。
第一步设置nat网卡:
enp0s3就是那个nat网卡,很简单我们知道enp0s8那个网段是Host-only Adapter,所以enp0s3肯定就是nat网卡,
cd /etc/sysconfig/network-script
编辑 vi ifcfg-enp0s3 修改BOOTPROTO=static然后重启网络 service networking restart这时候虚拟机就已经可以上网了第二步设置Host-only静态ip
cp ifcfg-enp0s3 ifcfg-enp0s8vi ifcfg-enp0s8
```
TYPE=Ethernet BOOTPROTO=static #设置静态ip,方便xshell,ssh连接虚拟机 DEFROUTE=yes PEERDNS=yes PEERROUTES=yes TYPE=Ethernet BOOTPROTO=static 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 IPV6_ADDR_GEN_MODE=stable-privacy
ip地址这个地方一定要特别注意
IPADDR=192.168.56.12 # ip地址要和Host-only中同一网段,任意不同ip地址。 NETMASK=255.255.255.0 # 与Host-only一致 GATEWAY=192.168.56.1 #设置为Host-only的IP地址 DNS1=8.8.8.8 NAME=enp0s8 #名字不要和原配置文件一样
UUID=15874441-e5c0-401c-b4da-bb8c13df283f新网卡的配置文件不能和原网卡的配置文件一样,这里注释掉,删掉都可以。
DEVICE=enp0s8 #设备也不要和原配置文件中的一样 ONBOOT=yes ```
删掉网卡文件: rm-rf /etc/udev/rules.d/70-persistent-net.rules重启网络 systemctl restart network systemctl restart NetworkManager
所以我这里设置为192.168.56.14