一文解析基于局域网工作模式的虚拟机网络配置

本篇博文将通过解析常见的虚拟机网络工作模式,以及如何进行虚拟机网络配置,以掌握虚拟局域网组网方法,实现虚拟机服务器集群环境的搭建。

更多系列博文:

网站基础之 URL 结构解析

一文解析局域网工作机制和网络地址配置

一文解析基于局域网工作模式的虚拟机网络配置

一文解析服务器域名无法解析 && 连接超时 && 访问受限问题

一文解析网络中的 IP 唯一性

如果文中有表述不正确的地方,望各位大佬不吝指正~~~


Preparation

本文最终目的是掌握常用虚拟机工具 VMWare Workstation Pro && Virtual Box 的网络模式,通过不同网络模式下的网络测试,学会基于常见网络模式的虚拟机(VM)网络配置。帮助你以最佳方式实现虚拟局域网中虚拟机服务器集群环境的搭建。

开始学习之前,你需要对局域网工作机制、虚拟机技术,以及常用虚拟机工具 VMWare Workstation Pro && Virtual Box 有一定的了解:

关于局域网工作机制,以及其网络配置信息,请参读系列博文:【一文解析局域网工作机制和网络地址配置】。

关于虚拟机技术,以及虚拟机工具 VMWare Workstation Pro && Virtual Box 的安装使用,请参读【Linux Installation tutorial】中【Virtual Machine】章节的说明。


VMWare Workstation Pro

和基于物理机的局域网类似,要想实现上网,必须有路由/交换机/网关,以及网络接口卡(NIC,网卡)。

Virtual Box/VMWare Workstation 等虚拟机工具/平台会使用虚拟化技术(Virtualization Technology),为不同的网络模式虚拟出相应的:虚拟网络适配器(Virtual Network Adapter,vAdapter/NIC) && 虚拟交换机(Virtual Switch,vSwitch),以实现组网。

| ================================================== Split Line =============================================== |

vSwitch

VMWare 中支持三种网络模式:Bridged(桥接模式)&& NAT(网络地址转换模式)&& Host-Only(仅主机模式)。

👇👇👇 初始虚拟交换机 👇👇👇

你可以通过启动(Administrator)VMWare,依次点击【选项栏】>>>【编辑】>>> 打开【虚拟网络编辑器(Virtual Network Editor)】中看到:VMnet0(Bridged)、VMnet1(Host-Only)、VMnet8(NAT)

我们所看到的 >>> VMnet0 表示的是用于桥接模式(Bridged)下的虚拟交换机;VMnet1 表示的是用于仅主机模式(Host-Only)下的虚拟交换机;VMnet8 表示的是用于 NAT 模式下的虚拟交换机。

也就是说:初始情况下,针对三种网络模式,VMWARE 自动为我们分别生成了相应的虚拟交换机(VMnet0/VMnet1/VMnet2)。

并且,在【控制面板】 >>> 【网络和 Internet】>>>【网络和共享中心】>>>【更改适配器】>>> 在打开的连接界面中看到 VMware Network Adapter VMnet1/VMnet8 两块虚拟网卡,这两块网卡分别作用于 Host-Only/NAT 模式。

| ================================================== Split Line =============================================== |

👇👇👇 添加虚拟交换机 👇👇👇

事实上,VMWare Workstation Pro 15 安装完成后,物理机中支持添加 20 个虚拟交换机(需要时添加),这些交换机彼此独立,互不连接,每一个虚拟交换机有一个编号:VMnet0 ---- VMnet19

需要注意的是 >>> 新添加的虚拟交换机,网络模式默认且仅为 Host-Only,无法选择 NAT(仅可将一个交换机设置为 NAT 模式),选择 Bridged 时提示没有未连接的主机网络适配器(没有空闲 NIC?!!)。

你需要注意上图中标记配置,仅支持 NAT/Host-Only 下配置,Bridged 模式自动桥接物理机中 NIC 进行自动配置(取决于物理机网关),具体配置见后文网络模式中说明。

对于 Bridged 模式,建议你直接将其自动设置前的【已桥接至(G)】,手动修改为物理机使用的 PIC E 网卡,否则会导致无法上网:

| ================================================== Split Line =============================================== |

👇👇👇 虚拟交换机工作机制 👇👇👇

虚拟机 VM2 和 VM3 连接到 VMnet1 交换机上,此时只要 VM2 和 VM3 计算机的IP地址设置成一个网段就能通信。

虚拟机 VM1 和 VM4 连接到了不同的交换机,即便 IP 地址设置成一个网段也不能通信,连接到不同虚拟交换机的虚拟机之间是不能直接通信的。


vAdapter/vNIC

这一小节,我们来看虚拟局域网中的虚拟网络适配器(Virtual Network Adapter,vAdapter/vNIC):

👇👇👇 物理机中的 vAdapter 👇👇👇

我们知道,初始情况下,VMWare Workstation 会自动生成 Host-Only/NAT 模式所对应的虚拟交换机(VMnet0/VMnet1/VMnet2),同时会生成 Host-Only/NAT 模式对应的两块虚拟网络适配器(VMware Network Adapter VMnet1/VMnet8,虚拟网卡)。

如果不小心将 VMnet1/VMnet8 网卡卸载,可以在【Virtual Network Editor】中点击【还原默认设置】进行恢复。

为什么没有 VMware Network Adapter VMnet0 呢?!!这就涉及到后文 Bridged 网络模式了。

| ================================================== Split Line =============================================== |

👇👇👇 物理机中的 vNIC 👇👇👇

