Keeping it working.
There is one maintenance task you have to do on nameds, other than
keeping them running. That's keeping the root.hints
file
updated. The easiest way is using dig. First run dig with no
arguments you will get the root.hints
according to your own
server. Then ask one of the listed root servers with dig
@rootserver
. You will note that the output looks terribly like a
root.hints
file. Save it to a file (dig @e.root-servers.net . ns
>root.hints.new
) and replace the old root.hints
with it.
Remember to reload named after replacing the cache file.
Al Longyear sent me this script that can be run automatically to
update root.hints
. Install a crontab entry to run it once a
month and forget it. The script assumes you have mail working and
that the mail-alias `hostmaster' is defined. You must hack it to suit
your setup.
#!/bin/sh # # Update the nameserver cache information file once per month. # This is run automatically by a cron entry. # # Original by Al Longyear # Updated for BIND 8 by Nicolai Langfeldt # Miscelanious error-conditions reported by David A. Ranch # Ping test suggested by Martin Foster # named up-test suggested by Erik Bryer. # ( echo "To: hostmaster <hostmaster>" echo "From: system <root>" # Is named up? Check the status of named. case `ndc status 2>&1` in *'cannot connect to command channel'*) echo "named is DOWN. root.hints was NOT updated" echo exit 0 ;; esac PATH=/sbin:/usr/sbin:/bin:/usr/bin: export PATH # NOTE: /var/named must be writable only by trusted users or this script # will cause root compromise/denial of service opportunities. cd /var/named 2>/dev/null || { echo "Subject: Cannot cd to /var/named, error $?" echo echo "The subject says it all" exit 1 } # Are we online? Ping a server at your ISP case `ping -qnc 1 some.machine.net 2>&1` in *'100% packet loss'*) echo "Subject: root.hints NOT updated. The network is DOWN." echo echo "The subject says it all" exit 1 ;; esac dig @e.root-servers.net . ns >root.hints.new 2> errors case `cat root.hints.new` in *NOERROR*) # It worked :;; *) echo "Subject: The root.hints file update has FAILED." echo echo "The root.hints update has failed" echo "This is the dig output reported:" echo cat root.hints.new errors exit 1 ;; esac echo "Subject: The root.hints file has been updated" echo echo "The root.hints file has been updated to contain the following information:" echo cat root.hints.new chown root.root root.hints.new chmod 444 root.hints.new rm -f root.hints.old errors mv root.hints root.hints.old mv root.hints.new root.hints ndc restart echo echo "The nameserver has been restarted to ensure that the update is complete." echo "The previous root.hints file is now called /var/named/root.hints.old." ) 2>&1 | /usr/lib/sendmail -t exit 0
Some of you might have picked up that the root.hints
file is
also available by ftp from Internic. Please don't use ftp to update
root.hints
, the above method is much more friendly to the net,
and Internic.