When working with Vagrant and VirtualBox, you might encounter a peculiar situation where your VM can resolve some domains perfectly while failing on others. Here's what's happening under the hood:
$ dig security.ubuntu.com +short
91.189.92.181 # Works fine
$ dig us.archive.ubuntu.com
;; connection timed out # Fails
VirtualBox uses a special NAT resolver (10.0.2.3) that sometimes struggles with certain DNS configurations. The key observations from our case:
- Works: security.ubuntu.com, google.com, www.apple.com
- Fails: us.archive.ubuntu.com, apple.com (without www)
The +trace
output reveals the DNS resolution works when bypassing the local resolver, indicating the problem lies with VirtualBox's DNS proxy:
$ dig us.archive.ubuntu.com +trace
; Full trace shows successful resolution
; while standard query times out
Solution 1: Bypass VirtualBox DNS Proxy
Edit /etc/resolv.conf
to use public DNS servers instead of 10.0.2.3:
nameserver 8.8.8.8
nameserver 8.8.4.4
options timeout:1 attempts:1
Solution 2: Modify Vagrantfile
Add this configuration to force proper DNS handling:
Vagrant.configure("2") do |config|
config.vm.provider "virtualbox" do |vb|
vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
vb.customize ["modifyvm", :id, "--natdnsproxy1", "off"]
end
end
To identify specific DNS issues:
# Check DNS response times
$ time dig @10.0.2.3 us.archive.ubuntu.com
$ time dig @8.8.8.8 us.archive.ubuntu.com
# Test different record types
$ dig us.archive.ubuntu.com A
$ dig us.archive.ubuntu.com AAAA
$ dig us.archive.ubuntu.com MX
For Ubuntu VMs, prevent resolv.conf
from being overwritten:
$ sudo apt-get install resolvconf
$ sudo nano /etc/resolvconf/resolv.conf.d/head
# Add your preferred nameservers
$ sudo service resolvconf restart
Remember to test after each change:
$ ping -c 3 us.archive.ubuntu.com
$ curl -I http://us.archive.ubuntu.com
When working with Vagrant and VirtualBox, you might encounter a peculiar DNS resolution issue where some domains (like us.archive.ubuntu.com
) fail to resolve while others (like security.ubuntu.com
) work perfectly. The host machine resolves all domains correctly, but the VM struggles with specific ones.
The symptoms typically appear as:
Err http://us.archive.ubuntu.com/ubuntu/ lucid/main make 3.81-7ubuntu1
Could not resolve 'us.archive.ubuntu.com'
Interestingly, dig
with +trace
works while normal queries fail:
vagrant@lucid64:~$ dig us.archive.ubuntu.com +trace
; <<>> DiG 9.7.0-P1 <<>> us.archive.ubuntu.com +trace
;; global options: +cmd
. 199183 IN NS d.root-servers.net.
[...]
us.archive.ubuntu.com. 600 IN A 91.189.92.192
The issue stems from VirtualBox's NAT networking and DNS proxy behavior. The default /etc/resolv.conf
shows:
nameserver 10.0.2.3
domain mydomain.com
search mydomain.com
VirtualBox's DNS proxy (10.0.2.3) sometimes struggles with certain DNS queries, particularly when:
- The domain uses DNSSEC
- There are specific TTL or record configurations
- The response exceeds UDP packet size and needs TCP fallback
1. Bypass VirtualBox's DNS Proxy
Edit /etc/resolv.conf
to use public DNS servers:
sudo bash -c 'cat > /etc/resolv.conf <
2. Configure Network Manager (For Ubuntu VMs)
sudo nano /etc/NetworkManager/NetworkManager.conf
Add or modify:
[main]
dns=default
Then restart NetworkManager:
sudo service network-manager restart
3. Vagrant-Specific Fix
Add this to your Vagrantfile:
config.vm.provision "shell", inline: <<-SHELL
sudo resolvconf -u
sudo systemctl restart systemd-resolved
SHELL
4. Testing DNS Resolution
Verify your changes with:
dig us.archive.ubuntu.com +short
dig @8.8.8.8 us.archive.ubuntu.com
ping -c 4 us.archive.ubuntu.com
If issues persist, check DNS query behavior:
tcpdump -i eth0 -n port 53
dig +dnssec us.archive.ubuntu.com
dig +tcp us.archive.ubuntu.com
For VirtualBox-specific debugging:
VBoxManage list hostonlyifs
VBoxManage modifyvm "VM name" --natdnshostresolver1 on
Consider these best practices:
- Use bridged networking instead of NAT when possible
- Keep VirtualBox Guest Additions updated
- Regularly update your VM's DNS cache (
sudo systemd-resolve --flush-caches
)