每个虚拟机(VM)中都应该至少有一个虚拟网卡(vNIC/vAdapter),以提供连网功能(VM 之间,VM 和 Host/LAN 之间)。

你可以通过启动 VMWare 中某个虚拟机,依次点击【编辑虚拟机设置】>>>【硬件】>>> 【网络适配器】,以设置 VM 虚拟机中虚拟网络适配器想要采用的网络模式:


VMWARE 网络模式

我们知道,VMWare 中支持三种网络模式:

  • Bridged(桥接模式)
  • NAT(网络地址转换模式)
  • Host-Only(仅主机模式)

下面分别来看这三种网络模式的组网原理以及设置方法:

| ================================================== Split Line =============================================== |

Bridged-桥接模式

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

网桥直连的是 主机网卡(NIC),故不用在主机上另外虚拟网卡,这就是 VMWare Workstation 没有虚拟 VMware Network Adapter VMnet0 的原因。

[1] >>> 组网原理说明

在桥接的作用下, 类似于 把 物理主机 虚拟为一个交换机,所有设置桥接模式的虚拟机都将连接到这个交换机的一个接口上,同样物理主机也插在这个交换机中。故,桥接下的网卡与网卡都是交换模式的, 可以相互访问而不干扰。

↓↓↓↓↓↓ 关于 IP && GATEWAY && DNS ↓↓↓↓↓↓

桥接模式下,虚拟机 IP 地址需要与主机在同一个网段,网关与 DNS 需要与主机网卡一致,依赖于主机网关。

网络结构示意图如下:

事实上,可以看出,桥接模式下的虚拟机,可以等同于主机所在局域网内的其它物理主机设备。

| ================================================== Split Line =============================================== |

[2] >>> 设置方法

设置要点:虚拟机需要与主机在同一网段,并占用单独 IP,依赖主机局域网网卡。

Begin

……

1)设置虚拟机网络模式

打开 VMWare 中待设定虚拟机,依次点击【编辑虚拟机设置】>>>【硬件】>>> 【网络适配器】>>> 选择 “桥接模式”。

2)查看 主机 IP && 子网掩码(NETMASK)&& 网关(GATEWAY)&& DNS 信息

既然虚拟机(VM)依赖主机局域网网卡,故设置前需要明确主机物理 NIC 卡的信息(命令行查看):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# CMD/PowerShell 中:
> ipconfig /all
...
以太网适配器 以太网:

连接特定的 DNS 后缀 . . . . . . . : lan
描述. . . . . . . . . . . . . . . : Realtek PCIe GbE Family Controller
DHCP 已启用 . . . . . . . . . . . : 是
自动配置已启用. . . . . . . . . . : 是
IPv4 地址 . . . . . . . . . . . . : 192.168.2.217(首选)
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.2.1
DHCP 服务器 . . . . . . . . . . . : 192.168.2.1
DNS 服务器 . . . . . . . . . . . : 192.168.2.1
...

你也可以通过【控制面板】 >>> 【网络和 Internet】>>>【网络和共享中心】>>>【更改适配器】>>> 在打开的【网络连接】界面中,双击目标网卡(LAN/WLAN)>>> 查看【详细信息】,即可查看到当前网卡的配置信息。

3)配置虚拟机中虚拟网卡(vAdapter/vNIC)的网络信息

通过上面主机适配器网络信息可知 >>> 当前局域网网段为:192.168.2.0,你可以在其中为虚拟机选择合适 IP 地址(要避开主机和网关 IP 地址);网关地址:192.168.2.1;子网掩码:255.255.255.0;DNS:192.168.2.1

关于虚拟机中网络的配置方法,取决于虚拟机中操作系统(CentOS/Ubuntu/Windows),可参见 | >>> CentOS Server: Quick Configuration Guide && Ubuntu Server: Quick Configuration Guide && Windows IP 地址更换 <<< | 中关于网络配置的说明。

4)连通性测试

1
2
3
4
5
# 1. 虚拟机外网测试 >>> 虚拟机(VM)中执行如下:
$ ping www.baidu.com


# 2. 查看是否能够进行信息交换 >>> 主机 SSH 工具(Xshell/Putty)远程连接虚拟机(VM)

如果当前局域网网络 IP 资源很缺少,或者 IP 管理比较严格的话,那桥接模式就不适用(占用主机网段 IP 资源)。

这时就需要 >>> NAT(Network Address Translation)模式了。

NAT-网络地址转换模式

NAT 模式,借助虚拟 NAT 设备和虚拟 DHCP 服务器,使得虚拟机可以联网。

| ================================================== Split Line =============================================== |

👇👇👇 关于 NAT 设备和 DHCP 服务器 👇👇👇

↓↓↓↓↓↓ NAT(Network Address Translation,网络地址转换)↓↓↓↓↓↓

当专用网内部主机已经分配到了本地 IP 地址(私有 IP),但现在又想和因特网上的主机通信(并不需要加密)时,可在专用网连接到因特网(公网 IP)的路由器上安装 NAT 软件。该路由称为 NAT 路由器,它至少有一个有效的外部全球 IP 地址(共有地址),以支持访问 Internet。

所有使用私网 IP 地址的主机在和外界通信时,都要在 NAT 路由器上将其本地地址转换成全球公有 IP 地址,才能和因特网连接。实现了通过使用少量的公有 IP 地址代表较多的私有 IP 地址的方式,将有助于减缓可用的 IP 地址空间的枯竭。

