chiark / gitweb /
feded3bde28d4f9c8a4bed2611d1db7e090f21b2
[chiark-utils.git] / scripts / named-conf.8
1 .\" Hey, Emacs!  This is an -*- nroff -*- source file.
2 .TH CHIARK\-NAMED\-CONF 8 "12th January 2002" "Greenend" "chiark utilities"
3 .SH NAME
4 chiark\-named\-conf \- check and generate nameserver configuration
5 .SH SYNOPSIS
6 .BR chiark\-named\-conf " [\fIoptions\fP] " \-n | \-y | \-f
7 .br
8 \fBchiark\-named\-conf\fP [\fIoptions\fP] \fIzone ...\fP
9 .SH DESCRIPTION
10 .B chiark\-named\-conf
11 is a tool for managing nameserver configurations and checking for
12 suspected DNS problems.  Its main functions are to check that
13 delegations are appropriate and working, that secondary zones are
14 slaved from the right places, and to generate a configuration for
15 .BR BIND ,
16 from its own input file.
17
18 By default, for each zone, in addition to any warnings, the output
19 lists the zone's configuration type.  If the zone is checked, the
20 serial number at each of the nameservers is shown, with any
21 unpublished primary having
22 .B *
23 after the serial number.
24 .SH OPTIONS
25
26 .SS MODE OPTIONS
27 If one of the options
28 .BR -n ", " -y ", or " -f
29 is supplied then chiark-named-conf will read its main configuration
30 file for the list of relevant zones.  It will then check the
31 configuration and delegation for each zone
32 and/or generate and install a new configuration file for
33 the nameserver:
34 .TP
35 .BR \-y | \-\-yes
36 Generate and install new nameserver config, as well as checking
37 configuration, for all listed zones.
38 .TP
39 .BR \-n | \-\-no
40 Check configuration, for all listed zones, but
41 do not generate new nameserver config.
42 .TP
43 .BR \-f | \-\-force
44 Generate and install new nameserver config, without doing any
45 configuration cross-checking.  (Syntax errors in our input
46 configuration will still abort this operation.)
47 .TP
48 .BR \-\-nothing
49 Do nothing: do no checks, and don't write a new config.  This can be
50 used to get a list of the zones being processed.
51 .TP
52 .BR \-\-mail\-first " | " \-\-mail\-middle " | " \-\-mail\-final
53 Send mails to zone SOA MNAMEs reporting zones with problems.  You must
54 call chiark\-named\-conf at least twice, once with \-\-mail\-first,
55 and later with \-\-mail\-final, and preferably with one or more calls
56 to \-\-mail\-middle in between.  All three options carry out a check
57 and store the results; \-\-mail\-final also sends a mail to the zone
58 SOA MNAME or local administrator, if too many of the calls had errors
59 or warnings (calls before the most recent \-\-mail\-first being
60 ignored).
61 .TP
62 .B \-mail\-final\-test
63 just like \-\-mail\-final except that it always sends mail to the
64 local server admin and never to remote zone contacts, adding
65 .B (testing!)
66 to the start of the To: field.
67 .LP
68 Alternatively, one or more zone names may be supplied as arguments, in
69 which case their delegations will be checked, and compared with the
70 data for that zone in the main configuration (if any).  In this case
71 no new configuration file for the nameserver will be made.
72
73 .SS ADDITIONAL OPTIONS
74 .TP
75 .BR \-A | \-\-all
76 Checks even zones known to be broken.  Ie, ignores the
77 .B ?
78 zone style modifier in the configuration.
79 .TP
80 .BR \-C | \-\-config " \fIconfig\-file\fP"
81 Use
82 .I config\-file
83 instead of
84 .BR /etc/bind/chiark-conf-gen.zones .
85 Also changes the default directory.
86 .TP
87 .BR \-D
88 Enables debugging.  Useful for debugging chiark\-named\-conf, but
89 probably not useful for debugging your DNS configuration.  Repeat to
90 increase the debugging level.  (Maximum is
91 .BR -DD .)
92 .TP
93 .BR \-g | \-\-glueless
94 Do not warn about glueless referrals (strictly, makes the zone style
95 modifier
96 .B ~
97 the default).  Not recommended - see the section GLUELESSNESS, below.
98 .TP
99 .BR \-l | \-\-local
100 Only checks for mistakes which are the responsibility of the local
101 administrator (to fix or get fixed).  This means that for published
102 and stealth zones we only check that we're slaving from the right
103 place and that any names and addresses for ourself are right.  For
104 primary zones all checks are still done.  It is a mistake to specify
105 .B \-l
106 with foreign zones (zones supplied explictly on the command line but
107 not relevant to the local server); doing so produces a warning.
108 .TP
109 .BI \-m group !*$@~?
110 Overrides a
111 .B modifiers
112 directive in the configuration file.  The modifiers specified in the
113 directive are completely replaced by those specified in this command
114 line option.  (Note that modifiers specified in per-zone directives
115 still override these per-group settings.)  If more than one
116 .B modifiers
117 directive specifies the same group, they are all affected.
118 .B modifiers
119 directives which don't specify a group cannot be affected.  It is an
120 error if the group does not appear in the config file.  See ZONE STYLE
121 MODIFIERS, below.
122 .TP
123 .BR \-q | \-\-quiet
124 Suppress the usual report of the list of nameservers for each zone and
125 the serial number from each.  When specified twice, do not print any
126 information except warnings.
127 .TP
128 .BR \-r | \-\-repeat
129 When a problem is detected, warn for all sources of the same imperfect
130 data, rather than only the first we come across
131 .TP
132 .BR \-v | \-\-verbose
133 Print additional information about what is being checked, as we go
134 along.
135 .SH USAGE
136 The file
137 .B /etc/bind/chiark-conf-gen.zones
138 (or other file specified with the
139 .B \-C
140 option) contains a sequence of directives, one per line.  Blank lines
141 are permitted.  Leading and trailing whitespace on each line is
142 ignored.  Comments are lines starting with
143 .BR # .
144 Ending a line with a
145 .BR \\
146 joins it to the next line, so that long directives can be split across
147 several physical lines.
148 .SS GENERAL DIRECTIVES
149 These directives specify general configuration details.  They should
150 appear before directives specifying zones, as each will affect only
151 later zone directives.
152 .TP
153 \fBadmin\fP \fIemail\-address\fP
154 Specifies the email address of the local administrator.  This is used
155 in the From: line of mails sent out, and will also receive copies of
156 the reports.  There is no default.
157 .TP
158 \fBdefault\-dir\fP \fIdirectory\fP
159 Makes
160 .I directory
161 be the default directory (which affects the interpretation of
162 relative filenames).  The default is the directory containing
163 the main configuration file, ie
164 .BR /etc/bind
165 if no
166 .B -C
167 option is specified.
168 .TP
169 \fBforbid\-addr\fP [\fIip-address ...\fP]
170 Specifies the list of addresses that are forbidden as any nameserver
171 for any zone.  The default is no such addresses.
172 .TP
173 \fBserverless\-glueless\fP \fIdomain ...\fP
174 Specifies a list of domains under which we do not expect to find any
175 nameservers; for these zones it is OK to find glueless referrals.
176 Each domain listed names a complete subtree of the DNS, starting at
177 the named point.  The default is
178 .BR "in\-addr.arpa ip6.arpa ip6.int" .
179
180 To avoid indefinitely long or even circularly glueless referrals
181 (which delay or prevent lookups) it is necessary for all sites to
182 effectively implement similar conventions; currently the author
183 believes that only the reverse lookup namespaces are conventionally
184 devoid of nameservers, and therefore fine to provide glueless
185 referrals for.  See GLUELESSNESS below.
186 .TP
187 \fBmail\-state\-dir\fP \fIdirectory\fP
188 Uses
189 .I directory
190 for storing information about recent failures for mailing to zone
191 admins.  See \-\-mail\-first et al.  Old files in here should be
192 cleaned up periodically out of cron.  There is no default.
193 .TP
194 \fBmail\-max\-warnfreq\fP \fIpercentage\fP
195 When \-\-mail\-final is used, a mail will be sent to all zones which
196 had warnings or errors more than
197 .IR percentage %
198 of the times \-\-mail\-* was used (since the last \-\-mail\-first).
199 The default is 50%.
200 .TP
201 .BR modifiers " " !*$@~? "] [\fIgroup\fP]"
202 Applies the specified zone style modifiers (see below) to subsequently
203 declared zones (until the next
204 .B modifiers
205 directive), as if the modifiers specified were written out for
206 each zone.  You must specify at least one character for the modifiers;
207 if you want to reset everything to the default, just say
208 .BR ! .
209 If style modifiers specified in the zone directive
210 conflict with the
211 .B modifiers
212 directive, those specified in the zone directive take effect.
213 .I group
214 may contain alphanumerics and underscores, and is used for the
215 .B -m
216 command-line option.
217 .TP
218 \fBself\-addr\fP \fIip-address ...\fP
219 Specifies the list of addresses that this server may be known by in
220 A records.  There is no default.
221 .TP
222 \fBoutput\fP \fIformat\fP \fIfilename\fP [\fIformat\fP \fIfilename ...\fP]
223 Arranges that each
224 .I filename
225 will be overwritten when
226 .BR -y " or " -f
227 are used; its new contents will be configuration
228 directives for the zones which follow for the
229 nameserver in question.  Currently the only
230 .I format
231 supported is
232 .B bind8
233 which indicates new-style BIND 8.  If no zones follow, then each
234 file will still be overwritten, by an effectively empty file.
235 Default: if there is no
236 .B output
237 directive in the configuration then the default is to use
238 .BR bind8 " " chiark-conf-gen.bind8 ;
239 otherwise it is an error for there to be any zones in the
240 configuration before the first
241 .B output
242 directive.
243 .TP
244 \fBself\-ns\fP \fIfqdn ...\fP
245 Specifies the list of names that this server may be known by in NS
246 records.  There is no default.  Any trailing * is replaced by the name
247 of the zone being checked, so for example
248 .B self\-ns isp.ns.*
249 before the zone example.com would mean to expect us to be listed as
250 isp.ns.example.com
251 in the NS RRset.
252 .TP
253 \fBself\-soa\fP \fIfqdn ...\fP
254 Specifies the list of names that this server may be known by in
255 the ORIGIN field of SOA records.  There is no default.  Any trailing
256 * is replaced by the name of the zone, as for
257 .BR self\-ns .
258 .TP
259 .BI self " fqdn ..."
260 Equivalent to both
261 .B self\-ns " and " self\-soa
262 with the same set of names.
263 .TP
264 \fBslave\-dir\fP \fIdirectory\fP [[\fIprefix\fP] \fIsuffix\fP]
265 Specifies the directory in which slave (published and stealth)
266 zonefiles should be placed.  The default
267 .I directory
268 is
269 .BR /var/cache/bind/chiark-slave .
270 The default
271 .IR suffix " and " prefix
272 are empty; they also will be reset to these defaults by a
273 .B slave\-dir
274 directive which does not specify them.
275 .SS ZONE DIRECTIVES
276 These directives specify one or more zones.
277 .TP
278 .BR primary [ !*$@~? "] \fIzone filename\fP"
279 Specifies that this server is supposed to be the primary nameserver
280 for
281 .I zone
282 and that the zone data is to be found in
283 .IR filename .
284 .TP
285 .BR primary\-dir [ !*$@~? "] \fIdirectory\fP[" / "\fIprefix\fP] [\fIsuffix\fP[" / \fIsubfile\fP]]
286 Search
287 .I directory
288 for files whose names start with
289 .I prefix
290 and end with
291 .IR suffix .
292 Each such file is taken to represent a zone file for which this server
293 is supposed to be the primary; the part of the filename between
294 .IR prefix " and " suffix
295 is the name of the zone.
296
297 If
298 .BI / subfile
299 is specified, then instead of looking for files, we search for
300 directories containing
301 .IR subfile ;
302 directories which do not contain the subfile are simply skipped.
303
304 If
305 .IR directory [\fB/\fP prefix ]
306 exists as specified and is a directory then it is interpreted as
307 .I directory
308 with an empty prefix; otherwise the final path component is assumed to
309 be the prefix.  If no
310 .IB suffix / subfile
311 is specified then the default is
312 .BR _db .
313 .TP
314 .BR published [ !*$@~? "] \fIzone origin\-addr\fP"
315 Specifies that this server is supposed to be a published slave
316 nameserver for the zone in question.
317 .TP
318 .BR stealth [ !*$@~? "] \fIzone server\-addr ...\fP"
319 Specifies that this server is supposed to be an unpublished secondary
320 (aka stealth secondary) for the zone in question.
321 .SS ZONE STYLE MODIFIERS
322 Each of the zone directives may optionally be followed by one or more
323 of the following characters (each at most once):
324 .TP
325 .B !
326 Reverses the meaning of all style modifiers after the
327 .BR ! .
328 Only one
329 .BR !
330 must appear in the modifier list.  In this list, other modifiers which
331 default to `enabled' are described by describing the effect of their
332 inverse - see the description for
333 .B !@
334 below.
335 .TP
336 .B *
337 Indicates that the zone is unofficial, ie that it is not delegated as
338 part of the global Internet DNS and that no attempt should be made to
339 find the superzone and check delegations.  Note that unofficial, local
340 zones should be created with caution.  They should be in parts of the
341 namespace which are reserved for private use, or belong to the actual
342 zone maintainer.
343 .TP
344 .B $
345 Indicates that any mails should be sent about the zone to the
346 nameserver admin rather than to the zone SOA MNAME.  This is the
347 default for stealth zones.
348 .TP
349 .B !@
350 Indicates that no mails should be sent about the zone to anyone.
351 .TP
352 .B ~
353 Indicates that the zone's delegation is known to be glueless, and that
354 lack of glue should not be flagged.  Not recommended - see the section
355 GLUELESSNESS, below.
356 .TP
357 .B ?
358 Indicates that the zone is known to be broken and no checks should be
359 carried out on it, unless the
360 .B \-A
361 option is specified.
362 .SS OTHER DIRECTIVES
363 .TP
364 \fBinclude\fP \fIfile\fP
365 Reads
366 .I file
367 as if it were included here.
368 .TP
369 \fBend\fP
370 Ends processing of this file; any data beyond this point is ignored.
371 .SH CHECKS
372 chiark\-named\-conf makes the following checks:
373
374 Delegations: Each delegation from a server for the superzone should
375 contain the same set of nameservers.  None of the delegations should
376 lack glue.  The glue addresses should be the same in each delegation,
377 and agree with the local default nameserver.
378
379 Delegated servers: Each server mentioned in the delegation should have
380 the same SOA record (and obviously, should be authoritative).
381
382 All published nameservers - including delegated servers and servers
383 named in the zone's nameserver set: All nameservers for the zone
384 should supply the same list of nameservers for the zone, and none of
385 this authority information should be glueless.  All the glue should
386 always give the same addresses.
387
388 Origin server's data: The set of nameservers in the origin server's
389 version of the zone should be a superset of those in the delegations.
390
391 Our zone configuration: For primary zones, the SOA origin should be
392 one of the names specified with
393 .BR self\-soa " (or " self ).
394 For published zones, the address should be that of the SOA origin.
395 For stealth zones, the address should be that of the SOA origin or one
396 of the published nameservers.
397 .SH GLUELESSNESS
398 Glue is the name given for the addresses of nameservers which are
399 often supplied in a referral.  In fact, it turns out that it is
400 important for the reliability and performance of the DNS that
401 referrals, in general, always come with glue.
402
403 Firstly, glueless referrals usually cause extra delays looking up
404 names.  BIND 8, when it receives a completely glueless referral and
405 does not have the nameservers' addresses in its cache, will start
406 queries for the nameserver addresses; but it will throw the original
407 client's question away, so that when these queries arrive, it won't
408 restart the query from where it left off.  This means that the client
409 won't get its answer until it retries, typically at least 1 second
410 later - longer if you have more than one nameserver listed.  Worse, if
411 the nameserver to which the glueless referral points is itself under
412 another glueless referral, another retry will be required.
413
414 Even for better resolvers than BIND 8, long chains of glueless
415 referrals can cause performance and reliability problems, turning a
416 simple two or three query exchange into something needing more than a
417 dozen queries.
418
419 Even worse, one might accidentally create a set of circularly glueless
420 referrals such as
421 .br
422 .B example.com NS ns0.example.net.uk
423 .br
424 .B example.com NS ns1.example.net.uk
425 .br
426 .B example.net.uk NS ns0.example.com
427 .br
428 .B example.net.uk NS ns1.example.com
429 .br
430 Here it is impossible to look up anything in either example.com or
431 example.net.uk.
432
433 There are, as far as the author is aware, no generally agreed
434 conventions or standards for avoiding unreasonably long glueless
435 chains, or even circular glueless situations.  The only way to
436 guarantee that things will work properly is therefore to always supply
437 glue.
438
439 However, the situation is further complicated by the fact that many
440 implementations (including BIND 8.2.3, and many registry systems),
441 will refuse to accept glue RRs for delegations in a parent zonefile
442 unless they are under the parent's zone apex.  In these cases it can
443 be necessary to create names for the child's nameservers which are
444 underneath the child's apex, so that the glue records are both in the
445 parent's bailiwick and obviously necessary.
446
447 Even worse, the horrid `shared registry system' managing .com, .net
448 and .org does not allow a single IPv4 address to be used for more than
449 one nameserver name!  It does, however, give out glue for any
450 nameserver properly registered in the system.  I therefore recommend
451 that you create a single name for your nameserver somewhere
452 in .com, .net or .org, and use that for all the delegations
453 from .com, .net and .org.  At the time of writing (January 2002) this
454 seems to produce correct and glueful referrals.
455
456 Finally, a note about `reverse' zones, such as those in in-addr.arpa:
457 It does not seem at all common practice to create nameservers in
458 in-addr.arpa zones (ie, no NS RRs seem to point into in-addr.arpa,
459 even those for in-addr.arpa zones).  Current practice seems to be to
460 always use nameservers for in-addr.arpa which are in the normal,
461 forward, address space.  If everyone sticks to the rule of always
462 publishing nameservers names in the `main' part of the namespace, and
463 publishing glue for them, there is no chance of anything longer than a
464 1-step glueless chain might occur for a in-addr.arpa zone.  It is
465 probably best to maintain this as the status quo, despite the
466 performance problem this implies for BIND 8 caches.  This is what the
467 serverless\-glueless directive is for.
468
469 Dan Bernstein has some information and examples about this at
470 .UR http://cr.yp.to/djbdns/notes.html#gluelessness
471 http://cr.yp.to/djbdns/notes.html#gluelessness
472 .UE
473 but be warned that it is rather opinionated.
474 .SH SECURITY
475 chiark\-named\-conf is supposed to be resistant to malicious data in
476 the DNS.  It is not resistant to malicious data in its own options,
477 configuration file or environment.  It is not supposed to read its
478 stdin, but is not guaranteed to be safe if stdin is dangerous.
479 .LP
480 Killing chiark-named-conf suddenly should be safe, even with
481 .BR -y " or " -f
482 (though of course it may not complete its task if killed), provided
483 that only one invocation is made at once.
484 .LP
485 Slow remote nameservers will cause chiark-named-conf to take
486 excessively long.
487 .SH EXIT STATUS
488 .TP
489 .B 0
490 All went well and there were no warnings.
491 .TP
492 any other
493 There were warnings or errors.
494 .SH FILES
495 .TP
496 .B /etc/bind/chiark-conf-gen.zones
497 Default input configuration file.  (Override with
498 .BR -C .)
499 .TP
500 .B /etc/bind
501 Default directory.  (Override with
502 .BR -C " or " default\-dir .)
503 .TP
504 .IB dir /chiark-conf-gen.bind8
505 Default output file.
506 .TP
507 .B /var/cache/bind/chiark-slave
508 Default location for slave zones.
509 .SH ENVIRONMENT
510 .LP
511 Setting variables used by
512 .BR dig (1)
513 and
514 .BR adnshost (1)
515 will affect the operation of chiark\-named\-conf.  
516 Avoid messing with these if possible.
517 .LP
518 .B PATH
519 is used to find subprograms such as
520 .BR dig " and " adnshost .
521 .SH BUGS
522 The determination of the parent zone for each zone to be checked, and
523 its nameservers, is done simply using the system default nameserver.
524
525 The processing of output from
526 .B dig
527 is not very reliable or robust, but this is mainly the fault of dig.
528 This can lead to somewhat unhelpful error reporting for lookup
529 failures.
530 .SH AUTHOR
531 .B chiark\-named\-conf
532 and this manpage were written by Ian Jackson
533 <ian@chiark.greenend.org.uk>.  They are Copyright 2002 Ian Jackson.
534
535 chiark\-named\-conf and this manpage are free software; you can
536 redistribute it and/or modify it under the terms of the GNU General
537 Public License as published by the Free Software Foundation; either
538 version 2, or (at your option) any later version.
539
540 This is distributed in the hope that it will be useful, but WITHOUT ANY
541 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
542 FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
543 details.
544
545 You should have received a copy of the GNU General Public License along
546 with this program; if not, write to the Free Software Foundation, Inc.,
547 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.