Feb 2008
In the first part of the DNS texts a brief overview of how DNS works and a
very simple DNS server setup was addressed. In this text; forwarding DNS
requests outside of the local zones, q quick look at the options section of
named.conf
and configuring multiple zones (both
multple domains and network addresses) are examined.
The concept of DNS forwarding is simple:
If the local zone(s) cannot answer the query, forward the request to a valid server to try to resolve the query.
For example; in the following configuration
the local zone is foo.net, however, it is for a local domain in
an office building. The corporate network has other DNS zones which the
system administrator of foo.net is not responsible for.
client.foo.net -> dns1.foo.net
Yes I know what IP address that name resolves to...
client.foo.net <- dns1.foo.net
I do not know what IP address that name resolves to;
but I know who to ask...
client.foo.net -> dns1.foo.net -> dns.corp.com client.foo.net <- dns.corp.com
Note that the request is forwarded to the other DNS server, however, the reply does not travel back through the DNS server that forwarded the request. The implication is the client must have full network connectivity to the server the request was forwarded to in addition to knowing what domain(s) the server can resolve addresses for.
Setting up forwarding does require changes to named.conf and
/etc/resolv.conf. Using the previous example
from above and the first text along with having two servers to forward to
in corp.com with an addresse of 172.20.10.10:
options {
forward first;
forwarders {
172.20.10.10;
};
};
The /etc/resolv.conf on client systems then must be changed to
reflect the proper order:
search foo.net corp.com nameserver 172.30.0.10
The client must be aware of at least what domain the forwarder can take care of; in certain configurations (server dependent) the client will not need to know all of the domains - just the primary one that the forwarder is managing. With forwarding configured; a query request now will look like:
client.foo.net makes a request
ask dns1.foo.net
dns1.foo.net knows the address?
yes - send the information to client.foo.net
no - forward the request to 172.20.10.10
172.20.10.10 sends the information to client.foo.net
The options record is used to set global options for the
DNS server. The example only uses the forward and
forwarders options, however, other options can be specified
as well. A good example for options is
entering the full path to file locations can be tedious (especially
on larger servers where there can be several hundred records); instead the
directory option can point to where the files are kept:
options {
directory "/var/named";
forward first;
forwarders {
172.20.10.10;
};
};
The directory entry enables the system administrator to be able
to use relative paths instead of absolute paths, it also makes moving the
files a trivial exercise.
The Pro DNS and Bind
book has a great section online
which deals with option statements. In later texts some of these options will
be examined in further detail.
More often than not within a single organization more than one domain is used
for a variety of reasons. Setting up multiple domains for a small number of
domains is the same as setting up a single domain; just add the
appropiate records in named.conf and db files. Setting up a
large number of domains, however, can be daunting and requires thinking about
a strategy to simplify administration. One way to think of multiple zones is
hosting multiple domains on one server, conceptually it is the same
thing from an address resolution perspective.
Retaining the foo.net and forwarder example information, in
the new example a new domain is being added to the existing DNS server; it is
also on a different network. For simplicity the number of hosts will be kept
low:
dns.bar.net 172.23.0.10 # DNS server for bar domain files1.bar.net 172.23.0.20 # File server for bar domain
named.conf Records
zone "172.23" {
type master;
file "172.23";
};
zone "bar.net" {
type master;
file "bar.net";
};
Are the new records, now all together the named.conf file looks
like:
zone "." {
type hint;
file "named.root";
};
zone "0.0.127.IN-ADDR.ARPA" {
type master;
file "localhost";
};
zone "172.30" {
type master;
file "172.30";
};
zone "foo.net" {
type master;
file "foo.net";
};
zone "172.23" {
type master;
file "172.23";
};
zone "bar.net" {
type master;
file "bar.net";
};
bar.net Forward Lookup File
$TTL 86400 ; 1 day
bar.net IN SOA bar.net. postmaster.bar.net. (
20071120 ; serial
3600 ; refresh (1 hour)
300 ; retry (5 minutes)
172800 ; expire (2 days)
43200 ; minimum (12 hours)
)
NS dns.bar.net. ; the nameserver itself for this zone
dns IN A 172.23.0.10 ; the nameserver
files1 IN A 172.23.0.20 ; file server
172.23 Reverse Lookup File
$TTL 86400 ; 1 day
30.172.in-addr.arpa IN SOA bar.net. root.bar.net. (
20071120 ; serial
3600 ; refresh (1 hour)
300 ; retry (5 minutes)
172800 ; expire (2 days)
43200 ; minimum (12 hours)
)
NS dns1.30.172.in-addr.arpa.
10 IN PTR dns.bar.net.
20 IN PTR files1.bar.net.
After restarting the named process the changes will take
effect. The named directory will now have two additional files:
$ ls /var/named 172,23 bar.net localhost 172.30 foo.net named.root
Setting domains side by side for organizational purposes may work, and when
doing generalized DNS hosting versus building out a logical structure there
is no choice in the matter. When working in an organization of some sort
it might be wiser to think more in terms of levels than groups. Example what
if the users of the bar.net domain are actually a sub-group
within the same area? It might make more sense to setup a domain called
bar.foo.net and possibly another server which forwards to
the DNS server managing foo.net.
Another item to keep in mind when dealing with multiple domain hosting is management. Building out tables for up to a couple hundred systems might not be too much work for some people but in the long run the work might start to become an issue. There are many ways to deal with the problem of record management (and many tools available for that very problem). When going into a large installation that is using a lot of static addresses it is a good idea to think about either obtaining or creating tools to help manage DNS tables.
A good example of helper programs
is the
hosts2named script found on HP-UX systems, using a set of options
an entire host file can easily be converted into a fully functional DNS server.
The catch with hosts2named is the network address must be the same
(unless you don't mind missing reverse records) and all statically assigned
addresses have to be in the /etc/hosts file. If employed a certain
way, that is to say all hosts are always kept in /etc/hosts on the
DNS server itself, an adminsitrator may never even have to edit the DNS files.
Setting up DNS can be daunting or relatively easy; it often requires a slow methodical start. Not unlike most processes on Unix: once it is initially up and running the hard part is over (most - not all :-). Next time a look at configuring and using primary/secondary DNS, DNS debugging, more about options and DDNS updates.
(based on last 2 months log reports)