例如 >>> NAT 将虚机所在网段的私有 IP(例如 10.15.0.2)转换为宿主机的所在网段的 IP( 例如 192.168.31.15 )然后通过宿主机来访问互联网,当然宿主机所在网段也是私有的,它会继续向上层(比如 家庭/公司路由器)请求 NAT,一层一层转换,直到数据传送到公网可见的网络设备。

↓↓↓↓↓↓ DHCP(Dynamic Host Configuration Protocol,动态主机配置协议) ↓↓↓↓↓↓

是指由 DHCP 服务器控制一段 IP 地址范围, 客户机登录服务器时就可以自动获得服务器分配的 IP 地址和子网掩码。担任 DHCP 服务器的计算机需要安装 TCP/IP 协议, 并为其设置静态 IP 地址、子网掩码、默认网关等内容。

局域网内主机开启 DHCP 功能后,路由器会根据主机所在局域网的 IP 网段(DHCP)自动分配 IP 地址, 不用自己去设置 IP 地址;关闭后则需要自己手动去设置 IP 地址。

| ================================================== Split Line =============================================== |

[1] >>> 组网原理说明

在 NAT 模式中,主机网卡直接与虚拟 NAT 设备相连,然后虚拟 NAT 设备与虚拟 DHCP 服务器一起连接在虚拟交换机 VMnet8 上,这样就 实现了虚拟机联网。主机 VMnet8 虚拟网卡也接在虚拟交换机 VMnet8 上,是为了 实现主机与虚拟机之间通信。

其网络结构示意图如下:

事实上,NAT 模式下的虚拟机,等同于共享主机的 IP 地址。虚拟机通过主机 IP 访问外网,但外面的网络不能访问虚拟机通信(虚拟机是隐藏的)。

| ================================================== Split Line =============================================== |

[2] >>> 设置方法

设置要点:主机 VMware Network Adapter VMnet8 虚拟网卡与虚拟机在同一网段,VMnet8 不用设置网关。

Begin

……

1)设置虚拟机网络模式

打开 VMWare 中待设定虚拟机,依次点击【编辑虚拟机设置】>>>【硬件】>>> 【网络适配器】>>> 选择 “NAT 模式”。

2)配置虚拟 NAT 设备(看作安装于 VMnet8 vSwitch 上)

由于 NAT 的存在(可对任意内网 IP 进行地址转换),虚拟机所在的网段可以随意设置,不需要和真实主机在同一网段。

假设主机环境如下:

1
2
3
4
IPv4 地址 : 192.168.2.217
子网掩码 : 255.255.252.0
默认网关. : 192.168.2.1
DNS 服务器: 192.168.2.1

通过 【编辑】>>>【虚拟网络编辑器】>>>【VMnet8 NAT 模式】菜单,打开 VMnet8 虚拟交换机配置,可设置连接到 VMnet8 下的虚拟机的网段:192.168.153.0 和子网掩码:255.255.255.0(修改后点击应用,会自动同步到其 NAT 和 DHCP 设置中):

对于 VMnet8 虚拟交换机的网关:192.168.153.2,你需要在【NAT 设置】中进行配置:

3)配置虚拟 DHCP 服务器

然后设置虚拟 DHCP 服务器 IP 地址段 192.168.153.128 ~ 192.168.153.254 用于给虚拟机动态分配 IP:

一般虚拟机中使用自动分配 IP 时会取得第 1 个地址,即 192.168.153.128;多个虚拟机连接时会依次分配 192.168.153.129/….。

4)配置虚拟机中虚拟网卡(vAdapter/vNIC)的网络信息

默认情况下,虚拟机中网卡采用 DHCP 动态获取 IP 的方式进行上网。

你也可以为连接到 VMnet8 虚拟交换机下虚拟机设置静态 IP,设置的静态 IP 地址在不在 DHCP 允许的地址范围之内均可,同一网段即可。

关于虚拟机中网络的配置方法,取决于虚拟机中操作系统(CentOS/Ubuntu/Windows),可参见 | >>> CentOS Server: Quick Configuration Guide && Ubuntu Server: Quick Configuration Guide && Windows IP 地址更换 <<< | 中关于网络配置的说明。

至此,虚拟机即可 PING 通主机,或 PING 通外网百度地址。

5)配置主机上的 VMware Network Adapter VMnet8 虚拟网卡,以支持主机 PING 通虚拟机

主机访问虚拟机是通过 VMware Network Adapter VMnet8 来进行的,所以要对 vmnet8 vNIC 进行配置,VMnet8 vNIC 与虚拟机保持在一个网段即可(网关不用设置):

至此,就配置完成了~~~

5)连通性测试

1
2
3
4
5
# 1. 虚拟机外网测试 >>> 虚拟机(VM)中执行如下:
$ ping www.baidu.com


# 2. 查看是否能够进行信息交换 >>> 主机 SSH 工具(Xshell/Putty)远程连接虚拟机(VM)

| ================================================== Split Line =============================================== |

↓↓↓↓↓↓ 验证 VMware Network Adapter VMnet8 虚拟网卡作用 ↓↓↓↓↓↓

可以通过【控制面板】 >>> 【网络和 Internet】>>>【网络和共享中心】>>>【更改适配器】>>> 在打开的【网络连接】界面中,右键 VMware Network Adapter VMnet8 虚拟网卡 >>>【禁用】。

然后使用虚拟机 PING 主机以及百度(正常):

主机中,PING 虚拟机,以及进行 SSH 连接测试,发现无法连接。

故,NAT 模式下,使用虚拟 NAT 设备和虚拟 DHCP 服务器来让虚拟机联网;而 VMnet8 vNIC 是用来主机与虚拟机通信的。


