Verder Terug Inhoud

3. Een 'caching only' nameserver

Een eerste probeersel met DNS, erg bruikbaar voor inbelverbindingen

Een 'caching only' nameserver zoekt adressen bij andere nameservers. De volgende keer dat om het adres voor dezelfde machinenaam gevraagd wordt, heeft de nameserver het antwoord al in het geheugen staan. Dit betekent een behoorlijke tijdswinst, zeker op langzame verbindingen.

Eerst moet een bestand /etc/named.conf aangemaakt worden. Dit bestand wordt gelezen als de nameserver start. Voorlopig bevat dit bestand alleen het volgende:


// Config file for caching only name server

options {
directory "/var/named";

// Uncommenting this might help if you have to go through a
// firewall and things are not working out:

// query-source port 53;
};

zone "." {
type hint;
file "root.hints";
};

zone "0.0.127.in-addr.arpa" {
type master;
file "pz/127.0.0";
};

Named kan aan de directory regel zien waar de configuratiebestanden gezocht moeten worden. Elk bestand dat hierna in named.conf voorkomt, staat onder de directory die je opgeeft. In dit voorbeeld is pz een subdirectory van /var/named, het is dus de directory /var/named/pz.

In het bovenstaande configuratiebestand wordt /var/named/root.hints genoemd. /var/named/root.hints moet het volgende bevatten:


;
; There might be opening comments here if you already have this file.
; If not don't worry.
;
.                       6D IN NS        G.ROOT-SERVERS.NET.
.                       6D IN NS        J.ROOT-SERVERS.NET.
.                       6D IN NS        K.ROOT-SERVERS.NET.
.                       6D IN NS        L.ROOT-SERVERS.NET.
.                       6D IN NS        M.ROOT-SERVERS.NET.
.                       6D IN NS        A.ROOT-SERVERS.NET.
.                       6D IN NS        H.ROOT-SERVERS.NET.
.                       6D IN NS        B.ROOT-SERVERS.NET.
.                       6D IN NS        C.ROOT-SERVERS.NET.
.                       6D IN NS        D.ROOT-SERVERS.NET.
.                       6D IN NS        E.ROOT-SERVERS.NET.
.                       6D IN NS        I.ROOT-SERVERS.NET.
.                       6D IN NS        F.ROOT-SERVERS.NET.

G.ROOT-SERVERS.NET.     5w6d16h IN A    192.112.36.4
J.ROOT-SERVERS.NET.     5w6d16h IN A    198.41.0.10
K.ROOT-SERVERS.NET.     5w6d16h IN A    193.0.14.129
L.ROOT-SERVERS.NET.     5w6d16h IN A    198.32.64.12
M.ROOT-SERVERS.NET.     5w6d16h IN A    202.12.27.33
A.ROOT-SERVERS.NET.     5w6d16h IN A    198.41.0.4
H.ROOT-SERVERS.NET.     5w6d16h IN A    128.63.2.53
B.ROOT-SERVERS.NET.     5w6d16h IN A    128.9.0.107
C.ROOT-SERVERS.NET.     5w6d16h IN A    192.33.4.12
D.ROOT-SERVERS.NET.     5w6d16h IN A    128.8.10.90
E.ROOT-SERVERS.NET.     5w6d16h IN A    192.203.230.10
I.ROOT-SERVERS.NET.     5w6d16h IN A    192.36.148.17
F.ROOT-SERVERS.NET.     5w6d16h IN A    192.5.5.241

Dit bestand levert informatie over de root nameservers op deze wereld. Deze informatie kan mettertijd veranderen, en moet dus worden bijgehouden. Zie de sectie Onderhoud voor informatie over het bijhouden van dit bestand.

De volgende sectie van named.conf is de laatste zone. Het gebruik hiervan wordt later uitgelegd. Voorlopig is het voldoende het volgende bestand genaamd 127.0.0 in de subdirectory pz te plaatsen:


@               IN      SOA     ns.linux.bogus. hostmaster.linux.bogus. (
                        1       ; Serial
                        8H      ; Refresh
                        2H      ; Retry
                        1W      ; Expire
                        1D)     ; Minimum TTL
                NS      ns.linux.bogus.
1                       PTR     localhost.

Vervolgens heb je ook nog een /etc/resolv.conf nodig, dat er ongeveer uitziet als:


search subdomain.your-domain.edu your-domain.edu
nameserver 127.0.0.1

