Navigation


Documentation for Eagle DNS 1.1

Table of contents

  1. Introduction
  2. Configuration
  3. Logging
  4. Secondary zones and zone transfers (AXFR)
    1. AXFR security
  5. ZoneProvider interface
  6. FileZoneProvider
  7. DBZoneProvider
    1. Importing zones to database from zone files
    2. Adding secondary zones
    3. Examples
  8. Resolvers
  9. AuthorativeResolver
  10. ForwardingResolver
  11. General purpose plugins
  12. Remote Management Interface
  13. ZoneReplication

Introduction

Eagle DNS is a scalable and very flexible DNS server that can be configured to act as a authoritative DNS server, recursive DNS server, DNS proxy and much more using custom chains of resolvers. All configuration is done using a simple XML based configuration file described in the next chapter.

Configuration

The configuration file that ships with Eagle DNS is ready to use and configured for loading plain zone files from the "zones" folder and use only the AuthoritativeResolver effectively making it a simple authoritative server.

Below is a copy of the default configuration file:

<Config>
    <System>
        <Port>53</Port>
        <TCPThreadPoolMinSize>5</TCPThreadPoolMinSize>
        <TCPThreadPoolMaxSize>20</TCPThreadPoolMaxSize>
        <TCPThreadPoolShutdownTimeout>60</TCPThreadPoolShutdownTimeout>
        <UDPThreadPoolMinSize>5</UDPThreadPoolMinSize>
        <UDPThreadPoolMaxSize>20</UDPThreadPoolMaxSize>
        <UDPThreadPoolShutdownTimeout>60</UDPThreadPoolShutdownTimeout>
        <AXFRTimeout>30</AXFRTimeout>
        <RequireZones>false</RequireZones>
       
        <!-- NOERROR or NXDOMAIN -->
       
        <DefaultResponse>NXDOMAIN</DefaultResponse>
    </System>
    
    <ZoneProviders>
        <ZoneProvider>
            <Name>Default file zone provider</Name>
            <Class>se.unlogic.eagledns.zoneproviders.file.FileZoneProvider</Class>
            <Properties>
                <Property name="zoneFileDirectory">zones</Property>
                <Property name="autoReloadZones">true</Property>
                <Property name="pollingInterval">10</Property>
            </Properties>
        </ZoneProvider>
       
        <!-- Uncomment the block below if you wish to read you zones from DB -->
       
        <!--
        <ZoneProvider>
            <Name>Default DB zone provider</Name>
            <Class>se.unlogic.eagledns.zoneproviders.db.DBZoneProvider</Class>
            <Properties>
                <Property name="driver">com.mysql.jdbc.Driver</Property>
                <Property name="username">root</Property>
                <Property name="password">root</Property>
                <Property name="url">jdbc:mysql://localhost:3306/eagledns</Property>
            </Properties>
        </ZoneProvider>        
        -->
    </ZoneProviders>
    
    <Resolvers>
        <Resolver>
            <Name>Authoritative resolver</Name>
            <Class>se.unlogic.eagledns.resolvers.AuthoritativeResolver</Class>
        </Resolver>
       
        <!-- Uncomment the block below to enable a forwarding resolver without failover enabled -->
       
        <!--
        <Resolver>
            <Name>Forwarder (without failover)</Name>
            <Class>se.unlogic.eagledns.resolvers.ForwardingResolver</Class>
            <Properties>
                <Property name="server">192.168.1.1</Property>
                <Property name="timeout">1</Property>
            </Properties>            
        </Resolver>    
        -->                
       
        <!-- Uncomment the block below to enable a forwarding resolver with failover enabled -->
       
        <!--
        <Resolver>
            <Name>Forwarder (with failover)</Name>
            <Class>se.unlogic.eagledns.resolvers.ForwardingResolver</Class>
            <Properties>
                <Property name="server">192.168.1.245</Property>
                <Property name="timeout">1</Property>
                <Property name="maxerrors">3</Property>
                <Property name="errorWindowsSize">30</Property>
                <Property name="validationQuery">samplezone.org</Property>
            </Properties>            
        </Resolver>
        -->
    </Resolvers>
    
    <Plugins>
        <!-- RMI based remote management plugin needed for the info, reload and stop scripts to work -->
        <Plugin>
            <Name>RMI remote management</Name>
            <Class>se.unlogic.eagledns.plugins.remotemanagement.RMIRemoteManagementPlugin</Class>
            <Properties>
                <Property name="password">secret</Property>
                <Property name="port">5353</Property>
               
                <!-- Sets the java.rmi.server.hostname used for RMI clients -->
                <Property name="rmiServerHostname">localhost</Property>
            </Properties>
        </Plugin>
       
        <!-- This is a new plugin that keeps track of the number of queries handled -->
        <Plugin>
            <Name>Query statistics</Name>
            <Class>se.unlogic.eagledns.plugins.QueryStatsPlugin</Class>
            <Properties>
                <!-- This property controls how often statistics should be saved to file (in seconds) -->
                <Property name="savingInterval">60</Property>
               
                <!-- This property controls where the statistics file is written -->
                <Property name="filePath">logs/querystats.xml</Property>
            </Properties>
        </Plugin>
       
        <!-- RMI based zone replication plugin (server) -->
        <!--    
        <Plugin>
            <Name>RMI zone replication server</Name>
            <Class>se.unlogic.eagledns.plugins.zonereplicator.ReplicationServerPlugin</Class>
            <Properties>
                <Property name="rmiServerHostname">localhost</Property>
                <Property name="rmiPassword">secret</Property>
                <Property name="rmiPort">5000</Property>
               
                <Property name="driver">com.mysql.jdbc.Driver</Property>
                <Property name="username">root</Property>
                <Property name="password">root</Property>
                <Property name="url">jdbc:mysql://localhost:3306/eagledns</Property>                
            </Properties>
        </Plugin>
        -->
       
        <!-- RMI based zone replication plugin (client) -->
        <!--
        <Plugin>
            <Name>RMI zone replication server</Name>
            <Class>se.unlogic.eagledns.plugins.zonereplicator.ReplicationClientPlugin</Class>
            <Properties>
                <Property name="serverAddress">localhost</Property>
                <Property name="rmiPassword">secret</Property>
                <Property name="rmiPort">5000</Property>
               
                <Property name="replicationInterval">60</Property>
               
                <Property name="driver">com.mysql.jdbc.Driver</Property>
                <Property name="username">root</Property>
                <Property name="password">root</Property>
                <Property name="url">jdbc:mysql://localhost:3306/eagledns</Property>                    
            </Properties>
        </Plugin>
        -->            
    </Plugins>            