Host Only-仅主机模式

Host-Only 模式是出于安全考虑,将虚拟机与外网隔开,使得 VMnet1 虚拟交换机下的虚拟机成为一个独立的系统,只与主机相互通讯。

[1] >>> 组网原理说明

Host-Only 模式相当于 >>> NAT 模式删了 NAT 设备, 用 VMnet1 虚拟网卡连接 VMnet1 虚拟交换机来与虚拟机通信的,当然无法上网。

其网络结构示意图如下:

要使虚拟机能上网, 可以把主机的 NIC 网卡共享给 VMware Network Adapter VMnet1 网卡,以实现虚拟机联网(如果这样的话,推荐使用 NAT 模式)。

| ================================================== Split Line =============================================== |

[2] >>> 设置方法

设置要点:主机 VMware Network Adapter VMnet1 虚拟网卡与虚拟机在同一网段,可共享主机网卡上网(推荐 NAT)。

Begin

……

1)设置虚拟机网络模式

打开 VMWare 中待设定虚拟机,依次点击【编辑虚拟机设置】>>>【硬件】>>> 【网络适配器】>>> 选择 “仅主机模式”。

2)配置 VMnet1 虚拟交换机网段,以及虚拟 DHCP 服务器

通过 【编辑】>>>【虚拟网络编辑器】>>>【VMnet1 Host-Only 模式】菜单,打开 VMnet1 虚拟交换机配置,可设置连接到 VMnet1 下的虚拟机的网段:192.168.237.0(此网段可以和主机不在一个网段)和子网掩码:255.255.255.0(修改后点击应用,会自动同步到其 DHCP 设置中):

同时,可以设置虚拟 DHCP 服务器 IP 地址段 192.168.237.128 ~ 192.168.237.254 用于给虚拟机动态分配 IP。

可见,虚拟交换机配置中没有网关,因为 Host-Only 模式不允许你连接到 Host-Only 网络以外的任何设备。

3)配置虚拟机中虚拟网卡(vAdapter/vNIC)的网络信息

默认情况下,虚拟机中网卡采用 DHCP 动态获取 IP。

你也可以为连接到 VMnet1 虚拟交换机下虚拟机设置静态 IP,设置的静态 IP 地址在不在 DHCP 允许的地址范围之内均可,同一网段即可。

关于虚拟机中网络的配置方法,取决于虚拟机中操作系统(CentOS/Ubuntu/Windows),可参见 | >>> CentOS Server: Quick Configuration Guide && Ubuntu Server: Quick Configuration Guide && Windows IP 地址更换 <<< | 中关于网络配置的说明。

4)配置主机上的 VMware Network Adapter VMnet1 虚拟网卡,以配置静态 IP

默认情况下,主机上的虚拟 VMnet1 自动获取 IP 地址:

1
2
3
4
5
6
7
8
9
10
以太网适配器 VMware Network Adapter VMnet1:

连接特定的 DNS 后缀 . . . . . . . :
描述. . . . . . . . . . . . . . . : VMware Virtual Ethernet Adapter for VMnet1
DHCP 已启用 . . . . . . . . . . . : 是
自动配置已启用. . . . . . . . . . : 是
IPv4 地址 . . . . . . . . . . . . : 192.168.237.1(首选)
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . :
DHCP 服务器 . . . . . . . . . . . : 192.168.237.254

你也可以为主机上的虚拟网卡 VMware Network Adapter VMnet1 配置一个静态 IP,如下:

至此,主机和虚拟机之间已经可以相互通信了~~~

| ================================================== Split Line =============================================== |

如果配置完成后,发现虚拟机无法 PING 通主机,很大概率是主机防火墙受限问题。

你可以通过【控制面板】>>>【系统和安全】>>>【Windows Defender防火墙】>>>【高级设置】>>> 打开 “高级安全 Windows Defender 防火墙” 界面,做如下设置:

需要根据你当前链接网络的类型(专用/公用),来允许哪个网络的【入站连接】。


5)共享主机网卡上网(推荐更换 NAT 网络模式)

Host-Only 模式下,可以通过共享主机网卡给 VMware Network Adapter VMnet1 进行上网,具体操作如下:

确认后,会被强制将 VMnet1 的 IP 设置成 192.168.137.1 作为路由,然后需要调整虚拟机的 VMnet1 交换机网段和 DHCP 的起始地址。

你也可以为连接到 VMnet1 虚拟交换机下虚拟机设置静态 IP,设置的静态 IP 地址在不在 DHCP 允许的地址范围之内均可,同一网段即可。


LAN 区段

LAN 区段相当于说模拟出一个交换机或者集线器出来,把不同虚拟机连接起来,构建成一个独立的局域网络。

[1] >>> 组网原理说明

LAN 区段,与物理机主机不进行数据交流,与外网也不进行数据交流。

其网络结构示意图如下:

LAN 区段,没有提供 DHCP 功能,需要手工配置 IP,或者单独配置 DHCP 服务器。

| ================================================== Split Line =============================================== |

[2] >>> 设置方法

设置要点:要组成的 LAN 的多台虚拟机必须选择同一个 LAN 区段,IP 在同一子网。

1)设置虚拟机网络模式

打开 VMWare 中待设定虚拟机,依次点击【编辑虚拟机设置】>>>【硬件】>>> 【网络适配器】>>> 选择 “LAN 区段”。

2)配置虚拟机中虚拟网卡(vAdapter/vNIC)的网络信息

没有虚拟 DHCP 服务器,你需要为连接到 LAN 网段下的虚拟机设置静态 IP,位于同一网段即可。

