# Default zonefiles

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".

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:

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

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.

A default zone file looks like this:

    # 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 10 mail.example.com.

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.

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.

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.

## Record searching order

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

- MaraDNS first searches for any non-wildcard records in non-default zone files.
- MaraDNS then searches for wildcard records in non-default zone files (records with a star at the beginning of them).
- 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 "*".