GDNSD
gdnsd is an authoritative-only DNS server. The core daemon code is written in C using libev and pthreads with a focus on high performance, low latency DNS service. At this early stage, it probably only builds and runs successfully on x86/x86_64 Linux and MacOS X machines.
gdnsd lacks many extraneous features by design, including dynamic DNS updates, zone transfers, recursion, caching, and DNSSEC. At this early stage, it also lacks a few other features which might be added in the future, such as IPv6 support, local RR synthesis from wildcard or DNAME database entries, and support for some of the more esoteric RR types.
gdnsd includes an embedded webserver, which implements some very basic readonly runtime statistical reporting over HTTP/1.0 in html and csv formats for human or automated monitoring purposes.
gdnsd also has a form of dynamic A-record resolution, designed to do rough geographic traffic balancing and failover between services that are hosted redundantly in multiple geographically distinct datacenters. This feature was the primary motivation for starting this project, but others may find the project beneficial for basic authoritative DNS service without ever using this feature. The embedded HTTP server's output includes some very basic state about the monitored resources as well.
Other random features:
- Supports EDNS0 and TCP.
- Supported RR types: A, NS, CNAME, PTR, SOA, MX, SRV, TXT, SPF
- Uses MaxMind's GeoIP for the geographic part (currently Region format only)
- Detailed logging of network oddities (ill-formed queries, etc) can be toggled at runtime via signals.
- Built-in chroot/privdrop code, always required when invoked as root
- GNU autotools are in use, separate build dirs and targets such as "installcheck" work correctly, but the package is not yet relocatable after installation.
- Configuration parsing and validation is done by a separate Perl-based utility (included), rather than in the core C code of the daemon.
- Decent test suite in place. Not exhaustive by far, but covers a lot of the core DNS handling code.
- Stripped daemon binary on x86 Linux is well under 100kB.
Detailed manpages and docs are included with the distribution.
Copyright and Licensing
Some files within this distribution are externally sourced open source software, and are covered by their own seperate copyright and license terms. Notably:
- All files in the subdirectory gdnsd/libev come from Marc Alexander Lehmann's libev distribution, and are covered by his separate LICENSE file, which is also included in that directory. His license is GPL-compatible (specifically, it is an either/or of GPL and other terms).
- Several autoconf-related files (macros and helper scripts and so-on) contain their own embedded copyright and GPL-compatible licensing terms.
All actual gdnsd source code is Copyright © 2008 Logitech (my employer) and licensed under the terms of the GPLv3, and includes statements to that effect within the source files.
Update (Dec 2009)
As stated in a previous update, I'm still (very slowly when I have little bits of time) refactoring this code to change several design decisions off in a private local branch.
A new upload is coming soon, within the next week or so :)