home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 August / PCWorld_1999-08_cd.bin / doc / HOWTO / DNS-HOWTO < prev    next >
Text File  |  1999-03-02  |  78KB  |  2,443 lines

  1.   DNS HOWTO
  2.   Nicolai Langfeldt janl@math.uio.no
  3.   v2.2, 11 February 1999
  4.  
  5.   HOWTO become a totally small time DNS admin.
  6.   ______________________________________________________________________
  7.  
  8.   Table of Contents
  9.  
  10.  
  11.   1. Preamble
  12.  
  13.      1.1 Legal stuff
  14.      1.2 Credits and request for help.
  15.      1.3 Dedication
  16.  
  17.   2. Introduction.
  18.  
  19.   3. A caching only name server.
  20.  
  21.      3.1 Starting named
  22.      3.2 Making it even better
  23.      3.3 Congratulations
  24.  
  25.   4. A
  26.  
  27.      4.1 But first some dry theory
  28.      4.2 Our own domain
  29.      4.3 The reverse zone
  30.      4.4 Words of caution
  31.      4.5 Why reverse lookups don't work.
  32.         4.5.1 The reverse zone isn't delegated.
  33.         4.5.2 You've got a classless subnet
  34.  
  35.   5. A real domain example
  36.  
  37.      5.1 /etc/named.conf (or /var/named/named.conf)
  38.      5.2 /var/named/root.hints
  39.      5.3 /var/named/zone/127.0.0
  40.      5.4 /var/named/zone/land-5.com
  41.      5.5 /var/named/zone/206.6.177
  42.  
  43.   6. Maintenance
  44.  
  45.   7. Converting from version 4 to version 8
  46.  
  47.   8. Questions and Answers
  48.  
  49.   9. How to become a bigger time DNS admin.
  50.  
  51.  
  52.  
  53.   ______________________________________________________________________
  54.  
  55.   1.  Preamble
  56.  
  57.   Keywords: DNS, bind, bind-4, bind-8, named, dialup, ppp, slip, isdn,
  58.   Internet, domain, name, hosts, resolving, caching.
  59.  
  60.  
  61.   This document is part of the Linux Documentation Project.
  62.  
  63.  
  64.  
  65.  
  66.  
  67.   1.1.  Legal stuff
  68.  
  69.   (C)opyright 1995-1999 Nicolai Langfeldt. Do not modify without
  70.   amending copyright, distribute freely but retain copyright message.
  71.  
  72.  
  73.   1.2.  Credits and request for help.
  74.  
  75.   I want to thank Arnt Gulbrandsen whom I cause to suffer through the
  76.   drafts to this work and whom provided many useful suggestions.  I also
  77.   want to thank the numerous people that have e-mailed suggestions and
  78.   notes.
  79.  
  80.  
  81.   This will never be a finished document, please send me mail about your
  82.   problems and successes, it can make this a better HOWTO.  So please
  83.   send comments and/or questions or money to janl@math.uio.no.  If you
  84.   send e-mail and want an answer please show the simple courtesy of
  85.   making sure that the return address is correct and working.  Also,
  86.   please read the ``QnA'' section before mailing me.  Another thing, I
  87.   can only understand Norwegian and English.
  88.  
  89.  
  90.  
  91.   If you want to translate this HOWTO please notify me so I can keep
  92.   track of what languages it has been published in, and also I can
  93.   notify you when the HOWTO has been updated.
  94.  
  95.  
  96.   1.3.  Dedication
  97.  
  98.   This HOWTO is dedicated to Anne Line Norheim Langfeldt.  Though she
  99.   will probably never read it since she's not that kind of girl.
  100.  
  101.  
  102.   2.  Introduction.
  103.  
  104.   What this is and isn't.
  105.  
  106.  
  107.   DNS is is the Domain Name System.  DNS converts machine names to the
  108.   IP addresses that all machines on the net have.  It maps from name to
  109.   address and from address to name, and some other things.  This HOWTO
  110.   documents how to define such mappings using a Linux system.  A mapping
  111.   is simply a association between two things, in this case a machine
  112.   name, like ftp.linux.org, and the machines IP number (or address)
  113.   199.249.150.4.
  114.  
  115.  
  116.   DNS is, to the uninitiated (you ;-), one of the more opaque areas of
  117.   network administration.  This HOWTO will try to make a few things
  118.   clearer.  It describes how to set up a simple DNS name server.
  119.   Starting with a caching only server and going on to setting up a
  120.   primary DNS server for a domain.  For more complex setups you can
  121.   check the ``QnA'' section of this document.  If it's not described
  122.   there you will need to read the Real Documentation.  I'll get back to
  123.   what this Real Documentation consists of in ``the last chapter''.
  124.  
  125.  
  126.   Before you start on this you should configure your machine so that you
  127.   can telnet in and out of it, and successfully make all kinds of
  128.   connections to the net, and you should especially be able to do telnet
  129.   127.0.0.1 and get your own machine (test it now!).  You also need a
  130.   good /etc/nsswitch.conf (or /etc/host.conf), /etc/resolv.conf and
  131.   /etc/hosts files as a starting point, since I will not explain their
  132.   function here.  If you don't already have all this set up and working
  133.   the NET-3-HOWTO and/or the PPP-HOWTO explains how to set it up.  Read
  134.   them.
  135.  
  136.  
  137.   When I say `your machine' I mean the machine you are trying to set up
  138.   DNS on.  Not any other machine you might have that's involved in your
  139.   networking effort.
  140.  
  141.  
  142.   I assume you're not behind any kind of firewall that blocks name
  143.   queries.  If you are you will need a special configuration, see the
  144.   section on ``QnA''.
  145.  
  146.  
  147.   Name serving on Unix is done by a program called named.  This is a
  148.   part of the ``bind'' package which is coordinated by Paul Vixie for
  149.   The Internet Software Consortium.  Named is included in most Linux
  150.   distributions and is usually installed as /usr/sbin/named.  If you
  151.   have a named you can probably use it; if you don't have one you can
  152.   get a binary off a Linux ftp site, or get the latest and greatest
  153.   source from ftp.isc.org:/isc/bind/src/cur/bind-8/.  This HOWTO is
  154.   about bind version 8.  The old version of the HOWTO, about bind 4 is
  155.   still available at http://www.math.uio.no/~janl/DNS/ in case you use
  156.   bind 4.  If the named man page talks about (at the very end, the FILES
  157.   section) named.conf you have bind 8, if it talks about named.boot you
  158.   have bind 4.  If you have 4 and are security conscious you really
  159.   ought to upgrade to a recent 8.
  160.  
  161.  
  162.   DNS is a net-wide database.  Take care about what you put into it.  If
  163.   you put junk into it, you, and others will get junk out of it.  Keep
  164.   your DNS tidy and consistent and you will get good service from it.
  165.   Learn to use it, admin it, debug it and you will be another good admin
  166.   keeping the net from falling to it's knees by mismanagement.
  167.  
  168.  
  169.   In this document I state flatly a couple of things that are not
  170.   completely true (they are at least half truths though).  All in the
  171.   interest of simplification.  Things will (probably ;-) work if you
  172.   believe what I say.
  173.  
  174.  
  175.   Tip: Make backup copies of all the files I instruct you to change if
  176.   you already have them, so if after going through this nothing works
  177.   you can get it back to your old, working state.
  178.  
  179.  
  180.   3.  A caching only name server.
  181.  
  182.   A first stab at DNS config, very useful for dialup users.
  183.  
  184.  
  185.   A caching only name server will find the answer to name queries and
  186.   remember the answer the next time you need it.  This will shorten the
  187.   waiting time the next time significantly, especially if you're on a
  188.   slow connection.
  189.  
  190.  
  191.   First you need a file called /etc/named.conf.  This is read when named
  192.   starts.  For now it should simply contain:
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.   ______________________________________________________________________
  200.   // Config file for caching only name server
  201.  
  202.   options {
  203.           directory "/var/named";
  204.  
  205.           // Uncommenting this might help if you have to go through a
  206.           // firewall and things are not working out:
  207.  
  208.           // query-source port 53;
  209.   };
  210.  
  211.   zone "." {
  212.           type hint;
  213.           file "root.hints";
  214.   };
  215.  
  216.   zone "0.0.127.in-addr.arpa" {
  217.           type master;
  218.           file "pz/127.0.0";
  219.   };
  220.   ______________________________________________________________________
  221.  
  222.  
  223.  
  224.  
  225.   The `directory' line tells named where to look for files.  All files
  226.   named subsequently will be relative to this.  Thus pz is a directory
  227.   under /var/named, i.e., /var/named/pz.  /var/named is the right
  228.   directory according to the Linux File system Standard.
  229.  
  230.  
  231.   The file named /var/named/root.hints is named in this.
  232.   /var/named/root.hints should contain this:
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.  
  241.  
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.   ______________________________________________________________________
  266.   ;
  267.   ; There might be opening comments here if you already have this file.
  268.   ; If not don't worry.
  269.   ;
  270.   .                     6D IN NS        G.ROOT-SERVERS.NET.
  271.   .                     6D IN NS        J.ROOT-SERVERS.NET.
  272.   .                     6D IN NS        K.ROOT-SERVERS.NET.
  273.   .                     6D IN NS        L.ROOT-SERVERS.NET.
  274.   .                     6D IN NS        M.ROOT-SERVERS.NET.
  275.   .                     6D IN NS        A.ROOT-SERVERS.NET.
  276.   .                     6D IN NS        H.ROOT-SERVERS.NET.
  277.   .                     6D IN NS        B.ROOT-SERVERS.NET.
  278.   .                     6D IN NS        C.ROOT-SERVERS.NET.
  279.   .                     6D IN NS        D.ROOT-SERVERS.NET.
  280.   .                     6D IN NS        E.ROOT-SERVERS.NET.
  281.   .                     6D IN NS        I.ROOT-SERVERS.NET.
  282.   .                     6D IN NS        F.ROOT-SERVERS.NET.
  283.  
  284.   G.ROOT-SERVERS.NET.     5w6d16h IN A    192.112.36.4
  285.   J.ROOT-SERVERS.NET.     5w6d16h IN A    198.41.0.10
  286.   K.ROOT-SERVERS.NET.     5w6d16h IN A    193.0.14.129
  287.   L.ROOT-SERVERS.NET.     5w6d16h IN A    198.32.64.12
  288.   M.ROOT-SERVERS.NET.     5w6d16h IN A    202.12.27.33
  289.   A.ROOT-SERVERS.NET.     5w6d16h IN A    198.41.0.4
  290.   H.ROOT-SERVERS.NET.     5w6d16h IN A    128.63.2.53
  291.   B.ROOT-SERVERS.NET.     5w6d16h IN A    128.9.0.107
  292.   C.ROOT-SERVERS.NET.     5w6d16h IN A    192.33.4.12
  293.   D.ROOT-SERVERS.NET.     5w6d16h IN A    128.8.10.90
  294.   E.ROOT-SERVERS.NET.     5w6d16h IN A    192.203.230.10
  295.   I.ROOT-SERVERS.NET.     5w6d16h IN A    192.36.148.17
  296.   F.ROOT-SERVERS.NET.     5w6d16h IN A    192.5.5.241
  297.   ______________________________________________________________________
  298.  
  299.  
  300.  
  301.  
  302.   The file describes the root name servers in the world.  This changes
  303.   over time and must be maintained.  See the ``maintenance section'' for
  304.   how to keep it up to date.
  305.  
  306.  
  307.   The next section in named.conf is the last zone. I will explain its
  308.   use in a later chapter, for now just make this a file named 127.0.0 in
  309.   the subdirectory pz:
  310.  
  311.  
  312.   ______________________________________________________________________
  313.   @               IN      SOA     ns.linux.bogus. hostmaster.linux.bogus. (
  314.                                   1       ; Serial
  315.                                   8H      ; Refresh
  316.                                   2H      ; Retry
  317.                                   1W      ; Expire
  318.                                   1D)     ; Minimum TTL
  319.                           NS      ns.linux.bogus.
  320.   1                       PTR     localhost.
  321.   ______________________________________________________________________
  322.  
  323.  
  324.  
  325.  
  326.   Next, you need a /etc/resolv.conf looking something like this:
  327.  
  328.  
  329.  
  330.  
  331.   ______________________________________________________________________
  332.   search subdomain.your-domain.edu your-domain.edu
  333.   nameserver 127.0.0.1
  334.   ______________________________________________________________________
  335.  
  336.  
  337.  
  338.  
  339.   The `search' line specifies what domains should be searched for any
  340.   host names you want to connect to.  The `nameserver' line specifies
  341.   the address of your nameserver, in this case your own machine since
  342.   that is where your named runs (127.0.0.1 is right, no matter if your
  343.   machine has an other address too).  If you want to list several name
  344.   servers put in one `nameserver' line for each. (Note: Named never
  345.   reads this file, the resolver that uses named does.)
  346.  
  347.  
  348.   To illustrate what this file does: If a client tries to look up foo,
  349.   then foo.subdomain.your-domain.edu is tried first, then foo.your-
  350.   fomain.edu, finally foo.  If a client tries to look up
  351.   sunsite.unc.edu, sunsite.unc.edu.subdomain.your-domain.edu is tried
  352.   first (yes, it's silly, but that's the way it works), then
  353.   sunsite.unc.edu.your-domain.edu, and finally sunsite.unc.edu.  You may
  354.   not want to put in too many domains in the search line, it takes time
  355.   to search them all.
  356.  
  357.  
  358.   The example assumes you belong in the domain subdomain.your-
  359.   domain.edu, your machine then, is probably called your-
  360.   machine.subdomain.your-domain.edu.  The search line should not contain
  361.   your TLD (Top Level Domain, `edu' in this case).  If you frequently
  362.   need to connect to hosts in another domain you can add that domain to
  363.   the search line like this:
  364.  
  365.  
  366.   ______________________________________________________________________
  367.   search subdomain.your-domain.edu your-domain.edu other-domain.com
  368.   ______________________________________________________________________
  369.  
  370.  
  371.  
  372.   and so on. Obviously you need to put real domain names in instead.
  373.   Please note the lack of periods at the end of the domain names.  This
  374.   is important, please note the lack of periods at the end of the domain
  375.   names.
  376.  
  377.  
  378.   Next, depending on your libc version you either need to fix
  379.   /etc/nsswitch.conf or /etc/host.conf.  If you already have
  380.   nsswitch.conf that's what we'll fix, if not, we'll fix host.conf.
  381.  
  382.  
  383.   /etc/nsswitch.conf
  384.  
  385.  
  386.   This is a long file specifying where to get different kinds of data
  387.   types, from what file or database.  It usually contains helpful
  388.   comments at the top, which you should consider reading.  After that
  389.   find the line starting with `hosts:', it should read
  390.  
  391.  
  392.   ______________________________________________________________________
  393.   hosts:      files dns
  394.   ______________________________________________________________________
  395.  
  396.  
  397.   If there is no line starting with `hosts:' then put in the one above.
  398.   It says that programs should first look in the /etc/hosts file, then
  399.   check DNS according to resolv.conf.
  400.  
  401.  
  402.   /etc/host.conf
  403.  
  404.  
  405.   It probably contains several lines, one should start with order and it
  406.   should look like this:
  407.  
  408.  
  409.   ______________________________________________________________________
  410.   order hosts,bind
  411.   ______________________________________________________________________
  412.  
  413.  
  414.  
  415.  
  416.   If there is no `order' line you should add one.  It tells the host
  417.   name resolving routines to first look in /etc/hosts, then ask the name
  418.   server (which you in resolv.conf said is at 127.0.0.1).
  419.  
  420.  
  421.   3.1.  Starting named
  422.  
  423.   After all this it's time to start named.  If you're using a dialup
  424.   connection connect first.  Type `ndc start', and press return, no
  425.   options.  If that does not work try `/usr/sbin/ndc start' instead.  If
  426.   that back-fires see the ``QnA'' section.  If you view your syslog
  427.   message file (usually called /var/adm/messages, but another directory
  428.   to look in is /var/log and another file to look in is syslog) while
  429.   starting named (do tail -f /var/log/messages) you should see something
  430.   like:
  431.  
  432.  
  433.   (the lines ending in \ continue on the next line)
  434.  
  435.  
  436.  
  437.        Feb 15 01:26:17 roke named[6091]: starting.  named 8.1.1 Sat Feb 14 \
  438.          00:18:20 MET 1998 ^Ijanl@roke.uio.no:/var/tmp/bind-8.1.1/src/bin/named
  439.        Feb 15 01:26:17 roke named[6091]: cache zone "" (IN) loaded (serial 0)
  440.        Feb 15 01:26:17 roke named[6091]: master zone "0.0.127.in-addr.arpa" \
  441.          (IN) loaded (serial 1)
  442.        Feb 15 01:26:17 roke named[6091]: listening [127.0.0.1].53 (lo)
  443.        Feb 15 01:26:17 roke named[6091]: listening [129.240.230.92].53 (ippp0)
  444.        Feb 15 01:26:17 roke named[6091]: Forwarding source address is [0.0.0.0].1040
  445.        Feb 15 01:26:17 roke named[6092]: Ready to answer queries.
  446.  
  447.  
  448.  
  449.  
  450.  
  451.   If there are any messages about errors then there is a mistake.  Named
  452.   will name the file it is in (one of named.conf and root.hints I hope
  453.   :-) Kill named and go back and check the file.
  454.  
  455.  
  456.   Now you can test your setup.  Start nslookup to examine your work.
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463.   $ nslookup
  464.   Default Server:  localhost
  465.   Address:  127.0.0.1
  466.  
  467.   >
  468.  
  469.  
  470.  
  471.  
  472.  
  473.   If that's what you get it's working.  We hope.  Anything else, go back
  474.   and check everything.  Each time you change the named.conf file you
  475.   need to restart named using the ndc restart command.
  476.  
  477.  
  478.   Now you can enter a query.  Try looking up some machine close to you.
  479.   pat.uio.no is close to me, at the University of Oslo:
  480.  
  481.  
  482.  
  483.        > pat.uio.no
  484.        Server:  localhost
  485.        Address:  127.0.0.1
  486.  
  487.        Name:    pat.uio.no
  488.        Address:  129.240.130.16
  489.  
  490.  
  491.  
  492.  
  493.  
  494.   nslookup now asked your named to look for the machine pat.uio.no.  It
  495.   then contacted one of the name server machines named in your
  496.   root.hints file, and asked its way from there.  It might take tiny
  497.   while before you get the result as it may need to search all the
  498.   domains you named in /etc/resolv.conf.
  499.  
  500.  
  501.   If you ask the same again you get this:
  502.  
  503.  
  504.  
  505.        > pat.uio.no
  506.        Server:  localhost
  507.        Address:  127.0.0.1
  508.  
  509.        Non-authoritative answer:
  510.        Name:    pat.uio.no
  511.        Address:  129.240.2.50
  512.  
  513.  
  514.  
  515.  
  516.  
  517.   Note the ``Non-authoritative answer:'' line we got this time around.
  518.   That means that named did not go out on the network to ask this time,
  519.   the information is in the cache now.  But the cached information might
  520.   be out of date (stale).  So you are informed of this (very slight)
  521.   possibility by it saying `Non-authorative answer:'.  When nslookup
  522.   says this the second time you ask for a host it's a sure sign that
  523.   named caches the information and that it's working.  You exit nslookup
  524.   by giving the command `exit'.
  525.  
  526.  
  527.  
  528.  
  529.   3.2.  Making it even better
  530.  
  531.   In large, well organized, academic or ISP (Internet Service Provider)
  532.   networks you will sometimes find that the network people has set up a
  533.   forwarder hierarchy of DNS servers which helps lighten the internal
  534.   network load and on the outside servers as well.  It's not easy to
  535.   know if you're inside such a network or not.  It is however not
  536.   important and by using the DNS server of your network provider as a
  537.   ``forwarder'' you can make the responses to queries faster and less of
  538.   a load on your network.  If you use a modem this can be quite a win.
  539.   For the sake of this example we assume that your network provider has
  540.   two name servers they want you to use, with IP numbers 10.0.0.1 and
  541.   10.1.0.1.  Then, in your named.conf file, inside the opening section
  542.   called ``options'' insert these lines:
  543.  
  544.  
  545.   ______________________________________________________________________
  546.              forward first;
  547.              forwarders {
  548.                   10.0.0.1;
  549.                   10.1.0.1;
  550.               };
  551.   ______________________________________________________________________
  552.  
  553.  
  554.  
  555.  
  556.   Restart your nameserver and test it with nslookup.  Should work fine.
  557.  
  558.  
  559.   3.3.  Congratulations
  560.  
  561.   Now you know how to set up a caching named.  Take a beer, milk, or
  562.   whatever you prefer to celebrate it.
  563.  
  564.  
  565.   4.  A simple  domain.
  566.  
  567.   How to set up your own domain.
  568.  
  569.  
  570.   4.1.  But first some dry theory
  571.  
  572.   Before we really start this section I'm going to serve you some theory
  573.   on and an example of how DNS works.  And you're going to read it
  574.   because it's good for you.  If you don't want to you should at least
  575.   skim it very quickly.  Stop skimming when you get to what should go in
  576.   your named.conf file.
  577.  
  578.  
  579.   DNS is a hierarchical, tree structured, system.  The top is written
  580.   `.' and pronounced `root'.  Under . there are a number of Top Level
  581.   Domains (TLDs), the best known ones are ORG, COM, EDU and NET, but
  582.   there are many more.  Just like a tree it has a root and it branches
  583.   out.  If you have any computer science background you will recognize
  584.   DNS as a search tree, and you will be able to find nodes, leaf nodes
  585.   and edges.
  586.  
  587.  
  588.   When looking for a machine the query proceeds recursively into the
  589.   hierarchy starting at the top.  If you want to find out the address of
  590.   prep.ai.mit.edu your name server has to find a name server that serves
  591.   edu.  It asks a . server (it already knows the .  servers, that's what
  592.   the root.hints file is for), the .  server gives a list of edu
  593.   servers:
  594.  
  595.        $ nslookup
  596.        Default Server:  localhost
  597.        Address:  127.0.0.1
  598.  
  599.  
  600.  
  601.  
  602.   Start asking a root server:
  603.  
  604.  
  605.  
  606.        > server c.root-servers.net.
  607.        Default Server:  c.root-servers.net
  608.        Address:  192.33.4.12
  609.  
  610.  
  611.  
  612.  
  613.   Set the Query type to NS (name server records):
  614.  
  615.  
  616.  
  617.        > set q=ns
  618.  
  619.  
  620.  
  621.  
  622.   Ask about edu:
  623.  
  624.  
  625.  
  626.        > edu.
  627.  
  628.  
  629.  
  630.  
  631.   The trailing . here is significant, it tells nslookup we're asking
  632.   that edu is right under . (and not under any of our search domains, it
  633.   speeds the search).
  634.  
  635.  
  636.  
  637.        edu     nameserver = A.ROOT-SERVERS.NET
  638.        edu     nameserver = H.ROOT-SERVERS.NET
  639.        edu     nameserver = B.ROOT-SERVERS.NET
  640.        edu     nameserver = C.ROOT-SERVERS.NET
  641.        edu     nameserver = D.ROOT-SERVERS.NET
  642.        edu     nameserver = E.ROOT-SERVERS.NET
  643.        edu     nameserver = I.ROOT-SERVERS.NET
  644.        edu     nameserver = F.ROOT-SERVERS.NET
  645.        edu     nameserver = G.ROOT-SERVERS.NET
  646.        A.ROOT-SERVERS.NET      internet address = 198.41.0.4
  647.        H.ROOT-SERVERS.NET      internet address = 128.63.2.53
  648.        B.ROOT-SERVERS.NET      internet address = 128.9.0.107
  649.        C.ROOT-SERVERS.NET      internet address = 192.33.4.12
  650.        D.ROOT-SERVERS.NET      internet address = 128.8.10.90
  651.        E.ROOT-SERVERS.NET      internet address = 192.203.230.10
  652.        I.ROOT-SERVERS.NET      internet address = 192.36.148.17
  653.        F.ROOT-SERVERS.NET      internet address = 192.5.5.241
  654.        G.ROOT-SERVERS.NET      internet address = 192.112.36.4
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.   This tells us that all ROOT-SERVERS.NET servers serves EDU., so we can
  662.   go on asking any of them.  We'll continue asking C.  Now we want to
  663.   know who serves the next level of the domain name: mit.edu.:
  664.  
  665.  
  666.  
  667.        > mit.edu.
  668.        Server:  c.root-servers.net
  669.        Address:  192.33.4.12
  670.  
  671.        Non-authoritative answer:
  672.        mit.edu nameserver = W20NS.mit.edu
  673.        mit.edu nameserver = BITSY.mit.edu
  674.        mit.edu nameserver = STRAWB.mit.edu
  675.  
  676.        Authoritative answers can be found from:
  677.        W20NS.mit.edu   internet address = 18.70.0.160
  678.        BITSY.mit.edu   internet address = 18.72.0.3
  679.        STRAWB.mit.edu  internet address = 18.71.0.151
  680.  
  681.  
  682.  
  683.  
  684.   steawb, w20ns and bitsy all serves mit.edu, we select one and inquire
  685.   about the name one more level up: ai.mit.edu:
  686.  
  687.  
  688.  
  689.        > server W20NS.mit.edu.
  690.  
  691.  
  692.  
  693.  
  694.   Host names are not case sensitive, but I use my mouse to cut and paste
  695.   so it gets copied as-is from the screen.
  696.  
  697.  
  698.  
  699.  
  700.  
  701.  
  702.  
  703.  
  704.  
  705.  
  706.  
  707.  
  708.  
  709.  
  710.  
  711.  
  712.  
  713.  
  714.  
  715.  
  716.  
  717.  
  718.  
  719.  
  720.  
  721.  
  722.  
  723.  
  724.  
  725.  
  726.  
  727.   Server:  W20NS.mit.edu
  728.   Address:  18.70.0.160
  729.  
  730.   > ai.mit.edu.
  731.   Server:  W20NS.mit.edu
  732.   Address:  18.70.0.160
  733.  
  734.   Non-authoritative answer:
  735.   ai.mit.edu      nameserver = ALPHA-BITS.AI.MIT.EDU
  736.   ai.mit.edu      nameserver = GRAPE-NUTS.AI.MIT.EDU
  737.   ai.mit.edu      nameserver = TRIX.AI.MIT.EDU
  738.   ai.mit.edu      nameserver = MUESLI.AI.MIT.EDU
  739.   ai.mit.edu      nameserver = LIFE.AI.MIT.EDU
  740.   ai.mit.edu      nameserver = BEET-CHEX.AI.MIT.EDU
  741.   ai.mit.edu      nameserver = MINI-WHEATS.AI.MIT.EDU
  742.   ai.mit.edu      nameserver = COUNT-CHOCULA.AI.MIT.EDU
  743.   ai.mit.edu      nameserver = MINTAKA.LCS.MIT.EDU
  744.  
  745.   Authoritative answers can be found from:
  746.   AI.MIT.EDU      nameserver = ALPHA-BITS.AI.MIT.EDU
  747.   AI.MIT.EDU      nameserver = GRAPE-NUTS.AI.MIT.EDU
  748.   AI.MIT.EDU      nameserver = TRIX.AI.MIT.EDU
  749.   AI.MIT.EDU      nameserver = MUESLI.AI.MIT.EDU
  750.   AI.MIT.EDU      nameserver = LIFE.AI.MIT.EDU
  751.   AI.MIT.EDU      nameserver = BEET-CHEX.AI.MIT.EDU
  752.   AI.MIT.EDU      nameserver = MINI-WHEATS.AI.MIT.EDU
  753.   AI.MIT.EDU      nameserver = COUNT-CHOCULA.AI.MIT.EDU
  754.   AI.MIT.EDU      nameserver = MINTAKA.LCS.MIT.EDU
  755.   ALPHA-BITS.AI.MIT.EDU   internet address = 128.52.32.5
  756.   GRAPE-NUTS.AI.MIT.EDU   internet address = 128.52.36.4
  757.   TRIX.AI.MIT.EDU internet address = 128.52.37.6
  758.   MUESLI.AI.MIT.EDU       internet address = 128.52.39.7
  759.   LIFE.AI.MIT.EDU internet address = 128.52.32.80
  760.   BEET-CHEX.AI.MIT.EDU    internet address = 128.52.32.22
  761.   MINI-WHEATS.AI.MIT.EDU  internet address = 128.52.54.11
  762.   COUNT-CHOCULA.AI.MIT.EDU        internet address = 128.52.38.22
  763.   MINTAKA.LCS.MIT.EDU     internet address = 18.26.0.36
  764.  
  765.  
  766.  
  767.  
  768.  
  769.   So museli.ai.mit.edu is a nameserver for ai.mit.edu:
  770.  
  771.  
  772.  
  773.        > server MUESLI.AI.MIT.EDU
  774.        Default Server:  MUESLI.AI.MIT.EDU
  775.        Address:  128.52.39.7
  776.  
  777.  
  778.  
  779.  
  780.  
  781.   Now I change query type, we've found the name server so now we're
  782.   going to ask about everything wheaties knows about prep.ai.mit.edu.
  783.  
  784.  
  785.  
  786.  
  787.  
  788.  
  789.  
  790.  
  791.  
  792.  
  793.   > set q=any
  794.   > prep.ai.mit.edu.
  795.   Server:  MUESLI.AI.MIT.EDU
  796.   Address:  128.52.39.7
  797.  
  798.   prep.ai.mit.edu CPU = dec/decstation-5000.25    OS = unix
  799.   prep.ai.mit.edu
  800.           inet address = 18.159.0.42, protocol = tcp
  801.             ftp  telnet  smtp  finger
  802.   prep.ai.mit.edu preference = 1, mail exchanger = gnu-life.ai.mit.edu
  803.   prep.ai.mit.edu internet address = 18.159.0.42
  804.   ai.mit.edu      nameserver = beet-chex.ai.mit.edu
  805.   ai.mit.edu      nameserver = alpha-bits.ai.mit.edu
  806.   ai.mit.edu      nameserver = mini-wheats.ai.mit.edu
  807.   ai.mit.edu      nameserver = trix.ai.mit.edu
  808.   ai.mit.edu      nameserver = muesli.ai.mit.edu
  809.   ai.mit.edu      nameserver = count-chocula.ai.mit.edu
  810.   ai.mit.edu      nameserver = mintaka.lcs.mit.edu
  811.   ai.mit.edu      nameserver = life.ai.mit.edu
  812.   gnu-life.ai.mit.edu     internet address = 128.52.32.60
  813.   beet-chex.ai.mit.edu    internet address = 128.52.32.22
  814.   alpha-bits.ai.mit.edu   internet address = 128.52.32.5
  815.   mini-wheats.ai.mit.edu  internet address = 128.52.54.11
  816.   trix.ai.mit.edu internet address = 128.52.37.6
  817.   muesli.ai.mit.edu       internet address = 128.52.39.7
  818.   count-chocula.ai.mit.edu        internet address = 128.52.38.22
  819.   mintaka.lcs.mit.edu     internet address = 18.26.0.36
  820.   life.ai.mit.edu internet address = 128.52.32.80
  821.  
  822.  
  823.  
  824.  
  825.  
  826.   So starting at . we found the successive name servers for the each
  827.   level in the domain name.  If you had used your own DNS server instead
  828.   of using all those other servers, your named would of-course cache all
  829.   the information it found while digging this out for you, and it would
  830.   not have to ask again for a while.
  831.  
  832.  
  833.   In the tree analogue each ``.'' in the name is a branching point.  And
  834.   each part between the ``.''s are the names of individual branches in
  835.   the tree.
  836.  
  837.  
  838.   We climb the tree by taking the name we want (prep.ai.mit.edu) first
  839.   finding the root (.) and then looking for the next branch to climb, in
  840.   this case edu.  Once we have found it we climb it by switching to the
  841.   server that knows about that part of the name.  Next we look for the
  842.   mit branch over the edu branch (the combined name is mit.edu) and
  843.   climb it by switching to a server that knows about mit.edu.  Again we
  844.   look for the next branch, it's ai.mit.edu and again we switch to the
  845.   server that knows about it.  Now we have arrived at the right server,
  846.   at the right branching point.  The last part is finding
  847.   prep.ai.mit.edu, which is simple.  In computer science we usually call
  848.   prep a leaf on the tree.
  849.  
  850.  
  851.   A much less talked about, but just as important domain is in-
  852.   addr.arpa.  It too is nested like the `normal' domains.  in-addr.arpa
  853.   allows us to get the hosts name when we have its address.  A important
  854.   thing here is to note that ip addresses are written in reverse order
  855.   in the in-addr.arpa domain.  If you have the address of a machine:
  856.   192.128.52.43 named proceeds just like for the prep.ai.mit.edu
  857.   example: find arpa. servers.  Find in-addr.arpa. servers, find 192.in-
  858.   addr.arpa. servers, find 128.192.in-addr.arpa. servers, find
  859.   52.128.192.in-addr.arpa.  servers.  Find needed records for
  860.   43.52.128.192.in-addr.arpa.  Clever huh? (Say `yes'.)  The reversion
  861.   of the numbers can be confusing for years though.
  862.  
  863.  
  864.   I have just told a lie.  DNS does not work precisely the way I just
  865.   told you.  But it's close enough.
  866.  
  867.  
  868.   4.2.  Our own domain
  869.  
  870.   Now to define our own domain.  We're going to make the domain
  871.   linux.bogus and define machines in it.  I use a totally bogus domain
  872.   name to make sure we disturb no-one Out There.
  873.  
  874.  
  875.   One more thing before we start: Not all characters are allowed in host
  876.   names.  We're restricted to the characters of the English alphabet: a-
  877.   z, and numbers: 0-9 and the character '-' (dash).  Keep to those
  878.   characters.  Upper and lower-case characters are the same for DNS, so
  879.   pat.uio.no is identical to Pat.UiO.No.
  880.  
  881.  
  882.   We've already started this part with this line in named.conf:
  883.  
  884.  
  885.   ______________________________________________________________________
  886.   zone "0.0.127.in-addr.arpa" {
  887.           type master;
  888.           file "pz/127.0.0";
  889.   };
  890.   ______________________________________________________________________
  891.  
  892.  
  893.  
  894.  
  895.   Please note the lack of `.' at the end of the domain names in this
  896.   file.  This says that now we will define the zone 0.0.127.in-
  897.   addr.arpa, that we're the master server for it and that it is stored
  898.   in a file called pz/127.0.0.  We've already set up this file, it
  899.   reads:
  900.  
  901.  
  902.   ______________________________________________________________________
  903.   @               IN      SOA     ns.linux.bogus. hostmaster.linux.bogus. (
  904.                                   1       ; Serial
  905.                                   8H      ; Refresh
  906.                                   2H      ; Retry
  907.                                   1W      ; Expire
  908.                                   1D)     ; Minimum TTL
  909.                           NS      ns.linux.bogus.
  910.   1                       PTR     localhost.
  911.   ______________________________________________________________________
  912.  
  913.  
  914.  
  915.  
  916.   Please note the `.' at the end of all the full domain names in this
  917.   file, in contrast to the named.conf file above. Some people like to
  918.   start each zone file with a $ORIGIN directive, but this is
  919.   superfluous.  The origin (where in the DNS hierarchy it belongs) of a
  920.   zone file is specified in the zone section of the named.conf file, in
  921.   this case it's 0.0.127.in-addr.arpa.
  922.  
  923.  
  924.  
  925.   This `zone file' contains 3 `resource records' (RRs): A SOA RR.  A NS
  926.   RR and a PTR RR.  SOA is short for Start Of Authority.  The `@' is a
  927.   special notation meaning the origin, and since the `domain' column for
  928.   this file says 0.0.127.in-addr.arpa the first line really means
  929.  
  930.  
  931.  
  932.        0.0.127.in-addr.arpa.   IN      SOA ...
  933.  
  934.  
  935.  
  936.  
  937.  
  938.   NS is the Name Server RR.  There is no '@' at the start of this line,
  939.   it is implicit since the last line started with a '@'.  Saves some
  940.   typing that.  So the NS line could also be written
  941.  
  942.  
  943.  
  944.        0.0.127.in-addr.arpa.   IN      NS      ns.linux.bogus
  945.  
  946.  
  947.  
  948.  
  949.  
  950.   It tells DNS what machine is the name server of the domain 0.0.127.in-
  951.   addr.arpa, it is ns.linux.bogus.  'ns' is a customary name for name-
  952.   servers, but as with web servers who are customarily named
  953.   www.something the name may be anything.
  954.  
  955.   And finally the PTR record says that the host at address 1 in the
  956.   subnet 0.0.127.in-addr.arpa, i.e., 127.0.0.1 is named localhost.
  957.  
  958.  
  959.   The SOA record is the preamble to all zone files, and there should be
  960.   exactly one in each zone file.  It describes the zone, where it comes
  961.   from (a machine called ns.linux.bogus), who is responsible for its
  962.   contents (hostmaster@linux.bogus, you should insert your e-mail
  963.   address here), what version of the zone file this is (serial: 1), and
  964.   other things having to do with caching and secondary DNS servers.  For
  965.   the rest of the fields (refresh, retry, expire and minimum) use the
  966.   numbers used in this HOWTO and you should be safe.
  967.  
  968.  
  969.   Now restart your named (the command is ndc restart) and use nslookup
  970.   to examine what you've done:
  971.  
  972.  
  973.  
  974.        $ nslookup
  975.  
  976.        Default Server:  localhost
  977.        Address:  127.0.0.1
  978.  
  979.        > 127.0.0.1
  980.        Server:  localhost
  981.        Address:  127.0.0.1
  982.  
  983.        Name:    localhost
  984.        Address:  127.0.0.1
  985.  
  986.  
  987.  
  988.  
  989.   so it manages to get localhost from 127.0.0.1, good.  Now for our main
  990.   task, the linux.bogus domain, insert a new 'zone' section in
  991.   named.conf:
  992.  
  993.  
  994.   ______________________________________________________________________
  995.   zone "linux.bogus" {
  996.           notify no;
  997.           type master;
  998.           file "pz/linux.bogus";
  999.   };
  1000.   ______________________________________________________________________
  1001.  
  1002.  
  1003.  
  1004.  
  1005.   Note again the lack of ending `.' on the domain name in the named.conf
  1006.   file.
  1007.  
  1008.  
  1009.   In the linux.bogus zone file we'll put some totally bogus data:
  1010.  
  1011.  
  1012.   ______________________________________________________________________
  1013.   ;
  1014.   ; Zone file for linux.bogus
  1015.   ;
  1016.   ; The full zone file
  1017.   ;
  1018.   @       IN      SOA     ns.linux.bogus. hostmaster.linux.bogus. (
  1019.                           199802151       ; serial, todays date + todays serial #
  1020.                           8H              ; refresh, seconds
  1021.                           2H              ; retry, seconds
  1022.                           1W              ; expire, seconds
  1023.                           1D )            ; minimum, seconds
  1024.   ;
  1025.                   NS      ns              ; Inet Address of name server
  1026.                   MX      10 mail.linux.bogus     ; Primary Mail Exchanger
  1027.                   MX      20 mail.friend.bogus.   ; Secondary Mail Exchanger
  1028.   ;
  1029.   localhost       A       127.0.0.1
  1030.   ns              A       192.168.196.2
  1031.   mail            A       192.168.196.4
  1032.   ______________________________________________________________________
  1033.  
  1034.  
  1035.  
  1036.  
  1037.   Two things must be noted about the SOA record.  ns.linux.bogus must be
  1038.   a actual machine with a A record.  It is not legal to have a CNAME
  1039.   record for he machine mentioned in the SOA record.  It's name need not
  1040.   be `ns', it could be any legal host name.  Next,
  1041.   hostmaster.linux.bogus should be read as hostmaster@linux.bogus, this
  1042.   should be a mail alias, or a mailbox, where the person(s) maintaining
  1043.   DNS should read mail frequently.  Any mail regarding the domain will
  1044.   be sent to the address listed here.  The name need not be
  1045.   `hostmaster', it can be your normal e-mail address, but the e-mail
  1046.   address `hostmaster' is often expected to work as well.
  1047.  
  1048.  
  1049.   There is one new RR type in this file, the MX, or Mail eXchanger RR.
  1050.   It tells mail systems where to send mail that is addressed to
  1051.   someone@linux.bogus, namely too mail.linux.bogus or mail.friend.bogus.
  1052.   The number before each machine name is that MX RRs priority.  The RR
  1053.   with the lowest number (10) is the one mail should be sent to if
  1054.   possible.  If that fails the mail can be sent to one with a higher
  1055.   number, a secondary mail handler, i.e., mail.friend.bogus which has
  1056.   priority 20 here.
  1057.   Restart named by running ndc restart.  Examine the results with
  1058.   nslookup:
  1059.  
  1060.  
  1061.  
  1062.        $ nslookup
  1063.        > set q=any
  1064.        > linux.bogus
  1065.        Server:  localhost
  1066.        Address:  127.0.0.1
  1067.  
  1068.        linux.bogus
  1069.                origin = ns.linux.bogus
  1070.                mail addr = hostmaster.linux.bogus
  1071.                serial = 199802151
  1072.                refresh = 28800 (8 hours)
  1073.                retry   = 7200 (2 hours)
  1074.                expire  = 604800 (7 days)
  1075.                minimum ttl = 86400 (1 day)
  1076.        linux.bogus     nameserver = ns.linux.bogus
  1077.        linux.bogus     preference = 10, mail exchanger = mail.linux.bogus.linux.bogus
  1078.        linux.bogus     preference = 20, mail exchanger = mail.friend.bogus
  1079.        linux.bogus     nameserver = ns.linux.bogus
  1080.        ns.linux.bogus  internet address = 192.168.196.2
  1081.        mail.linux.bogus        internet address = 192.168.196.4
  1082.  
  1083.  
  1084.  
  1085.  
  1086.  
  1087.   Upon careful examination you will discover a bug.  The line
  1088.  
  1089.  
  1090.  
  1091.        linux.bogus     preference = 10, mail exchanger = mail.linux.bogus.linux.bogus
  1092.  
  1093.  
  1094.  
  1095.  
  1096.   is all wrong.  It should be
  1097.  
  1098.  
  1099.  
  1100.        linux.bogus     preference = 10, mail exchanger = mail.linux.bogus
  1101.  
  1102.  
  1103.  
  1104.  
  1105.  
  1106.   I deliberately made a mistake so you could learn from it :-) Looking
  1107.   in the zone file we find that the line
  1108.  
  1109.  
  1110.  
  1111.                        MX      10 mail.linux.bogus     ; Primary Mail Exchanger
  1112.  
  1113.  
  1114.  
  1115.  
  1116.   is missing a period.  Or has a 'linux.bogus' too many.  If a machine
  1117.   name does not end in a period in a zone file the origin is added to
  1118.   its end causing the double linux.bogus.linux.bogus.  So either
  1119.  
  1120.  
  1121.  
  1122.  
  1123.   ______________________________________________________________________
  1124.                   MX      10 mail.linux.bogus.    ; Primary Mail Exchanger
  1125.   ______________________________________________________________________
  1126.  
  1127.  
  1128.  
  1129.   or
  1130.  
  1131.  
  1132.   ______________________________________________________________________
  1133.                   MX      10 mail                 ; Primary Mail Exchanger
  1134.   ______________________________________________________________________
  1135.  
  1136.  
  1137.  
  1138.   is correct.  I prefer the latter form, it's less to type.  There are
  1139.   some bind experts that disagree, and some that agree with this.  In a
  1140.   zone file the domain should either be written out and ended with a `.'
  1141.   or it should not be included at all, in which case it defaults to the
  1142.   origin.
  1143.  
  1144.  
  1145.   I must stress that in the named.conf file there should not be `.'s
  1146.   after the domain names.  You have no idea how many times a `.' too
  1147.   many or few have fouled up things and confused the h*ll out of people.
  1148.  
  1149.  
  1150.   So having made my point here is the new zone file, with some extra
  1151.   information in it as well:
  1152.  
  1153.  
  1154.  
  1155.  
  1156.  
  1157.  
  1158.  
  1159.  
  1160.  
  1161.  
  1162.  
  1163.  
  1164.  
  1165.  
  1166.  
  1167.  
  1168.  
  1169.  
  1170.  
  1171.  
  1172.  
  1173.  
  1174.  
  1175.  
  1176.  
  1177.  
  1178.  
  1179.  
  1180.  
  1181.  
  1182.  
  1183.  
  1184.  
  1185.  
  1186.  
  1187.  
  1188.  
  1189.   ______________________________________________________________________
  1190.   ;
  1191.   ; Zone file for linux.bogus
  1192.   ;
  1193.   ; The full zone file
  1194.   ;
  1195.   @       IN      SOA     ns.linux.bogus. hostmaster.linux.bogus. (
  1196.                           199802151       ; serial, todays date + todays serial #
  1197.                           8H              ; refresh, seconds
  1198.                           2H              ; retry, seconds
  1199.                           1W              ; expire, seconds
  1200.                           1D )            ; minimum, seconds
  1201.   ;
  1202.                   TXT     "Linux.Bogus, your DNS consultants"
  1203.                   NS      ns              ; Inet Address of name server
  1204.                   NS      ns.friend.bogus.
  1205.                   MX      10 mail         ; Primary Mail Exchanger
  1206.                   MX      20 mail.friend.bogus. ; Secondary Mail Exchanger
  1207.  
  1208.   localhost       A       127.0.0.1
  1209.  
  1210.   gw              A       192.168.196.1
  1211.                   HINFO   "Cisco" "IOS"
  1212.                   TXT     "The router"
  1213.  
  1214.   ns              A       192.168.196.2
  1215.                   MX      10 mail
  1216.                   MX      20 mail.friend.bogus.
  1217.                   HINFO   "Pentium" "Linux 2.0"
  1218.   www             CNAME   ns
  1219.  
  1220.   donald          A       192.168.196.3
  1221.                   MX      10 mail
  1222.                   MX      20 mail.friend.bogus.
  1223.                   HINFO   "i486"      "Linux 2.0"
  1224.                   TXT     "DEK"
  1225.  
  1226.   mail            A       192.168.196.4
  1227.                   MX      10 mail
  1228.                   MX      20 mail.friend.bogus.
  1229.                   HINFO   "386sx" "Linux 1.2"
  1230.  
  1231.   ftp             A       192.168.196.5
  1232.                   MX      10 mail
  1233.                   MX      20 mail.friend.bogus.
  1234.                   HINFO   "P6" "Linux 2.1.86"
  1235.   ______________________________________________________________________
  1236.  
  1237.  
  1238.  
  1239.  
  1240.   There are a number of new RRs here: HINFO (Host INFOrmation) has two
  1241.   parts, it's a good habit to quote each.  The first part is the
  1242.   hardware or CPU on the machine, and the second part the software or OS
  1243.   on the machine.  The machine called 'ns' has a Pentium CPU and runs
  1244.   Linux 2.0.  CNAME (Canonical NAME) is a way to give each machine
  1245.   several names.  So www is an alias for ns.
  1246.  
  1247.  
  1248.   CNAME record usage is a bit controversial.  But it's safe to follow
  1249.   the rule that a MX, CNAME or SOA record should never refer to a CNAME
  1250.   record, they should only refer to something with a A record, so it is
  1251.   inadvisable to have
  1252.  
  1253.  
  1254.  
  1255.   ______________________________________________________________________
  1256.   foobar          CNAME   www                     ; NO!
  1257.   ______________________________________________________________________
  1258.  
  1259.  
  1260.  
  1261.   but correct to have
  1262.  
  1263.  
  1264.   ______________________________________________________________________
  1265.   foobar          CNAME   ns                      ; Yes!
  1266.   ______________________________________________________________________
  1267.  
  1268.  
  1269.  
  1270.  
  1271.   It's also safe to assume that a CNAME is not a legal host name for a
  1272.   e-mail address: webmaster@www.linux.bogus is an illegal e-mail address
  1273.   given the setup above.  You can expect quite a few mail admins Out
  1274.   There to enforce this rule even if it works for you.  The way to avoid
  1275.   this is to use A records (and perhaps some others too, like a MX
  1276.   record) instead:
  1277.  
  1278.  
  1279.   ______________________________________________________________________
  1280.   www             A       192.168.196.2
  1281.   ______________________________________________________________________
  1282.  
  1283.  
  1284.  
  1285.  
  1286.   A number of the arch-bind-wizards, recommend not using CNAME at all.
  1287.   But the discussion of why or why not is beyond this HOWTO.
  1288.  
  1289.  
  1290.   But as you see, this HOWTO and many sites does not follow this rule.
  1291.  
  1292.  
  1293.   Load the new database by running ndc reload, this causes named to read
  1294.   its files again.
  1295.  
  1296.  
  1297.  
  1298.        $ nslookup
  1299.        Default Server:  localhost
  1300.        Address:  127.0.0.1
  1301.  
  1302.        > ls -d linux.bogus
  1303.  
  1304.  
  1305.  
  1306.  
  1307.  
  1308.   This means that all records should be listed.  It results in this:
  1309.  
  1310.  
  1311.  
  1312.  
  1313.  
  1314.  
  1315.  
  1316.  
  1317.  
  1318.  
  1319.  
  1320.  
  1321.   [localhost]
  1322.   $ORIGIN linux.bogus.
  1323.   @                       1D IN SOA       ns hostmaster (
  1324.                                           199802151       ; serial
  1325.                                           8H              ; refresh
  1326.                                           2H              ; retry
  1327.                                           1W              ; expiry
  1328.                                           1D )            ; minimum
  1329.  
  1330.                           1D IN NS        ns
  1331.                           1D IN NS        ns.friend.bogus.
  1332.                           1D IN TXT       "Linux.Bogus, your DNS consultants"
  1333.                           1D IN MX        10 mail
  1334.                           1D IN MX        20 mail.friend.bogus.
  1335.   gw                      1D IN A         192.168.196.1
  1336.                           1D IN HINFO     "Cisco" "IOS"
  1337.                           1D IN TXT       "The router"
  1338.   mail                    1D IN A         192.168.196.4
  1339.                           1D IN MX        10 mail
  1340.                           1D IN MX        20 mail.friend.bogus.
  1341.                           1D IN HINFO     "386sx" "Linux 1.0.9"
  1342.   localhost               1D IN A         127.0.0.1
  1343.   www                     1D IN CNAME     ns
  1344.   donald                  1D IN A         192.168.196.3
  1345.                           1D IN MX        10 mail
  1346.                           1D IN MX        20 mail.friend.bogus.
  1347.                           1D IN HINFO     "i486" "Linux 1.2"
  1348.                           1D IN TXT       "DEK"
  1349.   ftp                     1D IN A         192.168.196.5
  1350.                           1D IN MX        10 mail
  1351.                           1D IN MX        20 mail.friend.bogus.
  1352.                           1D IN HINFO     "P6" "Linux 1.3.59"
  1353.   ns                      1D IN A         192.168.196.2
  1354.                           1D IN MX        10 mail
  1355.                           1D IN MX        20 mail.friend.bogus.
  1356.                           1D IN HINFO     "Pentium" "Linux 1.2"
  1357.  
  1358.  
  1359.  
  1360.  
  1361.  
  1362.   That's good.  As you see it looks a lot like the zone file itself.
  1363.   Let's check what it says for www alone:
  1364.  
  1365.  
  1366.  
  1367.        > set q=any
  1368.        > www.linux.bogus.
  1369.        Server:  localhost
  1370.        Address:  127.0.0.1
  1371.  
  1372.        www.linux.bogus canonical name = ns.linux.bogus
  1373.        linux.bogus     nameserver = ns.linux.bogus
  1374.        linux.bogus     nameserver = ns.friend.bogus
  1375.        ns.linux.bogus  internet address = 192.168.196.2
  1376.  
  1377.  
  1378.  
  1379.  
  1380.  
  1381.   In other words, the real name of www.linux.bogus is ns.linux.bogus,
  1382.   and it gives you some of the information it has about ns as well,
  1383.   enough to connect to it if you were a program.
  1384.  
  1385.  
  1386.  
  1387.   Now we're halfway.
  1388.  
  1389.  
  1390.   4.3.  The reverse zone
  1391.  
  1392.   Now programs can convert the names in linux.bogus to addresses which
  1393.   they can connect to.  But also required is a reverse zone, one making
  1394.   DNS able to convert from an address to a name.  This name is used buy
  1395.   a lot of servers of different kinds (FTP, IRC, WWW and others) to
  1396.   decide if they want to talk to you or not, and if so, maybe even how
  1397.   much priority you should be given.  For full access to all services on
  1398.   the Internet a reverse zone is required.
  1399.  
  1400.  
  1401.   Put this in named.conf:
  1402.  
  1403.  
  1404.   ______________________________________________________________________
  1405.   zone "196.168.192.in-addr.arpa" {
  1406.           notify no;
  1407.           type master;
  1408.           file "pz/192.168.196";
  1409.   };
  1410.   ______________________________________________________________________
  1411.  
  1412.  
  1413.  
  1414.  
  1415.   This is exactly as with the 0.0.127.in-addr.arpa, and the contents are
  1416.   similar:
  1417.  
  1418.  
  1419.   ______________________________________________________________________
  1420.   @       IN      SOA     ns.linux.bogus. hostmaster.linux.bogus. (
  1421.                           199802151 ; Serial, todays date + todays serial
  1422.                           8H      ; Refresh
  1423.                           2H      ; Retry
  1424.                           1W      ; Expire
  1425.                           1D)     ; Minimum TTL
  1426.                   NS      ns.linux.bogus.
  1427.  
  1428.   1               PTR     gw.linux.bogus.
  1429.   2               PTR     ns.linux.bogus.
  1430.   3               PTR     donald.linux.bogus.
  1431.   4               PTR     mail.linux.bogus.
  1432.   5               PTR     ftp.linux.bogus.
  1433.   ______________________________________________________________________
  1434.  
  1435.  
  1436.  
  1437.  
  1438.   Now you restart your named (ndc restart) and examine your work with
  1439.   nslookup again:
  1440.  
  1441.  
  1442.   ______________________________________________________________________
  1443.   > 192.168.196.4
  1444.   Server:  localhost
  1445.   Address:  127.0.0.1
  1446.  
  1447.   Name:    mail.linux.bogus
  1448.   Address:  192.168.196.4
  1449.   ______________________________________________________________________
  1450.  
  1451.  
  1452.  
  1453.   so, it looks OK, dump the whole thing to examine that too:
  1454.  
  1455.  
  1456.   ______________________________________________________________________
  1457.   > ls -d 196.168.192.in-addr.arpa
  1458.   [localhost]
  1459.   $ORIGIN 196.168.192.in-addr.arpa.
  1460.   @                       1D IN SOA       ns.linux.bogus. hostmaster.linux.bogus. (
  1461.                                           199802151       ; serial
  1462.                                           8H              ; refresh
  1463.                                           2H              ; retry
  1464.                                           1W              ; expiry
  1465.                                           1D )            ; minimum
  1466.  
  1467.                           1D IN NS        ns.linux.bogus.
  1468.   1                       1D IN PTR       gw.linux.bogus.
  1469.   2                       1D IN PTR       ns.linux.bogus.
  1470.   3                       1D IN PTR       donald.linux.bogus.
  1471.   4                       1D IN PTR       mail.linux.bogus.
  1472.   5                       1D IN PTR       ftp.linux.bogus.
  1473.   @                       1D IN SOA       ns.linux.bogus. hostmaster.linux.bogus. (
  1474.                                           199802151       ; serial
  1475.                                           8H              ; refresh
  1476.                                           2H              ; retry
  1477.                                           1W              ; expiry
  1478.                                           1D )            ; minimum
  1479.   ______________________________________________________________________
  1480.  
  1481.  
  1482.  
  1483.  
  1484.   Looks good!  If your output didn't look like that look for error-
  1485.   messages in your syslog, I explained how to do that at the very
  1486.   beginning of this chapter.
  1487.  
  1488.  
  1489.   4.4.  Words of caution
  1490.  
  1491.   There are some things I should add here.  The IP numbers used in the
  1492.   examples above are taken from one of the blocks of 'private nets',
  1493.   i.e., they are not allowed to be used publicly on the internet.  So
  1494.   they are safe to use in an example in a HOWTO.  The second thing is
  1495.   the notify no; line.  It tells named not to notify its secondary
  1496.   (slave) servers when it has gotten a update to one of its zone files.
  1497.   In bind-8 the named can notify the other servers listed in NS records
  1498.   in the zone file when a zone is updated.  This is handy for ordinary
  1499.   use, but for private experiments with zones this feature should be
  1500.   off, we don't want the experiment to pollute the Internet do we?
  1501.  
  1502.  
  1503.   And, of course, this domain is highly bogus, and so are all the
  1504.   addresses in it.  For a real example of a real-life domain see the
  1505.   next main-section.
  1506.  
  1507.  
  1508.   4.5.  Why reverse lookups don't work.
  1509.  
  1510.   There are a couple of ``gotchas'' that normally are avoided with name
  1511.   lookups that are often seen when setting up reverse zones.  Before you
  1512.   go on you need reverse lookups of your machines working on your own
  1513.   nameserver.  If it isn't go back and fix it before continuing.
  1514.  
  1515.  
  1516.   I will discuss two failures of reverse lookups as seen from outside
  1517.   your network:
  1518.  
  1519.   4.5.1.  The reverse zone isn't delegated.
  1520.  
  1521.   When you ask a service provider for a network-address range and a
  1522.   domain name the domain name is normally delegated as a matter of
  1523.   course.  A delegation is the glue NS record that helps you get from
  1524.   one nameserver to another as explained in the dry theory section
  1525.   above.  You read that, right?  If your reverse zone dosn't work go
  1526.   back and read it.  Now.
  1527.  
  1528.  
  1529.   The reverse zone also needs to be delegated.  If you got the
  1530.   192.168.196 net with the linux.bogus domain from your provider they
  1531.   need to put NS records in for your reverse zone as well as for your
  1532.   forward zone.  If you follow the chain from in-addr.arpa and up to
  1533.   your net you will probably find a break in the chain.  Most probably
  1534.   at your service provider.  Having found the break in the chain contact
  1535.   your service-provider and ask them to correct the error.
  1536.  
  1537.  
  1538.   4.5.2.  You've got a classless subnet
  1539.  
  1540.   This is a somewhat advanced topic, but classless subnets are very
  1541.   common these days and you probably have one unless you're a medium
  1542.   sized company.
  1543.  
  1544.  
  1545.   A classless subnet is what keeps the Internet going these days.  Some
  1546.   years ago there was much ado about the shortage of ip numbers.  The
  1547.   smart people in IETF (the Internet Engineering Task Force, they keep
  1548.   the Internet working) stuck their heads together and solved the
  1549.   problem.  At a price.  The price is that you'll get less than a ``C''
  1550.   subnet and some things may break.  Please see Ask Mr. DNS at
  1551.   http://www.acmebw.com/askmrdns/00007.htm for an good explanation of
  1552.   this and how to handle it.
  1553.  
  1554.  
  1555.   Did you read it?  I'm not going to explain it so please read it.
  1556.  
  1557.  
  1558.   The first part of the problem is that your ISP must understand the
  1559.   technique described by Mr. DNS.  Not all small ISPs have a working
  1560.   understanding of this.  If so you might have to explain to them and be
  1561.   persistent.  But be sure you understand it first ;-).  They will then
  1562.   set up a nice reverse zone at their server which you can examine for
  1563.   correctness with nslookup.
  1564.  
  1565.  
  1566.   The second and last part of the problem is that you must understand
  1567.   the technique.  If you're unsure go back and read about it again.
  1568.   Then you can set up your own classless reverse zone as described by
  1569.   Mr. DNS.
  1570.  
  1571.  
  1572.   There is another trap lurking here.  Old resolvers will not be able to
  1573.   follow the CNAME trick in the resolving chain and will fail to
  1574.   reverse-resolve your machine.  This can result in the service
  1575.   assigning it an incorrect access class, deny access or something along
  1576.   those lines.  If you stumble into such a service the only solution
  1577.   (that I know of) is for your ISP to insert your PTR record directly
  1578.   into their trick classless zone file instead of the trick CNAME
  1579.   record.
  1580.  
  1581.  
  1582.   Some ISPs will offer other ways to handle this, like Web based forms
  1583.   for you to input your reverse-mappings in or other automagical
  1584.   systems.
  1585.   5.  A real domain example
  1586.  
  1587.   Where we list some real zone files
  1588.  
  1589.  
  1590.   Users have suggested that I include a real example of a working domain
  1591.   as well as the tutorial example.
  1592.  
  1593.  
  1594.   I use this example with permission from David Bullock of LAND-5.
  1595.   These files were current 24th of September 1996, and were then edited
  1596.   to fit bind 8 restrictions and use extensions by me.  So, what you see
  1597.   here differs a bit from what you find if you query LAND-5's name
  1598.   servers now.
  1599.  
  1600.  
  1601.   5.1.  /etc/named.conf (or /var/named/named.conf)
  1602.  
  1603.   Here we find master zone sections for the two reverse zones needed:
  1604.   the 127.0.0 net, as well as LAND-5's 206.6.177 subnet. And a primary
  1605.   line for land-5's forward zone land-5.com. Also note that instead of
  1606.   stuffing the files in a directory called pz, as I do in this HOWTO, he
  1607.   puts them in a directory called zone.
  1608.  
  1609.  
  1610.   ______________________________________________________________________
  1611.   // Boot file for LAND-5 name server
  1612.  
  1613.   options {
  1614.           directory "/var/named";
  1615.   };
  1616.  
  1617.   zone "." {
  1618.           type hint;
  1619.           file "root.hints";
  1620.   };
  1621.  
  1622.   zone "0.0.127.in-addr.arpa" {
  1623.           type master;
  1624.           file "zone/127.0.0";
  1625.   };
  1626.  
  1627.   zone "land-5.com" {
  1628.           type master;
  1629.           file "zone/land-5.com";
  1630.   };
  1631.  
  1632.   zone "177.6.206.in-addr.arpa" {
  1633.           type master;
  1634.           file "zone/206.6.177";
  1635.   };
  1636.   ______________________________________________________________________
  1637.  
  1638.  
  1639.  
  1640.  
  1641.   If you put this in your named.conf file to play with PLEASE put
  1642.   ``notify no;'' in the zone sections for the two land-5 zones so as to
  1643.   avoid accidents.
  1644.  
  1645.  
  1646.   5.2.  /var/named/root.hints
  1647.  
  1648.   Keep in mind that this file is dynamic, and the one listed here is
  1649.   old. You're better off using one produced now, with dig, as explained
  1650.   earlier.
  1651.   ______________________________________________________________________
  1652.   ; <<>> DiG 8.1 <<>> @A.ROOT-SERVERS.NET.
  1653.   ; (1 server found)
  1654.   ;; res options: init recurs defnam dnsrch
  1655.   ;; got answer:
  1656.   ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10
  1657.   ;; flags: qr aa rd; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13
  1658.   ;; QUERY SECTION:
  1659.   ;;      ., type = NS, class = IN
  1660.  
  1661.   ;; ANSWER SECTION:
  1662.   .                     6D IN NS        G.ROOT-SERVERS.NET.
  1663.   .                     6D IN NS        J.ROOT-SERVERS.NET.
  1664.   .                     6D IN NS        K.ROOT-SERVERS.NET.
  1665.   .                     6D IN NS        L.ROOT-SERVERS.NET.
  1666.   .                     6D IN NS        M.ROOT-SERVERS.NET.
  1667.   .                     6D IN NS        A.ROOT-SERVERS.NET.
  1668.   .                     6D IN NS        H.ROOT-SERVERS.NET.
  1669.   .                     6D IN NS        B.ROOT-SERVERS.NET.
  1670.   .                     6D IN NS        C.ROOT-SERVERS.NET.
  1671.   .                     6D IN NS        D.ROOT-SERVERS.NET.
  1672.   .                     6D IN NS        E.ROOT-SERVERS.NET.
  1673.   .                     6D IN NS        I.ROOT-SERVERS.NET.
  1674.   .                     6D IN NS        F.ROOT-SERVERS.NET.
  1675.  
  1676.   ;; ADDITIONAL SECTION:
  1677.   G.ROOT-SERVERS.NET.     5w6d16h IN A    192.112.36.4
  1678.   J.ROOT-SERVERS.NET.     5w6d16h IN A    198.41.0.10
  1679.   K.ROOT-SERVERS.NET.     5w6d16h IN A    193.0.14.129
  1680.   L.ROOT-SERVERS.NET.     5w6d16h IN A    198.32.64.12
  1681.   M.ROOT-SERVERS.NET.     5w6d16h IN A    202.12.27.33
  1682.   A.ROOT-SERVERS.NET.     5w6d16h IN A    198.41.0.4
  1683.   H.ROOT-SERVERS.NET.     5w6d16h IN A    128.63.2.53
  1684.   B.ROOT-SERVERS.NET.     5w6d16h IN A    128.9.0.107
  1685.   C.ROOT-SERVERS.NET.     5w6d16h IN A    192.33.4.12
  1686.   D.ROOT-SERVERS.NET.     5w6d16h IN A    128.8.10.90
  1687.   E.ROOT-SERVERS.NET.     5w6d16h IN A    192.203.230.10
  1688.   I.ROOT-SERVERS.NET.     5w6d16h IN A    192.36.148.17
  1689.   F.ROOT-SERVERS.NET.     5w6d16h IN A    192.5.5.241
  1690.  
  1691.   ;; Total query time: 215 msec
  1692.   ;; FROM: roke.uio.no to SERVER: A.ROOT-SERVERS.NET.  198.41.0.4
  1693.   ;; WHEN: Sun Feb 15 01:22:51 1998
  1694.   ;; MSG SIZE  sent: 17  rcvd: 436
  1695.   ______________________________________________________________________
  1696.  
  1697.  
  1698.  
  1699.  
  1700.   5.3.  /var/named/zone/127.0.0
  1701.  
  1702.   Just the basics, the obligatory SOA record, and a record that maps
  1703.   127.0.0.1 to localhost.  Both are required.  No more should be in this
  1704.   file.  It will probably never need to be updated, unless your
  1705.   nameserver or hostmaster address changes.
  1706.  
  1707.  
  1708.  
  1709.  
  1710.  
  1711.  
  1712.  
  1713.  
  1714.  
  1715.  
  1716.  
  1717.   ______________________________________________________________________
  1718.   @               IN      SOA     land-5.com. root.land-5.com. (
  1719.                                   199609203       ; Serial
  1720.                                   28800   ; Refresh
  1721.                                   7200    ; Retry
  1722.                                   604800  ; Expire
  1723.                                   86400)  ; Minimum TTL
  1724.                           NS      land-5.com.
  1725.  
  1726.   1                       PTR     localhost.
  1727.   ______________________________________________________________________
  1728.  
  1729.  
  1730.  
  1731.  
  1732.   5.4.  /var/named/zone/land-5.com
  1733.  
  1734.   Here we see the mandatory SOA record, the needed NS records.  We can
  1735.   see that he has a secondary name server at ns2.psi.net.  This is as it
  1736.   should be, always have a off site secondary server as backup.  We can
  1737.   also see that he has a master host called land-5 which takes care of
  1738.   many of the different Internet services, and that he's done it with
  1739.   CNAMEs (a alternative is using A records).
  1740.  
  1741.  
  1742.   As you see from the SOA record, the zone file originates at
  1743.   land-5.com, the contact person is root@land-5.com. hostmaster is
  1744.   another oft used address for the contact person.  The serial number is
  1745.   in the customary yyyymmdd format with todays serial number appended;
  1746.   this is probably the sixth version of zone file on the 20th of
  1747.   September 1996.  Remember that the serial number must increase
  1748.   monotonically, here there is only one digit for todays serial#, so
  1749.   after 9 edits he has to wait until tomorrow before he can edit the
  1750.   file again.  Consider using two digits.
  1751.  
  1752.  
  1753.  
  1754.  
  1755.  
  1756.  
  1757.  
  1758.  
  1759.  
  1760.  
  1761.  
  1762.  
  1763.  
  1764.  
  1765.  
  1766.  
  1767.  
  1768.  
  1769.  
  1770.  
  1771.  
  1772.  
  1773.  
  1774.  
  1775.  
  1776.  
  1777.  
  1778.  
  1779.  
  1780.  
  1781.  
  1782.  
  1783.   ______________________________________________________________________
  1784.   @       IN      SOA     land-5.com. root.land-5.com. (
  1785.                           199609206       ; serial, todays date + todays serial #
  1786.                           8H              ; refresh, seconds
  1787.                           2H              ; retry, seconds
  1788.                           1W              ; expire, seconds
  1789.                           1D )            ; minimum, seconds
  1790.                   NS      land-5.com.
  1791.                   NS      ns2.psi.net.
  1792.                   MX      10 land-5.com.  ; Primary Mail Exchanger
  1793.                   TXT     "LAND-5 Corporation"
  1794.  
  1795.   localhost       A       127.0.0.1
  1796.  
  1797.   router          A       206.6.177.1
  1798.  
  1799.   land-5.com.     A       206.6.177.2
  1800.   ns              A       206.6.177.3
  1801.   www             A       207.159.141.192
  1802.  
  1803.   ftp             CNAME   land-5.com.
  1804.   mail            CNAME   land-5.com.
  1805.   news            CNAME   land-5.com.
  1806.  
  1807.   funn            A       206.6.177.2
  1808.  
  1809.   ;
  1810.   ;       Workstations
  1811.   ;
  1812.   ws-177200       A       206.6.177.200
  1813.                   MX      10 land-5.com.   ; Primary Mail Host
  1814.   ws-177201       A       206.6.177.201
  1815.                   MX      10 land-5.com.   ; Primary Mail Host
  1816.   ws-177202       A       206.6.177.202
  1817.                   MX      10 land-5.com.   ; Primary Mail Host
  1818.   ws-177203       A       206.6.177.203
  1819.                   MX      10 land-5.com.   ; Primary Mail Host
  1820.   ws-177204       A       206.6.177.204
  1821.                   MX      10 land-5.com.   ; Primary Mail Host
  1822.   ws-177205       A       206.6.177.205
  1823.                   MX      10 land-5.com.   ; Primary Mail Host
  1824.   ; {Many repetitive definitions deleted - SNIP}
  1825.   ws-177250       A       206.6.177.250
  1826.                   MX      10 land-5.com.   ; Primary Mail Host
  1827.   ws-177251       A       206.6.177.251
  1828.                   MX      10 land-5.com.   ; Primary Mail Host
  1829.   ws-177252       A       206.6.177.252
  1830.                   MX      10 land-5.com.   ; Primary Mail Host
  1831.   ws-177253       A       206.6.177.253
  1832.                   MX      10 land-5.com.   ; Primary Mail Host
  1833.   ws-177254       A       206.6.177.254
  1834.                   MX      10 land-5.com.   ; Primary Mail Host
  1835.   ______________________________________________________________________
  1836.  
  1837.  
  1838.  
  1839.  
  1840.   If you examine land-5s nameserver you will find that the host names
  1841.   are of the form ws_number.  As of late bind 4 versions named started
  1842.   enforcing the restrictions on what characters may be used in host
  1843.   names.  So that does not work with bind-8 at all, and I substituted
  1844.   '-' (dash) for '_' (underline) for use in this HOWTO.
  1845.  
  1846.  
  1847.   Another thing to note is that the workstations don't have individual
  1848.   names, but rather a prefix followed by the two last parts of the IP
  1849.   numbers.  Using such a convention can simplify maintenance
  1850.   significantly, but can be a bit impersonal, and, in fact, be a source
  1851.   of irritation among your customers.
  1852.  
  1853.  
  1854.   We also see that funn.land-5.com is an alias for land-5.com, but using
  1855.   an A record, not a CNAME record.  This is a good policy as noted
  1856.   earlier.
  1857.  
  1858.  
  1859.   5.5.  /var/named/zone/206.6.177
  1860.  
  1861.   I'll comment on this file below
  1862.  
  1863.  
  1864.   ______________________________________________________________________
  1865.   @               IN      SOA     land-5.com. root.land-5.com. (
  1866.                                   199609206       ; Serial
  1867.                                   28800   ; Refresh
  1868.                                   7200    ; Retry
  1869.                                   604800  ; Expire
  1870.                                   86400)  ; Minimum TTL
  1871.                           NS      land-5.com.
  1872.                           NS      ns2.psi.net.
  1873.   ;
  1874.   ;       Servers
  1875.   ;
  1876.   1       PTR     router.land-5.com.
  1877.   2       PTR     land-5.com.
  1878.   2       PTR     funn.land-5.com.
  1879.   ;
  1880.   ;       Workstations
  1881.   ;
  1882.   200     PTR     ws-177200.land-5.com.
  1883.   201     PTR     ws-177201.land-5.com.
  1884.   202     PTR     ws-177202.land-5.com.
  1885.   203     PTR     ws-177203.land-5.com.
  1886.   204     PTR     ws-177204.land-5.com.
  1887.   205     PTR     ws-177205.land-5.com.
  1888.   ; {Many repetitive definitions deleted - SNIP}
  1889.   250     PTR     ws-177250.land-5.com.
  1890.   251     PTR     ws-177251.land-5.com.
  1891.   252     PTR     ws-177252.land-5.com.
  1892.   253     PTR     ws-177253.land-5.com.
  1893.   254     PTR     ws-177254.land-5.com.
  1894.   ______________________________________________________________________
  1895.  
  1896.  
  1897.  
  1898.  
  1899.   The reverse zone is the bit of the setup that seems to cause the most
  1900.   grief.  It is used to find the host name if you have the IP number of
  1901.   a machine.  Example: you are an IRC server and accept connections from
  1902.   IRC clients.  However you are a Norwegian IRC server and so you only
  1903.   want to accept connections from clients in Norway and other
  1904.   Scandinavian countries.  When you get a connection from a client the C
  1905.   library is able to tell you the IP number of the connecting machine
  1906.   because the IP number of the client is contained in all the packets
  1907.   that are passed over the network.  Now you can call a function called
  1908.   gethostbyaddr that looks up the name of a host given the IP number.
  1909.   Gethostbyaddr will ask a DNS server, which will then traverse the DNS
  1910.   looking for the machine.  Supposing the client connection is from
  1911.   ws-177200.land-5.com.  The IP number the C library provides to the IRC
  1912.   server is 206.6.177.200.  To find out the name of that machine we need
  1913.   to find 200.177.6.206.in-addr.arpa.  The DNS server will first find
  1914.   the arpa. servers, then find in-addr.arpa.  servers, following the
  1915.   reverse trail through 206, then 6 and at last finding the server for
  1916.   the 177.6.206.in-addr.arpa zone at LAND-5.  From which it will finally
  1917.   get the answer that for 200.177.6.206.in-addr.arpa we have a ``PTR
  1918.   ws-177200.land-5.com'' record, meaning that the name that goes with
  1919.   206.6.177.200 is ws-177200.land-5.com.  As with the explanation of how
  1920.   prep.ai.mit.edu is looked up, this is slightly fictitious.
  1921.  
  1922.  
  1923.   Getting back to the IRC server example.  The IRC server only accepts
  1924.   connections from the Scandinavian countries, i.e., *.no, *.se, *.dk,
  1925.   the name ws-177200.land-5.com clearly does not match any of those, and
  1926.   the server will deny the connection.  If there was no reverse mapping
  1927.   of 206.2.177.200 through the in-addr.arpa zone the server would have
  1928.   been unable to find the name at all and would have to settle to
  1929.   comparing 206.2.177.200 with *.no, *.se and *.dk, none of which will
  1930.   match.
  1931.  
  1932.  
  1933.   Some people will tell you that reverse lookup mappings are only
  1934.   important for servers, or not important at all.  Not so: Many ftp,
  1935.   news, IRC and even some http (WWW) servers will not accept connections
  1936.   from machines of which they are not able to find the name.  So reverse
  1937.   mappings for machines are in fact mandatory.
  1938.  
  1939.  
  1940.   6.  Maintenance
  1941.  
  1942.   Keeping it working.
  1943.  
  1944.  
  1945.   There is one maintenance task you have to do on nameds, other than
  1946.   keeping them running.  That's keeping the root.hints file updated.
  1947.   The easiest way is using dig, first run dig with no arguments, you
  1948.   will get the root.hints according to your own server.  Then ask one of
  1949.   the listed root servers with dig @rootserver.  You will note that the
  1950.   output looks terribly like a root.hints file.  Save it to a file (dig
  1951.   @e.root-servers.net . ns >root.hints.new) and replace the old
  1952.   root.hints with it.
  1953.  
  1954.  
  1955.   Remember to reload named after replacing the cache file.
  1956.  
  1957.  
  1958.   Al Longyear sent me this script, that can be run automatically to
  1959.   update root.hints, install a crontab entry to run it once a month and
  1960.   forget it.  The script assumes you have mail working and that the
  1961.   mail-alias `hostmaster' is defined.  You must hack it to suit your
  1962.   setup.
  1963.  
  1964.  
  1965.  
  1966.  
  1967.  
  1968.  
  1969.  
  1970.  
  1971.  
  1972.  
  1973.  
  1974.  
  1975.  
  1976.  
  1977.  
  1978.  
  1979.  
  1980.  
  1981.   ______________________________________________________________________
  1982.   #!/bin/sh
  1983.   #
  1984.   # Update the nameserver cache information file once per month.
  1985.   # This is run automatically by a cron entry.
  1986.   #
  1987.   # Original by Al Longyear
  1988.   # Updated for bind 8 by Nicolai Langfeldt
  1989.   # Miscelanious error-conditions reported by David A. Ranch
  1990.   # Ping test suggested by Martin Foster
  1991.   #
  1992.   (
  1993.    echo "To: hostmaster <hostmaster>"
  1994.    echo "From: system <root>"
  1995.    echo "Subject: Automatic update of the root.hints file"
  1996.    echo
  1997.  
  1998.    PATH=/sbin:/usr/sbin:/bin:/usr/bin:
  1999.    export PATH
  2000.    cd /var/named
  2001.  
  2002.    # Are we online?  Ping a server at your ISP
  2003.    case `ping -qnc some.machine.net` in
  2004.      *'100% packet loss'*)
  2005.           echo "The network is DOWN. root.hints NOT updated"
  2006.           echo
  2007.           exit 0
  2008.           ;;
  2009.    esac
  2010.  
  2011.    dig @rs.internic.net . ns >root.hints.new 2>&1
  2012.  
  2013.    case `cat root.hints.new` in
  2014.      *NOERROR*)
  2015.           # It worked
  2016.           :;;
  2017.      *)
  2018.           echo "The root.hints file update has FAILED."
  2019.           echo "This is the dig output reported:"
  2020.           echo
  2021.           cat root.hints.new
  2022.           exit 0
  2023.           ;;
  2024.    esac
  2025.  
  2026.    echo "The root.hints file has been updated to contain the following
  2027.   information:"
  2028.    echo
  2029.    cat root.hints.new
  2030.  
  2031.    chown root.root root.hints.new
  2032.    chmod 444 root.hints.new
  2033.    rm -f root.hints.old
  2034.    mv root.hints root.hints.old
  2035.    mv root.hints.new root.hints
  2036.    ndc restart
  2037.    echo
  2038.    echo "The nameserver has been restarted to ensure that the update is complete."
  2039.    echo "The previous root.hints file is now called
  2040.   /var/named/root.hints.old."
  2041.   ) 2>&1 | /usr/lib/sendmail -t
  2042.   exit 0
  2043.   ______________________________________________________________________
  2044.  
  2045.  
  2046.  
  2047.   Some of you might have picked up that the root.hints file is also
  2048.   available by ftp from Internic.  Please don't use ftp to update
  2049.   root.hints, the above method is much more friendly to the net, and
  2050.   Internic.
  2051.  
  2052.  
  2053.   7.  Converting from version 4 to version 8
  2054.  
  2055.   This was originally a section on using bind 8 written by David E.
  2056.   Smith (dave@bureau42.ml.org).  I have edited it some to fit the new
  2057.   section name.
  2058.  
  2059.  
  2060.   There's not much to it. Except for using named.conf instead of
  2061.   named.boot, everything is identical. And bind8 comes with a perl
  2062.   script that converts old-style files to new. Example named.boot (old
  2063.   style) for a cache-only name server:
  2064.  
  2065.  
  2066.   ______________________________________________________________________
  2067.   directory /var/named
  2068.   cache   .                                     root.hints
  2069.   primary 0.0.127.IN-ADDR.ARPA                    127.0.0.zone
  2070.   primary localhost                               localhost.zone
  2071.   ______________________________________________________________________
  2072.  
  2073.  
  2074.  
  2075.   On the command line, in the bind8/src/bin/named directory (this
  2076.   assumes you got a source distribution.  If you got a binary package
  2077.   the script is probably around, I'm not sure where it would be though.
  2078.   -ed.), type:
  2079.  
  2080.  
  2081.   ______________________________________________________________________
  2082.   ./named-bootconf.pl < named.boot > named.conf
  2083.   ______________________________________________________________________
  2084.  
  2085.  
  2086.  
  2087.   Which creates named.conf:
  2088.  
  2089.  
  2090.   ______________________________________________________________________
  2091.   // generated by named-bootconf.pl
  2092.  
  2093.   options {
  2094.           directory "/var/named";
  2095.   };
  2096.  
  2097.   zone "." {
  2098.           type hint;
  2099.           file "root.hints";
  2100.   };
  2101.  
  2102.   zone "0.0.127.IN-ADDR.ARPA" {
  2103.           type master;
  2104.           file "127.0.0.zone";
  2105.   };
  2106.  
  2107.   zone "localhost" {
  2108.           type master;
  2109.           file "localhost.zone";
  2110.   };
  2111.   ______________________________________________________________________
  2112.  
  2113.   It works for everything that can go into a named.boot file, although
  2114.   it doesn't add all of the new enhancements and configuration options
  2115.   that bind8 allows.  Here's a more complete named.conf that does the
  2116.   same things, but a little more efficiently.
  2117.  
  2118.  
  2119.   ______________________________________________________________________
  2120.   // This is a configuration file for named (from BIND 8.1 or later).
  2121.   // It would normally be installed as /etc/named.conf.
  2122.   // The only change made from the `stock' named.conf (aside from this
  2123.   // comment :) is that the directory line was uncommented, since I
  2124.   // already had the zone files in /var/named.
  2125.  
  2126.   options {
  2127.           directory "/var/named";
  2128.           datasize 20M;
  2129.   };
  2130.  
  2131.   zone "localhost" IN {
  2132.           type master;
  2133.           file "localhost.zone";
  2134.   };
  2135.  
  2136.   zone "0.0.127.in-addr.arpa" IN {
  2137.           type master;
  2138.           file "127.0.0.zone";
  2139.   };
  2140.  
  2141.   zone "." IN {
  2142.           type hint;
  2143.           file "root.hints";
  2144.   };
  2145.   ______________________________________________________________________
  2146.  
  2147.  
  2148.  
  2149.  
  2150.   In the bind 8 distributions directory bind8/src/bin/named/test you
  2151.   find this, and copies of the zone files, that many people can just
  2152.   drop in and use instantly.
  2153.  
  2154.  
  2155.   The formats for zone files and root.hints files are identical, as are
  2156.   the commands for updating them.
  2157.  
  2158.  
  2159.   8.  Questions and Answers
  2160.  
  2161.   Please read this section before mailing me.
  2162.  
  2163.  
  2164.   1. My named wants a named.boot file
  2165.  
  2166.  
  2167.      You are reading the wrong HOWTO.  Please see the old version of
  2168.      this HOWTO, which covers bind 4, at
  2169.      http://www.math.uio.no/~janl/DNS/
  2170.  
  2171.  
  2172.   2. How do use DNS from inside a firewall?
  2173.  
  2174.  
  2175.      A hint: forward only;, You will probably also need
  2176.  
  2177.  
  2178.  
  2179.      ___________________________________________________________________
  2180.        query-source port 53;
  2181.  
  2182.      ___________________________________________________________________
  2183.  
  2184.  
  2185.  
  2186.   inside the ``options'' part of the named.conf file as suggested in the
  2187.   example ``caching'' section.
  2188.  
  2189.  
  2190.   3. How do I make DNS rotate through the available addresses for a
  2191.      service, say www.busy.site to obtain a load balancing effect, or
  2192.      similar?
  2193.  
  2194.  
  2195.      Make several A records for www.busy.site and use bind 4.9.3 or
  2196.      later.  Then bind will round-robin the answers.  It will not work
  2197.      with earlier versions of bind.
  2198.  
  2199.  
  2200.   4. I want to set up DNS on a (closed) intranet.  What do I do?
  2201.  
  2202.  
  2203.      You drop the root.hints file and just do zone files.  That also
  2204.      means you don't have to get new hint files all the time.
  2205.  
  2206.  
  2207.   5. How do I set up a secondary (slave) name server?
  2208.  
  2209.  
  2210.      If the primary/master server has address 127.0.0.1 you put a line
  2211.      like this in the named.conf file of your secondary:
  2212.  
  2213.  
  2214.      ___________________________________________________________________
  2215.        zone "linux.bogus" {
  2216.              type slave;
  2217.              file "sz/linux.bogus";
  2218.              masters { 127.0.0.1; };
  2219.        };
  2220.  
  2221.      ___________________________________________________________________
  2222.  
  2223.  
  2224.  
  2225.   You may list several alternate master servers the zone can be copied
  2226.   from inside the masters list, separated by ';' (semicolon).
  2227.  
  2228.  
  2229.   6. I want bind running when I'm disconnected from the net.
  2230.  
  2231.  
  2232.      There are three items regarding this:
  2233.  
  2234.  
  2235.   ╖  I have received this mail from Ian Clark <ic@deakin.edu.au> where
  2236.      he explains his way of doing this:
  2237.  
  2238.  
  2239.  
  2240.  
  2241.  
  2242.  
  2243.  
  2244.  
  2245.   I run named on my 'Masquerading' machine here. I have
  2246.   two root.hints files, one called root.hints.real which contains
  2247.   the real root server names and the other called root.hints.fake
  2248.   which contains...
  2249.  
  2250.   ----
  2251.   ; root.hints.fake
  2252.   ; this file contains no information
  2253.   ----
  2254.  
  2255.   When I go off line I copy the root.hints.fake file to root.hints and
  2256.   restart named.
  2257.  
  2258.   When I go online I copy root.hints.real to root.hints and restart
  2259.   named.
  2260.  
  2261.   This is done from ip-down & ip-up respectively.
  2262.  
  2263.   The first time I do a query off line on a domain name named doesn't
  2264.   have details for it puts an entry like this in messages..
  2265.  
  2266.   Jan 28 20:10:11 hazchem named[10147]: No root nameserver for class IN
  2267.  
  2268.   which I can live with.
  2269.  
  2270.   It certainly seems to work for me. I can use the nameserver for
  2271.   local machines while off the 'net without the timeout delay for
  2272.   external domain names and I while on the 'net queries for external
  2273.   domains work normally
  2274.  
  2275.  
  2276.  
  2277.  
  2278.  
  2279.   ╖  I have also received information about how bind interacts with NFS
  2280.      and the portmapper on a mostly offline machine from Karl-Max
  2281.      Wanger:
  2282.  
  2283.  
  2284.  
  2285.  
  2286.        I use to run my own named on all my machines which are only
  2287.        occasionally connected to the Internet by modem. The nameserver only
  2288.        acts as a cache, it has no area of authority and asks back for
  2289.        everything at the name servers in the root.cache file. As is usual with
  2290.        Slackware, it is started before nfsd and mountd.
  2291.  
  2292.        With one of my machines (a Libretto 30 notebook) I had the problem
  2293.        that sometimes I could mount it from another system connected to my
  2294.        local LAN, but most of the time it didn't work.  I had the same effect
  2295.        regardless of using PLIP, a PCMCIA ethernet card or PPP over a serial
  2296.        interface.
  2297.  
  2298.        After some time of guessing and experimenting I found out that
  2299.        apparently named messed with the process of registration nfsd and
  2300.        mountd have to carry out with the portmapper upon startup (I start
  2301.        these daemons at boot time as usual). Starting named after nfsd and
  2302.        mountd eliminated this problem completely.
  2303.  
  2304.        As there are no disadvantages to expect from such a modified boot
  2305.        sequence I'd advise everybody to do it that way to prevent potential
  2306.        trouble.
  2307.  
  2308.  
  2309.  
  2310.  
  2311.   ╖  Finally, there is HOWTO information about this at Ask Mr. DNS at
  2312.      http://www.acmebw.com/askmrdns/#linux-ns.  It is about bind 4
  2313.      though, so you have to adapt what he says to bind 8.
  2314.  
  2315.  
  2316.  
  2317.   7. Where does the caching name server store its cache? Is there any
  2318.      way I can control the size of the cache?
  2319.  
  2320.  
  2321.      The cache is completely stored in memory, it is not written to disk
  2322.      at any time.  Every time you kill named the cache is lost.  The
  2323.      cache is not controllable in any way.  named manages it according
  2324.      to some simple rules and that is it.  You cannot control the cache
  2325.      or the cache size in any way for any reason. If you want to you can
  2326.      ``fix'' this by hacking named.  This is however not recommended.
  2327.  
  2328.  
  2329.   8. Does named save the cache between restarts?  Can I make it save it?
  2330.  
  2331.  
  2332.      No, named does not save the cache when it dies.  That means that
  2333.      the cache must be built anew each time you kill and restart named.
  2334.      There is no way to make named save the cache in a file.  If you
  2335.      want you can ``fix'' this by hacking named.  This is however not
  2336.      recommended.
  2337.  
  2338.  
  2339.   9. How can I get a domian? I want to set up my own domain called (for
  2340.      example) linux-rules.net.  How can I get the domain I want assigned
  2341.      to me?
  2342.  
  2343.  
  2344.      Please contact your network service provider.  They will be able to
  2345.      help you with this.  Please note that in most parts of the world
  2346.      you need to pay money to get a domain.
  2347.  
  2348.  
  2349.  
  2350.  
  2351.   9.  How to become a bigger time DNS admin.
  2352.  
  2353.   Documentation and tools.
  2354.  
  2355.  
  2356.   Real Documentation exists.  Online and in print.  The reading of
  2357.   several of these is required to make the step from small time DNS
  2358.   admin to a big time one.  In print the standard book is DNS and BIND
  2359.   by C. Liu and P. Albitz from O'Reilly & Associates, Sebastopol, CA,
  2360.   ISBN 0-937175-82-X.  I read this, it's excellent, though based on bind
  2361.   4, this is not a real problem though.  There is also a section in on
  2362.   DNS in TCP/IP Network Administration, by Craig Hunt from O'Reilly...,
  2363.   ISBN 0-937175-82-X.  Another must for Good DNS administration (or good
  2364.   anything for that matter) is Zen and the Art of Motorcycle Maintenance
  2365.   by Robert M. Pirsig :-) Available as ISBN 0688052304 and others.
  2366.  
  2367.  
  2368.   Online you will find stuff on  <http://www.dns.net/dnsrd/> (DNS
  2369.   Resources Directory),  <http://www.isc.org/bind.html>; A FAQ, a
  2370.   reference manual (BOG; Bind Operations Guide) as well as papers and
  2371.   protocol definitions and DNS hacks (these, and most, if not all, of
  2372.   the RFCs mentioned below, are also contained in the bind
  2373.   distribution).  I have not read most of these, but then I'm not a big-
  2374.   time DNS admin either.  Arnt Gulbrandsen on the other hand has read
  2375.   BOG and he's ecstatic about it :-).  The newsgroup comp.protocols.tcp-
  2376.   ip.domains is about DNS.  In addition there are a number of RFCs about
  2377.   DNS, the most important are probably these:
  2378.  
  2379.  
  2380.  
  2381.      RFC 2052
  2382.         A. Gulbrandsen, P. Vixie, A DNS RR for specifying the location
  2383.         of services (DNS SRV), October 1996
  2384.  
  2385.  
  2386.      RFC 1918
  2387.         Y. Rekhter, R. Moskowitz, D. Karrenberg, G. de Groot, E. Lear,
  2388.         Address Allocation for Private Internets, 02/29/1996.
  2389.  
  2390.  
  2391.      RFC 1912
  2392.         D. Barr, Common DNS Operational and Configuration Errors,
  2393.         02/28/1996.
  2394.  
  2395.  
  2396.      RFC 1912 Errors
  2397.         B. Barr Errors in RFC 1912, this is available at
  2398.         <http://www.cis.ohio-state.edu/~barr/rfc1912-errors.html>
  2399.  
  2400.  
  2401.      RFC 1713
  2402.         A. Romao, Tools for DNS debugging, 11/03/1994.
  2403.  
  2404.  
  2405.      RFC 1712
  2406.         C. Farrell, M. Schulze, S. Pleitner, D. Baldoni, DNS Encoding of
  2407.         Geographical Location, 11/01/1994.
  2408.  
  2409.  
  2410.      RFC 1183
  2411.         R. Ullmann, P. Mockapetris, L. Mamakos, C. Everhart, New DNS RR
  2412.         Definitions, 10/08/1990.
  2413.  
  2414.  
  2415.      RFC 1035
  2416.         P. Mockapetris, Domain names - implementation and specification,
  2417.         11/01/1987.
  2418.  
  2419.  
  2420.      RFC 1034
  2421.         P. Mockapetris, Domain names - concepts and facilities,
  2422.         11/01/1987.
  2423.  
  2424.  
  2425.      RFC 1033
  2426.         M. Lottor, Domain administrators operations guide, 11/01/1987.
  2427.  
  2428.  
  2429.      RFC 1032
  2430.         M. Stahl, Domain administrators guide, 11/01/1987.
  2431.  
  2432.  
  2433.      RFC 974
  2434.         C. Partridge, Mail routing and the domain system, 01/01/1986.
  2435.  
  2436.  
  2437.  
  2438.  
  2439.  
  2440.  
  2441.  
  2442.  
  2443.