NAME
tinydns-data - data tool for tinydns
DESCRIPTION
This is a reference page. For tutorial information, see the
instructions for
running a DNS server (http://cr.yp.to/djbdns/run-server.html).
tinydns-data reads local DNS information from a file named data in the
current directory. It creates data.cdb in a binary format designed for
fast access by tinydns(8). It may also create some other files with
names beginning with data.
tinydns-data updates data.cdb atomically, so you can use it safely
while tinydns(8) is running. If anything goes wrong with the creation
of data.cdb, tinydns-data stops and leaves the old data.cdb in place.
Data format
The DNS information in data is a series of lines. There are several
types of lines, as shown below.
Each line starts with a special character and continues with a series
of colon-separated fields. In some cases the fields may be omitted;
however, all colons must be included except at the end of the line.
Spaces and tabs at the end of a line are ignored. Blank lines are
ignored.
Each line contains a ttl (‘‘time to live’’) specifying the number of
seconds that the line’s DNS records may be cached. Beware that cache
times below 300 seconds will be treated as 300 by some clients, and NS
cache times below 2 seconds can cause lookup failures. You may omit
ttl; tinydns-data will use default cache times, carefully selected to
work well in normal situations.
You may include a timestamp on each line. If ttl is nonzero (or
omitted), the timestamp is a starting time for the information in the
line; the line will be ignored before that time. If ttl is zero, the
timestamp is an ending time (‘‘time to die’’) for the information in
the line; tinydns(8) dynamically adjusts ttl so that the line’s DNS
records are not cached for more than a few seconds past the ending
time. A timestamp is an external TAI64 timestamp, printed as 16
lowercase hexadecimal characters. For example, the lines
+www.heaven.af.mil:1.2.3.4:0:4000000038af1379
+www.heaven.af.mil:1.2.3.7::4000000038af1379
specify that www.heaven.af.mil will have address 1.2.3.4 until time
4000000038af1379 (2000-02-19 22:04:31 UTC) and will then switch to IP
address 1.2.3.7.
For versions 1.04 and above: You may include a client location on each
line. The line is ignored for clients outside that location. Client
locations are specified by % lines:
%lo:ipprefix
means that IP addresses starting with ipprefix are in location lo. lo
is a sequence of one or two ASCII letters. A client is in only one
location; longer prefixes override shorter prefixes. For example,
%in:192.168
%ex
+jupiter.heaven.af.mil:192.168.1.2:::in
+jupiter.heaven.af.mil:1.2.3.4:::ex
specifies that jupiter.heaven.af.mil has address 192.168.1.2 for
clients in the 192.168.* network and address 1.2.3.4 for everyone
else.
Common data lines
.fqdn:ip:x:ttl:timestamp:lo
Name server for our domain fqdn.
tinydns-data creates
an NS (‘‘name server’’) record showing x.ns.fqdn as a name
server for fqdn;
an A (‘‘address’’) record showing ip as the IP address of
x.ns.fqdn; and
an SOA (‘‘start of authority’’) record for fqdn listing
x.ns.fqdn as the primary name server and hostmaster@fqdn as the
contact address.
You may have several name servers for one domain, with a different x
for each server.
tinydns(8) will return only one SOA record per domain.
If x contains a dot then tinydns-data will use x as the server name
rather than x.ns.fqdn. This feature is provided only for compatibility
reasons; names not ending with fqdn will force clients to contact
parent servers much more often than they otherwise would, and will
reduce the overall reliability of DNS. You should omit ip if x has IP
addresses assigned elsewhere in data; in this case, tinydns-data will
omit the A record.
Examples:
.panic.mil:1.8.7.55:a
creates an NS record showing a.ns.panic.mil as a name server for
panic.mil, an A record showing 1.8.7.55 as the IP address of
a.ns.panic.mil, and an SOA record for panic.mil.
.panic.mil:1.8.7.56:dns2.panic.mil
creates an NS record showing dns2.panic.mil as a name server for
panic.mil, an A record showing 1.8.7.56 as the IP address of
dns2.panic.mil, and an SOA record for panic.mil.
.panic.mil::a.ns.heaven.af.mil
creates an NS record showing a.ns.heaven.af.mil as a name server for
panic.mil, and an SOA record for panic.mil.
&fqdn:ip:x:ttl:timestamp:lo
Name server for domain fqdn.
tinydns-data creates
an NS record showing x.ns.fqdn as a name server for fqdn and
an A record showing ip as the IP address of x.ns.fqdn.
If x contains a dot then it is treated specially; see above.
You may have several name servers for one domain, with a different x
for each server.
Normally & is used for domains delegated by this server to child
servers, while . is used for domains delegated to this server.
Examples:
&serious.panic.mil:1.8.248.6:a
creates an NS record showing a.ns.serious.panic.mil as a name server
for serious.panic.mil, and an A record showing 1.8.248.6 as the IP
address of a.ns.serious.panic.mil.
&serious.panic.mil:1.8.248.7:ns7.panic.mil
creates an NS record showing ns7.panic.mil as a name server for
serious.panic.mil, and an A record showing 1.8.248.7 as the IP address
of ns7.panic.mil.
=fqdn:ip:ttl:timestamp:lo
Host fqdn with IP address ip.
tinydns-data creates
an A record showing ip as the IP address of fqdn and
a PTR (‘‘pointer’’) record showing fqdn as the name of
d.c.b.a.in-addr.arpa if ip is a.b.c.d.
Remember to specify name servers for some suffix of fqdn; otherwise
tinydns(8) will not respond to queries about fqdn. The same comment
applies to other records described below. Similarly, remember to
specify name servers for some suffix of d.c.b.a.in-addr.arpa, if that
domain has been delegated to you.
Example:
=button.panic.mil:1.8.7.108
creates an A record showing 1.8.7.108 as the IP address of
button.panic.mil, and a PTR record showing button.panic.mil as the name
of 108.7.8.1.in-addr.arpa.
+fqdn:ip:ttl:timestamp:lo
Alias fqdn with IP address ip. This is just like =fqdn:ip:ttl except
that tinydns-data does not create the PTR record.
For versions 1.04 and above: tinydns(8) returns addresses (from + or =
or @ or . or & lines) in a random order in the answer section. If
there are more than 8 records, it returns a random set of 8.
Example:
+button.panic.mil:1.8.7.109
creates an A record showing 1.8.7.109 as another IP address for
button.panic.mil.
@fqdn:ip:x:dist:ttl:timestamp:lo
Mail exchanger for fqdn.
tinydns-data creates
an MX (‘‘mail exchanger’’) record showing x.mx.fqdn as a mail
exchanger for fqdn at distance dist and
an A record showing ip as the IP address of x.mx.fqdn.
You may omit dist; the default distance is 0.
If x contains a dot then it is treated specially; see above.
You may create several MX records for fqdn, with a different x for each
server. Make sure to arrange for the SMTP server on each IP address to
accept mail for fqdn.
Example:
@panic.mil:1.8.7.88:mail.panic.mil
creates an MX record showing mail.panic.mil as a mail exchanger for
panic.mil at distance 0, and an A record showing 1.8.7.88 as the IP
address of mail.panic.mil.
#comment
Comment line. The line is ignored.
Uncommon data lines
-fqdn:s:ttl:timestamp:lo
For versions 1.04 and above: This type of line is used by programs that
automatically edit + lines in data to temporarily exclude addresses of
overloaded or dead machines. The line is ignored.
’fqdn:s:ttl:timestamp:lo
TXT (‘‘text’’) record for fqdn. tinydns-data creates a TXT record for
fqdn containing the string s. You may use octal nnn codes to include
arbitrary bytes inside s; for example, 072 is a colon.
^fqdn:p:ttl:timestamp:lo
PTR record for fqdn. tinydns-data creates a PTR record for fqdn
pointing to the domain name p.
Cfqdn:p:ttl:timestamp:lo
CNAME (‘‘canonical name’’) record for fqdn. tinydns-data creates a
CNAME record for fqdn pointing to the domain name p.
Don’t use Cfqdn if there are any other records for fqdn Don’t use Cfqdn
for common aliases; use +fqdn instead. Remember the wise words of
Inigo Montoya: ‘‘You keep using CNAME records. I do not think they
mean what you think they mean.’’
Zfqdn:mname:rname:ser:ref:ret:exp:min:ttl:timestamp:lo
SOA record for fqdn showing mname as the primary name server, rname
(with the first . converted to @) as the contact address, ser as the
serial number, ref as the refresh time, ret as the retry time, exp as
the expire time, and min as the minimum time. ser, ref, ret, exp, and
min may be omitted; they default to, respectively, the modification
time of the data file, 16384 seconds, 2048 seconds, 1048576 seconds,
and 2560 seconds.
:fqdn:n:rdata:ttl:timestamp:lo
Generic record for fqdn. tinydns-data creates a record of type n for
fqdn showing rdata. n must be an integer between 1 and 65535; it must
not be 2 (NS), 5 (CNAME), 6 (SOA), 12 (PTR), 15 (MX), or 252 (AXFR).
The proper format of rdata depends on n. You may use octal nnn codes
to include arbitrary bytes inside rdata.
Wildcards
tinydns supports wildcards of the form *.fqdn. Information for *.fqdn
is provided for every name ending with .fqdn, except names that have
their own records and names that are covered by more specific
wildcards.
For example, the lines
+pink.floyd.u.heaven.af.mil:1.2.3.4
+*.u.heaven.af.mil:1.2.3.200
have the same effect as
+pink.floyd.u.heaven.af.mil:1.2.3.4
+joe.u.heaven.af.mil:1.2.3.200
+bill.u.heaven.af.mil:1.2.3.200
+floyd.u.heaven.af.mil:1.2.3.200
+ishtar.u.heaven.af.mil:1.2.3.200
+joe.bob.u.heaven.af.mil:1.2.3.200
+sally.floyd.u.heaven.af.mil:1.2.3.200
+post.pink.floyd.u.heaven.af.mil:1.2.3.200
and so on.
As another example, the lines
+pink.floyd.u.heaven.af.mil:1.2.3.4
@*.u.heaven.af.mil::mail.heaven.af.mil
have the same effect as
+pink.floyd.u.heaven.af.mil:1.2.3.4
@joe.u.heaven.af.mil::mail.heaven.af.mil
@bill.u.heaven.af.mil::mail.heaven.af.mil
@floyd.u.heaven.af.mil::mail.heaven.af.mil
@ishtar.u.heaven.af.mil::mail.heaven.af.mil
@joe.bob.u.heaven.af.mil::mail.heaven.af.mil
@sally.floyd.u.heaven.af.mil::mail.heaven.af.mil
@post.pink.floyd.u.heaven.af.mil::mail.heaven.af.mil
and so on. Notice that the wildcard does not apply to
pink.floyd.u.heaven.af.mil, because that name has its own records.
A typical data file:
=lion.heaven.af.mil:1.2.3.4
@heaven.af.mil:1.2.3.4
@3.2.1.in-addr.arpa:1.2.3.4
=tiger.heaven.af.mil:1.2.3.5
.heaven.af.mil:1.2.3.5:a
.3.2.1.in-addr.arpa:1.2.3.5:a
=bear.heaven.af.mil:1.2.3.6
.heaven.af.mil:1.2.3.6:b
.3.2.1.in-addr.arpa:1.2.3.6:b
=cheetah.heaven.af.mil:1.2.3.248
=panther.heaven.af.mil:1.2.3.249
Here is the same information in BIND zone-file format with the two
zones merged:
heaven.af.mil. 2560 IN SOA a.ns.heaven.af.mil.
hostmaster.heaven.af.mil. ...
heaven.af.mil. 259200 IN NS a.ns.heaven.af.mil.
heaven.af.mil. 259200 IN NS b.ns.heaven.af.mil.
heaven.af.mil. 86400 IN MX mx.heaven.af.mil.
3.2.1.in-addr.arpa. 2560 IN SOA a.ns.3.2.1.in-addr.arpa.
hostmaster.3.2.1.in-addr.arpa. ...
3.2.1.in-addr.arpa. 259200 IN NS a.ns.3.2.1.in-addr.arpa.
3.2.1.in-addr.arpa. 259200 IN NS b.ns.3.2.1.in-addr.arpa.
3.2.1.in-addr.arpa. 86400 IN MX mx.3.2.1.in-addr.arpa.
4.3.2.1.in-addr.arpa. 86400 IN PTR lion.heaven.af.mil.
lion.heaven.af.mil. 86400 IN A 1.2.3.4
mx.heaven.af.mil. 86400 IN A 1.2.3.4
mx.3.2.1.in-addr.arpa. 86400 IN A 1.2.3.4
5.3.2.1.in-addr.arpa. 86400 IN PTR tiger.heaven.af.mil.
tiger.heaven.af.mil. 86400 IN A 1.2.3.5
a.ns.heaven.af.mil. 259200 IN A 1.2.3.5
a.ns.3.2.1.in-addr.arpa. 259200 IN A 1.2.3.5
6.3.2.1.in-addr.arpa. 86400 IN PTR bear.heaven.af.mil.
bear.heaven.af.mil. 86400 IN A 1.2.3.6
b.ns.heaven.af.mil. 259200 IN A 1.2.3.6
b.ns.3.2.1.in-addr.arpa. 259200 IN A 1.2.3.6
248.3.2.1.in-addr.arpa. 86400 IN PTR cheetah.heaven.af.mil.
cheetah.heaven.af.mil. 86400 IN A 1.2.3.248
249.3.2.1.in-addr.arpa. 86400 IN PTR panther.heaven.af.mil.
panther.heaven.af.mil. 86400 IN A 1.2.3.249
Design notes
The data format is very easy for programs to edit, and reasonably easy
for humans to edit, unlike the traditional zone-file format.
tinydns-data could support a name wherever an IP address is required;
it would look up the name in DNS and use the resulting address. This
would reliably track changes in offsite IP addresses if the database
were rebuilt periodically.
SEE ALSO
tinydns(8)
http://cr.yp.to/djbdns.html
tinydns-data(8)