nonamed - not a name daemon, but acts like one
nonamed [-d[level]] [-p port] [-n address[/port]]
Nonamed is not an Internet name daemon. When started it immediately
tries to find a real name daemon on the local network. If it finds one
then it will relay any DNS queries to that name daemon. If it can't find
one then it will do its best to answer simple queries using the
/etc/hosts table for name to address translation.
On startup nonamed broadcasts up to five simple UDP queries on the local
network. This is a somewhat nasty thing to do, because it makes all name
servers on the net spring into action to answer the request. The first
name server to answer is used by nonamed to answer the queries of its
clients. The broadcast search is repeated after an hour to give another
name server a chance to be abused. (It is quite normal for a host to use
a remote name server. The broadcasts are a bit unfriendly, but they only
happen once an hour.)
If a real name server is found then nonamed enters "relay mode", passing
all queries on. In relay mode the daemon cannot be distinguished from a
real DNS name daemon.
Nonamed accepts both UDP and TCP queries under Minix-vmd. Under standard
Minix only UDP queries are accepted. 256 relayed UDP queries can be
outstanding before it forgets where the first one came from.
In answer mode nonamed can answer simple DNS queries to translate a host
name to an IP address, or an IP address to a host name. Suppose
/etc/hosts looks like this:
Then queries for the host names listed can be answered with the IP
addresses to the left of them. If the name can't be found then it is
retried with the domain name stripped of, this is because "localhost" is
looked up as "localhost.home.cs.vu.nl" in the above example. Reverse
lookups are answered with the first hostname on the line with the IP
UDP queries are immediately answered on startup if the answer can be
found in the hosts file. Failure answers, and answers to TCP queries are
delayed until it decides that there are no real name servers out there.
Nonamed employs several timeouts for efficient operation:
If five broadcasts, two seconds apart fail to produce a name server on
startup then it decides that there are no real name servers around.
After 1 hour it will again look for a name server. (We don't want to hog
the same one indefinitely.)
If no UDP reply is seen in four seconds than a simple probe is sent the
name server. If that doesn't provoke an answer in two seconds then it
will look for a new name server. A failing TCP connection will also
invoke a search, the TCP connection is then made to the new name server.
A client using UDP will retry eventually, a client using TCP will notice
nothing but a short delay. The daemon drops back into answer mode if the
search fails and it has a hosts file with a "localhost" entry.
It waits five minutes for any action on a TCP stream before the
connection is aborted.
In answer mode it will generate data with a TTL (time to live) of 1 hour.
The options are only useful when debugging nonamed, although it can be
very instructive to watch DNS queries being done.
Set debugging level to level (a single digit, by default 1.) Debug
mode 1 makes nonamed decode and display the DNS queries and replies
that it receives, sends and relays. The decoding only handles the
common cases. In debug mode 2 it prints tracing information about
the internal jobs it executes. In debug mode 3 it core dumps when
an error causes it to exit. The debugging level may also be
increased by 1 at runtime by sending signal SIGUSR1 or turned off
(set to 0) with SIGUSR2.
Port to use instead of the normal domain port.
Use this IP address and port to find a real name server. It can be
used to make nonamed relay to another nonamed. (They do not listen
to broadcasts, of course.) You can run two daemons on one machine
if you choose a new port number for one of them. You can force
nonamed out of relay mode by sending it a hangup signal.
/etc/hosts Hosts to address translation table when in answer mode.
gethostbyname(3), resolver(3), hosts(5), set_net_default(8), boot(8),
inetd(8), irdpd(8), rarpd(8).
You can specify a remote name server in /etc/resolv.conf to circumvent
nonamed. But then you lose its talent for automatically finding new name
servers when the remote name server becomes unreachable.
Don't add a "localhost" entry to the hosts file if there are remote name
servers. It makes nonamed drop back in answer mode on a flaky network.
If you can get a remote nonamed to listen to your name server then you
can make it believe anything you want to. You need access to a machine
on the same subnet of course.
Kees J. Bot (email@example.com)