MIND: Micro Internet Name Daemon


Read Me First

Important: This software was written in 2001 to test several features of C++98 in a thread pool environment, and to make a point about BIND. This is not a good example of modern C++11-era design, it is unsupported, it was written before DNS cache poisoning was commonplace, and lacks support for critical features like DNSSEC. It should not be used in production. If you need a production caching resolver, I strongly recommend using djbdns or unbound instead.

Introduction

MIND is a C++ implementation of a simple DNS proxy cache server. It is freely available under the terms of a BSD-style open source license. MIND is believed to work on FreeBSD and QNX, but should work on a wide variety of Unix-like platforms with minimal or no changes.

MIND is designed to be easy to use. In fact, it can run with no command line parameters or config file at all by using a list of built-in root servers. When you configure it, MIND attempts to determine whether your existing name service uses ICANN or OpenNIC root servers and configures itself accordingly. You can override this behavior by changing a flag, or through a config file.

The current version of MIND is 1.0. This is the first publicly available version, and it has undergone only limited scrutiny from third parties as to its reliability and security. Therefore, if you wish to use it for production purposes, you are strongly urged to conduct your own evaluation to determine its suitablity.

Obtaining MIND

To build MIND you will need the following components.

Depending on your platform, you may also need autoconf-2.52 and automake-1.5. Older versions may not work correctly. Always try the existing configure scripts first.

You can also browse the source online.

Building MIND

MIND is designed to compile without warnings on most modern C++ compilers. It is most compatible with g++. The software has been tested using g++ 3.0.2 with the included STL, and with g++ 2.95.3 using Dinkumware and STLPort 4.5. It is not compatible with the STL that ships with g++ 2.95.3.

Why Another DNS Server?

There are already two free implementations of DNS. The first is djbdns, which is excellent if somewhat difficult to configure. The other is the venerable BIND. Neither runs very well on all the platforms I use.

MIND was written as a fun project to build a small alternative for the features that I use in my network every day. It is about 8,700 lines of C++, of which over half are comments or whitespace, and it took about three weeks to write v1.0. BIND, by way of comparison, contains about 300,000 lines of code (more than Apache and Sendmail combined) and contains scores of interesting features that I never use. So I open-sourced MIND on the theory that there may be some other people to whom a small, purpose-built DNS proxy cache would be useful.

The Future of MIND

It would be a relatively simple matter to add the code to MIND to become a full-fledged authoritative server. That's one of many enhancements I may do if this generates any interest. There are many others. See the TODO file in the source tree for more information.

About Me

I wrote a DNS server for fun. That pretty much says it all, doesn't it?


Home | Software | MIND