如何让 VirtualBox VM 使用主机的 DNS?

如何让 VirtualBox VM 使用主机的 DNS?

我用虚拟盒对于我的虚拟机。我的办公室网络设置是无线的,即我连接到公司的 WiFi 网络,它有一个本地 DNS 来解析本地名称(例如something.mycompany.com转到 123.45.67.89)。当我构建新的虚拟机时,它可以继承主机的连接连接到外部互联网,但它不会使用本地 DNS 解析本地名称。因此,我必须在/etc/hosts解析主机上的名称后进入虚拟机并手动输入,这很烦人。

有没有办法让 VirtualBox 自动将客户机连接到主机的 DNS,这样我就不必执行此手动步骤了?我的主机是OSX 山狮,虚拟机通常Ubuntu但我怀疑这是否重要。

答案1

启用使用主机解析器的 DNS 代理模式,运行以下命令:

VBoxManage 修改vm<虚拟机名称>“--natdnshostresolver1 开启

因此,客户操作系统 DNS 请求将被拦截并使用主机 DNS API 进行解析,而不是像 那样让客户操作系统连接到外部 DNS 服务器--natdnsproxy1 on

您可以通过运行来获取虚拟机的名称VBoxManage list runningvms

答案2

对我来说,它有助于添加另一个带有主机专用适配器的适配器,同时保留第一个适配器(NAT 模式)。

[截图1]

答案3

这是 Google 搜索结果中的最佳结果,所以我想向其他人解释一下。Josiah 的解决方案对我有用,只需添加以下行:

hosts: files dns/etc/nsswitch.conf

正如其他人指出的那样,原始解决方案在 Ubuntu 16.04 以上不起作用。我的客户虚拟机是 Ubuntu 16.04。

参考创建Linux服务器

答案4

我还注意到我的 VPN 连接干扰了流浪互联网连接。

感谢这个 stackexchange,我能够通过嵌入到我的 Vagrantfile 中来解决问题

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

避免了必须关闭设备才能通过命令行进行修改,然后重新配置的繁琐工作

export PATH=$PATH:/c/Program\ Files/Oracle/VirtualBox/
VBoxManage list runningvms
export vbox=`VBoxManage list runningvms | cut -d '"' -f 2`
VBoxManage controlvm $vbox poweroff
VBoxManage modifyvm $vbox --natdnshostresolver1 on
vagrant.exe up --provision

相关内容