首先说明使用有线网卡和使用wifi模式是不同的。

virtualbox默认的网络连接方式如下

虚拟机的docker和宿主机共用一个网络 虚拟机和宿主机相同ip_桥接

这种连接方式虚拟机可以ping通宿主机和外网,但是宿主机无法ping通虚拟机,执行ip address命令可以看到虚拟机自动分配的ip地址是10.0.2.15(我这里显示的是这个ip,可能会有不同),跟宿主机根本不在一个网段。

VirtualBox的四种网络连接方式

虚拟机的docker和宿主机共用一个网络 虚拟机和宿主机相同ip_桥接_02

可以看到桥接模式是最佳选项,它支持所有情况的访问 。

 

我的实际情况是在新建虚拟机的时候就设置好 bridge模式。 我是wifi网络,选择intel wifi. 然后建好虚拟机就行了,这种方法不需要额外设置,就可以有虚拟机和主机相互ping通的效果。可谓是开箱即用。

在虚拟机里选择要桥接的物理网卡,这里选择的是Intel wi-fi这个物理网卡:

 

虚拟机的docker和宿主机共用一个网络 虚拟机和宿主机相同ip_桥接_03

 

 

因为启用了【网卡1】,虚拟机会给Ubuntu系统配置一块虚拟网卡【enp03】,这里我们设置Ubuntu虚拟网卡和桥接的Windows物理网卡在同一个网段,这样就可以实现互通了;

 

因为windows的wifi网卡地址是:10.4.23.200,所以设置虚拟机的enp0s3网卡地址为:10.4.23.218;这样两个系统现在都在真实的网络上,且可以正常上网。

 

出现的问题:有一次我发现主机可以ping通虚拟机,虚拟机ping不同主机。

解决办法:

控制面板->windows 防火墙->启用或关闭windows防火墙->关闭(建议重启计算机)。

 

 

Bridged(桥接模式)

桥接模式就是将主机的网卡,与虚拟机虚拟的网卡利用虚拟网桥进行通信。

  • 类似于把物理主机虚拟为一个交换机,所有桥接设置的虚拟机连接到这个交换机的一个接口上,物理主机也同样插在这个交换机当中,所以所有桥接下的网卡与网卡都是交换模式的,相互可以访问而不干扰。
  • 虚拟机ip地址需要与主机在同一个网段,如果需要联网,则网关与DNS需要与主机网卡一致。

其网络结构如下图所示:

虚拟机的docker和宿主机共用一个网络 虚拟机和宿主机相同ip_桥接模式_04

  • 桥接模式:物理机和虚拟机在网络上是一样的,虚拟系统相当于在此网络下的一个独立系统,需要分配网络的一个独立IP。
  • 连接时指定的桥接到哪个物理网卡,相当于要把虚拟系统接到那个网段的交换机上。