关于虚拟机中网络的配置方法,取决于虚拟机中操作系统(CentOS/Ubuntu/Windows),可参见 | >>> CentOS Server: Quick Configuration Guide && Ubuntu Server: Quick Configuration Guide && Windows IP 地址更换 <<< | 中关于网络配置的说明。

至此,LAN 网段下基于局域网的虚拟机环境就搭建好了~~~


Virtual Box

和基于物理机的局域网类似,要想实现上网,必须有路由/交换机/网关,以及网络接口卡(NIC,网卡)。

Virtual Box/VMWare Workstation 等虚拟机工具/平台会使用虚拟化技术(Virtualization Technology),为不同的网络模式虚拟出相应的:虚拟网络适配器(Virtual Network Adapter,vAdapter/NIC) && 虚拟交换机(vSwitch),以实现组网。

| ================================================== Split Line =============================================== |

Virtual Box 中最有趣的特性之一,就是支持多种网络模式:

Not Attached(无连接模式)&& NAT(网络地址转换模式)&& NAT Network(NAT 网络模式)&& Bridged(桥接模式)&& Host-Only(仅主机模式)&& Internal Network(内部网络模式)&& Generic Driver(通用驱动模式)。

Host vAdapter

关于主机上的虚拟网络适配器(虚拟网卡):

👇👇👇 初始虚拟网络适配器 👇👇👇

你可以通过启动 VBox,依次点击【File (管理)】>>>【Tools (工具)】>>> 打开【Network Manager (网络管理)】界面,可以看到:VirtualBox Host-Only Ethernet Adapter

我们所看到的 >>> VirtualBox Host-Only Ethernet Adapter 表示的是用于仅主机模式(Host-Only)下的虚拟网络适配器。

也就是说,初始情况下,针对仅主机网络模式,VBox 自动为宿主物理机(Host)生成一个虚拟网络适配器(虚拟网卡)。

并且,在【控制面板】 >>> 【网络和 Internet】>>>【网络和共享中心】>>>【更改适配器】>>> 在打开的连接界面中看到 VirtualBox Host-Only Ethernet Adapter 虚拟网卡,该网卡作用于 VBox 的 Host-Only 模式。

| ================================================== Split Line =============================================== |

👇👇👇 创建虚拟网络 👇👇👇

事实上,【Network Manager (网络管理)】界面中支持我们添加/创建一个 Host-Only/NAT Network 模式的网络。

↓↓↓↓↓↓ Create A Host-Only Network ↓↓↓↓↓↓

可以看见,添加 Host-Only vAdapter 后,可以选择适配器的 IP 地址配置方式(自动 [Automatically]/手动 [Manually]),还可以通过勾选适当的复选框来启用或禁用 Host-Only 网络模式下 DHCP 服务器。

如果不小心将默认的 VirtualBox Host-Only Ethernet Adapter 网卡卸载,可以通过 Configure Adapter Automatically(自动配置适配器),然后点击 Apply(应用)进行恢复。

↓↓↓↓↓↓ Create A NAT Network ↓↓↓↓↓↓

可以看见,添加 NAT Network 后,可以设置当前局域网所属的网段、子网掩码;可以通过勾选适当的复选框来启用或禁用 NAT Network 网络模式下 DHCP 服务器;还支持配置端口映射。

| ================================================== Split Line =============================================== |

尽管这里没有提供其它网络模式(NAT/Bridged/…)的创建界面,但当你为某个特定的虚拟机设定了其它的网络模式后,也会自动为你创建相应的网络,只是当前界面不可见。

你可以参照后文关于 VBox 的网络模式说明,思考一下这里为什么没有提供其它网络模式的设置界面?!!


Virtual Network Adapter

Virtual Box 中,每个创建好的 VBox 虚拟机(VM)最多可以使用 8 个虚拟虚拟网卡(vNIC)或虚拟 网络适配器(Virtual Network Adapter)。

其中,4 个 vnAdapter 可以在 VirtualBox 中虚拟机的 Settings(设置)界面进行配置:

虚拟机创建之后,默认情况下会启用(Enable Network Adapter)一个虚拟网络适配器(Adapter 1),其默认选用的是 NAT 模式(非 NAT Network 模式)。对于其它的虚拟网络适配器(Adapter 1/2/3/4),你可以通过勾选前面的 Enable Network Adapter 复选框来开启相应的虚拟网卡。

还支持点击【Advanced (高级)】,来展开高级 VirtualBox 网络适配器设置:

| ================================================== Split Line =============================================== |

↓↓↓↓↓↓ 关于网络适配器高级设置 ↓↓↓↓↓↓

[1] >>> Adapter Type

虚拟网络适配器是一个软件模拟的物理设备,VirtualBox 中支持 6 种虚拟适配器类型:

  1. AMD PCnet-PCI II(Am79C970A):基于 AMD 芯片,可以在很多情况下使用;对于 Windows 用户,该虚拟网络适配器可以用于旧版本的 Windows 系统(Windows 2000),较新版本的 Windows 7/8/10 不包含这种适配器的内置驱动程序。

  2. AMD PCnet-FAST III(Am79C973):基于 AMD 芯片,被几乎所有可以在 VirtualBox 上运行的操作系统所支持;GRUB(启动加载器)可以使用这个适配器进行网络启动。

  3. Intel PRO/1000 MT Desktop(82540EM):默认适配器;可以与 Windows Vista 和较新的 Windows 版本完美配合;大多数的 Linux 发行版也支持这个适配器。

  4. Intel PRO/1000 T Server(82543GC):Windows XP 无需安装额外的驱动程序就能识别该适配器。

  5. Intel PRO/1000 MT Server(82545EM):对于从其他平台导入 OVF 模板很有用,可以加速导入过程。

  6. Paravirtualized Network(virtio-net):特殊情况;客户操作系统必须为虚拟化环境提供一个特殊的软件接口,而不是将大多数操作系统支持的网络硬件虚拟化。这种方法允许你避免网络硬件仿真的复杂性,因此可以提高网络性能。