</Config>

The path to the configuration file can be given as a command line parameter to Eagle DNS upon startup. If no parameter is given Eagle DNS defaults to using the following default path to configuration file "conf/config.xml".

The configuration file is divided into three main elements, <System>, <ZoneProviders> and <Resolvers>. The <System> element contains global configuration entries that are specific to Eagle DNS. The <ZoneProviders> element contains zone providers and their specific configuration properties. The <Resolvers> element contains resolvers and their specific configuration properties.

The <System> element may/must contains the following settings:

Name Value Required occurrence
Address Valid IP address no (defaults to 0.0.0.0 which listens to all interfaces) 0..*
Port 0-65535 no (defaults to 53) 0..*
TCPThreadPoolMinSize 1-2147483647 no (defaults to 10) 0..1
TCPThreadPoolMaxSize 1-2147483647 no (defaults to 50) 0..1
TCPThreadPoolShutdownTimeout 1-2147483647 (seconds) no (defaults to 60) 0..1
UDPThreadPoolMinSize 1-2147483647 no (defaults to 10) 0..1
UDPThreadPoolMaxSize 1-2147483647 no (defaults to 50) 0..1
UDPThreadPoolShutdownTimeout 1-2147483647 (seconds) no (defaults to 60) 0..1
AXFRTimeout 1-2147483647 (seconds) no (defaults to 60) 0..1
RemoteManagementPort 0-65535 yes 1
RemoteManagementPassword String yes 1
RequireZones true/false no (defaults to false) 0..1
DefaultResponse NOERROR or NXDOMAIN yes (NXDOMAIN recommended) 1

 The <ZoneProviders> element may be empty if the RequireZones property is set to false. Else must contain at least one <ZoneProvider> element, containing the following settings:

Name Value Required occurrence
Name The name of the zone provider (used for logging) yes 1
Class Full path to class yes 1

