记得刚玩虚拟机的时候总觉得虚拟机联网是一件很麻烦的事情,现在搞清楚了就感觉很简单。

虚拟机网络模式

VirtualBox中有4中网络连接方式:
NAT
Bridged Adapter
Internal
Host-only Adapter
VMWare中有三种,其实他跟VMWare 的网络连接方式都是一样概念,只是比VMWare多了Internal方式。
要让自己(或别人)理解深刻,方法就是做比较和打比方,比较之间的不同和相同,拿熟知的事物打比方。先来一张图,通过这张图就很容易看出这4种方式的区别:

虚拟机网络环境设置 - 图1

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 双网卡设置

  1. vi /etc/network/interfaces

修改为

  1. auto lo
  2. iface lo inet loopback
  3. auto eth0
  4. iface eth0 inet static
  5. address 10.0.2.20
  6. gateway 10.0.2.1
  7. netmask 255.255.255.0
  8. auto eth1
  9. iface eth1 inet static
  10. address 192.168.56.14
  11. netmask 255.255.255.0

说明

eth0 代表网卡1的配置,ip地址可以设置在10.0.2.内,我这里设置为10.0.2.20 eth1 代表网卡2的配置,可以在宿主机的ipconfig命令查看 image.png 所以我这里设置为192.168.56.14

设置完重启networking(如下方法任选一条就可以):

  1. sudo /etc/init.d/networking restart
  1. sudo service networking restart
  1. sudo ifdown eth0
  2. sudo ifup eth0

完成之后 能ping通baidu就说明起作用了

示例2

centos7.6 双网卡设置
首先 ip addr命令看一下网络配置
image.png
我这里其实已经设置好了。
第一步设置nat网卡:
enp0s3就是那个nat网卡,很简单我们知道enp0s8那个网段是Host-only Adapter,所以enp0s3肯定就是nat网卡,

  1. 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