[2] >>> Promiscuous Mode

混杂模式(Promiscuous Mode),允许网络适配器中转所有接收到的流量,无论流量是寻址哪个适配器的。

在正常模式下,网络适配器只接收包括该特定网络适配器的 MAC 地址作为目标地址的帧。在正常模式下,被寻址到与所选适配卡的MAC地址不同的 MAC 地址的帧(当流量不是广播时)会被丢弃。

混杂模式使一个物理网络适配器有多个 MAC 地址成为可能,允许所有传入的流量通过主机的物理网络适配器,到达虚拟机的虚拟网络适配器。大多数无线网络适配器不支持混杂模式。

你可以在 VirtualBox 网络设置中启用混杂模式,支持三个选项:

  • Deny:拒绝(正常模式),默认设置;任何不以虚拟机的虚拟网卡为目的地的流量都将被屏蔽;
  • Allow VMs:除了去向或来自于虚拟机的流量,其他流量都将被屏蔽;
  • Allow ALL:没有限制,虚拟机的网卡可以看到所有进来、出去的流量。

[3] >>> MAC Address

网络适配器 MAC 地址设置,可以通过后面的随机按钮为当前虚拟适配器随机一个 MAC 地址。

[4] >>> Cable Connected

电缆连接(Cable Connected),通过 “勾选/不勾选“ 该复选框以模拟拔掉网线的情况。


VBox 网络模式

我们知道,VMWare 中支持三种网络模式:

  • Not Attached(无连接模式)
  • NAT(网络地址转换模式)
  • NAT Network(NAT 网络模式)
  • Bridged(桥接模式)
  • Host-Only(仅主机模式)
  • Internal Network(内部网络模式)
  • Generic Driver(通用驱动模式)

下面分别来看这三种网络模式的组网原理以及设置方法:

| ================================================== Split Line =============================================== |

Not attached-无连接模式

Not attached-无连接模式,在 短时间内启用这种网络模式等同于拔掉以太网网线的作用,主要是在进行网络测试时使用。

使用场景 >>> 通过 Not attached,你可以检查当前网络模式下的 DHCP 客户端是否能正确获得 IP 地址;应用程序是否能在连接中断或丢包后恢复下载,等等。

当虚拟机处于运行状态时,你可以 “勾选/不勾选” 【电缆连接(Cable Connected)】复选框,来达到类似 Not Attached 网络模式的效果。不要忘记点击 “确定” 来使虚拟机网络配置的生效。


NAT-网络地址转换模式

NAT 模式,是 VBox 虚拟网络适配器的默认启用模式,对于只使用虚拟机访问互联网的用户来说是足够的。

VBox 的 NAT 模式,借助虚拟 NAT 设备和虚拟 DHCP 服务器,使得虚拟机可以访问物理局域网(LAN)中的宿主机,以及联网。

| ================================================== Split Line =============================================== |

👇👇👇 关于 NAT 设备和 DHCP 服务器 👇👇👇

↓↓↓↓↓↓ NAT(Network Address Translation,网络地址转换)↓↓↓↓↓↓

当专用网内部主机已经分配到了本地 IP 地址(私有 IP),但现在又想和因特网上的主机通信(并不需要加密)时,可在专用网连接到因特网(公网 IP)的路由器上安装 NAT 软件。该路由称为 NAT 路由器,它至少有一个有效的外部全球 IP 地址(共有地址),以支持访问 Internet。

所有使用私网 IP 地址的主机在和外界通信时,都要在 NAT 路由器上将其本地地址转换成全球公有 IP 地址,才能和因特网连接。实现了通过使用少量的公有 IP 地址代表较多的私有 IP 地址的方式,将有助于减缓可用的 IP 地址空间的枯竭。

例如 >>> NAT 将虚机所在网段的私有 IP(例如 10.15.0.2)转换为宿主机的所在网段的 IP( 例如 192.168.31.15 )然后通过宿主机来访问互联网,当然宿主机所在网段也是私有的,它会继续向上层(比如 家庭/公司路由器)请求 NAT,一层一层转换,直到数据传送到公网可见的网络设备。

↓↓↓↓↓↓ DHCP(Dynamic Host Configuration Protocol,动态主机配置协议) ↓↓↓↓↓↓

是指由 DHCP 服务器控制一段 IP 地址范围, 客户机登录服务器时就可以自动获得服务器分配的 IP 地址和子网掩码。担任 DHCP 服务器的计算机需要安装 TCP/IP 协议, 并为其设置静态 IP 地址、子网掩码、默认网关等内容。

局域网内主机开启 DHCP 功能后,路由器会根据主机所在局域网的 IP 网段(DHCP)自动分配 IP 地址, 不用自己去设置 IP 地址;关闭后则需要自己手动去设置 IP 地址。

| ================================================== Split Line =============================================== |

[1] >>> 组网原理说明

VirtualBox 有一个内置的 DHCP 服务器和 NAT 引擎(设备)。

