如何在 Oracle Virtualbox (Linux) 中配置不同类型的网络

可以在 Oracle VirtualBox 中配置多种类型的网络,在继续之前,我们必须明确我们的需求。

首先,将介绍我们可以使用 Oracle Virtual Box 为 Linux 设备组创建的网络类型,然后我们可以选择适合我们的需求的网络类型。

网络地址转换 (NAT)

NAT 提供一对一的 IP 地址转换,启用了 NAT 的虚拟机的作用很像通过路由器连接到 Internet 的真实计算机。
在这种情况下,“路由器”是 VirtualBox 网络引擎,它透明地映射进出虚拟机的流量。
在 VirtualBox 中,这个路由器放置在每个虚拟机和主机之间。
这种分离最大限度地提高了安全性,因为默认情况下虚拟机不能相互通信。

下表展示了将使用此选项创建的网络类型

问题
vm可以连接到主机host吗?是的
主机host可以连接到vm吗?
vm 可以连接到外部网络吗是的
vm 可以连接相同网络中的另外一台vm吗?
在 host网络中的其他计算机可以连接到 vm 吗?

使用以下步骤转到虚拟机的“设置”

接下来从左侧 TAB 菜单中选择“网络”,然后从网络适配器的下拉菜单中选择“NAT”,如下所示。

单击确定并保存新配置

从虚拟机中刷新现有的 IP 租约

[root@server2 ~]# dhclient -v -r
Internet Systems Consortium DHCP Client 4.2.5
Copyright 2004-2013 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/virbr0-nic/52:54:00:79:27:fb
Sending on   LPF/virbr0-nic/52:54:00:79:27:fb
Listening on LPF/virbr0/52:54:00:79:27:fb
Sending on   LPF/virbr0/52:54:00:79:27:fb
Listening on LPF/enp0s3/08:00:27:b3:d0:49
Sending on   LPF/enp0s3/08:00:27:b3:d0:49
Sending on   Socket/fallback
DHCPRELEASE on enp0s3 to 192.168.1.1 port 67 (xid=0x5518167d)

从 DHCP 服务器寻找新 IP

[root@server2 ~]# dhclient -v
Internet Systems Consortium DHCP Client 4.2.5
Copyright 2004-2013 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/virbr0-nic/52:54:00:79:27:fb
Sending on   LPF/virbr0-nic/52:54:00:79:27:fb
Listening on LPF/virbr0/52:54:00:79:27:fb
Sending on   LPF/virbr0/52:54:00:79:27:fb
Listening on LPF/enp0s3/08:00:27:b3:d0:49
Sending on   LPF/enp0s3/08:00:27:b3:d0:49
Sending on   Socket/fallback
DHCPDISCOVER on virbr0-nic to 255.255.255.255 port 67 interval 4 (xid=0x340ffc01)
DHCPDISCOVER on virbr0 to 255.255.255.255 port 67 interval 6 (xid=0x6bf6f2b9)
DHCPDISCOVER on enp0s3 to 255.255.255.255 port 67 interval 7 (xid=0x20e6ae5)
DHCPREQUEST on enp0s3 to 255.255.255.255 port 67 (xid=0x20e6ae5)
DHCPOFFER from 10.0.2.2
DHCPACK from 10.0.2.2 (xid=0x20e6ae5)
bound to 10.0.2.15 -- renewal in 34887 seconds.

正如我们在下面看到的 NAT 外部网络可以通过虚拟机访问

[root@server2 ~]# ping google.com
PING google.com (172.217.26.206) 56(84) bytes of data.
64 bytes from maa03s23-in-f206.1e100.net (172.217.26.206): icmp_seq=1 ttl=55 time=13.2 ms
64 bytes from maa03s23-in-f206.1e100.net (172.217.26.206): icmp_seq=2 ttl=55 time=8.75 ms
64 bytes from maa03s23-in-f206.1e100.net (172.217.26.206): icmp_seq=3 ttl=55 time=8.99 ms
^C
--- google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 8.759/10.319/13.208/2.045 ms

NAT网络

这是我们可以在 Oracle VirtualBox 中找到的一个添加选项,它对已有的 NAT 选项进行了增强,其中我们可以使用 Virtual Box 配置本地 DHCP 服务器,该服务器将只分配一个内部 IP,使用它我们可以连接到外部网络以及主机。

