DNRD is a proxy name server. To clients on your home network, it looks just like a name server. In reality, it forwards every DNS query to the "real" DNS server, and forwards responses back to the client.
So, why would you want to use it? DNRD was designed for home networks where you might want to dial into more than one ISP (ie, your home ISP and a dialup connection to your office). The problem with multiple dialups is that you need to change /etc/resolv.conf for each one. With DNRD, this is no longer necessary.
Before DNRD, there was no easy way to change the default nameserver on a Linux system. You can play games with /etc/resolv.conf, such as copying other versions of this file in place depending on which ISP you're dialing into, but that is a pain. Instead, you can run DNRD on your dial-up machine. Whenever you dial into an ISP, run dnrd with the appropriate DNS server as an argument. Here's an example of how you would run it:
dnrd -s 1.2.3.4
http://dnrd.nevalabs.org/ The latest version of DNRD is 2.10.
/usr/share/doc/dnrd-2.10/INSTALL
The first thing you need to do is to make sure you're not running another name server like bind. Next, create the directory "/etc/dnrd". This directory does not need to have anything in it, but it does need to exist. Then, whenever you dial into an ISP, run dnrd with that ISP's nameserver as an argument:
dnrd -s 1.2.3.4
Also, you need to change /etc/resolv.conf to point to yourself. Of course, instead of running dnrd yourself each time you dial in, you can have it run automatically.
You can run dnrd with multiple, redundant servers as follows:
dnrd -s 1.1.1.1 -s 2.2.2.2 -s 3.3.3.3
If dnrd stops getting replies from the first server, it will time out and start forwarding all queries to the second server, etc.
/usr/share/doc/dnrd-2.10/README-cache
dnrd does now local caching if not turned off with the `—cache=off' command line switch. This is done by storing complete DNS server responses in a local cache area which expires from time to time.
Normal responses are held for at least 60 minutes but not longer than 6 hours. Negative responses (nslookup tells `Non existent host/domain') are stored for only five minutes. These settings are defined in cache.h
The cache knows also a high- and a lowwater mark. If after an expire the number of stored items is above the highwater mark (default 1000), cache items are removed until the lowwater mark (default 750) is reached. The values can be set with `—cache=[<low>:]high' on the command line.