详解 VM 的桥接、仅主机、NAT 以及 LAN 网段

前置知识

理解本文可能需要计算机网络基础知识。

另外有几个要点:

  1. 虚拟机要访问外网,必须(物理上)途径宿主机。

桥接模式(Bridged)

桥接模式是让虚拟机联网的最简单方法。它相当于将虚拟机和宿主机同时接入一个虚拟交换机。所以就宿主机所在的局域网而言,虚拟机在以太网中和其它机器(比如你的手机,另一台电脑)没有什么区别,都是局域网内的一个站点。它的 IP 也和以太网的其它机器处于同一个网段,如果是动态分配的话,也是从同一个 DHCP 服务器获取。

举个例子,你的台式机接入了路由器,路由器的地址为 192.168.0.1,它同时是网关也是 DHCP 服务器。你的台式机开机后会通过广播(255.255.255.255)从 DHCP 服务器(路由器提供)获得 IP 地址:

image:图表显示了 DHCP 客户机和服务器之间的通信序列。图表之后的说明对该序列进行了解释。

分配到 IP 地址 192.168.0.3 以及其它配置信息。

此时你创建了一台虚拟机,宿身于你的台式机(宿主机)中,那么虚拟机开机后,同样广播搜索 DHCP 服务器,并从路由器获取 IP 地址。而虚拟机的上网实际上都要借助台式机的网卡进行,只不过虚拟机有了自己的 MAC(通常可以自己配置),所以能够从宿主机区分开来。

这种方式通过虚拟交换机技术实现。

仅主机模式(Host-Only)

虚拟机之间能通信吗?能!

在仅主机模式中,虚拟机和宿主机之间会创建一个虚拟专用网络 (VPN) 连接。所以对于外部网络(比如宿主机的局域网)的其他机器,虚拟机是隐藏的,而对于其它虚拟机,此虚拟机又与之处于同一网段。

虚拟机的 IP 地址通过虚拟机软件的 DHCP 服务器提供。

虚拟机和宿主机能通信吗?能,需要设置!

当启用_将主机虚拟适配器连接到此网络_之后,相当于允许主机的虚拟网卡和虚拟机的虚拟网卡通信。但是不一定能访问外网,因为主机的虚拟网卡不一定能访问外部网络:

虚拟机可以上外网吗?能,需要设置!

要让仅主机模式下的虚拟机访问外部网络,需要如下条件:

  1. 启用_将主机虚拟适配器连接到此网络_(在 VMware/VBox 设置)

  2. 在宿主机的可访问外网的物理网卡(如本地连接)共享给宿主机上的虚拟网卡(在操作系统中设置)

  3. 所有虚拟网卡的网关设置为宿主机虚拟网卡的地址

网络上许多文章认为仅主机不能访问外网,实际上是可以的,不过设置比较复杂。

网络地址转换模式(NAT)

和仅主机类似,在 NAT 模式中,虚拟机在外部网络是隐藏的。因为 NAT 能够创建一个私有网络,而为了访问外部网络,需要经过 NAT 路由的翻译,如果在宿主机建立 NAT 路由,则宿主机、其它虚拟机在外部网络看来都是同一个站点。NAT 路由则维护一个表,确保外部数据送到对应的主机。这种情况,如果在虚拟机上搭建一个 IP 协议的服务,其端口只能在私有网络中有效。为了暴露到外部网络,需要进行端口转发

NAT 建立私网,其分配 IP 同样通过 DHCP 实现。

这里可能会认为 NAT 和仅主机几乎没有什么区别。其实是不同的。我们看两个表。

仅主机模式网络上的 IP 地址用途

范围 地址用途 示例
net.1 主机 192.168.0.1
net.2–net.127 静态地址 192.168.0.2–192.168.0.127
网络.128–网络.253 由 DHCP 分配 192.168.0.128–192.168.0.253
网络.254 DHCP 服务器 192.168.0.254
网络.255 广播 192.168.0.255

NAT 模式网络上的 IP 地址用途

范围 地址用途 示例
网络.1 主机 192.168.0.1
网络.2 NAT 设备 192.168.0.2
网络.3–网络.127 静态地址 192.168.0.3–192.168.0.127
网络.128–网络.253 由 DHCP 分配 192.168.0.128–192.168.0.253
网络.254 DHCP 服务器 192.168.0.254
网络.255 广播 192.168.0.255

可以看到,在 NAT 模式上,xxx.xxx.xxx.2 地址被用于做 NAT 路由。

在 NAT 模式下,所有网络活动都会经过 NAT 路由,对外暴露为宿主机的网络活动,虚拟机的端口只要在设置中转发到外部固定端口,就能提供服务。

而仅主机模式,虚拟机和外部网络完全隔离开来,仅仅能通过网络共享实现上网,虚拟机无法对外提供任何网络服务。

本地局域网区段

前面的各种模式下,虚拟机之间是不做隔离的。作为补充,VMware 提供了 LAN 区段。

配置了 LAN 区段,通过不同区段的划分,不同区段的虚拟机之间可以实现隔离。但是 LAN 区段上的虚拟机的 IP 地址必须手动分配。

参考资料

  1. 配置桥接模式网络连接 - vmware docs

  2. 配置网络地址转换 - vmware docs

  3. Chapter 6. Virtual Networking (virtualbox.org)