理解VirtualBox和VMWare的各种网络模式

个人理解,如有错误,欢迎指正。

 

1.    桥接网络

虚拟机的网卡桥接到宿主机的物理网卡,不解释。

 

2.    仅主机(Host-Only)网络

理解VirtualBox和VMWare的各种网络模式

如果你新建一个这样的网络,两样东西会创建:一个是VirtualBox内部的交换机,如图中的"hostonly交换机";另一个是你的宿主机下的虚拟网卡,如上图中的"hostonly网卡"。

windows实际如下图:

理解VirtualBox和VMWare的各种网络模式

hostonly网卡和hostonly交换机实现了一个局域网,虚拟机、宿主机都在同一个网段,可以互相通信。

虚拟机需要这个设置才能访问外网。

注意:

  • 防火墙得合理配置,或者关了,否则大概率是不通的;
  • hostonly交换机默认使能DHCP,各个网卡默认都有IP,乱改会导致不通;
  • VirtualBox可以新建很多这种网络,每个网络都有自己的虚拟网卡和一个对应的hostonly交换机。每个虚拟机都可以选择加入哪个仅主机(Host-Only)网络;

 

3.    网络地址转换(NAT)

理解VirtualBox和VMWare的各种网络模式

这种网络不会创建虚拟网卡,取而代之的是一个守护进程,如上图中的"VirtualBox守护进程";和一个路由器,如上图中的"NAT路由器"。

ubuntu1、ubuntu2位于同一个网段内,它们可以互通。如果没配端口映射,它们不能访问外网;

NAT路由器使用端口映射来实现内网和外网的互通。设置方法如下:

理解VirtualBox和VMWare的各种网络模式

理解VirtualBox和VMWare的各种网络模式
 

NAT转换举例:

ubuntu1-IP:192.168.1.100

ubuntu2-IP:192.168.1.101

远端IP:172.100.11.230

NAT路由器IP:172.100.11.231

NAT路由器端口映射:

规则 方向 IP 源端口 目的端口 备注
规则1 私网->公网 私网IP 192.168.1.100 5000 - 私网到公网,私网IP转成公网IP,源端口转成公网端口,目的端口不管
公网IP 172.100.11.231 6000 -
公网->私网 公网IP 172.100.11.231 - 6000 公网到私网,先看目的端口,如果是6000就转成5000并就发给192.168.1.100,源端口不管
私网IP 192.168.1.100 - 5000
规则2 私网->公网 私网IP 192.168.1.101 5000 - 私网到公网,私网IP转成公网IP,源端口转成公网端口,目的端口不管
公网IP 172.100.11.231 6001 -
公网->私网 公网IP 172.100.11.231 - 6001 公网到私网,先看目的端口,如果是6001就转成5000并就发给192.168.1.101,源端口不管
私网IP 192.168.1.101 - 5000      

 

 

 

 

 

 

 

 

 

 

下表展示了ubuntu1与HTTP服务器的通信过程:

主机 源IP 目的IP 源端口 目的端口 备注
ubuntu1发送 192.168.1.100 127.0.0.1 5000 80 -
ubuntu1的TCP/IP协议栈接收 192.168.1.100 127.0.0.1 5000 80 -
ubuntu1的TCP/IP协议栈发送 192.168.1.100 127.0.0.1 5000 80 ubuntu1的TCP/IP协议栈发现目的IP是本地(127.0.0.1),但是本地进程没有谁在监听80端口,于是只能发往外部
NAT路由器接收 192.168.1.100 127.0.0.1 5000 80 -
NAT路由器发送 127.0.0.1 127.0.0.1 6000 80 私网到公网,私网IP转成公网IP,源端口转成公网端口,目的端口不管
VirtualBox守护进程接收 127.0.0.1 127.0.0.1 6000 80 -
VirtualBox守护进程发送 127.0.0.1 127.0.0.1 6000 80 -
宿主机的TCP/IP协议栈接收 127.0.0.1 127.0.0.1 6000 80 -
宿主机的TCP/IP协议栈发送 127.0.0.1 127.0.0.1 6000 80 这包是发给本地的,那么本地谁在监听80端口?是HTTP服务器
HTTP服务器接收 127.0.0.1 127.0.0.1 6000 80 -
HTTP服务器发送 127.0.0.1 127.0.0.1 80 6000 HTTP服务器给客户端返回数据
宿主机的TCP/IP协议栈接收 127.0.0.1 127.0.0.1 80 6000 -
宿主机的TCP/IP协议栈发送 127.0.0.1 127.0.0.1 80 6000 本地只有VirtualBox守护进程在监听6000端口,所以发给它
VirtualBox守护进程接收 127.0.0.1 127.0.0.1 80 6000 -
VirtualBox守护进程发送 127.0.0.1 127.0.0.1 80 6000 -
NAT路由器接收 127.0.0.1 127.0.0.1 80 6000 -
NAT路由器发送 127.0.0.1 192.168.1.100 80 5000 NAT路由器查询映射表,发现公网127.0.0.1:6000映射到私网192.168.1.100:5000。于是就把目的端口改成5000,目的IP改成192.168.1.100
ubuntu1接收 127.0.0.1 192.168.1.100 80 5000 -

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

注意:

  • 上面这个例子仅仅是虚拟机访问宿主机的本地HTTP服务器,实际上,它还可以通过网卡1、2访问 公网上的HTTP服务器,这就是真正的上网了;
  • NAT映射中,私网端口是可以一样的,公网端口必须唯一;
  • 即便配了端口转发,内网和外网的主机也是不能ping通的,因为ping协议没有端口号,NAT无法转发;
  • 路由器出来的数据照理是要走网卡->TCP/IP协议栈->进程的,但是VirtualBox中的NAT路由器并不是标准的路由器,它的公网端并不是一个以太网接口,而是一个进程通信接口,可以直接和VirtualBox守护进程通信。

 

4.    NAT网络

基本功能跟"网络地址转换(NAT)"是一样的,区别在于它可以有很多个。也就是说,你可以建立很多个NAT路由器,各个虚拟机可以选择加入哪个NAT路由器,然后每个NAT路由器都通过各自的VirtualBox守护进程连接宿主机。

建立方法如下:

理解VirtualBox和VMWare的各种网络模式

理解VirtualBox和VMWare的各种网络模式


5.    内部网络

这个很好理解,就是一根网线把两个虚拟机的网卡连接起来。下图中的intnet就是一根网线,你可以新建很多网线。

理解VirtualBox和VMWare的各种网络模式

注意:

  • 它不能连接到宿主机的任何网卡;
  • 当网线有多根且每根网线的网段都不一样的时候,你需要用VirtualBox的命令行来设置些东西才能让它们都用起来,很麻烦。

 

6.    通用驱动

这个不懂了,从来没用过,以后用到了再写。

 

7.    和VMWare的区别

理解VirtualBox和VMWare的各种网络模式

VMWare VirtualBox 区别
桥接 桥接
仅主机模式+自定义 仅主机(Host-Only)网络
LAN区段 内部网络 VMWare好用,不需要命令行
NAT模式 网络地址转换(NAT) VMWare不像VirtualBox那样用守护进程来通信,而是新建一个虚拟网卡,像真机那样连接

 

 

 

 

 

 

VMWare的拓扑图如下:

理解VirtualBox和VMWare的各种网络模式

上一篇:VirtualBox网络之连接方式


下一篇:使用VirtualBox搭建Alpine虚拟机开发环境