Skip to main content

5. Master Files

Master files are text files that contain RRs in text form. Since the contents of a zone can be expressed in the form of a list of RRs, a master file is most often used to define a zone, though it can be used to list a cache's contents.

This section first discusses the format of RRs in a master file, and then the special considerations when a master file is used to create a zone in some name server.


5.1. Format

The format of master files is a sequence of entries.

General Rules

Line-Oriented Format:

  • Entries are predominantly line-oriented
  • Parentheses can be used to continue a list of items across a line boundary
  • Text literals can contain CRLF within the text

Delimiters:

  • Any combination of tabs and spaces act as a delimiter between separate items

Comments:

  • The end of any line can end with a comment
  • Comments start with a ; (semicolon)
  • The remainder of the line after ; is ignored

Blank Lines:

  • Blank lines, with or without comments, are allowed anywhere in the file

Entry Types

The following entries are defined:

<blank>[<comment>]

$ORIGIN `<domain-name>` [<comment>]

$INCLUDE `<file-name>` [`<domain-name>`] [<comment>]

`<domain-name>`<rr> [<comment>]

<blank><rr> [<comment>]

Control Entries

Two control entries are defined: $ORIGIN and $INCLUDE.

$ORIGIN:

  • Followed by a domain name
  • Resets the current origin for relative domain names to the stated name
  • Example: $ORIGIN example.com.

$INCLUDE:

  • Inserts the named file into the current file
  • May optionally specify a domain name that sets the relative domain name origin for the included file
  • May also have a comment
  • Note: A $INCLUDE entry never changes the relative origin of the parent file, regardless of changes to the relative origin made within the included file
  • Example: $INCLUDE /var/named/example.com.hosts

Resource Record Entries

The last two entry forms represent RRs:

Owner Name Rules:

  • If an entry for an RR begins with a blank, then the RR is assumed to be owned by the last stated owner
  • If an RR entry begins with a <domain-name>, then the owner name is reset

RR Format:

<rr> contents take one of the following forms:

[<TTL>] [<class>] <type> <RDATA>

[<class>] [<TTL>] <type> <RDATA>

Field Descriptions:

  • TTL: Optional, decimal integer representing time to live in seconds
  • Class: Optional, standard mnemonic (e.g., IN)
  • Type: Required, standard mnemonic (e.g., A, NS, MX)
  • RDATA: Required, data appropriate to the type and class

Defaults:

  • Omitted class and TTL values default to the last explicitly stated values
  • Since type and class mnemonics are disjoint, the parse is unique

Note: This order is different from the order used in examples and the order used in the actual RRs; the given order allows easier parsing and defaulting.


5.2. Domain Names in Master Files

<domain-name>s make up a large share of the data in the master file.

Label Representation

Basic Format:

  • Labels in the domain name are expressed as character strings and separated by dots
  • Quoting conventions allow arbitrary characters to be stored in domain names

Absolute vs. Relative Names:

  • Absolute Names: Domain names that end in a dot are called absolute, and are taken as complete

    • Example: www.example.com.
  • Relative Names: Domain names which do not end in a dot are called relative

    • The actual domain name is the concatenation of the relative part with an origin specified in a $ORIGIN, $INCLUDE, or as an argument to the master file loading routine
    • A relative name is an error when no origin is available
    • Example: www with origin example.com. becomes www.example.com.

Character Strings

<character-string> is expressed in one or two ways:

  1. Unquoted: A contiguous set of characters without interior spaces
  2. Quoted: A string beginning with " and ending with "
    • Inside a " delimited string, any character can occur except for a " itself
    • A " must be quoted using \ (backslash)

5.3. Special Encodings

Because master files are text files, several special encodings are necessary to allow arbitrary data to be loaded.

Special Characters and Sequences

. (dot):

  • A free standing . denotes the root
  • Example: In example.com., the trailing . denotes the root

@ (at sign):

  • A free standing @ is used to denote the current origin
  • Example: @ IN SOA ... refers to the zone's origin

\X (backslash escape):

  • Where X is any character other than a digit (0-9)
  • Used to quote that character so that its special meaning does not apply
  • Examples:
    • \. can be used to place a dot character in a label
    • \; can be used to include a semicolon in a string (not as a comment)
    • \\ represents a backslash character

\DDD (decimal escape):

  • Where each D is a digit
  • Represents the octet corresponding to the decimal number described by DDD
  • The resulting octet is assumed to be text and is not checked for special meaning
  • Example: \065 represents the character 'A' (ASCII 65)

( ) (parentheses):

  • Parentheses are used to group data that crosses a line boundary
  • In effect, line terminations are not recognized within parentheses
  • Useful for SOA records and other multi-line entries

