我正在重新安装Linux Mint Nadia(14)。我正在按照“ Vagrant入门”中的说明进行操作,但被卡在了Provisioning上。似乎Vagrant盒无法连接到外部,因此我无法使用Chef或Puppet安装任何东西。

在基本的Vagrant中,resolve.conf包含nameserver 10.0.2.3。但是使用该设置后,我无法ping us.archive.ubuntu.com

如果将其更改为8.8.8.8,则可以ping us.archive.ubuntu.com,但它不会保持设置状态,并且在重新启动后,它又变回10.0.2.3-因此置备失败再次。

理想情况下,我希望10.0.2.3可以在我的设置上工作。未能通过我想永久更改resolv.conf的方式来进行调配。

评论

仅供参考,我只是用ubuntu / xenial64盒子遇到了同样的问题,事实证明这是盒子本身的错误。

@AidanFeldman对我也一样。只需切换到bento / ubuntu-16.04,DNS即可正常运行,而无需进行任何进一步的修复。

#1 楼

您可以通过以下两种方法之一解决此问题,这两种方法都在VirtualBox手册中:


在NAT模式下启用DNS代理

NAT引擎默认情况下,向主机提供与访客
相同的DNS服务器。在某些情况下,可能希望
对来宾隐藏DNS服务器IP,例如,当
由于DHCP租约到期而该信息可能在主机上更改时。
在这种情况下,您可以使用以下命令告诉NAT引擎充当DNS代理:

VBoxManage modifyvm "VM name" --natdnsproxy1 on


在NAT模式下将主机的解析器用作DNS代理

为了解析网络名称,NAT引擎的DHCP服务器提供了主机已注册DNS服务器的列表。如果出于某些原因
需要隐藏此DNS服务器列表并使用主机的解析器设置,从而强制VirtualBox NAT引擎拦截DNS
请求并将其转发到主机的解析器,请使用以下
命令:

VBoxManage modifyvm "VM name" --natdnshostresolver1 on


请注意,此设置类似于DNS代理模式,但是
而代理模式只是将DNS请求转发到适当的服务器上,解析器模式将解释DNS请求并使用主机的DNS API查询信息并将其返回给来宾。


评论


谢谢。 “使用主机的解析器作为NAT模式下的DNS代理”解决了这个问题。很遗憾我必须为每个Vagrant安装都这样做。

–鲁道夫·瓦夫鲁奇(Rudolf Vavruch)
2012年11月29日在6:13

我几乎总是对VM使用桥接模式,这消除了该问题(以及其他许多问题)。

–迈克尔·汉普顿
13年1月12日在19:55

刚刚升级到4.2.20时遇到了问题,“将主机的解析器用作NAT模式下的DNS代理”对我来说也很有效。谢谢 !

– edomaur
2013年12月12日13:12

#2 楼

在https://serverfault.com/a/453260/14832上进行后续操作,如果您使用的是版本2 Vagrantfile配置格式,则以以下格式开始:

Vagrant.configure("2") do |config|


然后您可能要将其添加到该配置文件中:

config.vm.provider :virtualbox do |vb|
  vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
end


如果您使用的是旧的配置格式,但使用的是Vagrant 1.1+,则可以附加文件末尾的内容:

Vagrant.configure("2") do |config|
  config.vm.provider :virtualbox do |vb|
    vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
  end
end


评论


将此添加到我的Vagrantfile中解决了无法运行gem install的问题,而没有出现愚蠢的DNS错误:)谢谢!

–尼克
2015年2月23日在23:37

没有为我工作...不确定我缺少什么

– jenkizenki
20 Mar 9 '20 at 19:47

@NickHall检查内部的VM是否已分配静态IP;如果是这样-从/etc/resolv.conf检查名称服务器的可达性;如果是10.0.2.3,请检查我的回答;)

–P Marecki
20年6月12日,9:55

#3 楼

我认为,对这一问题进行细化处理后,没有一个答案可以说明这个问题的根本原因,这似乎很有趣。对于现代环境-Debian 10和VirtualBox 6.0.14也会发生此问题;在默认安装Deb 10(无GUI)之后,使用一个“ NAT”适配器(不是“ NAT Network”,而是默认的“ NAT”),对于DNS来说一切正常。然后将/etc/network/interfaces(在此发行版中似乎仍然有用)更改为静态IP:
#iface enp0s3 inet dhcp
iface enp0s3 inet static
address 10.0.2.15
netmask 255.255.255.0
gateway 10.0.2.2

(请注意-VM仍将从dhcp获得10.0.2.15),然后关闭/打开VM电源,

DNS不起作用(host google.com等,超时)
telnet 10.0.2.3 53resolv.conf具有nameserver 10.0.2.3,安装后默认为默认值)。

如果我恢复为iface enp0s3 inet dhcp和重新启动VM,DNS和telnet 10.0.2.3 53可以正常工作。
现在,它变得非常令人兴奋/有趣:如果再次选择inet static并重新启动VM,则DNS和telnet仍然可以正常工作;
所以我现在的猜测是,一旦VirtualBox收到10.0.2.3请求,它就会自动在10.0.2.3上打开DNS服务器/代理。并且只要虚拟机未关闭电源(但可以重新引导),此dhcp就会存在。
(如果我知道如何伪造10.0.2.3上的dhcp请求,我会进行检查;有人知道如何做吗? ?)
__
对于那些想将IP更改为静态(在“ NAT”适配器中)的人来说,底线是:只需找到一种将适当的10.0.2.0/24粘贴到nameserver中的方法即可(可以在某些init启动后进行)脚本)。