<HEAD><TITLE>Default zonefile</TITLE>

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">

</HEAD><BODY>

<H1>Default zonefiles</H1>

Default zonefiles are useful when one has a large number of identical
zones.  They are also useful for setups like "have all records resolve
to a given IP address", for example when setting up connections to 
the internet that require authentication to use, and want all traffic
to be directed to a web page stating "you're not logged in to use the
internet yet".

<p>

A default zonefile is a CSV2 zone file where stars can be at the end of
hostnames.  There are a few restrictions with default zone files:

<ul>
<li>A SOA record is mandatory
<li>NS records are mandatory
<li>Neither CNAME nor FQDN4 records are permitted in the zone file
<li>Delegation NS records are not permitted in the zone file
<li>Default zonefiles may not be transferred via zone transfer
</ul>

It also is not possible to run recursion on a server that uses a
default zonefile.  With the exception of these restrictions, and the
ability to have a '*' at the end of a hostname (or simply the catch-all
wildcard hostname '*'), a csv2 default zone file functions like a normal
csv2 zone file.

<p>

A default zone file looks like this:

<pre>
# This is an example csv2_default_zonefile

*       SOA     example.com. email@example.com. 1 7200 3600 604800 1800

*       NS      a.example.com.
*       NS      b.example.com.

# Here are some A (ipv4 address) records; since this is the most
# common field, the zone file format allows a compact representation
# of it.

* 10.10.10.10

# The A record can be specified explicitly, but doesn't need to be
# E.g. the above line could have been written '* A 10.10.10.10'
www.* A 10.10.10.10

# Here is a MX record
* MX mail.example.com.
</pre>

Here, "example.com" is replaced with the name of the zone server running
MaraDNS, "a.example.com." and "b.example.com." replaced with the NS entries
running MaraDNS, 10.10.10.10 is replaced with the IP for the machine in 
question, and "mail.example.com." is replaced with the name of the
machine that accepts mail for this domain.

<p>
NS entries are the names of machines which are running this instance of 
MaraDNS.  In the above example, we will also have an "example.com" zone
that will have "a.example.com" and "b.example.com" entries.  The example.com
domain will also have an "example.com" entry and a "mail.example.com"
entry.

<p>

What this does is allow people to serve a large number of domains with
MaraDNS without using up too much memory, and without needing to load
a large number of domains when starting MaraDNS.  The only caveat is
that all of the domains need to be identical.  This is often the case with
large web serving farms.  In situations where different domains are served 
by different machines in the web serving farm, one simply runs multiple
instances of MaraDNS on different IPs; machines hosted on different machines
just use different DNS servers.  Since MaraDNS is a small program, suitable
for embedded applications, even running multiple instances of MaraDNS
will be more lightweight than running other DNS servers when there are
a large number of domains and only a few web servers processing the domains.

<h2>Record searching order</h2>

When the default zonefile is enabled, MaraDNS searches for records
in the following order:

<ul>
<li>MaraDNS first searches for any non-wildcard records in non-default
  zone files.
<li>MaraDNS then searches for wildcard records in non-default zone files
  (records with a star at the beginning of them).
<li>Should no records be found, MaraDNS then looks for records with
  stars at the end of them.  MaraDNS does this by removing the final
  field from a domain name until a match is found.  For example, if
  someone sends MaraDNS a request for "www.mx.example.com", we will
  first look for "www.mx.example.*" in the default zone file, followed
  by looking for "www.mx.*", followed by "www.*", and finally "*".  
</ul>



</BODY>

