可以在 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