下表展示了将使用此选项创建的网络类型

问题解答
vm 可以连接到主机吗?是的
主机可以连接到虚拟机吗?
vm可以连接外网吗是的
vm 可以连接同一网络中的另一个 vm 吗?是的
主机网络上的其他计算机可以连接vm吗?

在开始使用 NAT 网络之前,请确保准备工作配置到位。
转到“文件”并选择“首选项”,如下所示

在“网络”选项卡下选择“NAT 网络”并使用“加号”添加一个新网络,如下所示,对我来说,我创建了一个具有以下值的网络“MyLab”

提供我们要分配给使用 NAT 网络配置的虚拟机的网络名称和子网详细信息,单击“确定”保存并退出配置。

接下来为你的虚拟机选择这个网络

接下来从你的虚拟机中刷新现有的 IP 租约

[root@server1 ~]# dhclient -v -r
Internet Systems Consortium DHCP Client 4.2.5
Copyright 2004-2013 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/virbr0-nic/52:54:00:79:27:fb
Sending on   LPF/virbr0-nic/52:54:00:79:27:fb
Listening on LPF/virbr0/52:54:00:79:27:fb
Sending on   LPF/virbr0/52:54:00:79:27:fb
Listening on LPF/enp0s3/08:00:27:b7:6e:24
Sending on   LPF/enp0s3/08:00:27:b7:6e:24
Sending on   Socket/fallback
DHCPRELEASE on enp0s3 to 10.0.2.2 port 67 (xid=0x7fc4255d)

从 DHCP 服务器寻找新 IP

[root@server2 ~]# dhclient -v
Internet Systems Consortium DHCP Client 4.2.5
Copyright 2004-2013 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/virbr0-nic/52:54:00:79:27:fb
Sending on   LPF/virbr0-nic/52:54:00:79:27:fb
Listening on LPF/virbr0/52:54:00:79:27:fb
Sending on   LPF/virbr0/52:54:00:79:27:fb
Listening on LPF/enp0s3/08:00:27:b3:d0:49
Sending on   LPF/enp0s3/08:00:27:b3:d0:49
Sending on   Socket/fallback
DHCPDISCOVER on virbr0-nic to 255.255.255.255 port 67 interval 8 (xid=0x6c597d6e)
DHCPDISCOVER on virbr0 to 255.255.255.255 port 67 interval 7 (xid=0xb11913f)
DHCPDISCOVER on enp0s3 to 255.255.255.255 port 67 interval 6 (xid=0x3d049811)
DHCPREQUEST on enp0s3 to 255.255.255.255 port 67 (xid=0x3d049811)
DHCPOFFER from 192.168.100.3
DHCPACK from 192.168.100.3 (xid=0x3d049811)
bound to 192.168.100.4 -- renewal in 503 seconds.

在NAT 网络中,有另外一台配置了IP“192.168.100.5”的服务器 可以访问现有的虚拟机

[root@server2 ~]# ping 192.168.100.5
PING 192.168.100.5 (192.168.100.5) 56(84) bytes of data.
64 bytes from 192.168.100.5: icmp_seq=1 ttl=64 time=0.439 ms
64 bytes from 192.168.100.5: icmp_seq=2 ttl=64 time=0.569 ms
^C
--- 192.168.100.5 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 0.439/0.504/0.569/0.065 ms

让我们检查外部网络连接

[root@server2 ~]# ping google.com
PING google.com (172.217.26.174) 56(84) bytes of data.
64 bytes from maa03s22-in-f174.1e100.net (172.217.26.174): icmp_seq=1 ttl=55 time=12.8 ms
64 bytes from maa03s22-in-f174.1e100.net (172.217.26.174): icmp_seq=2 ttl=55 time=10.4 ms
64 bytes from maa03s22-in-f174.1e100.net (172.217.26.174): icmp_seq=3 ttl=55 time=10.6 ms
^C
--- google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 10.441/11.307/12.852/1.095 ms
Although the host will not be able to connect the virtual machine
C:Program FilesOracleVirtualBox>ping 192.168.100.4

Pinging 192.168.100.4 with 32 bytes of data:
Request timed out.
Request timed out.

Ping statistics for 192.168.100.4:
    Packets: Sent = 2, Received = 0, Lost = 2 (100% loss),
