]> mj.ucw.cz Git - nsc-5.git/commitdiff
Updated the docs.
authorMartin Mares <mj@ucw.cz>
Sun, 21 Dec 2003 00:17:56 +0000 (00:17 +0000)
committerMartin Mares <mj@ucw.cz>
Sun, 21 Dec 2003 00:17:56 +0000 (00:17 +0000)
README
TODO

diff --git a/README b/README
index 019d0bb09b596690ecbc6958682e0977a29c22d8..b689846be5beed960bacfbf9b6456a03fb70c12c 100644 (file)
--- a/README
+++ b/README
@@ -5,41 +5,40 @@
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-#### BIG FAT WARNING ####
-
-NSC 3.0 is close to having been rewritten from scratch. However, the documentation
-has not been updated yet, only the example configs in cf/* were.
-
-#### BIG FAT END OF WARNING ####
-
-
-   NSC is a set of shell and M4 scripts for easy maintenance of all domain name
-server files (including configuration and zone files). It requires BIND 8.X,
-GNU bash and GNU m4 to be installed on the system. All programs have been
-tested on Linux, but should work on all unices assuming the required packages
-are present.
-
-   The whole program can be used and distributed according to the terms of the
+   NSC is a set of shell and M4 scripts for easy maintenance of DNS zone files
+and name server daemon configuration (currently available only for BIND 8.X,
+but easily portable for other daemons). It has been designed to make administration
+of a DNS server a piece of cake (unlike other utilities which resemble more
+an English pudding :-) ), which includes automatic generation of reverse records
+for all your hosts, handling of classless reverse delegations and support for IPv6
+(AAAA and PTR in in6.arpa, not A6 and DNAME which seem to be dying out).
+
+   NSC requires GNU m4 and a POSIX-compatible shell, some of the extra utilities
+require Perl 5. I've tested everything on Linux (Debian Woody), but the whole
+package should run on other unices as well.
+
+   The whole package can be used and distributed according to the terms of the
 GNU General Public License. See file COPYING in any of the GNU utility archives
-(you should have one as you are expected to have at least GNU M4 :-]).
+(you should have one as you are expected to have at least GNU M4 ;-)).
 
 
-1. Getting Started
-~~~~~~~~~~~~~~~~~~
-
-   To use NSC, you need to perform the following steps:
+1. Quick Howto for the Impatient
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+(everything will be explained in more detail in the subsequent sections)
 
        - Create a directory where all NSC files will reside (e.g., /etc/named)
          and copy everything from the NSC distribution here.
 
-       - Link /etc/named.conf to /etc/named/named.conf
+       - Symlink /etc/bind/named.conf (or /etc/named.conf or where the config file
+         of your installation of BIND resides) to /etc/named/named.conf
 
-       - CD to /etc/named
+       - Change directory to /etc/named
 
-       - Edit cf/domains and add lines for all domains you want to use (see
-         the next section for what configuration commands are available).
+       - Edit cf/domains to suit your needs -- replace the example domains
+         by your entries.
 
-       - Define cf/<domain-name> for all domains (see section three).
+       - Create cf/<domain-name> for all domains (again, you can easily follow
+         the example domains).
 
        - Run bin/nsconfig (Makefile and named.conf will be generated).
 
@@ -48,144 +47,291 @@ GNU General Public License. See file COPYING in any of the GNU utility archives
        - Enjoy your new DNS setup. If everything goes OK, be happy. Else
          write a bug report :-)
 
-   An interesting companion to this program is the Sleuth utility which checks
-consistency of DNS zones. It's written in perl with help of the DNS module,
-knows of more errors than other checkers and it's freely available at
-ftp://atrey.karlin.mff.cuni.cz/pub/local/mj/net/sleuth-1.3.tar.gz.
+       - Every time you modify the domain files
 
+   An interesting companion to this package is the DNS Sleuth -- a DNS zone
+consistency checker. It's a simple utility written in Perl with help of the
+DNS module and it should be able to detect all common errors in DNS setup
+(I have written it after much disappointment with the other checkers).
+The Sleuth is available online on http://atrey.karlin.mff.cuni.cz/~mj/sleuth/,
+follow the links to download the source.
 
-2. The Domain List File
-~~~~~~~~~~~~~~~~~~~~~~~
-
-   The domain list contains configuration commands describing all domains the
-server is either primary or secondary for and also some other parameters
-which get inserted to named.conf and to the Makefile:
 
-OPTIONS(...)   - set insert options to named.conf. This command _must_ be used
-                 at the start of cf/domains even if the list of supplied
-                 options is empty.
+2. Directory structure
+~~~~~~~~~~~~~~~~~~~~~~
+The NSC directory (/etc/named in the above example) contains the following
+files and subdirectories:
+
+       cf/                     - user-defined configuration files
+       cf/domains              - the domain list (see Section 3)
+       cf/config               - global settings (see Section XXX)
+       cf/<domain>             - each domain has its own config file
+       bin/                    - commands (e.g., nsconfig)
+       m4/                     - M4 scripts (used by the commands)
+       zone/                   - primary zone files
+       bak/                    - backups of zones we serve as a secondary NS for
+       ver/                    - version files where NSC remembers version
+                                 numbers of the primary zones
 
-CONFIG(...)    - insert user data to named.conf (e.g., the logging options).
+   How are different files created:
 
-FORWARD(f1,f2,...) - specify forwarders (name servers we ask first if we are
-                 behind a firewall or we try to do better caching). This must
-                 be included in the OPTIONS block.
+       - You create everything in cf/.
+       - Then you run bin/nsconfig.
+       - Makefile and named.conf gets created according to cf/domains.
+       - You run make.
+       - The Makefile creates primary zone files in zone/ and version files
+         in ver/ and tells BIND to reload its configuration.
+       - BIND downloads contents of secondary zones and puts them to bak/.
 
-SLAVE(f1,f2,...) - same as FORWARDers, but asks _only_ these.
 
-MAKEFILE(...)  - insert user data to the Makefile.
+2. The Domain List File
+~~~~~~~~~~~~~~~~~~~~~~~
+The domain list contains configuration commands describing all domains handled
+by your server and their parameters. In fact, it's a M4 script, but viewing it as
+a config file is a good approximation (however, see Section XXX for some caveats).
+Lines starting with a semicolon are treated as comments and ignored. Text outside
+declarations is silently ignored.
+
+You can specify:
+
+PRIMARY(zone, [extra-files...])
+               Define a zone (domain) we run a primary name server for.
+               The contents of the zone are described in cf/<zone>
+               and possibly in other specified cf files (all files are
+               concatenated to produce a single configuration). See the next
+               section for a look inside these files.
+
+SECONDARY(zone, primary)
+               Define a zone we run a secondary name server for.
+               "primary" is an IP address of the primary name server.
+
+REVERSE(network, primary-files...)
+               Define a reverse zone for the given network. The network name
+               consists of several numbers separated by dots, just like an IP
+               address does, but the network usually has only 3 components.
+               Each reverse zone has its own config file cf/<network> which
+               can of course specify the contents of the zone.
+
+               However, there is a more convenient method to generate the PTR
+               records directly from the A records: just specify the REVERSE
+               directive in cf/<network> and then include all the config files
+               for the primary zones containing hosts from this network. The
+               automatic concatenation of multiple primary-files comes very
+               handy for that.
+
+               In fact, REVERSE(network, p-f...) is almost an equivalent of
+               PRIMARY(REV(network), p-f...) where REV(network) is a macro
+               translating network numbers to names of the corresponding
+               reverse zones [e.g., REV(1.2.3) equals 3.2.1.in-addr.arpa].
+               The only difference is that although the domain name is translated
+               by REV, the config file is still named according to the network.
+               You can also use the REV macro explicitly, which can be handy
+               for example in SECONDARY declarations.
+
+CONFIG(...)    - insert user data to named.conf
+
+MAKEFILE(...)  - insert user data to Makefile
 
-PRIMARY(zone)  - define zone we're a primary name server for.
 
-SECONDARY(zone, primary) - define zone we're a secondary name server for.
-                 "primary" is an IP address of the primary NS for this
-                 zone.
+3. The Domain Files
+~~~~~~~~~~~~~~~~~~~
+The domain files contain descriptions of all DNS records for the given
+domain, starting with the SOA record. Again, these are M4 scripts and the
+declarations are macro calls. Lines starting with a semicolon are treated
+as comments and just copied to the generated zone file. Text outside
+declarations is copied to the zone file as well, so you can spice up the NSC
+output with your own records.
+
+Your menu:
+
+SOA(domain-name)
+               Generate a SOA record for the domain. This must be the first
+               declaration in the config file. The parameters of the SOA
+               are taken from configuration variables (see below). The
+               serial number is calculated from the version number remembered
+               in the version file, following the usual practice of encoding
+               current date and a sequence number within the current day
+               in the serial number, which is guaranteed to be strictly
+               increasing unless you perform more than 99 updates in a single
+               day (in which case NSC stops and tells you to tweak the serial
+               number manually).
+
+               The SOA record otherwise acts like a subdomain (D) declaration,
+               therefore it can be followed by other records like NS (mandatory)
+               or MX.
+
+H(host)
+               Start declaration of a host. Doesn't generate anything, only
+               remembers the host's name.
+
+ADDR(addr...)
+               Specify addresses for the current host. In the normal mode, it
+               creates A records, in the reverse mode, PTR records.
+
+H(host, addr...)
+               A shortcut for H(host) ADDR(addr...) -- in many cases everything
+               you need for a single host.
+
+DADDR(addr...)
+               Like ADDR, but supresses PTR records. (This one is useful if you
+               have a single IP address used for zillions of names and you want
+               to avoid having zillions of PTR records for the same address.)
+
+DH(host, addr...)
+               A shortcut for H(host) DADDR(addr...)
+
+D(domain)
+               Start declaration of a subdomain. Technically the same as H(domain),
+               but this one should be more intuitive.
+
+GLUE(ns, addr...)
+               Specify a glue record for a name server contained within a subdomain
+               it's a primary for. Currently it's an equivalent of DH(ns, addr...).
+
+NS(ns...)
+               Specify a list of name server names for the current domain
+               (started by either a SOA or D declaration). Generates NS records.
+
+MX(mx...)
+               Specify a list of mail exchangers for the current host or domain.
+               Each mail exchanger should be preceded by a priority. Generates
+               MX records.
+
+HI(hw,os)
+               Specify a HINFO record for the current host. Very rare in the
+               today's Internet.
+
+ALIAS(alias...)
+               Specify a list of aliases for the current host or domain.
+               Generates a series of CNAME records pointing from the aliases
+               to the current host/domain.
+
+CNAME(src, dest)
+               Generate a CNAME record -- "src" points to "dest".
+
+PTR(src, dest)
+               Generate a PTR record -- "src" points to "dest". It's a common
+               record in reverse zones (and although it's legal in forward
+               zones as well, such use is very rare), however it's more convenient
+               to have your PTR's generated by the REVERSE directive. But if you
+               need anything special, here is the tool.
+
+REVBLOCK(subdomain, min, max)
+               Generate a series of CNAME records numbered from `min' to `max'
+               and pointing to the same name in the given subdomain, finally
+               declaring the subdomain as well, so you can continue with its
+               NS records.
+
+               Example: REVBLOCK(a, 16, 18) NS(ns.xyzzy.org) yields
+
+                       16      CNAME   16.a
+                       17      CNAME   17.a
+                       18      CNAME   18.a
+                       a       NS      ns.xyzzy.org.
+
+               This is a very common construct for classless reverse delegations,
+               see Section XXX for more details.
+
+REVERSE(network)
+               Switch to reverse mode. From this point on, all output is supressed
+               except for ADDR declarations belonging to the specified network which
+               are automatically converted to PTR records.
+
+               With help of this feature, defining reverse zones can be as easy as:
 
-REVERSE(netprefix, zone1, zone2...) - define reverse zone containing all hosts
-                 from given zones starting with given netprefix.
+                       ; Reverse zone for 10.0.0.0/24 a.k.a. 0.0.10.in-addr.arpa.
+                       SOA(REV(10.0.0))
+                       NS(ns1.example.com, ns2.example.com)
+                       REVERSE(10.0.0)
+                       ; Include all primary zones containing ADDR's from this range,
+                       ; which can be accomplished by a multi-file REVERSE declaration
+                       ; in cf/domains.
 
-                 If you want to delegate a part of your C range to another
-                 name server, use the PARTIAL directive to configure a partial
-                 reverse domain and mention a subzone (e.g., 194.213.32.16+16)
-                 in the main REVERSE directive.
 
-                 The list of name servers authoritative for the reverse zone
-                 is obtained from the _first_ zone specified as an argument,
-                 which must NOT be a subrange specifier (you should use a dummy
-                 zone in case you want only subranges).
+4. Configuration variables
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+There is a fair amount of configuration variables (which are in reality normal
+M4 macros). Each variable has a hard-wired default value which can be overriden
+in cf/config by re-defining the variable. Also, all other config files can specify
+their local definitions, but you need to be careful to change the variable before
+it is used for the first time.
 
-PARTIAL(netprefix, count, primary, sec1, sec2...) - define delegation of a
-                 reverse subzone (see REVERSE above) consisting of <count>
-                 addresses starting at <netprefix>. <primary> is a master
-                 server for that subzone, <sec1> ... <secn> are secondaries
-                 (don't list the local name-server, it's always expected to
-                 be a secondary).
+To change the setting, use
 
-PREVERSE(netprefix, zone1, zone2...) - analogon of REVERSE for partial zones
-                 (to be used when you want to export a subzone to another
-                 server which is configured by PARTIAL). Just use a 4-component
-                 netprefix.
+               define(`variable', `value')
 
-You can also change several predefined macros:
+As usually, even this config file is a M4 script. Comments can be started by
+semicolons, text outside macros is ignored.
 
-       - named_restart_cmd: command used to restart named (default: `ndc reload')
+The following variables are available:
 
+NAMED_RESTART_CMD      Shell command for restarting the name server daemon
+                       (default: ndc restart)
 
-3. The Domain Files
-~~~~~~~~~~~~~~~~~~~
+ROOT                   Root directory of the whole package (default: /etc/named)
+CFDIR                  Directory with config files (default: cf)
+ZONEDIR                        Directory with zone files (default: zone)
+BAKDIR                 Directory with backup files (default: bak)
+VERSDIR                        Directory with version files (default: var)
+ROOTCACHE              File with the cache of root nameservers
 
-   The domain files contain descriptions of all DNS records for the given
-domain, starting with the SOA record. As these files are processed by the M4,
-you can simply insert plain RR data between the macro calls (such data are
-ignored if we're generating a reverse zone) and define your own macros at the
-beginning. The standard macros you can redefine are:
+REFRESH                        SOA record parameters
+RETRY
+EXPIRE
+MINTTL
+NSNAME                 Origin server (default: hostname of your machine)
+MAINTNAME              Domain maintainer name (default: root@NSNAME)
 
-       - refresh, retry, expire, minttl: standard SOA timing parameters (you
-         can specify them as number of seconds or using predefined time macros
-         as minutes(N), hours(N) and days(N).
+BIND_OPTIONS           Extra options to put to the options { ...} section of named.conf
 
-       - nsname: our canonical name (defaults to result of `hostname -f`)
+For the timing parameters, the following shortcuts are avaiable:
 
-       - maintname: zone maintainer name (defaults to 'root@nsname')
+HOURS(n)               Convert hours to seconds
+MINUTES(n)             Convert minutes to seconds
+DAYS(n)                        Convert days to seconds
 
-SOA record:
+For the BIND_OPTIONS, we offer:
 
-       SOA(domainname)         - generates the SOA itself (serial numbers are
-                                 created automagically from current data and
-                                 version counter stored in a separate file)
-       NS(ns1,ns2,...)         - generates list of authoritative NS's
-       MX(pri1 mx1, ...)       - [optional] - generates list of mail exchangers
-                                 for mail addressed directly to the domain
-                                 name. Each MX is preceeded by its priority.
+FORWARD(ip...)         Try to ask the given nameservers first to see if they
+                       have the reply cached.
+SLAVE(ip...)           Pass all non-local requests to the given nameservers.
 
-Subdomains:
 
-       D(name)                 - remembers domain name for further macros
-       NS(ns1,ns2,...)         - generates list of authoritative NS's
-                                 [you might need to insert glue A records
-                                  manually]
+5. Makefile targets
+~~~~~~~~~~~~~~~~~~~
+The Makefile generated by NSC offers the following targets:
 
-Hosts:
+       all (default)           - update all zone files and reload the daemon
+       clean                   - clean all generated zone files and backups
+       clobber                 - clean + delete Makefile and named.conf
+                                 (wise to do after major reconfigurations)
+       distclean               - clobber + delete all version files (use only
+                                 if you really know what you are doing as the
+                                 serial number information in newly generated
+                                 files might be inconsistent then).
 
-       H(name,list-of-ip-addrs) - define new host with given IP addresses
-       HI(hw,os)               - define HINFO record
-       MX(pri1 mx1, ...)       - define mail exchangers for that host
-       ALIAS(al1, al2,...)     - define aliases for that host
 
-       HH(name)                - define dummy host without any addresses
-                                 (e.g., only for mail)
-       RH(name,list-of-ip-addrs) - define out-of-domain host appearing only
-                                 in the reverse zone
+6. Classless reverse delegations
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
-4. Directory structure
-~~~~~~~~~~~~~~~~~~~~~~
+7. Support for IPv6
+~~~~~~~~~~~~~~~~~~~
 
-   The NSC directory hierarchy contains the following directories:
 
-       bak/                    - backups of zones we're a secondary for
-       bin/                    - scripts (e.g., nsconfig)
-       cf/                     - configuration files (domains etc.)
-       m4/                     - M4 scripts
-       ver/                    - version files where NSC remembers version
-                                 numbers for the zones
-       zone/                   - primary zone files
 
+               in style of RFC 2317. The RFC recommends syntax `net/prefix-len'
+               for the subdomains (which is especially nasty for all systems
+               storing domains in files with the same name :) ; NSC avoids this
+               by automagically translating all slashes in domain names to @'s
+               when creating file names)
 
-5. Makefile targets
-~~~~~~~~~~~~~~~~~~~
 
-       all                     - update all files and restart named
-       clean                   - clean all normal data files
-       clobber                 - clean + delete Makefile and named.conf (should
-                                 be done after major reconfiguration)
-       distclean               - clobber + delete all version files (use only
-                                 if you really know what you are doing as the
-                                 serial number information in newly generated
-                                 files might be inconsistent then).
+8. Interaction with M4
+~~~~~~~~~~~~~~~~~~~~~~
 
 
-6. Other utilities
+9. Other utilities
 ~~~~~~~~~~~~~~~~~~
 
 chkdom         Checks domains for correctness using the 'host' utility
diff --git a/TODO b/TODO
index a114d1001f78e4c9bb0b67c581effe1b10f9ee0a..6f57e7a3a3a7e10db26d26f7ab5b7804332aa930 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,14 +1,9 @@
 DOC: mention namespaces
 DOC: mention trailing dot rules
-DOC: mention RFC 2317 (classless del.)
-DOC: ipv6 ::1.2.3.4 not supported
-DOC: verbatim text
+DOC: section xrefs
 
 Update the utilities
 
-convert slashes in domain names when creating file names!
-
 freebsd: don't use `-f' in hostname
-domain names with dots
 
 ? if a zone doesn't change, don't bump the version