Each <ZoneProvider> element may contain a <Properties> element which in turn may contain one to many <Property name="somesetting"> elements. The value of the name attribute of the <Property> element should match a valid setter method in the zone provider class. The name of the method should be specified without the "set" part and the method should take a String as input parameter. The properties of each zone provider is set after the class is instantiated but before the init(String name) method is called. See the zone provider chapter for more information about which configuration properties each zone provider has.

 The <Resolvers> element must contain at least one <Resolver> element, containing the following settings:

Name Value Required occurrence
Name The name of the resolver (used for logging) yes 1
Class Full path to class yes 1

Each <Resolver> element may contain a <Properties> element which in turn may contain one to many <Property name="somesetting"> elements. The value of the name attribute of the <Property> element should match a valid setter method in the zone provider class. The name of the method should be specified without the "set" part and the method should take a String as input parameter. The properties of each resolver is set after the class is instantiated but before the init(String name) method is called. See the resolver chapter for more information about which configuration properties each resolver has.

 The <Plugins> element is optional but if present any <Plugin> elements in it should containing the following settings:

Name Value Required occurrence
Name The name of the plugin (used for logging) yes 1
Class Full path to class yes 1

Each <Plugin> element may contain a <Properties> element which in turn may contain one to many <Property name="somesetting"> elements. The value of the name attribute of the <Property> element should match a valid setter method in the zone provider class. The name of the method should be specified without the "set" part and the method should take a String as input parameter. The properties of each resolver is set after the class is instantiated but before the init(String name) method is called. See the general purpose plugins chapter for more information about which configuration properties each plugin has.

Logging

Eagle DNS uses the very popular and widespread log4j logging library. The logging is configured using the following file "conf/log4j.xml". For more information about how to use and configure log4j, head over to the log4j website.

By default Eagle DNS is configured to log events on level "INFO" or higher and place the log file at "logs/eagledns.log".

Secondary zones and zone transfers (AXFR)

Eagle DNS supports AXFR zone transfers which is a method of replication zones between DNS servers. Secondary zones in Eagle DNS are automatically updated from the primary DNS server. The delay between updates and the expiry of the zone data in case of failure to contact the primary DNS server is controlled by the refresh and expiration values in the zones SOA record.

AXFR security

AXFR security is a very common topic when it comes to DNS servers these days. Most likely you don't want everyone on the Internet to be able to download you whole zones so therefore AXFR needs to be secured. Eagle DNS does this by only allowing the DNS servers listed each zone to do a AXFR transfer of the zone.

ZoneProvider interface

Zones in Eagle DNS can be loaded from multiple different sources. By default Eagle DNS ships with a zone provider for loading plain zone files and a more advanced zone provider that stores zones in a database.

If you wish to develop your own zone provider it must implement the ZoneProvider interface, shown below:

package se.unlogic.eagledns;

import java.util.Collection;
import org.xbill.DNS.Zone;

public interface ZoneProvider {

    public void init(String name) throws Exception;

    public Collection<Zone> getPrimaryZones();

    public Collection<SecondaryZone> getSecondaryZones();

    public void zoneUpdated(SecondaryZone secondaryZone);

    public void zoneChecked(SecondaryZone secondaryZone);

    public void unload();
}

For information about this interface check out the source code of Eagle DNS, and have a look at the Javadoc in the class file.

FileZoneProvider

This zone provider is used to read plain zone files from the file system. Currently it only supports primary zones.

It has the following configuration properties:

 Name  Value  Required Description
zoneFileDirectory Full or relative path yes Must be set so that the zone provider knows which directory to look for zones in
autoReloadZones true/false no (defaults to false) Controls whether or not the zone provider should monitor the zone directory for any changes and reload the zone cache automatically
pollingInterval 1-2147483647 (milliseconds) no (defaults to null) Controls how often the zone provider should look for changes in the zone directory (needs to be set if the autoReloadZones property is set to true)

See the default configuration file for more information.

DBZoneProvider

This zone provider stores it's zone in a database and it supports both primary and secondary zones. It is the recommended zone provider to use with Eagle DNS since it supports all features of the ZoneProvider interface and uses transactions for all it's updates to database.

The DBZoneProvider also enables aliseses to be used so the same zone can served under multiple names such as example.org, example.com and example.net all pointing to the same DNS records.

The zones are stored in a two database tables called zones and records which have the following structure:

 

Eagle DNS ships with a SQL script for creating the table structure. The script is called "dbtables.sql" and is located in the "docs" folder.

