The Lightweight Resolver Library
Traditionally, applications have been linked with a stub resolver
library that sends recursive DNS queries to a local caching name
server.
At first, IPv6 introduced new complexity into the resolution process,
such as following A6 chains and DNAME records, and simultaneous
lookup of IPv4 and IPv6 addresses. Though most of the complexity was
then removed, these are hard or impossible
to implement in a traditional stub resolver.
BIND 9 therefore can also provide resolution
services to local clients
using a combination of a lightweight resolver library and a resolver
daemon process running on the local host. These communicate using
a simple UDP-based protocol, the "lightweight resolver protocol,"
that is distinct from and simpler than the full DNS protocol.
Running a Resolver Daemon
To use the lightweight resolver interface, the system must
run the resolver daemon lwresd or a
local
name server configured with a lwres
statement.
By default, applications using the lightweight resolver library
make
UDP requests to the IPv4 loopback address (127.0.0.1) on port 921.
The
address can be overridden by lwserver
lines in
/etc/resolv.conf.
The lwresd daemon is essentially a
caching-only name server that responds to requests using the
lightweight
resolver protocol rather than the DNS protocol. Because it needs
to run on each host, it is designed to require no or minimal
configuration.
Unless otherwise instructed, it uses the name servers listed on
nameserver lines in /etc/resolv.conf
as forwarders, but is also capable of doing the resolution
autonomously if
none are specified.
The lwresd daemon may also be
configured with a
named.conf-style configuration file,
in
/etc/lwresd.conf by default. A name
server may also
be configured to act as a lightweight resolver daemon using the
lwres statement in named.conf.
The number of client queries that the lwresd
daemon serves can be set using the
lwres-tasks and lwres-clients
statements in the configuration.