Likewise, knowing what to do in a network disaster (or even just a minor mishap) can help you keep your network running. Living out in California, as we do, we have some experience and some suggestions.
You'd think this wouldn't affect communication between hosts in your local domain, but it can. For example, if you type:
on a host running an older version of the resolver, the first domain name the resolver looks up is selma.corp.acme.com.corp.acme.com (assuming your host is using the default search list -- remember this from Chapter 6, "Configuring Hosts"?). The local name server, if it's authoritative for corp.acme.com, can tell that's not a kosher domain name. The next lookup, however, is for selma.corp.acme.com.acme.com. This prospective domain name is no longer in the corp.acme.com zone, so the query is sent to the acme.com name servers. Or rather, your local name server tries to send the query there and keeps retransmitting until it times out.% telnet selma.corp.acme.com
You can avoid this problem by making sure the first domain name the resolver looks up is the right one. Instead of typing:
it's better to type:% telnet selma.corp.acme.com
or:% telnet selma
(Note the trailing dot.) These result in a lookup of selma.corp.acme.com first.% telnet selma.corp.acme.com.
BIND 4.9 and later resolvers don't have this problem, at least not by default. 4.9 and newer resolvers check the domain name as-is first, as long as the name has more than one dot in it. So, if you type:
even without the trailing dot, the first name looked up is selma.corp.acme.com.% telnet selma.corp.acme.com
If you are stuck running a 4.8.3 BIND or older resolver, you can avoid querying off-site name servers by taking advantage of the configurable search list. You can use the search directive to define a search list that doesn't include your parent zone's domain name. For example, to work around the problem corp.acme.com is having, you could temporarily set your hosts' search lists to just:
Now, when a user types:search corp.acme.com
the resolver looks up selma.corp.acme.com.corp.acme.com first (which the local name server can answer), then selma.corp.acme.com, the correct domain name. And this works fine, too:% telnet selma.corp.acme.com
% telnet selma
In case your name service really goes haywire because of the connectivity loss, it's a good idea to keep a site-wide or workgroup /etc/hosts around. In times of dire need, you can move resolv.conf to resolv.bak, kill the local name server (if there is one), and just use /etc/hosts. It's not flashy, but it'll get you by.
As for slaves, you can reconfigure a slave that can't reach its master to temporarily run as a primary master. Just edit named.conf and change the type substatement in the zone statement from slave to master, then delete the masters substatement. If more than one slave for the same zone is cut off, you can configure one as a primary master temporarily and reconfigure the others to load from the temporary primary.
Alternatively, you can just increase the expire time in all of your slaves' backup zone data files, and then signal the slaves to reload the files.
To provide root name service during a long outage, you can set up your own root name servers, but only temporarily. Once you're reconnected to the Internet, you must shut off your temporary root servers. The most obnoxious vermin on the Internet are name servers that believe they're root name servers but don't know anything about most top-level domains. A close second is the Internet name server configured to query -- and report -- a false set of root name servers.
That said, and our alibis in place, here's what you have to do to configure your own root name server. First, you need to create db.root, the root zone data file. The db.root file will delegate to the highest-level zones in your isolated network. For example, if movie.eduwere to be isolated from the Internet, we might create a db.root file for terminator that looked like this:
Then we need to add the appropriate line to terminator 's named.conf file:$TTL 1d . IN SOA terminator.movie.edu. al.robocop.movie.edu. ( 1 ; Serial 3h ; Refresh 1h ; Retry 1w ; Expire 1h ) ; Negative TTL IN NS terminator.movie.edu. ; terminator is the temp. root ; Our root only knows about movie.edu and our two ; in-addr.arpa domains movie.edu. IN NS terminator.movie.edu. IN NS wormhole.movie.edu. 249.249.192.in-addr.arpa. IN NS terminator.movie.edu. IN NS wormhole.movie.edu. 253.253.192.in-addr.arpa. IN NS terminator.movie.edu. IN NS wormhole.movie.edu. terminator.movie.edu. IN A 192.249.249.3 wormhole.movie.edu. IN A 192.249.249.1 IN A 192.253.253.1
Or, for BIND 4's named.boot file:// Comment out hints zone // zone . { // type hint; // file "db.cache"; // }; zone "." { type master; file "db.root"; };
We then update all of our name servers (except the new, temporary root) with a db.cache file that includes just the temporary root name server (it's best to move the old root hints file aside -- we'll need it later, once connectivity is restored).; cache . db.cache (comment out the cache directive) primary . db.root
Here are the contents of the file db.cache :
That will keep movie.eduname resolution going during the outage. Then, once Internet connectivity is restored, we can delete the new master zone statement from named.conf, uncomment the hint zone statement on terminator, and restore the original root hints files on all our other name servers.. 99999999 IN NS terminator.movie.edu. terminator.movie.edu. 99999999 IN A 192.249.249.3