[dns-operations] How should work name resolution on a modern system?

Petr Menšík pemensik at redhat.com
Fri Jun 10 19:16:11 UTC 2022

Hello DNS experts,

I were thinking about requirements for future name resolution primarily 
on Linux desktop and servers. But if anyone could comment other systems 
and their design, I would be glad too. I would like to formulate 
requirements first and find a good way to implement them later.

We have two ways used to resolve names to ip addresses on GNU/Linux.

- first is libc interface getaddrinfo() provided by nss plugins. Names 
can be resolved also by different protocols than just DNS. A good 
examples might be MDNS (RFC 6762), LLMNR (RFC 4795) or Samba 
(nmblookup). Standardized calls provide only blocking resolution interface.

* Asynchronous interface does not exist in useful form. It is easy to 
handle multiple connections in single thread, but multiple resolutions 
in single thread are not supported. nss plugins are simple to write, but 
hard to use in responsibe program. Should that be changed?

* MDNS usually uses names under .local domain. What should be preferred 
order of single label names, like 'router.'? Should be LLMNR tried 
first, samba first or DNS search applied first? Should it avoid reaching 
DNS when search domain is not set?

- primary interest for us is DNS protocol. On Unix systems it specifies 
nameservers to use in /etc/resolv.conf also with some options. We would 
like to offer DNS cache installed on local machine, which should 
increase speed of repeatedly resolved names.

* I would like to have support for multiple interfaces and redirection 
of names subtree to local network interfaces servers. For example 
'home.arpa' redirected to local router at home, but example.com 
redirected to VPN connection. I think RFC 8801 and RFC 7556 specify 
standardized way to list interface specific domains. Existing 
implementations misuse RFC 2937 for a source of such list now. Something 
like this is implemented by systemd-resolved on Ubuntu and Fedora 
systems. But it introduced couple of new issues. Is something similar 
implemented on end user machines? I think laptop and phones are typical 
devices with multiple interfaces, where it would make sense.

My questions:

- how should single label names be handled?
-- is domain (opt. 15) and search (opt. 117) from DHCP already dead? 
Should they be completely avoided even in trusted networks?
-- in which order should be resolution tried? Should machine cache block 
queries to single label hostnames not expanded to FQDN on DNS protocol?
-- I have seen usage of search domains on cloud technologies. Is there 
common example what they are used for? Do we need ndots option with 
value different from 1?

- should we expect DNSSEC capabilities on every machine?
-- should we even enable DNSSEC validation on every machine by default? 
When it would be good idea and when it wouldn't?

- should asynchronous API be prepared for common name to addresses and 
vice versa? One which would support both local network resolution and 
unicast DNS in easy to use way? Usable even in GUI applications without 
common hassle with worker threads?

If there is documentation for name subtree mapping to interface servers 
on different systems, I would be glad if you could share links to it. If 
we should improve current situation, I would like to first gather 
expected requirements for such system. Is there some summary already?

Thank you for any feedback!

Best Regards,

Petr Menšík
Software Engineer, RHEL
Red Hat, http://www.redhat.com/
PGP: DFCF908DB7C87E8E529925BC4931CA5B6C9FC5CB

More information about the dns-operations mailing list