The SQL script above has only been tested on MySQL 5.0 and MySQL 5.1 but the DBZoneProvider should work with most databases that have JDBC driver available if you create a similar table structure to the one above.

If you create a SQL script for any another database type please send it to me and I'll include it in Eagle DNS.

There has been some changes in database structure of the DBZoneProvider so an upgrade script from Eagle DNS 1.0 is provded in script called "dbtables-upgrade-from-1.0-to-1.1.sql" located in the "docs" folder.

Importing zones to database from zone files

Importing zones from zone files manually to the database can be very time consuming, Eagle DNS therefore includes a small application that does this for you (this application only supports primary zones).

To invoke the application run the included zonefiles2db script that is included both in batch and shell script formats.

The scripts expects the following five arguments on the command line when invoked:

  1. Path to zone directory
  2. Qualified class name of the JDBC driver to use
  3. Database URL
  4. Username
  5. Password

Below is an example of how this script is used:

./zonefiles2db.sh /var/named/zones com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/eagledns user password

Adding secondary zones

To add a secondary zone, add a new row in the zones table but only set the following columns:

  • name
  • dclass
  • primarydns
  • secondary (set to true)
  • autoGenerateSerial (set to false)
  • enabled (set to true)

Eagle DNS will then automatically download the zone from the primary DNS server and keep it updated.

Configuration

 Name  Value  Required Description
driver String yes Full class name of the JDBC driver
url String yes JDBC URL
username String yes Database username
password String yes Database password

Examples

Add NS record:

INSERT INTO records SET zoneID = 1, name = "@", type = "NS", content = "ns1.somedomain.com.", ttl = 10800, dclass = "IN";

Add A record:

INSERT INTO records SET zoneID = 1, name = "@", type = "A", content = "1.2.3.4", ttl = 10800, dclass = "IN";

INSERT INTO records SET zoneID = 1, name = "mail", type = "A", content = "2.3.4.5", ttl = 10800, dclass = "IN";

Add CNAME record:

INSERT INTO records SET zoneID = 1, name = "www", type = "CNAME", content = "somedomain.com.", ttl = 10800, dclass = "IN";

Add MX record:

INSERT INTO records SET zoneID = 1, name = "@", type = "MX", content = "10 mail.somedomain.com.", ttl = 10800, dclass = "IN";

Add PRT record:

INSERT INTO records SET zoneID = 2, name = 4, type = "PTR", content = "somedomain.com.", ttl = 10800, dclass = "IN";

Adding a zone:

INSERT INTO zones SET zoneID = 1, name = "somedomain.com.", dclass = "IN", primaryDNS = "ns1.somedomain.com.", adminEmail = "hostmaster.somedomain.com.", serial = 2011053101, refresh = 10800, retry = 3600, expire = 1209600, minimum = 3600, secondary = 0, ttl = 10800, downloaded = NULL, autoGenerateSerial = 1, enabled = 1;

Adding a reverse lookup zone:

INSERT INTO zones SET zoneID = 2, name = "3.2.1.in-addr.arpa.", dclass = "IN", primaryDNS = "ns1.somedomain.com.", adminEmail = "hostmaster.somedomain.com.", serial = 2011053101, refresh = 10800, retry = 3600, expire = 1209600, minimum = 3600, secondary = 0, ttl = 10800, downloaded = NULL, autoGenerateSerial = 1, enabled = 1;

Examples contributed by Tenzer.

Resolvers

Starting with version 1.1 Eagle DNS has no built in default resolvers, instead it uses pluggable resolvers. This adds endless flexibility for processing DNS queries since custom resolvers can be added very easily. At least one resolver needs to be set in the configuration file in order for Eagle DNS to start.

When Eagle DNS receives a query it iterates over all available resolvers in the same order as they have been specified in the configuration file until a resolver replies with a non null response.  If no response is received from any resolver a default response is sent (either NXDOMAIN or NOERROR depending what has been set in the configuration file).

The default distribution ships with the following resolvers:

Version 1.2 will most likely add a RecursiveResolver too.

To create a custom resolver all you have to do is implement the interface below in a class with a no args constructor, add the class to the configuration and make sure that the class is in the classpath of Eagle DNS.

package se.unlogic.eagledns;

import java.io.IOException;
import org.xbill.DNS.Message;

public interface Resolver {

