在VirtualBox中的NAT网络中,虚拟机无法访问互联网。

我已在Ubuntu 14.04 LTS的VirtualBox 5中创建了一个NAT网络,设置如下:
网络名称:NatNetwrok1 网络CIDR:10.0.2.0/24 支持DHCP:启用 支持IPv6:禁用 没有进行任何端口转发
此外,我有两个虚拟机(都是Xubuntu克隆),我在每个虚拟机上设置了网络设置,以使每个虚拟机上的两个网卡都启用,并具有以下设置:
连接到:“NAT Network” 名称:“NatNetwrok1”
当我运行这两个虚拟机时,可以通过运行ifconfig命令看到以下设置:
Xubuntu1上的ifconfig结果
eth0      Link encap:Ethernet  HWaddr 08:00:27:00:8c:03  
          inet addr:10.0.2.9  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe00:8c03/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:43 errors:0 dropped:0 overruns:0 frame:0
          TX packets:47 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:12133 (12.1 KB)  TX bytes:8517 (8.5 KB)

eth1      Link encap:Ethernet  HWaddr 08:00:27:9e:20:e8  
          inet addr:10.0.2.8  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe9e:20e8/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:43 errors:0 dropped:0 overruns:0 frame:0
          TX packets:48 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:10294 (10.2 KB)  TX bytes:8798 (8.7 KB)

在Xubutracentu2上的ifconfig结果
eth0      Link encap:Ethernet  HWaddr 08:00:27:00:8c:03  
          inet addr:10.0.2.9  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe00:8c03/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:43 errors:0 dropped:0 overruns:0 frame:0
          TX packets:47 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:12133 (12.1 KB)  TX bytes:8517 (8.5 KB)

eth1      Link encap:Ethernet  HWaddr 08:00:27:9e:20:e8  
          inet addr:10.0.2.8  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe9e:20e8/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:43 errors:0 dropped:0 overruns:0 frame:0
          TX packets:48 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:10294 (10.2 KB)  TX bytes:8798 (8.7 KB)

这4个IP之间的ping工作正常,但我无法在任何一个虚拟机上访问互联网。如果我将“NAT Network”更改为“NAT”,我可以访问网络,但它似乎成为了不同的虚拟网络的一部分,我无法相互ping通。有人能帮我识别和解决问题吗?
还有人能解释一下“NAT”和“NAT Network”的区别吗?

同样的问题...有人能帮忙吗? - monitor35
最近我在使用默认的Ubuntu仓库中的VirtualBox 5.0.40时遇到了这个问题。为了解决这个问题,我为每个虚拟机配置了两个接口。一个使用内部NatNetwork,另一个使用桥接模式。在客户操作系统(Ubuntu 16.04)下,您需要调整/etc/network/interfaces文件以使第二个接口在客户操作系统中显示出来。这样每个虚拟机就可以同时处于内部NAT并且能够访问互联网。 - JulioHM
4个回答

根据VirtualBox手册,以下是您的虚拟机的网络可能性:
- NAT:虚拟机与主机之间的内部网络。此外,您可以访问互联网。在NAT模式下,两个或多个虚拟机之间没有连接性,只能与主机和互联网通信。
- 内部网络:所有配置为此模式的虚拟机之间具有连接性,但与主机和互联网无法连接。
- 仅主机:在主机和所有配置为此模式的虚拟机之间创建一个虚拟网络,但您将无法访问互联网。
- NAT网络:您可以访问同一预定义NAT网络中的所有虚拟机和主机,但无法连接到互联网。
- 桥接:您的虚拟机将与主机处于同一网络中,就像它是该网络中的另一台计算机/服务器一样,因此,如果主机有互联网访问权限,虚拟机也将具有互联网访问权限。
- 通用:高级和更具体的配置,很少使用。
所以,如果你想创建一个与主机连接的内部网络,请选择NAT网络,但请注意你将无法访问互联网。只有当你只想从虚拟机访问互联网而不需要其他功能时,才设置NAT。
然而,如果你希望在两个虚拟机和互联网之间建立连接,以上任何设置都不适用。据我所知,你唯一的选择是将两个虚拟机配置为桥接模式,这样它们将成为主机网络中的“不同”计算机,你将能够从任何一个虚拟机上ping通它们以及互联网。
另一方面,看起来你从一个虚拟机克隆了另一个虚拟机,因为两台机器具有相同的MAC地址(ifconfig命令信息中的HWaddr),请注意,在克隆时应该勾选“重新初始化所有网络卡的MAC地址”的复选框。具有相同MAC地址的两个设备总是会引发问题。
我不是VirtualBox的专家,也许其他用户可以告诉你其他可能的配置方式来实现你的需求。希望你觉得这些信息有用。
要获取更多信息,你可以阅读this

