                     Having MaraDNS be a master DNS server

   A master (sometimes called primary) DNS server is a DNS server that other
   DNS servers can automatically transfer zone files from. There are
   limitations to this way of transferring zone files; zone files transferred
   this way lose all comments and the ordering of records in the zone file is
   usually changed.

   In other words, DNS has a mechanism for automatically having multiple
   different servers have the same zone file data. This is akin to the rsync
   program; this allows one to change a zone file on the master machine, then
   have the slave machines automatically transfer the zone file from the
   master machine.

   This is useful when one wants to have multiple machines serving DNS data.
   This is also useful when one wants to register a domain, but only has a
   single IP on the internet. There are a number of free DNS secondary
   (slave) services out there that one can use to have a second IP for a DNS
   server of a domain.

   To set this up, one needs to run the zoneserver daemon in addition to the
   maradns daemon. Both daemons use the same mararc configuration file; there
   are a few mararc variables that affect the zoneserver daemon but not the
   maradns daemon (and vice versa).

   When setting up a master DNS server, only one additional mararc variable
   needs to be set up, zone_transfer_acl. This variable needs to list the IPs
   of the slave DNS servers that will transfer zones from the master server.
   For example, if the slave DNS servers have the IPs 192.168.72.34,
   10.34.56.98, and 172.17.23.37, the line will look like this:

     zone_transfer_acl = "192.168.72.34, 10.34.56.98, 172.17.23.37"

   If you do not know the IPs of the slave DNS servers, you can allow any
   computer on the internet to connect to your zone server thusly:

     zone_transfer_acl = "0.0.0.0/0"

   Note that this will make potentially private information public.

   Something like this can also be done:

     zone_transfer_acl = "192.168.42.0/24, 10.0.0.0/8, 172.19.0.0/16"

   This will allow any IP starting with "192.168.42" to connect to the zone
   server, any IP starting with "10" to connect to the zone server, and any
   IP starting with "172.19" to connect to the zone server.

   Here is a example mararc file which is on the ip 10.1.2.3, and serves the
   zone example.com to the IPs 192.168.72.34, 10.34.56.98, and 172.17.23.37:

 ipv4_bind_addresses = "10.1.2.3"
 chroot_dir = "/opt/local/etc/maradns"
 csv2 = {}
 csv2["example.com."] = "db.example.com"
 zone_transfer_acl = "192.168.72.34, 10.34.56.98, 172.17.23.37"

     ----------------------------------------------------------------------

How SOA records affect slave zone servers

   The SOA record tells the slave zone servers how often to check to see if a
   zone file needs to be reloaded. Here is what a SOA record looks like:

     example.com. SOA example.com. hostmaster@example.com. 1 7200 3600 604800
     1800

   The first field is the name of the zone this SOA record is for.

   The second field tells the csv2 parser that this is a SOA record.

   The third field is the name of the machine which is the DNS master server
   for this zone.

   The fourth field is the email address for the person in charge of this
   zone.

   The fifth field (first numeric field) is what is called the "serial"
   number. This number is used by slave DNS servers to see if the zone file
   has changed. This number should be increased every time a zone file is
   changed. MaraDNS, when generating a synthetic SOA record, looks to see
   when the zone file was last changed, and uses a time stamp which updates
   every six seconds as the SOA serial number.

   The sixth field (second numeric field) is the "refresh" for the domain;
   this is how often (in seconds) a slave DNS server could check to see if
   the serial on the master DNS server has changed.

   The seventh field (third numeric field) is the "retry" for the domain;
   when the master DNS server is down, this is how often the slave DNS server
   will check to see if the master DNS server is up again. This value, like
   all time values, is in seconds.

   The eight field (fourth numeric field) is the "expire" for the domain;
   this is how long the slave server will wait before no longer attempting to
   get a zone from a master DNS server when the master DNS server is down.
   This should be a large value.

   The ninth field (fifth numeric field) is the "minimum" for the domain;
   this does not affect how MaraDNS processes a zone file and is not used by
   slave DNS servers (it determines the default/minimum TTL with other DNS
   servers).

     ----------------------------------------------------------------------

   The zoneserver program can also be used to serve other DNS records over
   TCP; see the file dnstcp for details.