Control-C
^C

桥接网络

通过桥接网络,VirtualBox 使用主机系统上的设备驱动程序来过滤来自物理网络适配器的数据。
因此,此驱动程序称为“网络过滤器”驱动程序。
这允许 VirtualBox 拦截来自物理网络的数据并将数据注入其中,从而有效地在软件中创建新的网络接口。
当来宾使用这样一个新的软件接口时,它在主机系统看来就好像来宾使用网络电缆物理连接到接口:主机可以通过该接口向来宾发送数据并从中接收数据。
这意味着我们可以在访客和网络的其余部分之间设置路由或者桥接。

下表展示了将使用此选项创建的网络类型

问题
vm 可以连接到主机吗?是的
主机可以连接到虚拟机吗?是的
vm可以连接外网吗?是的
vm 可以连接同一网络中的另一个 vm 吗?是的
主机网络上的其他计算机可以连接vm吗?是的

这是最常用的选项

  • 我们将可以从主机直接访问虚拟机
  • 由于连接是桥接的,因此虚拟机可以通过主机网络访问外部网络
  • 我们可以创建多个虚拟机,每个虚拟机都具有桥接网络,并且它们都可以通过 TCP 协议相互通信。

使用以下步骤导航到 VM 的网络设置

从“网络”下的下拉菜单中为网络适配器选择“桥接适配器”。
还要确保在“名称”下选择了正确的接口(要映射到虚拟 NIC 接口)

单击确定并保存配置

接下来刷新并使用新更改更新 IP 地址

[root@server1 ~]# dhclient -r
 [root@server1 ~]# dhclient -v
 Internet Systems Consortium DHCP Client 4.2.5
 Copyright 2004-2013 Internet Systems Consortium.
 All rights reserved.
 For info, please visit https://www.isc.org/software/dhcp/
Listening on LPF/virbr0-nic/52:54:00:79:27:fb
 Sending on   LPF/virbr0-nic/52:54:00:79:27:fb
 Listening on LPF/virbr0/52:54:00:79:27:fb
 Sending on   LPF/virbr0/52:54:00:79:27:fb
 Listening on LPF/enp0s3/08:00:27:b7:6e:24
 Sending on   LPF/enp0s3/08:00:27:b7:6e:24
 Sending on   Socket/fallback
 DHCPDISCOVER on virbr0-nic to 255.255.255.255 port 67 interval 4 (xid=0x35aa61a4)
 DHCPDISCOVER on virbr0 to 255.255.255.255 port 67 interval 8 (xid=0x7672f0bf)
 DHCPDISCOVER on enp0s3 to 255.255.255.255 port 67 interval 5 (xid=0x7ad0ec69)
 DHCPREQUEST on enp0s3 to 255.255.255.255 port 67 (xid=0x7ad0ec69)
 DHCPOFFER from 192.168.1.1
 DHCPACK from 192.168.1.1 (xid=0x7ad0ec69)
 bound to 192.168.1.5 -- renewal in 39757 seconds.

检查您是否可以访问互联网

[root@server1 ~]# ping google.com
PING google.com (172.217.26.174) 56(84) bytes of data.
64 bytes from maa03s22-in-f14.1e100.net (172.217.26.174): icmp_seq=1 ttl=56 time=8.10 ms
64 bytes from maa03s22-in-f14.1e100.net (172.217.26.174): icmp_seq=2 ttl=56 time=7.99 ms
64 bytes from maa03s22-in-f14.1e100.net (172.217.26.174): icmp_seq=3 ttl=56 time=8.13 ms
^C
--- google.com ping statistics --
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 7.998/8.081/8.137/0.059 ms

我们有另外一台同样配置了桥接网络的虚拟机,IP为 192.168.1.6,同样也可以访问,如下所示

PING 192.168.1.6 (192.168.1.6) 56(84) bytes of data.
64 bytes from 192.168.1.6: icmp_seq=1 ttl=64 time=0.643 ms
64 bytes from 192.168.1.6: icmp_seq=2 ttl=64 time=0.337 ms
^C
--- 192.168.1.6 ping statistics --
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.337/0.490/0.643/0.153 ms
My client VM is also accessible from my host windows machine
C:Usersjack>ping 192.168.1.6

