Preventing systemd-resolved from caching non-existent domains
If you use a recent version of Ubuntu, all DNS resolution is ultimately handled by a locally running server that is part of systemd. This works fine for the most part.
All hosts on my network get a domain name assigned to them as soon as the DHCP lease is formed. So a common thing I do is to plug in a device, then try and SSH to thatdevice.home.hydrogen18.com
. This works, so long as the device has already received a DHCP lease. If it hasn't, systemd had a very frustrating behavior by default where it would keep the result of the DNS lookup in the cache. So I couldn't try and SSH until the cache entry had expired.
This behavior is easy enough to disable, by editing /etc/systemd/resolved.conf
as root. Find or uncomment the line starting with Cache=
and then set it to this
Cache=no-negative
This stops systemd from caching an NXDOMAIN response, which means if a domain does not exist then trying to resolve it again makes a query back to the DNS server. You need to restart the systemd component by running sudo systemctl restart systemd-resolved
for the updated configuration to take effect.