5NAT Network并不会阻止您的客户端连接到互联网,这是不正确的说法。我可以从NAT Network上的虚拟机客户端连接到互联网。根据https://forums.virtualbox.org/viewtopic.php?f=3&t=69504上的最后一条评论所述,“NAT模式意味着每个虚拟机都被隔离在自己的路由器后面... NAT Network与NAT相同,只是您可以将多个虚拟机连接到同一个内部路由器。” - eebbesen

我在使用默认的apt软件源安装VirtualBox 5.0.40时遇到了这个问题。为了解决这个问题,我配置了每个虚拟机使用两个网络接口。
  • 适配器1:桥接适配器(连接到真实网卡)
  • 适配器2:NAT网络(根据您的选择)
在客户操作系统(Ubuntu 16.04)下,您需要调整/etc/network/interfaces文件以使第二个接口显示出来。在我的案例中,我希望虚拟机在NAT网络中使用静态IP地址,所以我做了以下设置。
## Bridge to Internet
auto enp0s3
iface enp0s3 inet dhcp

## NAT Network among VMs
## Static is optional
## DHCP if you don't need it
auto enp0s8
iface enp0s8 inet static
  address 10.10.11.100
  netmask 255.255.255.0

当然,这假设我的NAT网络使用子网10.10.11.0/24。根据您的情况调整数字,或者按照您的意愿使用DHCP。

注意:在静态配置中有一件重要的事情需要注意,对于这种特定场景,您不能为其分配默认网关。给enp0s8设置一个默认网关(如10.10.11.1)将导致操作系统创建到该网关的路由,这个路由也可能影响您的互联网访问。除非此特定接口需要连接其他网络,否则您只需要这样做。

要了解Ubuntu为您的环境分配的接口名称,可以运行dmesg | grep eth命令。

enter image description here


当我在eth0和eth1上都使用'dhcp'时,我的工作效果更好。它会自动分配10.0.2.15作为NAT的IP地址,而我的公共互联网eth1没有IP地址,但是我可以从虚拟机上ping通互联网! - Milean

为什么不工作?
在16.04(可能也包括14.04)的主要打包版本的VirtualBox(5.0.36)中,NAT Network功能存在问题。
检查一下!
你可以自己检查一下:如果/usr/lib/virtualbox/VBoxNetNAT可执行文件存在,则可能有其他问题。
修复它!
这个bug在更新的版本中已经修复。所以你应该安装一个新版本:
卸载旧版本
例如,如果你使用apt安装,你可以运行:
sudo apt remove virtualbox --auto-remove

安装新版本

修复程序适用于更新的版本(Ubuntu yakkety+)。对于旧版本:

访问virtualbox.org,并手动下载最新版本。
或者使用以下脚本:
# 添加官方软件源 wget -q -O - https://www.virtualbox.org/download/oracle_vbox_2016.asc | sudo apt-key add - echo deb http://download.virtualbox.org/virtualbox/debian `lsb_release -cs` non-free contrib | sudo tee /etc/apt/sources.list.d/virtualbox.org.list # 安装更新版本 sudo apt install virtualbox-5.1

1如果您安装了旧版本的VirtualBox,请确保还卸载了virtualbox-dkms,以使此修复生效。否则,您可能仍然无法连接到互联网。 - Barak Itkin

这可能是VirtualBox中的一个错误。我已经遇到了相同的问题(Ubuntu 16.04.2 LTS,VirtualBox 5.0.32_Ubuntu r112930):设置了一个NAT网络,并为两个Ubuntu虚拟机配置了该网络。每个虚拟机都可以ping / SSH到另一个虚拟机,通过端口转发,我可以从主机SSH到每个虚拟机。但是无法在虚拟机内部访问Internet。一位同事尝试使用Windows主机、VirtualBox(未知版本)和相同的虚拟机,并成功解决了问题。
作为解决方法,我为每个虚拟机配置了第二张网络卡:第一张网络卡使用NAT来访问互联网,第二张使用“NAT网络”来访问其他虚拟机。我必须在第一张(NAT)卡上设置SSH端口转发,并在一个虚拟机上配置不同的SSH端口(即2222-> VM1上的22,2223-> VM2上的23)。
根据文档,NAT和NAT网络都应该能够访问互联网。区别在于前者具有隔离的主机↔客户连接,因此客户无法相互访问,只能访问主机。后者将所有客户汇集到一个网络中(并提供DHCP等服务),以便它们可以相互访问。