题 Vagrant / VirtualBox DNS 10.0.2.3无法正常工作


我正在运行全新安装的Linux Mint Nadia(14)。我按照Vagrant的说明进行操作 入门 但是已经陷入了困境 供应。似乎Vagrant盒子无法连接到外面,所以我无法使用Chef或Puppet安装任何东西。

在基本的流浪汉 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 这样我就可以进行配置。


68
2017-11-28 20:45




仅供参考,我刚刚遇到同样的问题 ubuntu/xenial64 盒子,原来是 盒子本身的一个bug。 - Aidan Feldman
@AidanFeldman对我来说也一样。刚切换到 bento/ubuntu-16.04 和DNS工作正常,没有任何进一步的修复。 - HenningCash


答案:


您可以通过以下两种方式之一解决此问题 在VirtualBox手册中

在NAT模式下启用DNS代理

默认情况下,NAT引擎为guest虚拟机提供相同的DNS服务器   在主机上配置的。在某些情况下,它可以   希望隐藏来自guest虚拟机的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,用于查询信息并将其返回给访客。


74
2017-11-29 01:36



谢谢。 “在NAT模式下使用主机的解析器作为DNS代理”就可以了。很遗憾我必须为每个Vagrant安装执行此操作。 - Rudolf Vavruch
我几乎总是对VM使用桥接模式,这消除了问题(以及许多其他问题)。 - Michael Hampton♦
刚刚升级到4.2.20的问题,“在NAT模式下使用主机的解析器作为DNS代理”也为我做了伎俩。谢谢 ! - edomaur


跟进 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

63
2018-05-08 22:13



将此添加到我的 Vagrantfile 解决了我无法运行的问题 gem install... 没有得到愚蠢的DNS错误:)谢谢! - Nick