CHIARK-NAMED-CONF(8)
π CHIARK-NAMED-CONF(8) β chiark utilities π
okay bestie, gather round, because this is chiark-named-conf(8) from the chiark utilities and she is the girl for keeping your nameserver config from going feral. β¨
πΈ NAME πΈ
chiark-named-conf β check and generate nameserver configuration. no cap, that's literally her whole job description and she ate. π
π¦ SYNOPSIS π¦
chiark-named-conf [options] -n|-y|-f
chiark-named-conf [options] zone ...
π DESCRIPTION π
so chiark-named-conf is a tool for managing nameserver configurations and checking for suspected DNS problems. her main functions, in order of main-character energy:
- check that delegations are appropriate and working β
- check that secondary zones are slaved from the right places β
- generate a configuration for BIND, from its own input file β
By default, for each zone, on top of any warnings, the output lists the zone's configuration type. And if the zone is checked, the serial number at each of the nameservers is shown β with any unpublished primary having * after the serial number. little asterisk, big meaning, iykyk π
β¨ OPTIONS β¨
π MODE OPTIONS π
if one of -n, -y, or -f gets supplied, then chiark-named-conf will read its main configuration file for the list of relevant zones. then she'll check the configuration and delegation for each zone and/or generate and install a new configuration file for the nameserver:
-y,--yesβ Generate and install new nameserver config, and check configuration, for all listed zones. she's doing the most and honestly? respect. π-n,--noβ Check configuration, for all listed zones, but do not generate new nameserver config. look don't touch energy.-f,--forceβ Generate and install new nameserver config, without doing any configuration cross-checking. (syntax errors in our input configuration will still abort this operation, so don't get cute.)--nothingβ Do nothing: no checks, no new config, nothing. this can be used to get a list of the zones being processed. it's giving "i'm just here to observe." π--mail-first|--mail-middle|--mail-finalβ Send mails to zone SOA MNAMEs reporting zones with problems. you must callchiark-named-confat least twice: once with--mail-first, and later with--mail-final, and preferably with one or more calls to--mail-middlein between. all three options carry out a check and store the results;--mail-finalalso sends a mail to the zone SOA MNAME or local administrator, if too many of the calls had errors or warnings (calls before the most recent--mail-firstbeing ignored).-mail-final-testβ just like--mail-finalexcept that it always sends mail to the local server admin and never to remote zone contacts, adding(testing!)to the start of theTo:field. yes the flag really is spelled with one dash, she's quirky like that, we love her. π«Ά
alternatively, one or more zone names may be supplied as arguments, in which case their delegations will be checked, and compared with the data for that zone in the main configuration (if any). in this case, no new configuration file for the nameserver will be made. read-only queen π§
π ADDITIONAL OPTIONS π
-A,--allβ Checks even zones known to be broken. ie, ignores the?zone style modifier in the configuration. it's giving "i can fix him" but for DNS zones. π-C,--configconfig-file β Use config-file instead of/etc/bind/chiark-conf-gen.zones. also changes the default directory.-Dβ Enables debugging. useful for debuggingchiark-named-conf, but probably not useful for debugging your DNS configuration. repeat to increase the debugging level. (maximum is-DD.)-g,--gluelessβ Do not warn about glueless referrals (strictly, makes the zone style modifier~the default). not recommended β see the sectionGLUELESSNESS, below.-l,--localβ Only checks for mistakes which are the responsibility of the local administrator (to fix or get fixed). this means that for published and stealth zones we only check that we're slaving from the right place and that any names and addresses for ourself are right. for primary zones all checks are still done. it is a mistake to specify-lwith foreign zones (zones supplied explictly on the command line but not relevant to the local server); doing so produces a warning. β οΈ-mgroup!*$@~?β Overrides amodifiersdirective in the configuration file. the modifiers specified in the directive are completely replaced by those specified in this command line option. (note that modifiers specified in per-zone directives still override these per-group settings.) if more than onemodifiersdirective specifies the same group, they are all affected.modifiersdirectives which don't specify a group cannot be affected. it is an error if the group does not appear in the config file. seeZONE STYLE MODIFIERS, below.
the special group foreign is used for zones which don't appear in the configuration file. π
-q,--quietβ Suppress the usual report of the list of nameservers for each zone and the serial number from each. when specified twice, do not print any information except warnings. π€«-r,--repeatβ When a problem is detected, warn for all sources of the same imperfect data, rather than only the first we come across. she said "i'm not playing favourites." π₯-v,--verboseβ Print additional information about what is being checked, as we go along. gossip mode: activated. β
bestie this was only part 1 β there's more coming, don't wander off π
π USAGE π
okay so the file /etc/bind/chiark-conf-gen.zones (or whatever other file you pointed at with the -C option) is basically a whole sequence of directives, one per line. Blank lines? totally allowed, they're just vibing. Leading and trailing whitespace on each line gets ignored, like it's not even there. Comments are lines starting with #. And here's a cute trick: ending a line with a .rm an-result joins it to the next line, so you can split long directives across several physical lines. β¨
πΈ GENERAL DIRECTIVES πΈ
These ones set up your general config deets. Put them before the directives that specify zones, because each one only affects the zone directives that come after it. And foreign zones β that's zones explicitly specified on the command line but not mentioned in the configuration β they use whatever configuration settings are prevailing at the end of the config file. π
adminemail-address β specifies the email address of the local administrator. This is used in theFrom:line of mails sent out, and will also receive copies of the reports. There is no default.default-dirdirectory β makes directory be the default directory (which affects the interpretation of relative filenames). The default is the directory containing the main configuration file, i.e./etc/bindif no-Coption is specified.forbid-addr[ip-address ...] β specifies the list of addresses that are forbidden as any nameserver for any zone. The default is no such addresses.forbid-addr[ip-address ...] β specifies the list of addresses that are forbidden as a nameserver for a zone for which we are the primary β i.e., the list of our old or to-be-obsoleted slaves. The default is no such addresses. π (yes bestie, it's listed twice, exactly like that β I'm not making the rules, I'm just relaying them π«Ά)serverless-gluelessdomain ... β specifies a list of domains under which we do not expect to find any nameservers without glue; for these zones it is OK to find glueless referrals. Each domain listed names a complete subtree of the DNS, starting at the named point. The default isin-addr.arpa ip6.arpa ip6.int.
To avoid indefinitely long or even circularly glueless referrals (which delay or prevent lookups) it is necessary for all sites to effectively implement similar conventions; currently the author believes that only the reverse lookup namespaces are conventionally devoid of (glueless) nameservers, and therefore fine to provide glueless referrals for. See GLUELESSNESS below.
allow--indirect-gluenameserver-superdomain ... β specifies a list of domains under which we expect to find glueless nameservers, with up to one layer of indirection. For nameservers under these domains it is OK to find glueless referrals, but only when listed as a nameserver for a zone which is not itself a subdomain of anallow-indirect-gluenameserver-superdomain.
This supports the common configuration style where DNS operator(s) set up all of their nameservers with names within a small subsection of the DNS (the portions under nameserver-superdomains), and provide glueless referrals naming these nameservers for all other zones. This provides at most one level of missing glue.
Note that if the DNS administrators collectively able to influence the service for some zone (including the admins for its superzones, the zones containing its nameservers, and their superzones and so forth) are not in sufficiently close communication and do not all agree on the proper set of nameserver-superdomains, then they might still set up circular glue and chiark-named-conf would not necessarily be able to detect this even if it was run on every relevant nameserver. π
mail-state-dirdirectory β uses directory for storing information about recent failures for mailing to zone admins. See--mail-firstet al. Old files in here should be cleaned up periodically out of cron. There is no default.mail-max-warnfreqpercentage β when--mail-finalis used, a mail will be sent to all zones which had warnings or errors more than percentage% of the times--mail-*was used (since the last--mail-first). The default is50%.modifiers!*$@~?][group] β applies the specified zone style modifiers (see below) to subsequently declared zones (until the nextmodifiersdirective), as if the modifiers specified were written out for each zone. You must specify at least one character for the modifiers; if you want to reset everything to the default, just say!. If style modifiers specified in the zone directive conflict with themodifiersdirective, those specified in the zone directive take effect. group may contain alphanumerics and underscores, and is used for the-mcommand-line option.self-addrip-address ... β specifies the list of addresses that this server may be known by in A records. There is no default.outputformat filename [format filename ...] β arranges that each filename will be overwritten when-yor-fare used; its new contents will be configuration directives for the zones which follow for the nameserver in question. Currently the only format supported isbind8, which indicates new-style BIND 8. If no zones follow, then each file will still be overwritten, by an effectively empty file. Default: if there is nooutputdirective in the configuration then the default is to usebind8 chiark-conf-gen.bind8; otherwise it is an error for there to be any zones in the configuration before the firstoutputdirective.self-nsfqdn ... β specifies the list of names that this server may be known by in NS records. There is no default. Any trailing*is replaced by the name of the zone being checked, so for exampleself-ns isp.ns.*before the zoneexample.comwould mean to expect us to be listed asisp.ns.example.comin the NS RRset. πself-soafqdn ... β specifies the list of names that this server may be known by in the ORIGIN field of SOA records. There is no default. Any trailing*is replaced by the name of the zone, as forself-ns.selffqdn ... β equivalent to bothself-nsandself-soawith the same set of names. πslave-dirdirectory [[prefix] suffix] β specifies the directory in which slave (published and stealth) zonefiles should be placed. The default directory is/var/cache/bind/chiark-slave. The default suffix and prefix are empty; they also will be reset to these defaults by aslave-dirdirective which does not specify them.
π ZONE DIRECTIVES π
These directives specify one or more zones. Main character energy, honestly.
primary[!*$@~?]zone filename β specifies that this server is supposed to be the primary nameserver for zone and that the zone data is to be found in filename.primary-dir[!*$@~?]directory[/prefix] [suffix[/subfile]] β search directory for files whose names start with prefix and end with suffix. Each such file is taken to represent a zone file for which this server is supposed to be the primary; the part of the filename between prefix and suffix is the name of the zone.
If /subfile is specified, then instead of looking for files, we search for directories containing subfile; directories which do not contain the subfile are simply skipped. π§
If directory[/prefix] exists as specified and is a directory then it is interpreted as directory with an empty prefix; otherwise the final path component is assumed to be the prefix. If no suffix/subfile is specified then the default is _db.
published[!*$@~?]zone origin-addr β specifies that this server is supposed to be a published slave nameserver for the zone in question.stealth[!*$@~?]zone server-addr ... β specifies that this server is supposed to be an unpublished secondary (aka stealth secondary) for the zone in question.
π ZONE STYLE MODIFIERS π
Each of the zone directives may optionally be followed by one or more of the following characters (each at most once):
!β reverses the meaning of all style modifiers after the!. Only one!must appear in the modifier list. In this list, other modifiers which default toenabledare described by describing the effect of their inverse β see the description for!@below.*β indicates that the zone is unofficial, i.e. that it is not delegated as part of the global Internet DNS and that no attempt should be made to find the superzone and check delegations. Note that unofficial, local zones should be created with caution. They should be in parts of the namespace which are reserved for private use, or belong to the actual zone maintainer.$β indicates that any mails should be sent about the zone to the nameserver admin rather than to the zone SOA MNAME. This is the default unless we are supposedly a published server for the zone.!@β indicates that no mails should be sent about the zone to anyone. π~β indicates that the zone's delegation is known to be glueless, and that lack of glue should not be flagged. Not recommended β see the section GLUELESSNESS, below.?β indicates that the zone is known to be broken and no checks should be carried out on it, unless the-Aoption is specified.
π¦ OTHER DIRECTIVES π¦
includefile β reads file as if it were included here.endβ ends processing of this file; any data beyond this point is ignored. πͺ
β CHECKS β
okay bestie, here's the whole vibe check that chiark-named-conf runs on your zones:
- Delegations β every delegation from a server for the superzone needs to have, like, the same set of nameservers. Not one of them is allowed to be missing glue. And those glue addresses? They gotta match across every single delegation, and they gotta agree with the local default nameserver. consistency is the whole moment here.
- Delegated servers β every server that gets named in the delegation should be serving up the same SOA record (and yeah, obviously, it should actually be authoritative π).
- All published nameservers β this includes delegated servers and servers named in the zone's nameserver set, so like, everybody. Every nameserver for the zone should hand over the same list of nameservers for the zone, and none of this authority info should be glueless. Also all the glue should always give the same addresses. no exceptions, periodt.
- Origin server's data β the set of nameservers in the origin server's version of the zone should be a superset of the ones in the delegations. superset. not equal, not a subset. know the difference bestie π
- Our zone configuration β for primary zones, the SOA origin should be one of the names you specified with
self-soa(orself). For published zones, the address should be that of the SOA origin. For stealth zones, the address should be that of the SOA origin or one of the published nameservers.
π¦ GLUELESSNESS π¦
okay so, glue is the name for the addresses of nameservers that often get supplied in a referral. And it turns out that for the reliability and performance of the DNS, it's genuinely important that referrals, like, in general, always come with glue. fr fr.
First up: glueless referrals usually cause extra delays when looking up names. BIND 8, when it gets a completely glueless referral and doesn't have the nameservers' addresses in its cache, will start queries for the nameserver addresses β but it throws the original client's question away ποΈ. So when those queries come back, it won't restart the query from where it left off. Which means the client doesn't get its answer until it retries, typically at least 1 second later β and longer if you've got more than one nameserver listed. Worse still? If the nameserver that the glueless referral points to is itself under another glueless referral, you need another retry. it's giving β¨cascading painβ¨.
Even for better resolvers than BIND 8, long chains of glueless referrals can cause performance and reliability problems, turning a simple two or three query exchange into something needing more than a dozen queries. not the glow up we wanted π
Even worse β you might accidentally create a set of circularly glueless referrals, like:
example.com NS ns0.example.net.uk
example.com NS ns1.example.net.uk
example.net.uk NS ns0.example.com
example.net.uk NS ns1.example.com
And here it is impossible to look up anything in either example.com or example.net.uk. literally impossible. trapped in the loop forever π
There are, as far as the author is aware, no generally agreed conventions or standards for avoiding unreasonably long glueless chains, or even circular glueless situations. So the only way to guarantee things will work properly is therefore to always supply glue.
However, the situation gets further complicated by the fact that many implementations (including BIND 8.2.3, and many registry systems) will refuse to accept glue RRs for delegations in a parent zonefile unless they are under the parent's zone apex. In these cases it can be necessary to create names for the child's nameservers which are underneath the child's apex, so that the glue records are both in the parent's bailiwick and obviously necessary. sneaky but valid π«Ά
In the past, the shared registry system managing .com, .net and .org did not allow a single IPv4 address to be used for more than one nameserver name. However, at the time of writing (October 2002) this problem seems to have been fixed, and the workaround previously recommended (creating a single name for your nameserver somewhere in .com, .net or .org, and using that for all the delegations from .com, .net and .org) should now be avoided. so like, don't do the old thing. that's over.
Finally, a note about reverse zones, such as those in in-addr.arpa: it does not seem at all common practice to create nameservers in in-addr.arpa zones (ie, no NS RRs seem to point into in-addr.arpa, even those for in-addr.arpa zones). Current practice seems to be to always use nameservers for in-addr.arpa which are in the normal, forward, address space. If everyone sticks to the rule of always publishing nameservers names in the main part of the namespace, and publishing glue for them, there is no chance of anything longer than a 1-step glueless chain might occur for a in-addr.arpa zone. It is probably best to maintain this as the status quo, despite the performance problem this implies for BIND 8 caches. This is what the serverless-glueless directive is for. π
Dan Bernstein has some information and examples about this at http://cr.yp.to/djbdns/notes.html#gluelessness but be warned that it is rather opinionated. π
πΈ GLUELESSNESS SUMMARY πΈ
I recommend that every nameserver should have its own name in every forward zone that it serves. For example:
zone.example.com NS servus.ns.example.com
servus.ns.example.com A 127.0.0.2
2.0.0.127.in-addr.arpa PTR servus.example.net
servus.example.net A 127.0.0.2
Domain names in in-addr.arpa should not be used in the right hand side of NS records.
π SECURITY π
chiark-named-conf is supposed to be resistant to malicious data in the DNS. It is not resistant to malicious data in its own options, configuration file or environment. It is not supposed to read its stdin, but is not guaranteed to be safe if stdin is dangerous. so like, keep your env clean bestie π
Killing chiark-named-conf suddenly should be safe, even with -y or -f (though of course it may not complete its task if killed), provided that only one invocation is made at once. one at a time, no double-teaming.
Slow remote nameservers will cause chiark-named-conf to take excessively long. β³ not a bug, just the consequences of their actions.
πͺ EXIT STATUS πͺ
0β All went well and there were no warnings. π- any other β There were warnings or errors. π¬
π FILES π
/etc/bind/chiark-conf-gen.zonesβ Default input configuration file. (Override with-C.)/etc/bindβ Default directory. (Override with-Cordefault-dir.)dir/chiark-conf-gen.bind8β Default output file./var/cache/bind/chiark-slaveβ Default location for slave zones.
π ENVIRONMENT π
Setting variables used by dig(1) and adnshost(1) will affect the operation of chiark-named-conf. Avoid messing with these if possible. hands off the env, babe π
ββοΈ
PATH is used to find subprograms such as dig and adnshost.
π BUGS π
The determination of the parent zone for each zone to be checked, and its nameservers, is done simply using the system default nameserver.
The processing of output from dig is not very reliable or robust, but this is mainly the fault of dig. This can lead to somewhat unhelpful error reporting for lookup failures. blame dig, not us π
π AUTHOR π
chiark-named-conf and this manpage were written by Ian Jackson <ian@chiark.greenend.org.uk>. They are Copyright 2002 Ian Jackson.
chiark-named-conf and this manpage are free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version.
This is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, consult the Free Software Foundation's website at www.fsf.org, or the GNU Project website at www.gnu.org.
and that's a wrap bestie π this whole thing is from the Greenend era, dated 12th January 2002, and yeah β CHIARK-NAMED-CONF(8) is literally its name. go configure some zones, you absolute icon πβ¨
π¦ where this page comes from
- debian bookworm: chiark-scripts 7.0.0
- debian trixie: chiark-scripts 8.0.1
- ubuntu jammy: chiark-scripts 6.1.2+nmu1
- ubuntu noble: chiark-scripts 7.0.0build2
- ubuntu questing: chiark-scripts 8.0.1
- ubuntu resolute: chiark-scripts 8.0.1build1
- ubuntu stonking: chiark-scripts 8.0.1build1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms