我正在运行全新安装的 Linux Mint Nadia (14)。我按照 Vagrant 上的说明进行操作入门但一直卡在配置。看来 Vagrant 盒子无法连接到外部,所以我无法使用 Chef 或 Puppet 安装任何东西。
在基本的 Vagrant 中resolve.conf
包含nameserver 10.0.2.3
。但是使用该设置我无法 ping us.archive.ubuntu.com
。
如果我将其更改为,8.8.8.8
那么我可以 pingus.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 查询信息并将其返回给客户机。
答案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
答案3
死灵法师这个,因为在我看来,没有一个答案能解释根本原因这个问题似乎很有趣。对于现代环境——这个问题也发生在 Debian 10 和 VirtualBox 6.0.14 中;在默认安装 Deb 10(无 GUI)后,使用一个“NAT”适配器(不是“NAT 网络”,而是默认的“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
(注意——虚拟机无论如何都会10.0.2.15
从 dhcp 获取),然后关闭/打开虚拟机,
- 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仍能正常工作;仅当您关闭/打开 VM(通过 virtualbox)时,它10.0.2.3
才会消失。
所以我目前的猜测是,VirtualBox自动地10.0.2.3
一旦收到请求,就会打开 DNS 服务器/代理dhcp
;10.0.2.3
只要虚拟机没有关闭(但可以重新启动),它就会一直存在。
(如果我知道如何伪造dhcp
请求,我会检查这一点10.0.2.0/24
;有人知道怎么做吗?)
__
对于那些确实想将 IP 更改为静态(在“NAT”适配器中)的人来说,底线是:只需找到一种方法来粘贴正确的内容nameserver
(/etc/resolv.conf
可以在启动后的一些初始化脚本中)。
答案4
在 VagrantVM 上,尝试:
resolvectl dns eth0 your_server_dns_ip_address
例如
resolvectl dns eth0 8.8.8.8