在 NAT 模式中,主机网卡直接与虚拟 NAT 设备相连,然后每一个虚拟机将接在一个隔离网络的虚拟 NAT 设备后通过 DHCP 服务器获取 IP,这样就 实现了虚拟机联网。

其网络结构示意图如下:

不同于 VMWare Workstation,虚拟机(VM)之间是没有虚拟交换机,和虚拟 NAT 设备处于隔离网络中,故 VM 之间无法通信。

NAT 模式下的虚拟机,等同于共享主机的 IP 地址。虚拟机通过主机 IP 访问外网,但外面的网络不能访问虚拟机通信(虚拟机是隐藏的)。

请注意,Virtual Box 中的 NAT 模式和 VMWare 中的 NAT 模式是不同的!!!


[2] >>> 设置方法

NAT 模式下,使用的虚拟 DHCP 服务器的默认地址是 10.0.2.2,这也是虚拟机的默认网关 IP 地址,网络掩码是 255.255.255.0

Virtual Box 中,如果将多个虚拟机的网络适配器(虚拟网卡)配置为 NAT 模式,多个虚拟机的 IP 地址相同。

每个虚拟机将在一个隔离网络的虚拟 NAT 设备后获得一个 10.0.2.15 的 IP 地址,每个虚拟机的默认网关是 10.0.2.2。

如果你想为虚拟机(VM)配置静态 IP(实际上没有意义,虚拟机之间隔离),可以将 DNS 设置为宿主机网关或第三方公共 DNS 服务器地址,例如:8.8.8.8。

↓↓↓↓↓↓ 关于网络连通性 ↓↓↓↓↓↓

我们知道 NAT 模式下,虚拟机(VM)之间无法相互访问,虚拟机可以访问宿主机以及物理局域网(LAN)中的其他服务器和 Internet。

想要主机可以访问虚拟机,需要设置端口转发(Port Forwarding):

我们将虚拟机(10.0.2.15)的 22 端口绑定在主机(127.0.0.1)的 2222 端口上。也就是,当你使用 XShell 远程登录虚拟机的 22 端口的时候,需要写的 ip 地址是主机的 IP 地址(127.0.0.1),而不是虚拟机的 ip 地址,写的端口号是 2222,而不是 22。

当使用 XShell 连接主机的 2222 端口的时候,会转发到虚拟机的 22 端口上。


NAT Network-模式

NAT Network(NAT 网络模式),和前面 NAT(网络地址转换)模式其它完全相同,除了 NAT Network 在虚拟机之间添加了一个公共网关(交换机)。

[1] >>> 组网原理说明

在 NAT Network 模式中,主机网卡直接与虚拟 NAT 设备相连,然后虚拟 NAT 设备与虚拟 DHCP 服务器一起连接在一个虚拟交换机上,这样就 实现了虚拟机联网。

其网络结构示意图如下:

区别于 NAT 模式中每一个虚拟机直接接在一个隔离网络的虚拟 NAT 设备,而是都连接到了公共网关(交换机)上,故 VM 之间支持相互通信。


[2] >>> 设置方法

NAT 网络模式的默认网段是 10.0.2.0/24,默认的网关 IP 地址是 10.0.2.1,DHCP 服务器的 IP 地址默认是 10.0.2.3

需要注意的是,NAT 网络模式下,你不能改变网关的 IP 地址,也不能改变由 DHCP 服务器分配的 IP 地址范围。

如果你想为虚拟机(VM)配置静态 IP,可以选择去【Network Manager】中修改网段信息,是否开启 DHCP 支持。关于虚拟机中网络的配置方法,取决于虚拟机中操作系统(CentOS/Ubuntu/Windows),可参见 | >>> CentOS Server: Quick Configuration Guide && Ubuntu Server: Quick Configuration Guide && Windows IP 地址更换 <<< | 中关于网络配置的说明。

↓↓↓↓↓↓ 关于网络连通性 ↓↓↓↓↓↓

我们知道 NAT 模式下,虚拟机(VM)之间可以相互访问,虚拟机可以访问宿主机以及物理局域网(LAN)中的其他服务器和 Internet。

想要主机可以访问虚拟机,也需要设置端口转发(Port Forwarding),具体设置方法完全相同(Network Manager)。只是设置位置不同:


Bridged-桥接模式

Bridged 模式下,将虚拟机的虚拟网络适配器与 VirtualBox 主机的物理网络适配器通过虚拟网桥相连,使用主机网络接口进行网络连接。

虚拟网桥,是一个特殊的网络过滤器驱动程序,以过滤来自主机的物理网络适配器的数据。

和 VMWare Workstation 中桥接模式的不同在于,虚拟机没有连接到一个交换机上,而是直接连接物理网卡,但使用上完全相同。

其网络结构示意图如下:

使用和虚拟机中 IP 配置方法见 VMWare Workstation 中桥接模式即可,这里不再进行赘述。


Host Only-仅主机模式

VBox 中的 Host Only-仅主机模式模式,和 VMWare Workstation 中的 Host Only 模式完全一样,可参看上文。

其网络结构示意图如下:


Internal Network-内部网络模式

Internal Network 网络模式,相当于说模拟出一个交换机或者集线器出来,把不同虚拟机连接起来,构建成一个独立的、隔离的局域网络。

Internal Network 模式等同于 VMWare Workstation 中的 LAN 区段模式(见上文)。

在这个隔离的虚拟网络中,虚拟机之间可以互相通信,但是不能和 Virtual Box 中的宿主机通信,不能和宿主机所在的局域网中的其他主机通信,也不能和外部网络通信。

| ================================================== Split Line =============================================== |