    /**
     * This method is called after the Resolver has been instantiated by EagleDNS and all properties
     * specified in the config file for this resolver have been set using their set methods.
     */
    public void init(String name) throws Exception;
   
    /**
     * This method is called when the resolver is requested to process a query.
     * <p>
     *
     * If the resolver returns null and the socket is still open Eagle DNS will pass the query to the next resolver. Although it should be noted that a socket
     * is only passed on the resolver in case of TCP queries for UDP queries the socket criteria is ignored.
     *
     * @param request
     *            the incoming query
     * @return
     * @throws IOException
     */
    public Message generateReply(Request request) throws Exception;

    /**
     * @param systemInterface
     *            that the resolver can use to access the internal functions of Eagle DNS
     */
    public void setSystemInterface(SystemInterface systemInterface);

 

AuthoritativeResolver

A strictly authoritative resolver based on the built in resolver from Eagle DNS 1.0 and is therefore very thoroughly tested. It uses Eagle DNS internal cache of authoritative zones (accessed using the SystemInterface.getZone() method) so it needs to be coupled with one or more Zone provider in order to work properly.

Classname

se.unlogic.eagledns.resolvers.AuthoritativeResolver

Configuration

This resolver has no configuration properties.

ForwardingResolver

A resolver that forwards queries to a remote DNS server in order for them to be resolved. It has an error handling and failover system the handles both invalid responses and timeouts enabling multiple instances of forwarding resolvers to be used in a long "chain" for failover purposes.

Failover

The failover mechanism works by storing the timestamp of a given number of error back in time (see the maxerrors and errorWindowsSize properties). When the given number of errors has exceeded the allowed amount for the given time frame the resolver will mark itself as offline and ignore any queries passed to it. A background thread runs constantly checking if the remote server is working as expected by trying resolve a preconfigured query. If the resolver is marked as offline the background thread will mark the resolver as online again as soon as it starts working as expected again.

By default the failover is disabled, in order to activate it both the maxerrors and errorWindowsSize properties have to be set.

Classname

se.unlogic.eagledns.resolvers.ForwardingResolver

Configuration

 Name  Value  Required Description
server Valid host or IP yes Address of the remote DNS server that queries are to be forwarded to.
port 0-65535 no (defaults to 53) Port of the remote DNS server that queries are to be forwarded to.
tcp true/false no (defaults to false) Use TCP instead of UDP when forwarding queries..
timeout 1-2147483647 no (defaults to null) How many seconds to wait for the remote DNS server to respond.
maxerrors 1-2147483647 no (defaults to null) The maximum number of errors allowed within the errorWindowsSize before the resolver is marked as down
errorWindowsSize 1-2147483647 no (defaults to null) The number of seconds back in time that errors should be kept/counted (time frame)
validationQuery A valid domain No (defaults to google.com) The domain that will be queried for in order to check if the remote DNS server is working properly when the resolver has been marked as down
validationInterval 1-2147483647 no (defaults to 5) Controls how many seconds the background thread should sleep between each time it checks the remote server

SystemInterface

In order for resolvers to able to interact with the core functions of Eagle DNS they have access to the following interface:

 package se.unlogic.eagledns;

import org.xbill.DNS.Name;
import org.xbill.DNS.TSIG;
import org.xbill.DNS.Zone;


/**
 * This interface is used by {@link Resolver}'s to access the internal functions of Eagle DNS
 *
 * @author Robert "Unlogic" Olofsson (unlogic@unlogic.se)
 *
 */
public interface SystemInterface {

    /**
     * This method is used to retrieve zones from Eagle DNS internal cache of authorative zones loaded thru the {@link ZoneProvider}'s.
     *
     * @param name of the zone
     * @return {@link Zone} the requested zone or null if no matching zone was found
     */
    public Zone getZone(Name name);
    
    public TSIG getTSIG(Name name);

}

General purpose plugins

Startig with version 1.1 Eagle DNS supports general purpose plugins.

The default distribution ships with the following general purpose plugins:

The remote management interface that was previously integrated into the core of Eagle DNS has been made a general purpose plugin instead.

Remote Management Interface

This plugin exposes Eagle DNS SystemInterface (se.unlogic.eagledns.SystemInterface) so that it can be managed remotely over TCP/IP. The interface is based on RMI and it is currently it's very simple providing only the following features:

