diff --git a/lib/vagrant/action/vm/sane_defaults.rb b/lib/vagrant/action/vm/sane_defaults.rb index dd1068d91..f2dd31ab9 100644 --- a/lib/vagrant/action/vm/sane_defaults.rb +++ b/lib/vagrant/action/vm/sane_defaults.rb @@ -28,13 +28,34 @@ module Vagrant ] attempt_and_log(command, "Enabling the Host I/O cache on the SATA controller...") - # Enable the DNS proxy while in NAT mode. This shields the guest - # VM from external DNS changs on the host machine. - command = [ - "modifyvm", env[:vm].uuid, - "--natdnsproxy1", "on" - ] - attempt_and_log(command, "Enable the NAT DNS proxy on adapter 1...") + enable_dns_proxy = true + begin + contents = File.read("/etc/resolv.conf") + + if contents =~ /^nameserver 127\.0\.0\.1$/ + # The use of both natdnsproxy and natdnshostresolver break on + # Ubuntu 12.04 that uses resolvconf with localhost. When used + # VirtualBox will give the client dns server 10.0.2.3, while + # not binding to that address itself. Therefore disable this + # feature if host uses the resolvconf server 127.0.0.1 + @logger.info("Disabling DNS proxy since resolv.conf contains 127.0.0.1") + enable_dns_proxy = false + end + rescue Errno::ENOENT; end + + # Enable/disable the NAT DNS proxy as necessary + if enable_dns_proxy + command = [ + "modifyvm", env[:vm].uuid, + "--natdnsproxy1", "on" + ] + attempt_and_log(command, "Enable the NAT DNS proxy on adapter 1...") + else + command = [ "modifyvm", env[:vm].uuid, "--natdnsproxy1", "off" ] + attempt_and_log(command, "Disable the NAT DNS proxy on adapter 1...") + command = [ "modifyvm", env[:vm].uuid, "--natdnshostresolver1", "off" ] + attempt_and_log(command, "Disable the NAT DNS resolver on adapter 1...") + end @app.call(env) end