重要说明:但如果主机隐藏在 VPN 后面,这可能会失败,在这种情况下,内部网络将正常工作,但我们将无法连接到外部网络,例如:Internet。
对于这种情况,我们需要 NAT + 桥接网络的组合。
在虚拟机中创建一个另外的接口并使用 NAT 对其进行配置,这对我们来说应该很神奇,因此使用 NAT 我们将连接外部网络,而使用桥接网络我们可以使用 ssh 客户端(如 Putty)访问虚拟机,以便于使用。

内部网络

尽管从技术上讲,可以使用内部网络完成的所有事情也可以使用桥接网络完成,但内部网络具有安全优势。
在桥接网络模式下,所有流量都通过主机系统的物理接口。
因此,可以将数据包嗅探器(例如 Wireshark)添加到主机接口并记录通过它的所有流量。
如果出于任何原因,我们希望同一台机器上的两个或者多个 VM 进行私密通信,从而对主机系统和用户隐藏它们的数据,则桥接网络不是一种选择。

下表展示了将使用此选项创建的网络类型

问题
vm 可以连接到主机吗?
主机可以连接到虚拟机吗?
vm可以连接外网吗?
vm 可以连接同一网络中的另一个 vm 吗?是的
主机网络上的其他计算机可以连接vm吗?

在 Oracle VirtualBox中,您需要使用 CLI 来创建内部网络

C:\Program Files\Oracle\VirtualBox>VBoxManage dhcpserver add --netname mylab --ip 10.10.10.1 --netmask 255.255.255.0 --lowerip 10.10.10.2 --upperip 10.10.10.64 --enable

使用以下步骤导航到 VM 的网络设置

从“网络”下的下拉菜单中为网络适配器选择“内部网络”。
接下来在 Windows CLI 上添加在上述步骤中创建的内部网络名称,对我而言,我已将默认的“intnet”替换为“mylab”,然后单击“确定”

Release and renew the DHCP IP
[root@server1 ~]# dhclient -r
 [root@server1 ~]# dhclient -v
 Internet Systems Consortium DHCP Client 4.2.5
 Copyright 2004-2013 Internet Systems Consortium.
 All rights reserved.
 For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/virbr0-nic/52:54:00:79:27:fb
 Sending on   LPF/virbr0-nic/52:54:00:79:27:fb
 Listening on LPF/virbr0/52:54:00:79:27:fb
 Sending on   LPF/virbr0/52:54:00:79:27:fb
 Listening on LPF/enp0s3/08:00:27:b7:6e:24
 Sending on   LPF/enp0s3/08:00:27:b7:6e:24
 Sending on   Socket/fallback
 DHCPDISCOVER on virbr0-nic to 255.255.255.255 port 67 interval 3 (xid=0x65b71ff9)
 DHCPDISCOVER on virbr0 to 255.255.255.255 port 67 interval 5 (xid=0x374508db)
 DHCPDISCOVER on enp0s3 to 255.255.255.255 port 67 interval 3 (xid=0x775839ae)
 DHCPREQUEST on enp0s3 to 255.255.255.255 port 67 (xid=0x775839ae)
 DHCPOFFER from 10.10.10.1
 DHCPACK from 10.10.10.1 (xid=0x775839ae)
 bound to 10.10.10.4 -- renewal in 488 seconds.

我有另一台配置了内部网络的虚拟机(IP10.10.10.2),可以通过此配置访问

[root@server1 ~]# ping 10.10.10.2
PING 10.10.10.2 (10.10.10.2) 56(84) bytes of data.
64 bytes from 10.10.10.2: icmp_seq=1 ttl=64 time=0.317 ms
64 bytes from 10.10.10.2: icmp_seq=2 ttl=64 time=0.588 ms
64 bytes from 10.10.10.2: icmp_seq=3 ttl=64 time=4.56 ms
^C
--- 10.10.10.2 ping statistics --
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 0.317/1.824/4.567/1.942 ms

不过外网是不通的

[root@server1 ~]# ping google.com
 ping: google.com: Name or service not known

让我们看看这是否可以从 Windows 主机系统访问

C:\Users\jack>ping 10.10.10.4

Pinging 10.10.10.4 with 32 bytes of data:
Request timed out.
Request timed out.
Request timed out.

Ping statistics for 10.10.10.4:
    Packets: Sent = 3, Received = 0, Lost = 3 (100% loss),
