Ubuntu – systemd-resolved does not query dns server for local domain

dnsnetworking

Since upgrading to 17.04 I can no longer resolve addresses in my local network (silvesternet.local). I get the following response:

$ systemd-resolve edgerouter
edgerouter: resolve call failed: No appropriate name servers or networks for name found

In the journal there are only reports of timeouts for transaction related to this lookup.

I used Wireshark to sniff the network traffic, and it seems that it does not even try to lookup the name. There is no dns traffic whatsoever. Looking up another external domain works just fine.

Many issues around the same topic mention changing nsswitch.conf, but that does not seem to solve anything. My current settings are:

hosts:          files mdns4_minimal dns [NOTFOUND=return] resolve [!UNAVAIL=return] mdns4

Best Answer

I believe this is by design.

Ubuntu 17.04 has switched to systemd-resolved for name resolution and it uses only LLMNR (multicast name lookup) for single-label names resolution. See this link for details: https://www.freedesktop.org/software/systemd/man/systemd-resolved.service.html

For the reasoning behind this decision check out poettering's reply in this bug report: https://github.com/systemd/systemd/issues/2514

UPD: This issue can be worked around by using a domain for local network. If network interface is configured (either manually or by DHCP) to use a search domain then systemd-resolved will add this domain to single-label names and then look them up via unicast DNS.

Obviously the local DNS server should be reconfigured to recognise these domain. In case of dnsmasq that reads local host-to-IP pairs from /etc/hosts it can be accomplished by adding following instructions to dnsmasq.conf:

domain=mydomain.net
local=/mydomain.net/
expand-hosts

UPD2: Or you could just revert to dnsmasq as described here https://askubuntu.com/a/911432/692094

Related Question