A customizable DNS server written in Java.

User Resources

Sysadmin Resources

Developer Resources

Related Sites

Copyright 2000 Eric Kidd. All rights reserved. This contents of this website may be distributed under the same license as CustomDNS.

SourceForge Logo

How it Works

CustomDNS is built out of several different components. These can be replaced or modified for specific applications.

Most of the code is written in Java or Perl. Many of the components rely on e-speak, a GPL'd component architecture generously provided by HP. (E-speak is roughly what you'd get if you crossed CORBA with LDAP and simplified the resulting mess a bit.)


This is a modified version of jnamed. (The original jnamed can be found in Brian Wellington's dnsjava package.)

VirtualDNS is a Java DNS server with support for virtual zones. A virtual zone contains a mixture of static and dynamic DNS records. Static records are served out of a normal zone file. Dynamic records are created on the fly. You can provide your own dynamic records by subclassing VirtualDNS.

This code does not depend on anything but dnsjava. So if you don't want to use e-speak, this is your best starting point.


This is an abstract e-speak service interface for looking up an address record. You can browse the ESIDL online.

If you want to provide your own source of IP addresses, you should implement this interface.


This is a subclass of VirtualDNS that looks for an implementation of ZoneAuthorityIntf and queries it for address records. Because e-speak allows you to build distributed applications, you can run run several instances of this server on different machines.


Another abstract e-speak interface. (Browse it.)

ZoneRegistrarIntf provides an interface for updating an address record. It's used by the UpdateServer.


Another abstract e-speak interface. (Browse it.)

ZoneAuthenticatorIntf approves address updates. It's also used by the UpdateServer. If you want to replace CustomDNS's user database with your own, implement this interface.


This class implements a simple update server. Clients can contact it using a trivial TCP/IP protocol. The UpdateServer looks for implementations of ZoneAuthenticatorIntf and ZoneRegistrarIntf using e-speak at startup time.

If you want to support other update protocols (like DDNS or XML-RPC), you'll need to provide your own UpdateServer.

CGI Interface

The CustomDNS distribution includes a simple web interface for creating new hostnames and updating addresses. If you want to provide a clone of with your own branding, use these scripts as a starting point.