Control-C
^C

没有虚拟机可以被访问,这和预期设置一致。

Host Only网络

它可以被认为是桥接和内部网络模式之间的混合:与桥接网络一样,虚拟机可以相互通信,也可以与主机通信,就好像它们通过物理以太网交换机连接一样。
类似地,与内部网络一样,不需要存在物理网络接口,并且虚拟机无法与主机外部的世界对话,因为它们没有连接到物理网络接口。

因此,使用 Host Only Networking,多个虚拟机可以相互连接,并且可以通过主机访问相同的虚拟机,但虚拟机将无法访问外部外部网络。

下表展示了将使用此选项创建的网络类型

问题
vm 可以连接到主机吗?
主机可以连接到虚拟机吗?是的
vm可以连接外网吗?
vm 可以连接同一网络中的另一个 vm 吗?是的
主机网络上的其他计算机可以连接vm吗?是的

为了能够使用 Host Only Network 选项,请确保我们已经创建了一个带有 DHCP 服务器的子网。
导航到“文件”下的“首选项”

在“网络”下导航到“仅主机网络”并创建一个新的适配器(如果尚不存在)。
对我来说,我使用的是默认网络适配器,其子网详细信息如下

接下来使用网络设置为虚拟机分配 Host Only Network 配置,如下所示

[root@server1 ~]# dhclient -r
 [root@server1 ~]# dhclient -v
 Internet Systems Consortium DHCP Client 4.2.5
 Copyright 2004-2013 Internet Systems Consortium.
 All rights reserved.
 For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/virbr0-nic/52:54:00:79:27:fb
 Sending on   LPF/virbr0-nic/52:54:00:79:27:fb
 Listening on LPF/virbr0/52:54:00:79:27:fb
 Sending on   LPF/virbr0/52:54:00:79:27:fb
 Listening on LPF/enp0s3/08:00:27:b7:6e:24
 Sending on   LPF/enp0s3/08:00:27:b7:6e:24
 Sending on   Socket/fallback
 DHCPDISCOVER on virbr0-nic to 255.255.255.255 port 67 interval 3 (xid=0x3e491404)
 DHCPDISCOVER on virbr0 to 255.255.255.255 port 67 interval 7 (xid=0x5c74553e)
 DHCPDISCOVER on enp0s3 to 255.255.255.255 port 67 interval 7 (xid=0x2e350e0d)
 DHCPDISCOVER on virbr0-nic to 255.255.255.255 port 67 interval 5 (xid=0x3e491404)
 DHCPDISCOVER on enp0s3 to 255.255.255.255 port 67 interval 14 (xid=0x2e350e0d)
 DHCPREQUEST on enp0s3 to 255.255.255.255 port 67 (xid=0x2e350e0d)
 DHCPOFFER from 192.168.56.100
 DHCPACK from 192.168.56.100 (xid=0x2e350e0d)
 bound to 192.168.56.101 -- renewal in 520 seconds.

我们有一个同样配置了Host Only Network的虚拟机,IP (192.168.56.102) ,看起来可以正常访问

[root@server1 ~]# ping 192.168.56.102
 PING 192.168.56.102 (192.168.56.102) 56(84) bytes of data.
 64 bytes from 192.168.56.102: icmp_seq=1 ttl=64 time=2.16 ms
 64 bytes from 192.168.56.102: icmp_seq=2 ttl=64 time=0.777 ms
 ^C
 --- 192.168.56.102 ping statistics --
 2 packets transmitted, 2 received, 0% packet loss, time 1001ms
 rtt min/avg/max/mdev = 0.777/1.469/2.161/0.692 ms

这个配置和桥接的一个区别是外部网络不可达

[root@server1 ~]# ping google.com
ping: google.com: Name or service not known

使用我们的主机 Windows 系统也可以访问此虚拟机

C:\Users\jack>ping 192.168.56.101

Pinging 192.168.56.101 with 32 bytes of data:
Reply from 192.168.56.101: bytes=32 time=1ms TTL=64
Reply from 192.168.56.101: bytes=32 time=1ms TTL=64

Ping statistics for 192.168.56.101:
    Packets: Sent = 2, Received = 2, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 1ms, Maximum = 1ms, Average = 1ms
Control-C
^C
日期:2020-06-02 22:18:26 来源:oir作者:oir