De `search' regel geeft aan welke domeinen afgezocht moeten worden naar machinenamen die je zoekt. De nameserver regel bevat het IP adres van de DNS server die gebruikt moet worden. In dit geval is dat je eigen machine. De lokale machine zit altijd op IP adres 127.0.0.1. Als je meerdere nameservers wilt gebruiken, geef dan een aparte nameserver regel op voor elke DNS server die je wilt gebruiken. Named leest dit bestand overigens nooit in. Dit bestand wordt alleen gebruikt door applicaties die een IP adres opzoeken.

Een uitleg van dit bestand: Als een programma de naam foo opzoekt, dan wordt eerst foo.subdomain.your-domain.edu geprobeerd, daarna foo.your-domain.edu, en tenslotte foo. Als een programma het IP adres van www.linux.org zoekt dan wordt eerst www.linux.org.subdomain.your-domain.edu geprobeerd, vervolgens www.linux.org.your-domain.edu, en tenslotte www.linux.org. Het is vreemd, maar zo werkt het nu eenmaal. Het opzoeken van elke naam kost tijd. Je moet dus niet al te veel domeinen in de search regel opnemen.

Dit voorbeeld gaat ervan uit dat het domein subdomain.your-domain.edu bestaat. Je eigen machine heet dan waarschijnlijk your-machine.subdomain.your-domain.edu. De search regel moet nooit een TLD (Top Level Domain, edu in dit geval) bevatten. Als je vaak machines in een ander domein bezoekt, kan je de volgende regel opnemen:


search subdomain.your-domain.edu your-domain.edu other-domain.com

Natuurlijk moet je deze regel aan je eigen situatie aanpassen. Merk op dat aan het eind van deze domains geen punt staat. Dit is belangrijk!

Vervolgens zal je, afhankelijk van je libc versie, /etc/nsswitch.conf of /etc/host.conf aan moeten passen. Als je een /etc/nsswitch.conf bestand hebt, dan passen we dat aan. Anders passen we /etc/host.conf aan.

/etc/nsswitch.conf

/etc/nsswitch.conf is een lang bestand waarin beschreven wordt waar data vandaan gehaald moet worden. Bovenin staat bruikbaar commentaar wat je zou moeten lezen. Zoek daarna de regel die begint met hosts:. Daar moet staan:


hosts:      files dns

Als er geen hosts: regel in staat, voeg dan bovenstaande regel toe. De regel zorgt ervoor dat programma's eerst in /etc/hosts kijken, en dan pas de nameserver om een IP adres vragen.

/etc/host.conf

Dit bestand bevat waarschijnlijk meerdere regels. Eén van die regels moet beginnen met 'order', en moet er ongeveer als volgt uitzien:


order hosts,bind

Als deze regel er niet staat, maak er dan één aan. De regel zorgt ervoor dat eerst in /etc/hosts gekeken wordt, en dan pas de nameserver gebruikt wordt.

3.1 Starten van Named

Nu is het tijd om named te starten. Als je een inbelverbinding gebruikt, bel dan eerst in. Type 'ndc start' en tik enter. Als dat niet werkt, tik dan /usr/sbin/ndc start. Als het dan nog niet werkt, raadpleeg dan de QnA sectie. Als je het bestand /var/log/messages bekijkt tijdens het opstarten van named (bijvoorbeeld met het commando "tail -f /var/log/messages"), dan zie je iets als:

(regels die eindigen op "\" lopen door op de volgende regel)

Feb 15 01:26:17 roke named[6091]: starting.  named 8.1.1 Sat Feb 14 \
  00:18:20 MET 1998 ^Ijanl@roke.uio.no:/var/tmp/bind-8.1.1/src/bin/named
Feb 15 01:26:17 roke named[6091]: cache zone "" (IN) loaded (serial 0)
Feb 15 01:26:17 roke named[6091]: master zone "0.0.127.in-addr.arpa" \
  (IN) loaded (serial 1)
Feb 15 01:26:17 roke named[6091]: listening [127.0.0.1].53 (lo)
Feb 15 01:26:17 roke named[6091]: listening [129.240.230.92].53 (ippp0)
Feb 15 01:26:17 roke named[6091]: Forwarding source address is [0.0.0.0].1040
Feb 15 01:26:17 roke named[6092]: Ready to answer queries.

Als er een foutmelding verschijnt, geeft named aan in welk bestand de fout zit (named.conf of root.hints hoop ik ;-). Stop named, en controleer de bestanden.

Nu is het zaakje klaar om getest te worden. Start nslookup om de configuratie te testen.

$ nslookup
Default Server:  localhost
Address:  127.0.0.1

>

Als dit op het scherm verschijnt, dan werkt het. Hopen we. Als het nog niet werkt, controleer alles dan nog eens. Altijd als named.conf veranderd wordt, moet je named herstarten met ndc restart.

Nu kan je proberen een IP adres op te zoeken. Gebruik een computer die dicht in de buurt staat. In mijn geval is dat par.uio.no, op de Universiteit van Oslo:

> pat.uio.no
Server:  localhost
Address:  127.0.0.1

Name:    pat.uio.no
Address:  129.240.130.16

nslookup gaf aan named de opdracht par.uio.no op te zoeken. Het ondervraagt vervolgens één van de nameservers die in root.hints genoemd staan. Het kan even duren voordat je antwoord krijgt, omdat eerst gezocht wordt in elk domein dat in /etc/resolv.conf genoemd staat.

Als je nogmaals dezelfde machine opzoekt krijg je dit:

> pat.uio.no
Server:  localhost
Address:  127.0.0.1

Non-authoritative answer:
Name:    pat.uio.no
Address:  129.240.2.50

Let op de regel 'Non-authoritative answer'. Dat betekent dat named dit keer niet het netwerk op is gegaan om een antwoord te zoeken, maar dat het antwoord uit de cache komt. Deze melding wordt gegeven zodat je er rekening mee kan houden dat de informatie inmiddels incorrect kan zijn. Dat je dit antwoord gekregen hebt betekent in elk geval dat je caching-only nameserver werkt. nslookup kan je verlaten door het commando exit te tikken.

3.2 Verbeteren van de configuratie

In grote netwerken wordt vaak gebruik gemaakt van "forwarders". Deze machines verzorgen het opzoeken van een adres voor een andere machine. Dit vermindert de belasting op het interne en externe netwerk. Door gebruik te maken van zo'n forwarder worden de DNS lookups sneller, en ze genereren minder netwerkverkeer. Vooral als je een modemverbinding hebt kan dit behoorlijk wat schelen. Voor het voorbeeld nemen we aan dat je provider 2 nameservers heeft, met de IP nummers 10.0.0.1 en 10.1.0.1. In het named.conf bestand moet bij de eerste sectie, "options", worden toegevoegd:


           forward first;
           forwarders {
                10.0.0.1;
                10.1.0.1;
            };

Herstart named en test het met nslookup. Dit zou zonder problemen moeten werken.

3.3 Gefeliciteerd

Nu weet je hoe je een caching nameserver opzet. Neem een biertje, een glas melk, of wat dan ook om het te vieren!


Verder Terug Inhoud