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. 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 is running. If anything goes wrong with the creation of data.cdb, tinydns-data stops and leaves the old data.cdb in place.
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 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::4000000038af1379specify 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:ipprefixmeans 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:::exspecifies 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.
.fqdn:ip:x:ttl:timestamp:loName server for our domain fqdn. tinydns-data creates
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:acreates 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.milcreates 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.milcreates 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:loName server for domain fqdn. tinydns-data creates
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:acreates 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.milcreates 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:loHost fqdn with IP address ip. tinydns-data creates
Remember to specify name servers for some suffix of fqdn; otherwise tinydns 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.108creates 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:loAlias 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 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.109creates an A record showing 1.8.7.109 as another IP address for button.panic.mil.
@fqdn:ip:x:dist:ttl:timestamp:loMail exchanger for fqdn. tinydns-data creates
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.milcreates 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.
#commentComment line. The line is ignored.
-fqdn:ip:ttl:timestamp:loFor 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:loTXT (``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:loPTR record for fqdn. tinydns-data creates a PTR record for fqdn pointing to the domain name p.
Cfqdn:p:ttl:timestamp:loCNAME (``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:loSOA 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:loGeneric 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.
For example, the lines
+pink.floyd.u.heaven.af.mil:1.2.3.4 +*.u.heaven.af.mil:1.2.3.200have 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.200and so on.
As another example, the lines
+pink.floyd.u.heaven.af.mil:1.2.3.4 @*.u.heaven.af.mil::mail.heaven.af.milhave 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.miland so on. Notice that the wildcard does not apply to pink.floyd.u.heaven.af.mil, because that name has its own records.
=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.249Here 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
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.