The strategy that we use at BRL is to download the NIC table to ONE
machine once a night (at 0400 EST), and redistribute it to all BRLNET
machine locally. The procedure is entirely automated, and makes heavy
use of the UNIX RSH/RCP facility (Bravo, Berkeley!).
...
akbar IN A 12.6.230.2
IN MX 0 akbar
IN MX 10 crinifer
big IN A 12.6.230.3
snowy IN A 12.6.230.4
...
id (16 bits; request identifier)
flags (16, distributed as follows:
QR (1; 0 = query, 1 = response)
Opcode (4; 0 = standard...)
AA (1; 1 = I claim to be authoritative for this data)
TC (1; 1 = stuff get truncated (I hit the message-size limit), resend with TCP)
RD (1; 1 = 'recursion desired' = could you do all the work and give me the answer)
RA (1; 1 = I know how to recurse)
Stuff (3; must be all zeros)
Rcode (4; 0 = no error...)
number of questions (16)
number of answers (16)
number of authority records (16)
number of additional records (16)
questions
answers
authorities
additionals
domain name
type (16)
class (16)
time-to-live (32; validity-in-seconds)
resource data length (16)
resource data
[root@ns /root]# dig @akbar hvo.wr.usgs.gov a +qr
; <<>> DiG 9.1.3 <<>> @akbar hvo.wr.usgs.gov a +qr
;; global options: printcmd
;; Sending:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60959
;; flags: rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;hvo.wr.usgs.gov. IN A
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60959
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 4
;; QUESTION SECTION:
;hvo.wr.usgs.gov. IN A
;; ANSWER SECTION:
hvo.wr.usgs.gov. 259181 IN A 130.118.4.30
;; AUTHORITY SECTION:
wr.usgs.gov. 259181 IN NS ns.wr.usgs.gov.
wr.usgs.gov. 259181 IN NS ns2.wr.usgs.gov.
wr.usgs.gov. 259181 IN NS ns.cr.usgs.gov.
wr.usgs.gov. 259181 IN NS ns.er.usgs.gov.
;; ADDITIONAL SECTION:
ns.cr.usgs.gov. 86381 IN A 136.177.16.3
ns.er.usgs.gov. 86381 IN A 130.11.48.2
ns.wr.usgs.gov. 259181 IN A 130.118.4.2
ns2.wr.usgs.gov. 259181 IN A 130.118.4.7
;; Query time: 19 msec
;; SERVER: 12.6.230.2#53(akbar)
;; WHEN: Sat Nov 10 09:07:06 2001
;; MSG SIZE rcvd: 188

...
// control what internal clients see
view "inside" {
// define the IP blocks of your internal networks
match-clients { !216.114.150.92; 12.6.230/23; 216.114.150/23; 10/8; };
// for each of your domains (here just marlboro.edu), what's the data file
// containing the DNS info you want internals to see
zone "marlboro.edu" {
type master;
file "MChosts";
};
};
// as above, except for the rest of the world
view "outside" {
match-clients { any; };
zone "marlboro.edu" {
type master;
file "MChosts-external";
};
};

corn-chex IN A 199.200.202.46
The data file for the 202.200.199.in-addr.arpa domain will have an entry that looks like this:
46 IN PTR corn-chex.mumble.edu.
Let's say that marlboro.edu wants to delegate authority for the subdomain design.marlboro.edu, and that it wants to allocate a set of IP addresses--smaller than a class C-sized block--for use in that domain--let's say the addresses from 12.6.230.152 through 12.6.230.160. Delegating the forward domain is no problem. If I want to delegate design.marlboro.edu from marlboro.edu, I do this in the marlboro.edu zone file (assume that name service for the new domain is going to be handled by a machine called vault.design.marlboro.edu):
design IN NS vault.design.marlboro.edu. vault.design.marlboro.edu. IN A 12.6.230.1555
Fine, how about the reverse domain? Well, in principle it should look rather similar. If I had the class B address 175.177.0.0, and wanted to delegate control over 175.177.10.0 to the new domain, I'd just say this in the 177.175.in-addr.arpa data file
10 IN NS vault.design.marlboro.edu.
But if I own the 12.6.230.x addresses and therefore control the 230.6.12.in-addr.arpa domain, and want to delegate 12.6.230.152 through 160, there's no direct way to do so, no way to express that range in terms of the structure of a dotted-decimal address (short of delegating on a per-IP basis, which would be a nightmare to administer since it would force the subdomain administrator to deal with n individual domain delegations). However RFC 2317 describes the following lovely way of circumventing the problem:
152-160 IN NS vault.design.marlboro.edu
That is, if anybody asks about domain names under 152-160.230.12.in-addr.arpa, refer them to the nameserver vault.design.marlboro.edu
152 IN PTR whatever.design.marlboro.edu.
...then I haven't delegated anything! I'm trying to get rid of these things! But why not use CNAME to alias these addresses into the funny-looking subdomain we created in step 1? That is, if I have:
152 IN CNAME 152.152-160.230.6.12.in-addr.arpa.
...then if somebody wants to know the name corresponding to 12.6.230.152, that gets translated to an inquiry after 152.230.6.12.in-addr.arpa; but the response to that query will be that it's just an alias for 152.152-160.230.6.12.in-addr.arpa; so we go try to look that up, and at some point we'll need to know who handles the names under 152-160.230.6.12.in-addr.arpa; but in step 1 we delegated that domain to vault.design.marlboro.edu, so we connect to that server and ask about 152.
152 IN PTR whatever.design.marlboro.edu.
...everything will be wonderful. Notice in particular here that the setup of the CNAMEs in the in-addr.arpa domain of the parent is a one-time deal: once this has been done, the administrator of that domain need do nothing more, and the administrator of the subdomain can make whatever changes to the PTR records that he or she desires. But the whole point of the exercise was to effect that kind of delegation of responsibility.
update add foo.marlboro.edu 7200 A 12.6.230.247