Domain name resolution: Difference between revisions
(move note about programs directly reading resolv.conf from →resolv.conf: to →Name Service Switch) |
(→Name Service Switch: add redirect hatnote as suggested in Talk:Nss#Disambiguation pages) |
||
Line 13: | Line 13: | ||
== Name Service Switch == | == Name Service Switch == | ||
:''"NSS" redirects here. For Mozilla cryptographic libraries, see [[Network Security Services]].'' | |||
The [[Wikipedia:Name Service Switch|Name Service Switch]] (NSS) facility is part of the GNU C Library ({{Pkg|glibc}}) and backs the {{man|3|getaddrinfo}} API, used to resolve domain names. NSS allows system databases to be provided by separate services, whose search order can be configured by the administrator in {{man|5|nsswitch.conf}}. The database responsible for domain name resolution is the {{ic|hosts}} database, for which glibc offers the following services: | The [[Wikipedia:Name Service Switch|Name Service Switch]] (NSS) facility is part of the GNU C Library ({{Pkg|glibc}}) and backs the {{man|3|getaddrinfo}} API, used to resolve domain names. NSS allows system databases to be provided by separate services, whose search order can be configured by the administrator in {{man|5|nsswitch.conf}}. The database responsible for domain name resolution is the {{ic|hosts}} database, for which glibc offers the following services: |
Revision as of 18:16, 23 May 2018
This article explains how to configure domain name resolution and resolve domain names.
Name Service Switch
- "NSS" redirects here. For Mozilla cryptographic libraries, see Network Security Services.
The Name Service Switch (NSS) facility is part of the GNU C Library (glibc) and backs the getaddrinfo(3) API, used to resolve domain names. NSS allows system databases to be provided by separate services, whose search order can be configured by the administrator in nsswitch.conf(5). The database responsible for domain name resolution is the hosts
database, for which glibc offers the following services:
file
: the hosts file/etc/hosts
, see hosts(5)dns
: the #Glibc resolver/etc/resolv.conf
, see resolv.conf(5)
Systemd provides three NSS services for hostname resolution:
- nss-resolve(8) - a caching DNS stub resolver, described in #Systemd-resolved
- nss-myhostname(8) - provides hostname resolution without having to edit
/etc/hosts
- nss-mymachines(8) - provides hostname resolution for the names of local systemd-machined(8) containers
NSS databases can be queried with getent(1). You can resolve a domain name through NSS using:
$ getent hosts domain_name
Glibc resolver
The glibc DNS resolver reads resolv.conf(5) (/etc/resolv.conf
) for every resolution to determine the nameservers and options to use.
Nameservers listed first are tried first, up to three nameservers may be listed. Lines starting with a number sign are ignored.
Limit lookup time
If you are confronted with a very long hostname lookup (may it be in pacman or while browsing), it often helps to define a small timeout after which an alternative nameserver is used. To do so, put the following in /etc/resolv.conf
.
options timeout:1
Hostname lookup delayed with IPv6
If you experience a 5 second delay when resolving hostnames it might be due to a DNS-server/Firewall misbehaving and only giving one reply to a parallel A and AAAA request (source).
You can fix that by setting the following option in /etc/resolv.conf
:
options single-request
Local domain names
If you want to be able to use the hostname of local machine names without the fully qualified domain names, then add a line to resolv.conf
with the local domain such as:
domain example.com
That way you can refer to local hosts such as mainmachine1.example.com
as simply mainmachine1
when using the ssh command, but the drill command still requires the fully qualified domain names in order to perform lookups.
Systemd-resolved
systemd-resolved(8) is a systemd service that provides network name resolution to local applications via a D-Bus interface, the resolve
NSS service (nss-resolve(8)), and a local DNS stub listener on 127.0.0.53
.
systemd-resolved has four different modes for handling resolv.conf (described in systemd-resolved(8) § /ETC/RESOLV.CONF). We will focus here on the two most relevant modes.
- The mode in which systemd-resolved is a client of the
/etc/resolv.conf
. This mode preserves/etc/resolv.conf
and is compatible with the procedures described in this page. - The systemd-resolved's recommended mode of operation: the DNS stub file as indicated below contains both the local stub
127.0.0.53
as the only DNS servers and a list of search domains.
/run/systemd/resolve/stub-resolv.conf
nameserver 127.0.0.53 search lan
The service users are advised to redirect the /etc/resolv.conf
file to the local stub DNS resolver file /run/systemd/resolve/stub-resolv.conf
managed by systemd-resolved. This propagates the systemd managed configuration to all the clients. This can be done by deleting or renaming the existing /etc/resolv.conf
and replacing it by a symbolic link to the systemd stub:
# ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
In this mode, the DNS servers are provided in the resolved.conf(5) file:
/etc/systemd/resolved.conf
[Resolve] DNS=91.239.100.100 89.233.43.71 ...
In order to check the DNS actually used by systemd-resolved, the command to use is:
$ systemd-resolve --status
- To understand the context around the DNS choices and switches, one can turn on detailed debug information for systemd-resolved as described in Systemd#Diagnosing a service.
- The mode of operation of systemd-resolved is detected automatically, depending on whether
/etc/resolv.conf
is a symlink to the local stub DNS resolver file or contains server names.
resolv.conf
/etc/resolv.conf
is the configuration file of the #Glibc resolver and is also used by #Systemd-resolved.
To find out how a network manager handles resolv.conf consult its resolv.conf section:
To prevent programs from overwriting resolv.conf you can also write-protect it by setting the immutable file attribute.
Performance
The #Glibc resolver does not cache queries. If you want local caching use #Systemd-resolved or set up a local caching DNS server (there are some in Category:Domain Name System).
Internet service providers usually provide working DNS servers. A router may also add an extra DNS server in case it has its own cache server. Switching between DNS servers is transparent for Windows users, because if a DNS server is slow or does not work it will immediately switch to a better one. However, Linux usually takes longer to timeout, which could cause delays.
Lookup utilities
To query specific DNS servers and DNS/DNSSEC records you can use a DNS lookup utility.
- bind-tools provides dig(1), host(1), nslookup(1) and a bunch of
dnssec-
tools. - ldns provides drill(1), which is similar to dig
For example, to query a specific nameserver with drill for the TXT records of a domain:
$ drill @nameserver TXT domain
If you do not specify a DNS server dig and drill use the nameservers defined in /etc/resolv.conf
.