为什么不工作?

为什么不工作?

我在 Ubuntu 14.04 LTS 中的 VirtulBox 5 中创建了一个 NAT 网络,设置如下

网络名称:NatNetwrok1
网络 CIDR:10.0.2.0/24
支持 DHCP:已启用
支持 IPv6:已禁用
,无任何端口转发

另外,我有两台虚拟机(都是 Xubuntu 克隆),我已将网络设置设为在每个虚拟机上启用两个 NIC,并在所有四个适配器中进行以下设置:

附加到:“NAT 网络”
名称:“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 网络”更改为“NAT”,我可以访问网络,但它们似乎成为了不同虚拟网络的一部分,我无法相互 ping 通。
有人能帮我识别和解决问题吗?

有人能解释一下两者之间的区别吗NATNAT 网络

答案1

根据 VirtualBox 手册,您的虚拟机的网络可能性如下:

  • 网络地址转换(NAT): VM 和主机之间的内部网络。此外,您还可以访问互联网。处于 NAT 模式的两个或多个 VM 之间没有连接,只能与主机和互联网建立连接。

  • 内部的:所有具有此配置的虚拟机之间都可以连接,但无法与主机或 Internet 连接。

  • 仅限主持人:使用此配置,主机和所有虚拟机之间将创建一个虚拟网络,但您将无法访问 Internet。

  • NAT 网络:您可以访问同一预定义 NAT 网络和主机中的所有虚拟机,但无法连接到互联网。

  • 桥接:您的虚拟机将与您的主机位于同一网络中,就好像它是该网络中的其他计算机/服务器一样,因此,如果您的主机可以访问 Internet,它也将可以访问 Internet。

  • 通用的:高级和更具体的配置很少使用。

因此,如果您想创建一个可以连接到主机的内部网络,请选择 NAT 网络,但请注意,您将无法访问 Internet。仅当您只想从 VM 访问 Internet 而不需要其他任何内容时才设置 NAT。

但是,如果您想在两个虚拟机和互联网之间建立连接,这些设置都不适合您。据我所知,您唯一的选择是将两个虚拟机配置为桥接模式,这样它们将成为您主机网络中的“不同”计算机,您将能够从其中任何一台虚拟机 ping 所有虚拟机和互联网。

另一方面,您似乎从另一台虚拟机克隆了一台虚拟机,因为两台机器具有相同的 MAC 地址(硬件地址在 ifconfig 命令信息中),请注意您应该选中“重新初始化所有网卡的MAC地址“克隆时。两个具有相同 MAC 地址的设备总会产生问题。

我不是 VirtualBox 专家,所以也许其他用户可以告诉你其他可能的配置来获得你想要的东西。我希望你觉得这些信息有用。

欲了解更多信息,您可以阅读

答案2

为什么不工作?

在 16.04(也可能是 14.04)中NAT 网络主要软件包版本的功能虚拟盒(5.0.36)是有漏洞

核实!

您可以自己检查:如果ls /usr/lib/virtualbox/VBoxNetNAT可执行文件存在,那么您可能遇到了其他类型的问题。

修理它!

此错误已在较新版本中修复。因此,您应该安装新版本:

删除旧版本

例如如果你使用以下方式安装,apt则可以运行:

sudo apt remove virtualbox --auto-remove

安装新版本

此修复适用于较新版本 (Ubuntu yakkety+)。对于较旧版本:

  • 访问 virtualbox.org,并手动下载最新版本
  • 或者
  • 使用以下脚本:

    # add the official repository
    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
    # install the newer version
    sudo apt install virtualbox-5.1
    

答案3

我在使用默认 apt 存储库中的 VirtualBox 5.0.40 时遇到了这个问题。为了解决这个问题,我将每个虚拟机配置为使用两个网络接口。

  • 适配器 1:桥接适配器(连接至您的真实网卡)
  • 适配器 2:NAT 网络(您选择的)

在 guets OS(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

在此处输入图片描述

答案4

这可能是 VirtualBox 中的一个错误。我遇到过同样的情况(Ubuntu 16.04.2 LTS、VirtualBox 5.0.32_Ubuntu r112930):设置一个 NAT 网络,为两个 Ubuntu VM 配置该网络。每个 VM 都可以 ping/SSH 到其他 VM,并且通过端口转发,我可以从主机通过 SSH 进入每个 VM。但 VM 内部无法访问 Internet。一位同事尝试使用 Windows 主机、VirtualBox(未知版本)和相同的 VM 进行相同的操作,并且成功了。

作为一种解决方法,我为每个虚拟机配置了第二张网卡:第一张使用 NAT 访问互联网,第二张使用“NAT 网络”访问其他客户机。我必须在第一张 (NAT) 卡上设置 SSH 端口转发,并在一台虚拟机上配置不同的 SSH 端口(即 VM1 上的 2222 -> 22,VM2 上的 2223 -> 23)。

根据文档,NAT 和 NAT 网络都应该能够访问互联网。区别在于前者具有隔离的主机 ↔ 客户机连接,因此客户机无法相互访问,只能访问主机。后者将所有客户机集中到一个网络中(并提供 DHCP 等服务),以便它们可以相互访问。

相关内容