👇👇👇 如果想要访问外网,你可以这么搭建 👇👇👇

假设创建了 3 个虚拟机,每个虚拟机都有一个连接到 Internal Network 的虚拟网络适配器(适配器 1)。你应该手动设置虚拟网络适配器中的 IP 地址。

其中,虚拟机(VM1)配置有 2 个虚拟网络适配器,第 2 个网络适配器被配置为在 NAT 模式下运行。这样 VM1 虚拟机就被配置为一个路由器(创建路由器的最佳解决方案之一是安装 Linux 和配置 IPTABLES,但在 VirtualBox 网络测试的情况下,第一次可以使用更简单的路由解决方案)。

如果 VM1 运行 Internal Network 模式下的网络适配器的 IP 地址在 VM2 和 VM3 的网络设置中被设置为网关, 那么 VM2 和 VM3 就可以访问外部网络。

↓↓↓↓↓↓ 具体网络配置如下 ↓↓↓↓↓↓

VM1:IP地址-192.168.23.1(Internal Network);10.0.2.15(NAT 模式),网关 10.0.2.2(Virtualbox 内置 NAT 设备的 IP 地址);

VM2:IP地址:192.168.23.2(Internal Network),网关-192.168.23.1;

VM3:IP地址:192.168.23.3(Internal Network),网关-192.168.23.1;

详见下图:

注意:你可以部署这样的虚拟基础设施来进行防火墙规则测试。但在连接外部网络时,更好的方案是为 VM1 的第 2 个虚拟网络适配器设置桥接模式而不是 NAT 模式。


Network Mode Compare

为了方便,对 Virtualbox 支持的各种网络模式进行总结:


NAT + Host-Only 模式

很多时候,我们想要搭建一个基于 VirtualBox + CentOS7 的分布式集群测试环境。环境要求:

  • 虚拟机之间支持互相访问,静态 IP;
  • 主机和虚拟机之间连通,主机可 SSH 登录集群服务器种任何一台虚拟机;
  • 任意一台虚拟机可以访问 Internet,以安装某些软件包。

最好的办法就是使用两块网卡:1)一块采用 NAT 模式,以支持上网;2)一块采用 Host-0nly 模式,以提供主机和虚拟机之间的相互通信。


Port Forwarding

Port Forwarding(端口转发),将寻址向某个 IP 地址和端口的流量转发到另一个不同的 IP 地址和端口的处理操作。服务器和其他路由设备上可以使用专门应用程序来实现端口转发。

端口转发最常用的一个应用场景 >>> 为隐藏在 NAT 后边的特定的网络设备提供外部网络访问入口。

↓↓↓↓↓↓ 端口转发全过程描述 ↓↓↓↓↓↓

配置完端口转发规则后,客户端可以通过连接路由器(或主机)外部 IP 地址和专用端口来访问特定的服务。

网络包会首先被路由器上的一个应用程序所截获,然后这个应用程序会读取网络包头中的目的 IP 地址和端口号。如果包头中目的 IP 地址和端口号的组合能与端口转发规则集合中的某个条件匹配上,路由器程序就会重写包头中的信息(IP 地址和/或端口号),并根据端口转发规则将包/段发送给另一个网络接口。

默认情况下,VirtualBox 宿主机和其他局域网中的主机不能访问网络适配器被设置成 NAT 或 NAT Network 模式的 VirtualBox 虚拟机,但是 VirutalBox 提供了内置的端口转发特性支持了这种类型的访问。


Reff Reading

问题总结以及其解决思路描述:

[1] >>> virbr0/virbr0-nic

↓↓↓↓↓↓ 问题描述 ↓↓↓↓↓↓

CentOS7 Desktop 中查看网卡信息时,发现多了一块 virbr0 网卡:

1
2
3
4
5
6
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:e5:ff:f3 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
link/ether 52:54:00:e5:ff:f3 brd ff:ff:ff:ff:ff:ff

完全很困惑?!!virbr0 网卡有一个固定的默认 IP 192.168.122.1,这是啥时候安装的?怎么安装进去的?!!

网上查询了解到 >>>> CentOS7 图形界面安装时,附带了一个 libvirt 服务,它会会自动创建 virbr0,这是一个 virtual network switch。所有虚拟机都将连接到 virbr0。默认情况下,virbr0 使用 NAT 模式,通过 NAT 模式提供互联网访问,并为连接其上的其他虚拟网卡提供 DHCP 服务。而 virbr0-nic 是 virbr0 的一个接口,你可以通过如下命令查看 virbr0 的接口 virbr0-nic 的信息:

1
$ brctl show

网上很多帖子都说这玩意儿放着不用管它,事实上在一些特殊环境中 virbr0 网卡有时候会造成难以预计的影响:可能会导致一些服务 HA 的 VIP 无法正常漂移…

↓↓↓↓↓↓ 解决方法 ↓↓↓↓↓↓

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 关闭网卡:
$ ifconfig virbr0 down # 或者:ip addr set virbr0 down

# 卸载 virbr0
brctl delbr virbr0

# 停掉 libvirtd 服务
systemctl disable libvirtd.service
# 屏蔽 libvirtd 服务
systemctl mask libvirtd.service

# 查看 virbr0 网卡,发现已经被卸载:
$ ip addr

# 最后重启服务器后,virbr0-nic 接口也不存在

Author

Waldeinsamkeit

Posted on

2015-04-13

Updated on

2024-03-17

Licensed under

You need to set install_url to use ShareThis. Please set it in _config.yml.

Comments

You forgot to set the shortname for Disqus. Please set it in _config.yml.