  • Login (password protected)
  • Various information about active threads, numbers of processed queries etc.
  • Reload all zones
  • Shutdown

Technically speaking the remote management interface consists of two Java interfaces, one for login and one for the actual administration. The interfaces are displayed below:

package se.unlogic.eagledns;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface EagleLogin extends Remote{

    public EagleManager login(String password) throws RemoteException;
}

package se.unlogic.eagledns.plugins.remotemanagement;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface EagleManager extends Remote {

    public void shutdown() throws RemoteException;

    public void reloadZones() throws RemoteException;

    public String getVersion() throws RemoteException;

    public long getStartTime() throws RemoteException;

    public int getZoneProviderCount() throws RemoteException;
    
    public int getPluginCount() throws RemoteException;
    
    public int getResolverCount() throws RemoteException;

    public int secondaryZoneCount() throws RemoteException;

    public int primaryZoneCount() throws RemoteException;

    public int getMaxActiveUDPThreadCount() throws RemoteException;

    public long getCompletedUDPQueryCount() throws RemoteException;

    public int getActiveUDPThreadCount() throws RemoteException;

    public int getMaxActiveTCPThreadCount() throws RemoteException;

    public long getCompletedTCPQueryCount() throws RemoteException;

    public int getActiveTCPThreadCount() throws RemoteException;

    public int getUDPThreadPoolMaxSize() throws RemoteException;

    public int getUDPThreadPoolMinSize() throws RemoteException;

    public int getTCPThreadPoolMaxSize() throws RemoteException;

    public int getTCPThreadPoolMinSize() throws RemoteException;
    
    public long getRejectedUDPConnections() throws RemoteException;

    public long getRejectedTCPConnections() throws RemoteException;    
}

 

Classname

se.unlogic.eagledns.plugins.remotemanagement.RMIRemoteManagementPlugin

Configuration

 Name  Value  Required Description
port 0-65535 yes The TCP port on which this plugin will listen
password String yes The password required to access the management interface
rmiServerHostname IP/host no Sets the "java.rmi.server.hostname" property of the JVM.

QueryStats

This is a simple plugins that keep track of the number of queries that has been processed and the number of connections that been rejected due to overload. This information is stored in a simple XML and the statistics are kept even if Eagle DNS is restarted.

XML Structure

The structure of the XML file written by this plugin is illustrated below.

<Statistics>
    <TCPQueryCount>0</TCPQueryCount>
    <UDPQueryCount>59</UDPQueryCount>
    <RejectedTCPConnections>0</RejectedTCPConnections>
    <RejectedUDPConnections>0</RejectedUDPConnections>
</Statistics>

 

Classname

se.unlogic.eagledns.plugins.QueryStatsPlugin

Configuration

 Name  Value  Required Description
savingInterval 1-2147483647 (seconds) no (defaults to 60) Controls how often the query statistics should be saved to file.
filePath File system path yes Controls where the statistics file is written

ZoneReplication

In order to replicate zones between DNS servers in a scalable and efficent way Eagle DNS includes two general purpose plugins called ReplicationServerPlugin and ReplicationClientPlugin.

These plugins enable Eagle DNS servers to replicate zones in a master/slave fashion using RMI and JDBC transactions. Since the replication uses JDBC transactions on both client and server to guarentee consistency using this replication requires the zones that are to be replicated to be stored in a database. It's recommended to use these plugins together with the DBZoneProvider.

Classnames

se.unlogic.eagledns.plugins.zonereplicator.ReplicationServerPlugin

se.unlogic.eagledns.plugins.zonereplicator.ReplicationClientPlugin

Configuration of ReplicationServerPlugin

 Name  Value  Required Description
rmiServerHostname IP/host no Sets the "java.rmi.server.hostname" property of the JVM.
rmiPort 0-65535 yes The TCP port on which this plugin will listen
rmiPassword String yes The password required to replicate zones
driver String yes Full class name of the JDBC driver
url String yes JDBC URL
username String yes Database username
password String yes Database password

Configuration of ReplicationClientPlugin

 Name  Value  Required Description
serverAddress IP/host no Server address
rmiPort 0-65535 yes Server port
rmiPassword String yes Server password
replicationInterval 1-2147483647 (seconds) no (defaults to 60) Controls how often zones should be replicated
driver String yes Full class name of the JDBC driver
url String yes JDBC URL
username String yes Database username
password String yes Database password