; (semicolon):

  • Semicolon is used to start a comment
  • The remainder of the line is ignored

5.4. Use of Master Files to Define Zones

When a master file is used to load a zone, the operation should be suppressed if any errors are encountered in the master file.

Rationale

The rationale for this is that a single error can have widespread consequences. For example:

  • Suppose that the RRs defining a delegation have syntax errors
  • Then the server will return authoritative name errors for all names in the subzone
  • (except in the case where the subzone is also present on the server)

Validity Checks

Several validity checks should be performed in addition to ensuring that the file is syntactically correct:

  1. Class Consistency: All RRs in the file should have the same class

  2. SOA Requirement: Exactly one SOA RR should be present at the top of the zone

  3. Glue Information: If delegations are present and glue information is required, it should be present

  4. Authoritative Data: Information present outside of the authoritative nodes in the zone should be glue information, rather than the result of an origin or similar error


5.5. Master File Example

The following is an example file which might be used to define the ISI.EDU zone and is loaded with an origin of ISI.EDU:

@   IN  SOA     VENERA      Action\.domains (
20 ; SERIAL
7200 ; REFRESH
600 ; RETRY
3600000; EXPIRE
60) ; MINIMUM

NS A.ISI.EDU.
NS VENERA
NS VAXA
MX 10 VENERA
MX 20 VAXA

A A 26.3.0.103

VENERA A 10.1.0.52
A 128.9.0.32

VAXA A 10.2.0.27
A 128.9.0.33


$INCLUDE <SUBSYS>ISI-MAILBOXES.TXT

Example Analysis

SOA Record:

  • @ represents the zone origin (ISI.EDU.)
  • VENERA is the primary name server (relative name, becomes VENERA.ISI.EDU.)
  • Action\.domains is the responsible person's mailbox ([email protected])
    • Note the use of \ to escape the dot in the email address
  • Serial number: 20
  • Refresh: 7200 seconds (2 hours)
  • Retry: 600 seconds (10 minutes)
  • Expire: 3600000 seconds (approximately 41.67 days)
  • Minimum: 60 seconds

NS Records:

  • Three name servers: A.ISI.EDU. (absolute), VENERA (relative), VAXA (relative)

MX Records:

  • Primary mail exchanger: VENERA with preference 10
  • Secondary mail exchanger: VAXA with preference 20

A Records:

  • A.ISI.EDU. has one IPv4 address
  • VENERA.ISI.EDU. has two IPv4 addresses (multihomed)
  • VAXA.ISI.EDU. has two IPv4 addresses (multihomed)

$INCLUDE Directive:

  • Includes an external file containing mailbox records

Included File Example

Where the file <SUBSYS>ISI-MAILBOXES.TXT contains:

    MOE     MB      A.ISI.EDU.
LARRY MB A.ISI.EDU.
CURLEY MB A.ISI.EDU.
STOOGES MG MOE
MG LARRY
MG CURLEY

Explanation:

  • MB records define individual mailboxes
  • MG records define a mail group
  • The STOOGES mail group includes three members
  • Blank lines indicate continuation of the previous owner name

5.6. Common Master File Patterns

Pattern 1: Simple Zone File

$ORIGIN example.com.
$TTL 86400

@ IN SOA ns1.example.com. admin.example.com. (
2024010101 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum

IN NS ns1.example.com.
IN NS ns2.example.com.

ns1 IN A 192.0.2.1
ns2 IN A 192.0.2.2
www IN A 192.0.2.10

Pattern 2: Delegated Subdomain

; Delegation to subdomain
subdomain IN NS ns1.subdomain.example.com.
IN NS ns2.subdomain.example.com.

; Glue records (required if name servers are in subdomain)
ns1.subdomain IN A 192.0.2.20
ns2.subdomain IN A 192.0.2.21

Pattern 3: Multiple A Records (Load Balancing)

; Round-robin DNS for load balancing
www IN A 192.0.2.10
IN A 192.0.2.11
IN A 192.0.2.12

5.7. Best Practices

  1. Always Use Absolute Names for External References: Names outside your zone should end with a dot

  2. Use $ORIGIN Carefully: Set it at the beginning and avoid changing it unnecessarily

  3. Include Serial Numbers: Always increment the serial number when making changes

  4. Use Comments: Document your zone file with comments

  5. Test Before Deploying: Use tools like named-checkzone to validate syntax

  6. Maintain Consistency: Keep consistent formatting for readability

  7. Backup: Always maintain backups of working zone files before making changes


Next: 6. Name Server Implementation