详解 VM 的桥接、仅主机、NAT 以及 LAN 网段
前置知识
理解本文可能需要计算机网络基础知识。
另外有几个要点:
- 虚拟机要访问外网,必须(物理上)途径宿主机。
桥接模式(Bridged)
桥接模式是让虚拟机联网的最简单方法。它相当于将虚拟机和宿主机同时接入一个虚拟交换机。所以就宿主机所在的局域网而言,虚拟机在以太网中和其它机器(比如你的手机,另一台电脑)没有什么区别,都是局域网内的一个站点。它的 IP 也和以太网的其它机器处于同一个网段,如果是动态分配的话,也是从同一个 DHCP 服务器获取。
举个例子,你的台式机接入了路由器,路由器的地址为 192.168.0.1
,它同时是网关也是 DHCP 服务器。你的台式机开机后会通过广播(255.255.255.255
)从 DHCP 服务器(路由器提供)获得 IP 地址:
分配到 IP 地址 192.168.0.3
以及其它配置信息。
此时你创建了一台虚拟机,宿身于你的台式机(宿主机)中,那么虚拟机开机后,同样广播搜索 DHCP 服务器,并从路由器获取 IP 地址。而虚拟机的上网实际上都要借助台式机的网卡进行,只不过虚拟机有了自己的 MAC(通常可以自己配置),所以能够从宿主机区分开来。
这种方式通过虚拟交换机技术实现。
仅主机模式(Host-Only)
虚拟机之间能通信吗?能!
在仅主机模式中,虚拟机和宿主机之间会创建一个虚拟专用网络 (VPN) 连接。所以对于外部网络(比如宿主机的局域网)的其他机器,虚拟机是隐藏的,而对于其它虚拟机,此虚拟机又与之处于同一网段。
虚拟机的 IP 地址通过虚拟机软件的 DHCP 服务器提供。
虚拟机和宿主机能通信吗?能,需要设置!
当启用_将主机虚拟适配器连接到此网络_之后,相当于允许主机的虚拟网卡和虚拟机的虚拟网卡通信。但是不一定能访问外网,因为主机的虚拟网卡不一定能访问外部网络:
虚拟机可以上外网吗?能,需要设置!
要让仅主机模式下的虚拟机访问外部网络,需要如下条件:
-
启用_将主机虚拟适配器连接到此网络_(在 VMware/VBox 设置)
-
在宿主机的可访问外网的物理网卡(如本地连接)共享给宿主机上的虚拟网卡(在操作系统中设置)
-
所有虚拟网卡的网关设置为宿主机虚拟网卡的地址
网络上许多文章认为仅主机不能访问外网,实际上是可以的,不过设置比较复杂。
网络地址转换模式(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 地址必须手动分配。