在基本的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
的方式来进行调配。#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 53
(resolv.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启动后进行)脚本)。
评论
仅供参考,我只是用ubuntu / xenial64盒子遇到了同样的问题,事实证明这是盒子本身的错误。@AidanFeldman对我也一样。只需切换到bento / ubuntu-16.04,DNS即可正常运行,而无需进行任何进一步的修复。